ByteArray.st
changeset 3425 f7faef75f0d8
parent 3422 09c13ab58bb2
child 3676 140bdb21d859
equal deleted inserted replaced
3424:39de1fface52 3425:f7faef75f0d8
    65 ! !
    65 ! !
    66 
    66 
    67 !ByteArray class methodsFor:'instance creation'!
    67 !ByteArray class methodsFor:'instance creation'!
    68 
    68 
    69 from:aByteArray
    69 from:aByteArray
    70         "return new instance which a copy of aByteArray"
    70     "return new instance which is a copy of aByteArray"
    71 
    71 
    72         |len bytes|
    72     |len bytes|
    73         len := aByteArray size.
    73 
    74         bytes := self new:len.
    74     len := aByteArray size.
    75         bytes replaceBytesFrom:1 to:len with:aByteArray startingAt:1.
    75     bytes := self new:len.
    76         ^ bytes
    76     bytes replaceBytesFrom:1 to:len with:aByteArray startingAt:1.
       
    77     ^ bytes
    77 
    78 
    78     "Created: / 5.3.1998 / 15:57:52 / stefan"
    79     "Created: / 5.3.1998 / 15:57:52 / stefan"
    79 !
    80 !
    80 
    81 
    81 fromPackedString:aString
    82 fromPackedString:aString
   234     ].
   235     ].
   235     ^ self basicNew:anInteger
   236     ^ self basicNew:anInteger
   236 !
   237 !
   237 
   238 
   238 with:aByteArray from:start to:stop
   239 with:aByteArray from:start to:stop
   239         "return new instance with a copy of aByteArray
   240     "return new instance with a copy of aByteArray
   240          beginning at index start up to and including index stop"
   241      beginning at index start up to and including index stop"
   241 
   242 
   242         |len bytes|
   243     |len bytes|
   243         len := stop-start+1.
   244 
   244         bytes := self new:len.
   245     len := stop-start+1.
   245         bytes replaceBytesFrom:1 to:len with:aByteArray startingAt:start.
   246     bytes := self new:len.
   246         ^ bytes
   247     bytes replaceBytesFrom:1 to:len with:aByteArray startingAt:start.
       
   248     ^ bytes
   247 
   249 
   248     "Modified: / 5.3.1998 / 16:00:18 / stefan"
   250     "Modified: / 5.3.1998 / 16:00:18 / stefan"
   249 ! !
   251 ! !
   250 
   252 
   251 !ByteArray class methodsFor:'binary storage'!
   253 !ByteArray class methodsFor:'binary storage'!
   489 		indx += __OBJS2BYTES__(__intVal(__ClassInstPtr(cls)->c_ninstvars));
   491 		indx += __OBJS2BYTES__(__intVal(__ClassInstPtr(cls)->c_ninstvars));
   490 	    nIndex = __byteArraySize(self);
   492 	    nIndex = __byteArraySize(self);
   491 	    if ((indx+3) <= nIndex) {
   493 	    if ((indx+3) <= nIndex) {
   492 		byteP = (unsigned char *)(__ByteArrayInstPtr(self)->ba_element) + indx - 1;
   494 		byteP = (unsigned char *)(__ByteArrayInstPtr(self)->ba_element) + indx - 1;
   493 		if (msb == true) {
   495 		if (msb == true) {
       
   496 		    /*
       
   497 		     * most significant byte first (i.e sparc order)
       
   498 		     */
   494 		    val = byteP[0];
   499 		    val = byteP[0];
   495 		    val = (val << 8) + byteP[1];
   500 		    val = (val << 8) + byteP[1];
   496 		    val = (val << 8) + byteP[2];
   501 		    val = (val << 8) + byteP[2];
   497 		    val = (val << 8) + byteP[3];
   502 		    val = (val << 8) + byteP[3];
   498 		} else {
   503 		} else {
       
   504 		    /*
       
   505 		     * least significant byte first (i.e i386/alpha order)
       
   506 		     */
       
   507 #if  defined(i386) /* actually: LSBFIRST && UNALIGNED_FETCH_OK*/
       
   508 		    val = ((int *)byteP)[0];
       
   509 #else
   499 		    val = byteP[3];
   510 		    val = byteP[3];
   500 		    val = (val << 8) + byteP[2];
   511 		    val = (val << 8) + byteP[2];
   501 		    val = (val << 8) + byteP[1];
   512 		    val = (val << 8) + byteP[1];
   502 		    val = (val << 8) + byteP[0];
   513 		    val = (val << 8) + byteP[0];
       
   514 #endif
   503 		}
   515 		}
   504 		if ((val >= 0) && (val <= _MAX_INT)) {
   516 		if ((val >= 0) && (val <= _MAX_INT)) {
   505 		    RETURN ( __MKSMALLINT(val) );
   517 		    RETURN ( __MKSMALLINT(val) );
   506 		}
   518 		}
   507 		RETURN ( __MKULARGEINT(val) );
   519 		RETURN ( __MKULARGEINT(val) );
   612 		indx += __OBJS2BYTES__(__intVal(__ClassInstPtr(cls)->c_ninstvars));
   624 		indx += __OBJS2BYTES__(__intVal(__ClassInstPtr(cls)->c_ninstvars));
   613 	    nIndex = __qSize(self) - OHDR_SIZE;
   625 	    nIndex = __qSize(self) - OHDR_SIZE;
   614 	    if ((indx+3) <= nIndex) {
   626 	    if ((indx+3) <= nIndex) {
   615 		byteP = (unsigned char *)(__ByteArrayInstPtr(self)->ba_element) + indx - 1;
   627 		byteP = (unsigned char *)(__ByteArrayInstPtr(self)->ba_element) + indx - 1;
   616 		if (msb == true) {
   628 		if (msb == true) {
       
   629 		    /*
       
   630 		     * most significant byte first (i.e sparc order)
       
   631 		     */
   617 		    byteP[3] = val & 0xFF;
   632 		    byteP[3] = val & 0xFF;
   618 		    val >>= 8;
   633 		    val >>= 8;
   619 		    byteP[2] = val & 0xFF;
   634 		    byteP[2] = val & 0xFF;
   620 		    val >>= 8;
   635 		    val >>= 8;
   621 		    byteP[1] = val & 0xFF;
   636 		    byteP[1] = val & 0xFF;
   622 		    val >>= 8;
   637 		    val >>= 8;
   623 		    byteP[0] = val & 0xFF;
   638 		    byteP[0] = val & 0xFF;
   624 		} else {
   639 		} else {
       
   640 		    /*
       
   641 		     * least significant byte first (i.e i386/alpha order)
       
   642 		     */
       
   643 #if  defined(i386) /* actually: LSBFIRST && UNALIGNED_FETCH_OK*/
       
   644 		    ((int *)byteP)[0] = val;
       
   645 #else
   625 		    byteP[0] = val & 0xFF;
   646 		    byteP[0] = val & 0xFF;
   626 		    val >>= 8;
   647 		    val >>= 8;
   627 		    byteP[1] = val & 0xFF;
   648 		    byteP[1] = val & 0xFF;
   628 		    val >>= 8;
   649 		    val >>= 8;
   629 		    byteP[2] = val & 0xFF;
   650 		    byteP[2] = val & 0xFF;
   630 		    val >>= 8;
   651 		    val >>= 8;
   631 		    byteP[3] = val & 0xFF;
   652 		    byteP[3] = val & 0xFF;
       
   653 #endif
   632 		}
   654 		}
   633 		RETURN ( value );
   655 		RETURN ( value );
   634 	    }
   656 	    }
   635 	}
   657 	}
   636     }
   658     }
   706 		indx += __OBJS2BYTES__(__intVal(__ClassInstPtr(cls)->c_ninstvars));
   728 		indx += __OBJS2BYTES__(__intVal(__ClassInstPtr(cls)->c_ninstvars));
   707 	    nIndex = __byteArraySize(self);
   729 	    nIndex = __byteArraySize(self);
   708 	    if ((indx+1) <= nIndex) {
   730 	    if ((indx+1) <= nIndex) {
   709 		byteP = (unsigned char *)(__ByteArrayInstPtr(self)->ba_element) + indx - 1;
   731 		byteP = (unsigned char *)(__ByteArrayInstPtr(self)->ba_element) + indx - 1;
   710 		if (msb == true) {
   732 		if (msb == true) {
       
   733 		    /*
       
   734 		     * most significant byte first (i.e sparc order)
       
   735 		     */
   711 		    val = byteP[0];
   736 		    val = byteP[0];
   712 		    val = (val << 8) + byteP[1];
   737 		    val = (val << 8) + byteP[1];
   713 		} else {
   738 		} else {
       
   739 		    /*
       
   740 		     * least significant byte first (i.e i386/alpha order)
       
   741 		     */
       
   742 #if  defined(i386) /* actually: LSBFIRST && UNALIGNED_FETCH_OK*/
       
   743 		    val = ((unsigned short *)byteP)[0];
       
   744 #else
   714 		    val = byteP[1];
   745 		    val = byteP[1];
   715 		    val = (val << 8) + byteP[0];
   746 		    val = (val << 8) + byteP[0];
       
   747 #endif
   716 		}
   748 		}
   717 		RETURN ( __MKSMALLINT(val) );
   749 		RETURN ( __MKSMALLINT(val) );
   718 	    }
   750 	    }
   719 	}
   751 	}
   720     }
   752     }
   800 	    if ((indx+1) <= nIndex) {
   832 	    if ((indx+1) <= nIndex) {
   801 		val = __intVal(value);
   833 		val = __intVal(value);
   802 		if ((val & ~0xFFFF) == 0 /* i.e. (val >= 0) && (val <= 0xFFFF) */) {
   834 		if ((val & ~0xFFFF) == 0 /* i.e. (val >= 0) && (val <= 0xFFFF) */) {
   803 		    byteP = (unsigned char *)(__ByteArrayInstPtr(self)->ba_element) + indx - 1;
   835 		    byteP = (unsigned char *)(__ByteArrayInstPtr(self)->ba_element) + indx - 1;
   804 		    if (msb == true) {
   836 		    if (msb == true) {
       
   837 		        /*
       
   838 		         * most significant byte first (i.e sparc order)
       
   839 		         */
   805 			byteP[1] = val & 0xFF;
   840 			byteP[1] = val & 0xFF;
   806 			byteP[0] = (val>>8) & 0xFF;
   841 			byteP[0] = (val>>8) & 0xFF;
   807 		    } else {
   842 		    } else {
       
   843 		        /*
       
   844 		         * least significant byte first (i.e i386/alpha order)
       
   845 		         */
       
   846 #if  defined(i386) /* actually: LSBFIRST && UNALIGNED_FETCH_OK*/
       
   847 		        ((unsigned short *)byteP)[0] = val;
       
   848 #else
   808 			byteP[0] = val & 0xFF;
   849 			byteP[0] = val & 0xFF;
   809 			byteP[1] = (val>>8) & 0xFF;
   850 			byteP[1] = (val>>8) & 0xFF;
       
   851 #endif
   810 		    }
   852 		    }
   811 		    RETURN ( value );
   853 		    RETURN ( value );
   812 		}
   854 		}
   813 	    }
   855 	    }
   814 	}
   856 	}
  2079 ! !
  2121 ! !
  2080 
  2122 
  2081 !ByteArray class methodsFor:'documentation'!
  2123 !ByteArray class methodsFor:'documentation'!
  2082 
  2124 
  2083 version
  2125 version
  2084     ^ '$Header: /cvs/stx/stx/libbasic/ByteArray.st,v 1.98 1998-05-07 18:02:53 cg Exp $'
  2126     ^ '$Header: /cvs/stx/stx/libbasic/ByteArray.st,v 1.99 1998-05-08 10:29:18 cg Exp $'
  2085 ! !
  2127 ! !