--- a/LargeInteger.st Sat Jan 25 01:31:18 2014 +0100
+++ b/LargeInteger.st Sat Jan 25 22:04:57 2014 +0100
@@ -1425,7 +1425,7 @@
byteSwapped
"lsb -> msb;
- i.e. a.b.c.d -> d.c.b.a"
+ i.e. a.b ... y.z -> z.y. ... b.a"
^ self class digitBytes:digitByteArray MSB:true
@@ -1439,6 +1439,72 @@
"Created: / 31-01-2012 / 11:07:42 / cg"
!
+byteSwapped32
+ "byte swap a 32bit value; lsb -> msb;
+ i.e. a.b.c.d -> d.c.b.a
+ Useful for communication protocols"
+
+%{
+ INT swapped;
+
+ swapped = ( (__ByteArrayInstPtr(__INST(digitByteArray))->ba_element[0]) << 24)
+ | ((__ByteArrayInstPtr(__INST(digitByteArray))->ba_element[1]) << 16)
+ | ((__ByteArrayInstPtr(__INST(digitByteArray))->ba_element[2]) << 8)
+ | ((__ByteArrayInstPtr(__INST(digitByteArray))->ba_element[3]));
+ RETURN (__MKUINT(swapped));
+%}.
+
+ "
+ (LargeInteger value:16r11223344) byteSwapped hexPrintString
+ (LargeInteger value:16r44332211) byteSwapped hexPrintString
+ 16r88776655 byteSwapped hexPrintString
+ 16r11223344 byteSwapped hexPrintString
+ "
+
+ "Created: / 31-01-2012 / 11:07:42 / cg"
+!
+
+byteSwapped64
+ "byte swap a 64bit value; lsb -> msb;
+ i.e. a.b.c.d.e.f.g.h -> h.g.f.e.d.c.b.a
+ Useful for communication protocols"
+
+%{
+ INT swappedLO = 0;
+ INT swappedHI;
+ INT swapped;
+
+ swappedHI = ((__ByteArrayInstPtr(__INST(digitByteArray))->ba_element[0]) << 24)
+ | ((__ByteArrayInstPtr(__INST(digitByteArray))->ba_element[1]) << 16)
+ | ((__ByteArrayInstPtr(__INST(digitByteArray))->ba_element[2]) << 8)
+ | ((__ByteArrayInstPtr(__INST(digitByteArray))->ba_element[3]));
+ if (__byteArraySize(__INST(digitByteArray)) > 4) {
+ swappedLO = ((__ByteArrayInstPtr(__INST(digitByteArray))->ba_element[4]) << 24)
+ | ((__ByteArrayInstPtr(__INST(digitByteArray))->ba_element[5]) << 16)
+ | ((__ByteArrayInstPtr(__INST(digitByteArray))->ba_element[6]) << 8)
+ | ((__ByteArrayInstPtr(__INST(digitByteArray))->ba_element[7]));
+ }
+
+#if __POINTER_SIZE__ == 8
+ swapped = (swappedHI<<32) | swappedLO;
+ return __MKUINT( swapped );
+#else
+ return __MKLARGEINT64(1, swappedLO, swappedHI);
+#endif
+%}.
+
+ "
+ (LargeInteger value:16r11223344) byteSwapped64 hexPrintString
+ (LargeInteger value:16r44332211) byteSwapped64 hexPrintString
+ (LargeInteger value:16r1122334455667788) byteSwapped64 hexPrintString
+ (LargeInteger value:16r8877665544332211) byteSwapped64 hexPrintString
+ 16r88776655 byteSwapped hexPrintString
+ 16r11223344 byteSwapped hexPrintString
+ "
+
+ "Created: / 31-01-2012 / 11:07:42 / cg"
+!
+
digitAt:index
"return 8 bits of value, starting at byte index"
@@ -5233,10 +5299,10 @@
!LargeInteger class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libbasic/LargeInteger.st,v 1.214 2013-12-02 18:10:35 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libbasic/LargeInteger.st,v 1.215 2014-01-25 21:04:57 cg Exp $'
!
version_CVS
- ^ '$Header: /cvs/stx/stx/libbasic/LargeInteger.st,v 1.214 2013-12-02 18:10:35 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libbasic/LargeInteger.st,v 1.215 2014-01-25 21:04:57 cg Exp $'
! !