String.st
changeset 834 c68ed1088b42
parent 833 b5485d985d65
child 835 8bd6f4aa8130
equal deleted inserted replaced
833:b5485d985d65 834:c68ed1088b42
   134 	    } else {
   134 	    } else {
   135 		nInstVars = _intVal(_ClassInstPtr(self)->c_ninstvars);
   135 		nInstVars = _intVal(_ClassInstPtr(self)->c_ninstvars);
   136 		instsize = OHDR_SIZE + __OBJS2BYTES__(nInstVars) + len + 1;
   136 		instsize = OHDR_SIZE + __OBJS2BYTES__(nInstVars) + len + 1;
   137 	    }
   137 	    }
   138 
   138 
   139 	    PROTECT_CONTEXT
   139 	    __PROTECT_CONTEXT__
   140 	    _qNew(newString, instsize, SENDER);
   140 	    _qNew(newString, instsize, SENDER);
   141 	    UNPROTECT_CONTEXT
   141 	    __UNPROTECT_CONTEXT__
   142 	    if (newString == nil) goto fail;
   142 	    if (newString == nil) goto fail;
   143 	    _InstPtr(newString)->o_class = self;
   143 	    _InstPtr(newString)->o_class = self;
   144 	    __qSTORE(newString, self);
   144 	    __qSTORE(newString, self);
   145 
   145 
   146 	    if (nInstVars) {
   146 	    if (nInstVars) {
  1376 
  1376 
  1377 		index1 += n;
  1377 		index1 += n;
  1378 	    }
  1378 	    }
  1379 	    if (index1 <= len) {
  1379 	    if (index1 <= len) {
  1380 		count = len - index1 + 1;
  1380 		count = len - index1 + 1;
  1381 		PROTECT_CONTEXT
  1381 		__PROTECT_CONTEXT__
  1382 		sz = OHDR_SIZE + count + 1;
  1382 		sz = OHDR_SIZE + count + 1;
  1383 		_qNew(newString, sz, SENDER);
  1383 		_qNew(newString, sz, SENDER);
  1384 		UNPROTECT_CONTEXT
  1384 		__UNPROTECT_CONTEXT__
  1385 		if (newString != nil) {
  1385 		if (newString != nil) {
  1386 		    _InstPtr(newString)->o_class = String;
  1386 		    _InstPtr(newString)->o_class = String;
  1387 		    dstp = _stringVal(newString);
  1387 		    dstp = _stringVal(newString);
  1388 #ifdef FAST_MEMCPY
  1388 #ifdef FAST_MEMCPY
  1389 		    bcopy(_stringVal(self) + index1 - 1, dstp, count);
  1389 		    bcopy(_stringVal(self) + index1 - 1, dstp, count);
  1440 		index1 += n;
  1440 		index1 += n;
  1441 		index2 += n;
  1441 		index2 += n;
  1442 	    }
  1442 	    }
  1443 	    if (index2 <= len) {
  1443 	    if (index2 <= len) {
  1444 		count = index2 - index1 + 1;
  1444 		count = index2 - index1 + 1;
  1445 		PROTECT_CONTEXT
  1445 		__PROTECT_CONTEXT__
  1446 		sz = OHDR_SIZE + count + 1;
  1446 		sz = OHDR_SIZE + count + 1;
  1447 		_qNew(newString, sz, SENDER);
  1447 		_qNew(newString, sz, SENDER);
  1448 		UNPROTECT_CONTEXT
  1448 		__UNPROTECT_CONTEXT__
  1449 		if (newString != nil) {
  1449 		if (newString != nil) {
  1450 		    _InstPtr(newString)->o_class = String;
  1450 		    _InstPtr(newString)->o_class = String;
  1451 		    dstp = _stringVal(newString);
  1451 		    dstp = _stringVal(newString);
  1452 #ifdef FAST_MEMCPY
  1452 #ifdef FAST_MEMCPY
  1453 		    bcopy(_stringVal(self) + index1 - 1, dstp, count);
  1453 		    bcopy(_stringVal(self) + index1 - 1, dstp, count);
  1470 	}
  1470 	}
  1471 	/*
  1471 	/*
  1472 	 * allow empty copy
  1472 	 * allow empty copy
  1473 	 */
  1473 	 */
  1474 	if (index1 > index2) {
  1474 	if (index1 > index2) {
  1475 	    PROTECT_CONTEXT
  1475 	    __PROTECT_CONTEXT__
  1476 	    _qNew(newString, OHDR_SIZE+1, SENDER);
  1476 	    _qNew(newString, OHDR_SIZE+1, SENDER);
  1477 	    UNPROTECT_CONTEXT
  1477 	    __UNPROTECT_CONTEXT__
  1478 	    if (newString != nil) {
  1478 	    if (newString != nil) {
  1479 		_InstPtr(newString)->o_class = String;
  1479 		_InstPtr(newString)->o_class = String;
  1480 		__stringVal(newString)[0] = '\0';
  1480 		__stringVal(newString)[0] = '\0';
  1481 		RETURN ( newString );
  1481 		RETURN ( newString );
  1482 	    }
  1482 	    }
  1509 	    offs = __OBJS2BYTES__(_intVal(_ClassInstPtr(cls)->c_ninstvars));
  1509 	    offs = __OBJS2BYTES__(_intVal(_ClassInstPtr(cls)->c_ninstvars));
  1510 	    sz -= offs;
  1510 	    sz -= offs;
  1511 	} else
  1511 	} else
  1512 	    offs = 0;
  1512 	    offs = 0;
  1513 
  1513 
  1514 	PROTECT_CONTEXT
  1514 	__PROTECT_CONTEXT__
  1515 	_qNew(newString, sz, SENDER);
  1515 	_qNew(newString, sz, SENDER);
  1516 	UNPROTECT_CONTEXT
  1516 	__UNPROTECT_CONTEXT__
  1517 	if (newString) {
  1517 	if (newString) {
  1518 	    _InstPtr(newString)->o_class = String;
  1518 	    _InstPtr(newString)->o_class = String;
  1519 	    dstp = _stringVal(newString);
  1519 	    dstp = _stringVal(newString);
  1520 #ifdef FAST_MEMCPY
  1520 #ifdef FAST_MEMCPY
  1521 	    sz = sz - OHDR_SIZE - 1 - 1;
  1521 	    sz = sz - OHDR_SIZE - 1 - 1;
  2192 ! !
  2192 ! !
  2193 
  2193 
  2194 !String class methodsFor:'documentation'!
  2194 !String class methodsFor:'documentation'!
  2195 
  2195 
  2196 version
  2196 version
  2197     ^ '$Header: /cvs/stx/stx/libbasic/String.st,v 1.58 1996-01-04 11:12:03 cg Exp $'
  2197     ^ '$Header: /cvs/stx/stx/libbasic/String.st,v 1.59 1996-01-04 17:02:20 cg Exp $'
  2198 ! !
  2198 ! !