ByteArray.st
changeset 19134 eaa91cb0ef1b
parent 19048 0929f428048d
child 19137 199b5e15b1da
child 19178 0c97c5cfb7df
equal deleted inserted replaced
19133:63ef07879231 19134:eaa91cb0ef1b
   396 
   396 
   397     |byteIndex bitIndex0 byte|
   397     |byteIndex bitIndex0 byte|
   398 
   398 
   399 %{  /* NOCONTEXT */
   399 %{  /* NOCONTEXT */
   400 
   400 
   401     REGISTER int indx;
   401     if (__isSmallInteger(index)
   402     REGISTER int byte;
   402      && (__qClass(self) == @global(ByteArray))) {
   403     int nIndex;
   403         int indx;
   404     REGISTER OBJ slf;
   404 
   405     REGISTER OBJ cls;
   405         indx = __intVal(index) - 1;
   406 
   406         if (indx >= 0) {
   407     if (0 /* __isSmallInteger(index) */) {
   407             int byteIndex;
   408 	indx = __intVal(index) - 1;
   408             int bitIndex;
   409 	slf = self;
   409             int nIndex;
   410 
   410 
   411 	byte = indx / 8;
   411             byteIndex = indx / 8;
   412 	indx = indx % 8;
   412             bitIndex = indx % 8;
   413 
   413 
   414 	if ((cls = __qClass(slf)) != @global(ByteArray)) {
   414             nIndex = __byteArraySize(self);
   415 	    if (indx < 0) goto badIndex;
   415             if ((unsigned)byteIndex < (unsigned)nIndex) {
   416 	    byte += __OBJS2BYTES__(__intVal(__ClassInstPtr(cls)->c_ninstvars));
   416                 __ByteArrayInstPtr(self)->ba_element[byteIndex] |= (1 << bitIndex);
   417 	}
   417                 RETURN (self);
   418 	nIndex = __byteArraySize(slf);
   418             }
   419 	if ((unsigned)byte < (unsigned)nIndex) {
   419         }
   420 	    __ByteArrayInstPtr(slf)->ba_element[byte] |= (1 << indx);
   420     }
   421 	    RETURN (slf);
       
   422 	}
       
   423     }
       
   424 badIndex: ;
       
   425 %}.
   421 %}.
   426     byteIndex := ((index-1) // 8) + 1.
   422     byteIndex := ((index-1) // 8) + 1.
   427     bitIndex0 := ((index-1) \\ 8).
   423     bitIndex0 := ((index-1) \\ 8).
   428     byte := self at:byteIndex.
   424     byte := self at:byteIndex.
   429     byte := byte bitOr:(1 bitShift:bitIndex0).
   425     byte := byte bitOr:(1 bitShift:bitIndex0).
   432     "
   428     "
   433      #[0 0 0 0] copy bitSetAt:1
   429      #[0 0 0 0] copy bitSetAt:1
   434      #[0 0 0 0] copy bitSetAt:7
   430      #[0 0 0 0] copy bitSetAt:7
   435      #[0 0 0 0] copy bitSetAt:8
   431      #[0 0 0 0] copy bitSetAt:8
   436      #[0 0 0 0] copy bitSetAt:9
   432      #[0 0 0 0] copy bitSetAt:9
   437     "
   433      #[0 0 0 0] copy bitSetAt:32
   438    "
   434      #[0 0 0 0] copy bitSetAt:33
       
   435      #[0 0 0 0] copy bitSetAt:0
       
   436     "
       
   437     "
   439      #[ 0 0 0 0 ] bitSetAt:1
   438      #[ 0 0 0 0 ] bitSetAt:1
   440      #[ 0 0 0 0 ] bitSetAt:4
   439      #[ 0 0 0 0 ] bitSetAt:4
   441      #[ 0 0 0 0 ] bitSetAt:8
   440      #[ 0 0 0 0 ] bitSetAt:8
   442      #[ 0 0 0 0 ] bitSetAt:9
   441      #[ 0 0 0 0 ] bitSetAt:9
   443      #[ 0 0 0 0 ] bitSetAt:10
   442      #[ 0 0 0 0 ] bitSetAt:10
   444      #[ 0 0 0 0 ] bitSetAt:11
   443      #[ 0 0 0 0 ] bitSetAt:11
   445    "
   444    "
   446 
       
   447 
       
   448 
       
   449 ! !
   445 ! !
   450 
   446 
   451 !ByteArray methodsFor:'accessing-bytes'!
   447 !ByteArray methodsFor:'accessing-bytes'!
   452 
   448 
   453 byteAt:index
   449 byteAt:index