LargeInteger.st
branchjv
changeset 18117 eb433f2c42b2
parent 18112 0d7ac9096619
parent 15909 9ffe9886b91b
child 18120 e3a375d5f6a8
equal deleted inserted replaced
18116:bf7f37b63ea2 18117:eb433f2c42b2
  1423 
  1423 
  1424 !LargeInteger methodsFor:'byte access'!
  1424 !LargeInteger methodsFor:'byte access'!
  1425 
  1425 
  1426 byteSwapped
  1426 byteSwapped
  1427     "lsb -> msb;
  1427     "lsb -> msb;
  1428      i.e. a.b.c.d -> d.c.b.a"
  1428      i.e. a.b ... y.z -> z.y. ... b.a"
  1429 
  1429 
  1430     ^ self class digitBytes:digitByteArray MSB:true
  1430     ^ self class digitBytes:digitByteArray MSB:true
  1431 
  1431 
  1432     "
  1432     "
  1433      (LargeInteger value:16r11223344) byteSwapped hexPrintString
  1433      (LargeInteger value:16r11223344) byteSwapped hexPrintString
  1434      (LargeInteger value:16r44332211) byteSwapped hexPrintString
  1434      (LargeInteger value:16r44332211) byteSwapped hexPrintString
  1435      16r88776655 byteSwapped hexPrintString
  1435      16r88776655 byteSwapped hexPrintString
  1436      16r11223344 byteSwapped hexPrintString
  1436      16r11223344 byteSwapped hexPrintString
       
  1437     "
       
  1438 
       
  1439     "Created: / 31-01-2012 / 11:07:42 / cg"
       
  1440 !
       
  1441 
       
  1442 byteSwapped32
       
  1443     "byte swap a 32bit value; lsb -> msb;
       
  1444      i.e. a.b.c.d -> d.c.b.a
       
  1445      Useful for communication protocols"
       
  1446 
       
  1447 %{
       
  1448     unsigned INT swapped;
       
  1449 
       
  1450     swapped = ( (__ByteArrayInstPtr(__INST(digitByteArray))->ba_element[0]) << 24)
       
  1451               | ((__ByteArrayInstPtr(__INST(digitByteArray))->ba_element[1]) << 16)
       
  1452               | ((__ByteArrayInstPtr(__INST(digitByteArray))->ba_element[2]) << 8)
       
  1453               | ((__ByteArrayInstPtr(__INST(digitByteArray))->ba_element[3]));
       
  1454     RETURN (__MKUINT(swapped));
       
  1455 %}.
       
  1456 
       
  1457     "
       
  1458      (LargeInteger value:16r11223344) byteSwapped hexPrintString 
       
  1459      (LargeInteger value:16r44332211) byteSwapped hexPrintString  
       
  1460      16r88776655 byteSwapped hexPrintString  
       
  1461      16r11223344 byteSwapped hexPrintString  
       
  1462     "
       
  1463 
       
  1464     "Created: / 31-01-2012 / 11:07:42 / cg"
       
  1465 !
       
  1466 
       
  1467 byteSwapped64
       
  1468     "byte swap a 64bit value; lsb -> msb;
       
  1469      i.e. a.b.c.d.e.f.g.h -> h.g.f.e.d.c.b.a
       
  1470      Useful for communication protocols"
       
  1471 
       
  1472 %{
       
  1473     unsigned INT swappedLO = 0;
       
  1474     unsigned INT swappedHI;
       
  1475     unsigned INT swapped;
       
  1476 
       
  1477     swappedHI = ((__ByteArrayInstPtr(__INST(digitByteArray))->ba_element[0]) << 24)
       
  1478               | ((__ByteArrayInstPtr(__INST(digitByteArray))->ba_element[1]) << 16)
       
  1479               | ((__ByteArrayInstPtr(__INST(digitByteArray))->ba_element[2]) << 8)
       
  1480               | ((__ByteArrayInstPtr(__INST(digitByteArray))->ba_element[3]));
       
  1481     if (__byteArraySize(__INST(digitByteArray)) > 4) {
       
  1482         swappedLO = ((__ByteArrayInstPtr(__INST(digitByteArray))->ba_element[4]) << 24)
       
  1483                   | ((__ByteArrayInstPtr(__INST(digitByteArray))->ba_element[5]) << 16)
       
  1484                   | ((__ByteArrayInstPtr(__INST(digitByteArray))->ba_element[6]) << 8)
       
  1485                   | ((__ByteArrayInstPtr(__INST(digitByteArray))->ba_element[7]));
       
  1486     }
       
  1487 
       
  1488 #if __POINTER_SIZE__ == 8
       
  1489     swapped = (swappedHI<<32) | swappedLO;
       
  1490     return __MKUINT( swapped );
       
  1491 #else
       
  1492     return __MKLARGEINT64(1, swappedLO, swappedHI);
       
  1493 #endif
       
  1494 %}.
       
  1495 
       
  1496     "
       
  1497      (LargeInteger value:16r11223344) byteSwapped64 hexPrintString 
       
  1498      (LargeInteger value:16r44332211) byteSwapped64 hexPrintString  
       
  1499      (LargeInteger value:16r1122334455667788) byteSwapped64 hexPrintString  
       
  1500      (LargeInteger value:16r8877665544332211) byteSwapped64 hexPrintString  
       
  1501      16r88776655 byteSwapped hexPrintString  
       
  1502      16r11223344 byteSwapped hexPrintString  
  1437     "
  1503     "
  1438 
  1504 
  1439     "Created: / 31-01-2012 / 11:07:42 / cg"
  1505     "Created: / 31-01-2012 / 11:07:42 / cg"
  1440 !
  1506 !
  1441 
  1507 
  5231 ! !
  5297 ! !
  5232 
  5298 
  5233 !LargeInteger class methodsFor:'documentation'!
  5299 !LargeInteger class methodsFor:'documentation'!
  5234 
  5300 
  5235 version
  5301 version
  5236     ^ '$Header: /cvs/stx/stx/libbasic/LargeInteger.st,v 1.214 2013-12-02 18:10:35 cg Exp $'
  5302     ^ '$Header: /cvs/stx/stx/libbasic/LargeInteger.st,v 1.216 2014-01-25 21:21:15 cg Exp $'
  5237 !
  5303 !
  5238 
  5304 
  5239 version_CVS
  5305 version_CVS
  5240     ^ '$Header: /cvs/stx/stx/libbasic/LargeInteger.st,v 1.214 2013-12-02 18:10:35 cg Exp $'
  5306     ^ '$Header: /cvs/stx/stx/libbasic/LargeInteger.st,v 1.216 2014-01-25 21:21:15 cg Exp $'
  5241 ! !
  5307 ! !
  5242 
  5308