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 } |