UninterpretedBytes.st
author Claus Gittinger <cg@exept.de>
Tue, 09 Jul 2019 20:55:17 +0200
changeset 24417 03b083548da2
parent 24040 cbf03fb244e9
child 24450 8a439196334f
permissions -rw-r--r--
#REFACTORING by exept class: Smalltalk class changed: #recursiveInstallAutoloadedClassesFrom:rememberIn:maxLevels:noAutoload:packageTop:showSplashInLevels: Transcript showCR:(... bindWith:...) -> Transcript showCR:... with:...
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
21377
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
     1
"{ Encoding: utf8 }"
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
     2
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
     3
"
a27a279701f8 Initial revision
claus
parents:
diff changeset
     4
 COPYRIGHT (c) 1993 by Claus Gittinger
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
     5
	      All Rights Reserved
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
     6
a27a279701f8 Initial revision
claus
parents:
diff changeset
     7
 This software is furnished under a license and may be used
a27a279701f8 Initial revision
claus
parents:
diff changeset
     8
 only in accordance with the terms of that license and with the
a27a279701f8 Initial revision
claus
parents:
diff changeset
     9
 inclusion of the above copyright notice.   This software may not
a27a279701f8 Initial revision
claus
parents:
diff changeset
    10
 be provided or otherwise made available to, or used by, any
a27a279701f8 Initial revision
claus
parents:
diff changeset
    11
 other person.  No title to or ownership of the software is
a27a279701f8 Initial revision
claus
parents:
diff changeset
    12
 hereby transferred.
a27a279701f8 Initial revision
claus
parents:
diff changeset
    13
"
6492
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
    14
"{ Package: 'stx:libbasic' }"
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
    15
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
    16
"{ NameSpace: Smalltalk }"
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
    17
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
    18
ArrayedCollection subclass:#UninterpretedBytes
20372
aa0461b19c97 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20177
diff changeset
    19
	instanceVariableNames:''
aa0461b19c97 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20177
diff changeset
    20
	classVariableNames:'IsBigEndian'
aa0461b19c97 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20177
diff changeset
    21
	poolDictionaries:''
aa0461b19c97 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20177
diff changeset
    22
	category:'Collections-Abstract'
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    23
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    24
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    25
!UninterpretedBytes primitiveDefinitions!
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    26
%{
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    27
/*
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    28
 * Notice: I am abstract, and my subclasses may be anything.
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    29
 * Therefore, the code must always handle the fallback case
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    30
 * where the receiver is neither an ExternalBytes nor a ByteArray.
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    31
 * (which are, however, the most common)
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    32
 *
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    33
 * macro to fetch my byte address and size-in-bytes;
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    34
 * convenient for inline-C code.
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    35
 * (yes, C is bad ...)
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    36
 */
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    37
#define __fetchBytePointerAndSize__(o, pPtr, pSize) \
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    38
    {\
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    39
      if (__isNonNilObject(o)) { \
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
    40
	if (__isByteArrayLike(o)) { \
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
    41
	  *(pPtr) = (unsigned char *)__ByteArrayInstPtr(o)->ba_element; \
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
    42
	  *(pSize) = __byteArraySize(o); \
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
    43
	} else if (__qIsExternalBytesLike(o)) { \
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
    44
	  OBJ __sz__ = __externalBytesSize(o); \
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
    45
	  if (__isSmallInteger(__sz__)) { \
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
    46
	    *(pSize) = __intVal(__sz__); \
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
    47
	    *(pPtr) = (unsigned char *)(__externalBytesAddress(o)); \
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
    48
	  } else { \
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
    49
	    *(pSize) = 0; \
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
    50
	    *(pPtr) = (unsigned char *)0; \
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
    51
	  } \
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
    52
	} else { \
22264
52bc85fd2fb8 *** empty log message ***
sr
parents: 22261
diff changeset
    53
		/* here we need to differ 32bit and 64bit */ \
52bc85fd2fb8 *** empty log message ***
sr
parents: 22261
diff changeset
    54
        /* because on 32bit machines we need to take care about the alignment */ \
52bc85fd2fb8 *** empty log message ***
sr
parents: 22261
diff changeset
    55
        /* but sadly, the same code is wrong for 64bit machines */ \
52bc85fd2fb8 *** empty log message ***
sr
parents: 22261
diff changeset
    56
		if (__POINTER_SIZE__ == 8) {\
52bc85fd2fb8 *** empty log message ***
sr
parents: 22261
diff changeset
    57
			*(pSize) /* nInstBytes */ = OHDR_SIZE + __OBJS2BYTES__(__intVal(__ClassInstPtr(__qClass(o))->c_ninstvars)); \
52bc85fd2fb8 *** empty log message ***
sr
parents: 22261
diff changeset
    58
		  } else { \
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
    59
	    if (__isFloatArray(o)) { \
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
    60
		*(pSize) = sizeof(struct __FloatArray) - sizeof(float) + __OBJS2BYTES__(__intVal(__ClassInstPtr(__qClass(o))->c_ninstvars)); \
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
    61
	    } else { \
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
    62
		if (__isDoubleArray(o)) { \
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
    63
		    *(pSize) = sizeof(struct __DoubleArray) - sizeof(double) + __OBJS2BYTES__(__intVal(__ClassInstPtr(__qClass(o))->c_ninstvars)); \
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
    64
		} else { \
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
    65
		    if (__isLongLongsOrSignedLongLongs(o)) { \
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
    66
			*(pSize) = sizeof(struct __LongIntegerArray) - sizeof(__uint64__) + __OBJS2BYTES__(__intVal(__ClassInstPtr(__qClass(o))->c_ninstvars)); \
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
    67
		    } else { \
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
    68
			*(pSize) /* nInstBytes */ = OHDR_SIZE + __OBJS2BYTES__(__intVal(__ClassInstPtr(__qClass(o))->c_ninstvars)); \
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
    69
		    } \
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
    70
		} \
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
    71
	    } \
22264
52bc85fd2fb8 *** empty log message ***
sr
parents: 22261
diff changeset
    72
	    } \
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
    73
	    *(pPtr) = (char *)(__InstPtr(self)) + *(pSize) /* nInstBytes */; \
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
    74
	    *(pSize) = __qSize(self) - *(pSize) /* nInstBytes */; \
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
    75
	} \
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    76
      } else { \
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
    77
	*(pSize) = 0; \
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
    78
	*(pPtr) = (unsigned char *)0; \
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    79
      } \
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    80
    }
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    81
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    82
%}
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    83
! !
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    84
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
    85
!UninterpretedBytes class methodsFor:'documentation'!
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    86
88
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    87
copyright
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    88
"
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    89
 COPYRIGHT (c) 1993 by Claus Gittinger
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
    90
	      All Rights Reserved
88
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    91
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    92
 This software is furnished under a license and may be used
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    93
 only in accordance with the terms of that license and with the
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    94
 inclusion of the above copyright notice.   This software may not
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    95
 be provided or otherwise made available to, or used by, any
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    96
 other person.  No title to or ownership of the software is
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    97
 hereby transferred.
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    98
"
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    99
!
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
   100
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   101
documentation
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   102
"
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   103
    UninterpretedBytes provides the common protocol for byte-storage
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   104
    containers; concrete subclasses are
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   105
	ByteArray (which store the bytes within the Smalltalk object memory)
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   106
	String    (knows that the bytes represent characters)
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   107
    and
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   108
	ExternalBytes (which store the bytes in the malloc-heap).
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   109
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   110
    UninterpretedBytes itself is abstract, so no instances of it can be created.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   111
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   112
    [See also:]
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   113
	ByteArray String ExternalBytes
1294
e26bbb61f6b2 documentation
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
   114
e26bbb61f6b2 documentation
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
   115
    [author:]
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   116
	Claus Gittinger
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   117
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   118
    [Notice:]
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   119
	Notice the confusion due to multiple methods with the same
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   120
	functionality (i.e. 'xxxx:MSB:' vs. 'xxxx:bigEndian:').
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   121
	The reason is that at the time this class was written,
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   122
	ST80 did not offer protocol to specify the byteOrder, and
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   123
	ST/X provided methods ending in 'MSB:' for this.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   124
	In the meanwhile, VW added protocol ending in 'bigEndian:',
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   125
	which has been added here for compatibility.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   126
	(certainly a point, where an ansi-standard will help)
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   127
"
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   128
! !
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   129
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   130
!UninterpretedBytes class methodsFor:'initialization'!
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   131
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   132
initialize
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   133
    IsBigEndian := self isBigEndian.
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   134
! !
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   135
3363
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
   136
!UninterpretedBytes class methodsFor:'instance creation'!
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
   137
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   138
from:aByteArray
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   139
    "return new instance which is a copy of aByteArray"
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   140
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   141
    |len bytes|
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   142
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   143
    len := aByteArray size.
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   144
    bytes := self new:len.
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   145
    bytes replaceBytesFrom:1 to:len with:aByteArray startingAt:1.
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   146
    ^ bytes
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   147
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   148
    "
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   149
      String from:#[40 41 42]
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   150
      String with:#[40 41 42 43 44 45 46 47 48 49 50] from:2 to:5
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   151
    "
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   152
!
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   153
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   154
fromHexString:aString
23946
28f3c19c9020 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 23933
diff changeset
   155
    "decode a byteArray from a hex string (as generated by hexPrintOn:).
28f3c19c9020 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 23933
diff changeset
   156
     aString should not contain whitespace (only hex chars);
28f3c19c9020 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 23933
diff changeset
   157
     see fromHexStringWithSeparators: for an alternative"
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   158
12551
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   159
    | sz bytes s hi lo |
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   160
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   161
    sz := aString size.
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   162
    sz == 0 ifTrue:[^ self new].
14970
319eeed62505 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 14224
diff changeset
   163
    sz odd ifTrue:[ ConversionError raiseWith:aString errorString:'invalid hex string (odd size)' ].
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   164
12551
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   165
    bytes := self new: sz // 2.
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   166
    s := aString readStream.
12551
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   167
    1 to: sz // 2 do: [ :idx |
23946
28f3c19c9020 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 23933
diff changeset
   168
        hi := s next digitValue.
28f3c19c9020 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 23933
diff changeset
   169
        lo := s next digitValue.
28f3c19c9020 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 23933
diff changeset
   170
        bytes at:idx put: ((hi bitShift:4) bitOr: lo)
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   171
    ].
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   172
    ^ bytes
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   173
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   174
    "
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   175
     ByteArray fromHexString:'1234FEFF'
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   176
     ExternalBytes fromHexString:'1234FEFF'
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   177
    "
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   178
    "
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   179
     |s|
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   180
     s := String streamContents:[:s | #[1 2 3] hexPrintOn:s].
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   181
     ByteArray fromHexString:s
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   182
    "
12551
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   183
    "
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   184
     Time millisecondsToRun:[
23946
28f3c19c9020 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 23933
diff changeset
   185
        1000000 timesRepeat:[ ByteArray fromHexString:'1234FEFF1234FEFF1234FEFF1234FEFF' ]
12551
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   186
     ].
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   187
    "
15717
b05a01005030 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15087
diff changeset
   188
b05a01005030 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15087
diff changeset
   189
    "Modified (comment): / 28-08-2013 / 20:40:04 / cg"
23946
28f3c19c9020 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 23933
diff changeset
   190
    "Modified (comment): / 22-03-2019 / 12:27:13 / Claus Gittinger"
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   191
!
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   192
11874
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   193
fromHexStringWithSeparators:aString
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   194
    "read a bytearray from a printed string representation, where
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   195
     individual bytes are encoded as two hex digits, optionally separated by whiteSpace.
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   196
     See also fromHexString:, which does something similar, but does not allow for spaces"
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   197
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   198
    ^ self streamContents:[:outStream |
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   199
	|inStream h|
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   200
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   201
	inStream := aString readStream.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   202
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   203
	[
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   204
	    inStream skipSeparators.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   205
	    inStream atEnd
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   206
	] whileFalse:[
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   207
	    h := inStream next:2.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   208
	    outStream nextPut:(Integer readFrom:h base:16).
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   209
	].
11874
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   210
    ].
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   211
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   212
    "
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   213
     ByteArray fromHexString:'1234FEFF'
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   214
     ByteArray fromHexStringWithSeparators:'   12  34 FE FF'
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   215
    "
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   216
!
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   217
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   218
fromPackedString:aString
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   219
    "ST-80 compatibility: decode a byteArray from a packed string in which
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   220
     6bits are encoded per character. The argument, aString must be a multiple
18633
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   221
     of 4 in size (since 24 is the lcm of 6 and 8).
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   222
     Every 6 bit packet is encoded as a character in 32..95.
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   223
     Characters below 32 are ignored (so line breaks can be inserted at any place).
18649
e9d831015328 fix: signedLongIntVal returns an INT
Claus Gittinger <cg@exept.de>
parents: 18633
diff changeset
   224
     An addition final byte defines how many bytes of the last triple are valid.
18633
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   225
     This is somewhat like the radix-encoding used in good old PDP11 times ;-)
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   226
     ST-80 uses this encoding for Images ...
16798
acfbeccbc226 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16796
diff changeset
   227
     This is a base64 encoding, very similar (but not equal) to the algorithm used in RFC1421.
18346
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   228
     PS: It took a while to figure that one out ...
18633
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   229
     PPS: I don't like it ;-)"
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   230
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   231
    |index    "{ Class: SmallInteger }"
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   232
     dstIndex "{ Class: SmallInteger }"
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   233
     stop     "{ Class: SmallInteger }"
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   234
     sixBits  "{ Class: SmallInteger }"
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   235
     n        "{ Class: SmallInteger }"
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   236
     sz       "{ Class: SmallInteger }"
12551
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   237
     last bytes|
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   238
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   239
    sz := aString size.
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   240
    sz == 0 ifTrue:[^ self new].
12551
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   241
    sz := sz - (aString count:[:ch | ch codePoint < 32]).
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   242
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   243
    stop := sz // 4 * 3.
12551
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   244
    "the size modulo 3 is encoded in the last character, if it is in the
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   245
     range 97 .. otherwise, its exact."
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   246
12551
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   247
    last := aString last codePoint.
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   248
    last > 96 ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   249
	stop := stop - 3 + (last - 96)
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   250
    ].
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   251
    bytes := self new:stop.
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   252
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   253
    index := 1. dstIndex := 1.
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   254
    [dstIndex <= stop] whileTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   255
	"/ take 4 characters ...
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   256
	"/ allow a line break before each group of 4
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   257
	sixBits := (aString at:index) codePoint.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   258
	[sixBits < 32] whileTrue:[
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   259
	    index := index + 1.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   260
	    sixBits := (aString at:index) codePoint.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   261
	].
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   262
	sixBits := sixBits bitAnd:16r3F.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   263
	n := sixBits.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   264
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   265
	"/ self assert:(aString at:index+1) codePoint >= 32.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   266
	sixBits := (aString at:index+1) codePoint bitAnd:16r3F.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   267
	n := (n bitShift:6) + sixBits.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   268
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   269
	"/ self assert:(aString at:index+2) codePoint >= 32.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   270
	sixBits := (aString at:index+2) codePoint bitAnd:16r3F.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   271
	n := (n bitShift:6) + sixBits.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   272
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   273
	"/ self assert:(aString at:index+3) codePoint >= 32.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   274
	sixBits := (aString at:index+3) codePoint bitAnd:16r3F.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   275
	n := (n bitShift:6) + sixBits.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   276
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   277
	index := index + 4.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   278
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   279
	"/ now have 24 bits in n
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   280
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   281
	bytes at:dstIndex put:(n bitShift:-16).
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   282
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   283
	dstIndex < stop ifTrue:[
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   284
	    bytes at:dstIndex+1 put:((n bitShift:-8) bitAnd:16rFF).
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   285
	    dstIndex+2 <= stop ifTrue:[
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   286
		bytes at:dstIndex+2 put:(n bitAnd:16rFF).
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   287
	    ]
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   288
	].
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   289
	dstIndex := dstIndex + 3.
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   290
    ].
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   291
    ^ bytes
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   292
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   293
    "
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   294
     ByteArray fromPackedString:(#[1 1 1 1] asPackedString)
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   295
     ByteArray fromPackedString:(#[1 1 1 1 1] asPackedString)
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   296
     ByteArray fromPackedString:(#[1 1 1 1 1 1] asPackedString)
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   297
     ByteArray fromPackedString:(#[1 1 1 1 1 1 1] asPackedString)
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   298
     ByteArray fromPackedString:(#[1 1 1 1 1 1 1 1] asPackedString)
18633
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   299
     ByteArray fromPackedString:((ByteArray new:256) asPackedString)
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   300
     ByteArray fromPackedString:((ByteArray new:128) asPackedString)
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   301
     ByteArray fromPackedString:((ByteArray new:129) asPackedString)
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   302
     ByteArray fromPackedString:((ByteArray new:130) asPackedString)
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   303
     ByteArray fromPackedString:((ByteArray new:131) asPackedString)
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   304
     ByteArray fromPackedString:((ByteArray new:132) asPackedString)
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   305
     ByteArray fromPackedString:((ByteArray new:64) asPackedString)
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   306
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   307
     0 to:256 do:[:l |
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   308
	|orig copy|
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   309
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   310
	0 to:255 do:[:fill |
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   311
	    orig := ByteArray new:l withAll:fill.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   312
	    copy := ByteArray fromPackedString:(orig asPackedString).
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   313
	    self assert:(orig = copy).
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   314
	 ]
18633
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   315
     ]
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   316
    "
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   317
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   318
    "Modified: / 6.3.1997 / 15:28:52 / cg"
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   319
    "Modified: / 18.12.1997 / 17:17:11 / stefan"
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   320
!
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   321
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   322
uninitializedNew:anInteger
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   323
    "return a new instance of the receiver with uninitialized
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   324
     (i.e. undefined) contents. The indexed elements have any random
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   325
     value. However, any named instance variables are still nilled.
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   326
     For use, when contents will be set anyway shortly after - this
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   327
     is a bit faster than the regular basicNew:, which clears the bytes.
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   328
     Of course, it only makes a difference for very big ByteArrays, such
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   329
     as used for images/bitmaps.
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   330
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   331
     Notice: if you want to port code using uninitializedNew: to another
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   332
     smalltalk, you have to add an 'uninitializedNew: -> basicNew:'-calling
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   333
     method to the ByteArray class of the other smalltalk."
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   334
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   335
%{  /* NOCONTEXT */
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   336
    OBJ newobj;
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   337
    INT instsize, nInstVars, nindexedinstvars;
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   338
    REGISTER OBJ *op;
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   339
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   340
    if (__isSmallInteger(anInteger)) {
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   341
	nindexedinstvars = __intVal(anInteger);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   342
	if (nindexedinstvars >= 0) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   343
	    if (self == ByteArray) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   344
		/*
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   345
		 * the most common case
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   346
		 */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   347
		instsize = OHDR_SIZE + nindexedinstvars;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   348
		if (__CanDoQuickNew(instsize)) {        /* OBJECT ALLOCATION */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   349
		    __qCheckedNew(newobj, instsize);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   350
		    __InstPtr(newobj)->o_class = self;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   351
		    __qSTORE(newobj, self);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   352
		    RETURN (newobj );
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   353
		}
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   354
	    } else {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   355
		/*
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   356
		 * Take care for subclasses like TwoByteString
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   357
		 */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   358
		switch (__smallIntegerVal(__ClassInstPtr(self)->c_flags) & ARRAYMASK) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   359
		case BYTEARRAY:
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   360
		    break;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   361
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   362
		case WORDARRAY:
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   363
		case SWORDARRAY:
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   364
		    nindexedinstvars *= 2;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   365
		    break;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   366
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   367
		case LONGARRAY:
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   368
		case SLONGARRAY:
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   369
		    nindexedinstvars *= 4;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   370
		    break;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   371
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   372
		default:
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   373
		    /* don't know about this array type, delegate to super */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   374
		    goto out;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   375
		}
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   376
	    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   377
	    nInstVars = __intVal(__ClassInstPtr(self)->c_ninstvars);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   378
	    instsize = OHDR_SIZE + __OBJS2BYTES__(nInstVars) + nindexedinstvars;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   379
	    __PROTECT_CONTEXT__
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   380
	    __qNew(newobj, instsize);   /* OBJECT ALLOCATION */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   381
	    __UNPROTECT_CONTEXT__
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   382
	    if (newobj != nil) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   383
		__InstPtr(newobj)->o_class = self;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   384
		__qSTORE(newobj, self);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   385
		if (nInstVars) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   386
		    /*
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   387
		     * still have to nil out named instvars ...
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   388
		     */
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   389
#if defined(memset4) && defined(FAST_OBJECT_MEMSET4)
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   390
		    memset4(__InstPtr(newobj)->i_instvars, nil, nInstVars);
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   391
#else
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   392
# if defined(FAST_MEMSET) && !defined(NEGATIVE_ADDRESSES)
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   393
		    /*
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   394
		     * knowing that nil is 0
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   395
		     */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   396
		    memset(__InstPtr(newobj)->i_instvars, 0, instsize - OHDR_SIZE);
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   397
# else
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   398
		    op = __InstPtr(newobj)->i_instvars;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   399
		    while (nInstVars--)
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   400
			*op++ = nil;
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   401
# endif
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   402
#endif
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   403
		}
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   404
		RETURN ( newobj );
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   405
	    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   406
	}
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   407
    }
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   408
out:;
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   409
%}.
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   410
    ^ self basicNew:anInteger
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   411
!
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   412
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   413
with:aByteArray from:start to:stop
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   414
    "return new instance with a copy of aByteArray
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   415
     beginning at index start up to and including index stop"
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   416
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   417
    |len bytes|
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   418
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   419
    len := stop-start+1.
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   420
    bytes := self new:len.
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   421
    bytes replaceBytesFrom:1 to:len with:aByteArray startingAt:start.
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   422
    ^ bytes
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   423
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   424
    "
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   425
      String with:#[40 41 42 43 44 45 46 47 48 49 50] from:2 to:5
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   426
    "
3363
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
   427
! !
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
   428
21830
c5ea23cc3ba2 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21474
diff changeset
   429
!UninterpretedBytes class methodsFor:'Compatibility-Squeak'!
c5ea23cc3ba2 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21474
diff changeset
   430
c5ea23cc3ba2 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21474
diff changeset
   431
readHexFrom:aString
c5ea23cc3ba2 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21474
diff changeset
   432
    "same as fromHexString: for squeak/Pharo compatibility"
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   433
21830
c5ea23cc3ba2 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21474
diff changeset
   434
    ^ self fromHexString:aString
c5ea23cc3ba2 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21474
diff changeset
   435
c5ea23cc3ba2 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21474
diff changeset
   436
    "
c5ea23cc3ba2 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21474
diff changeset
   437
     (ByteArray readHexFrom: 'C3A1C3A5C3A6C3B1C386C2A5C3BC')
c5ea23cc3ba2 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21474
diff changeset
   438
    "
c5ea23cc3ba2 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21474
diff changeset
   439
c5ea23cc3ba2 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21474
diff changeset
   440
    "Created: / 18-06-2017 / 18:01:18 / cg"
c5ea23cc3ba2 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21474
diff changeset
   441
! !
c5ea23cc3ba2 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21474
diff changeset
   442
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   443
!UninterpretedBytes class methodsFor:'queries'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   444
8893
99996b25482e +isAbstract
Claus Gittinger <cg@exept.de>
parents: 8092
diff changeset
   445
isAbstract
11220
1ed300ff0d21 comment
Claus Gittinger <cg@exept.de>
parents: 11009
diff changeset
   446
    "Return if this class is an abstract class.
1ed300ff0d21 comment
Claus Gittinger <cg@exept.de>
parents: 11009
diff changeset
   447
     True is returned for UninterpretedBytes here; false for subclasses.
19461
7a4d28b76572 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19415
diff changeset
   448
     Abstract subclasses must redefine this again."
11220
1ed300ff0d21 comment
Claus Gittinger <cg@exept.de>
parents: 11009
diff changeset
   449
8893
99996b25482e +isAbstract
Claus Gittinger <cg@exept.de>
parents: 8092
diff changeset
   450
    ^ self == UninterpretedBytes
99996b25482e +isAbstract
Claus Gittinger <cg@exept.de>
parents: 8092
diff changeset
   451
!
99996b25482e +isAbstract
Claus Gittinger <cg@exept.de>
parents: 8092
diff changeset
   452
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   453
isBigEndian
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   454
    "return true, if words/shorts store the most-significant
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   455
     byte first (MSB), false if least-sign.-first (LSB).
23933
d2fd46589fe6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 23626
diff changeset
   456
     Returns 
d2fd46589fe6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 23626
diff changeset
   457
        false for vax, intel, 
d2fd46589fe6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 23626
diff changeset
   458
        true for m68k, m88k, power, sparc.
4019
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
   459
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
   460
     Notice: UninterpretedBytes isBigEndian
23933
d2fd46589fe6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 23626
diff changeset
   461
             this is inlined both by stc and the jit compiler"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   462
a27a279701f8 Initial revision
claus
parents:
diff changeset
   463
%{  /* NOCONTEXT */
a27a279701f8 Initial revision
claus
parents:
diff changeset
   464
8901
824a89d0b5c7 alpha64 vs. POINTER_SIZE cleanup
Claus Gittinger <cg@exept.de>
parents: 8893
diff changeset
   465
#if defined(__MSBFIRST__)
3936
dd8cd28d4a9b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3459
diff changeset
   466
    RETURN (true);
dd8cd28d4a9b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3459
diff changeset
   467
#else
8901
824a89d0b5c7 alpha64 vs. POINTER_SIZE cleanup
Claus Gittinger <cg@exept.de>
parents: 8893
diff changeset
   468
# if defined(__LSBFIRST__)
4275
9fc4a735a1d3 BFIRST stuff
Claus Gittinger <cg@exept.de>
parents: 4019
diff changeset
   469
    RETURN (false);
9fc4a735a1d3 BFIRST stuff
Claus Gittinger <cg@exept.de>
parents: 4019
diff changeset
   470
# else
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   471
    /*
20816
986549374231 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20595
diff changeset
   472
     * I don't like ifdefs - you always forget some ...
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   473
     * therefore we look into a structure at run-time.
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   474
     * (also, there are CPUs around [mips], where the byteorder
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   475
     *  is programmable, and which come in different flavours)
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   476
     *
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   477
     * NOTICE:
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   478
     *    both the JIT and stc may inline this to a
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   479
     *    constant for systems where this is known.
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   480
     */
a27a279701f8 Initial revision
claus
parents:
diff changeset
   481
    union {
23933
d2fd46589fe6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 23626
diff changeset
   482
        unsigned int   u_l;
d2fd46589fe6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 23626
diff changeset
   483
        char           u_c[sizeof(int)];
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   484
    } u;
a27a279701f8 Initial revision
claus
parents:
diff changeset
   485
a27a279701f8 Initial revision
claus
parents:
diff changeset
   486
    u.u_l = 0x87654321;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   487
    if (u.u_c[0] == 0x21) RETURN (false);
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   488
    RETURN (true);
4275
9fc4a735a1d3 BFIRST stuff
Claus Gittinger <cg@exept.de>
parents: 4019
diff changeset
   489
# endif
3936
dd8cd28d4a9b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3459
diff changeset
   490
#endif
18346
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   491
%}.
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   492
    ^ false     "/ an arbitrary default
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   493
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   494
    "
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   495
     UninterpretedBytes isBigEndian
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   496
    "
23933
d2fd46589fe6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 23626
diff changeset
   497
d2fd46589fe6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 23626
diff changeset
   498
    "Modified (comment): / 17-03-2019 / 13:02:29 / Claus Gittinger"
3209
eff7ad7f0825 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3207
diff changeset
   499
!
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   500
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   501
isBuiltInClass
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   502
    "return true if this class is known by the run-time-system.
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
   503
     Here, true is returned, since UninterpretedBytes is the superclass of
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   504
     some builtIn classes (ByteArray & ExternalBytes)"
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   505
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   506
    ^ self == UninterpretedBytes
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   507
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
   508
    "Modified: / 23.4.1996 / 15:56:25 / cg"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
   509
    "Modified: / 5.3.1998 / 14:56:22 / stefan"
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   510
! !
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   511
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   512
!UninterpretedBytes methodsFor:'Compatibility'!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   513
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   514
doubleWordAt:index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   515
    "return the 4-bytes starting at index as an (unsigned) Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   516
     The index is a smalltalk index (i.e. 1-based).
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   517
     The value is retrieved in the machine's natural byte order."
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   518
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   519
    ^ self unsignedInt32At:index MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   520
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   521
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   522
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   523
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   524
     b := ByteArray withAll:#(1 2 3 4).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   525
     (b doubleWordAt:1) printStringRadix:16
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   526
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   527
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   528
    "Modified: / 05-03-1998 / 14:57:35 / stefan"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   529
    "Modified (comment): / 04-08-2017 / 11:15:29 / cg"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   530
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   531
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   532
doubleWordAt:index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   533
    "return the 4-bytes starting at index as an (unsigned) Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   534
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   535
     The value is retrieved MSB-first, if the msb-arg is true;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   536
     LSB-first otherwise."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   537
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   538
    ^ self unsignedInt32At:index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   539
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   540
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   541
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   542
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   543
     b := ByteArray withAll:#(1 2 3 4).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   544
     (b doubleWordAt:1 MSB:true) printStringRadix:16.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   545
     (b doubleWordAt:1 MSB:false) printStringRadix:16
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   546
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   547
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   548
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   549
doubleWordAt:byteIndex put:anInteger
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   550
    "set the 4-bytes starting at index from the (unsigned) Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   551
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   552
     The value should be in the range 0 to 16rFFFFFFFF
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   553
     (for negative values, the stored value is not defined).
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   554
     The value is stored in the machine's natural byte order."
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   555
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   556
   ^ self unsignedInt32At:byteIndex put:anInteger MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   557
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   558
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   559
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   560
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   561
     b doubleWordAt:1 put:16r04030201.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   562
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   563
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   564
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   565
    "Modified: / 05-03-1998 / 14:57:48 / stefan"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   566
    "Modified (comment): / 04-08-2017 / 11:15:38 / cg"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   567
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   568
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   569
doubleWordAt:byteIndex put:anInteger MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   570
    "set the 4-bytes starting at index from the (unsigned) Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   571
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   572
     The value must be in the range 0 to 16rFFFFFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   573
     The value is stored MSB-first if msb is true; LSB-first otherwise."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   574
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   575
   ^ self unsignedInt32At:byteIndex put:anInteger MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   576
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   577
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   578
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   579
     b := ByteArray new:8.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   580
     b doubleWordAt:1 put:16r04030201 MSB:true.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   581
     b doubleWordAt:5 put:16r04030201 MSB:false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   582
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   583
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   584
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   585
    "Modified: / 21.1.1998 / 17:43:34 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   586
    "Modified: / 5.3.1998 / 11:42:17 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   587
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   588
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   589
doubleWordAtDoubleWordIndex:int32Index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   590
    "return the unsigned long (int32) at index, anInteger.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   591
     Fetching in the machine's natural byte order.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   592
     Indices are 1-based and scaled as appropriate to allow
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   593
     accessing the memory as an array of doubleWord entries.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   594
     (i.e. indices are 1, 2, ...)"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   595
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   596
    ^ self doubleWordAtDoubleWordIndex:int32Index MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   597
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   598
    "Created: / 21.1.1998 / 17:43:53 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   599
    "Modified: / 5.3.1998 / 14:58:06 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   600
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   601
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   602
doubleWordAtDoubleWordIndex:int32Index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   603
    "return the unsigned long (int32) at index, anInteger.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   604
     Fetching is MSB if msb is true, LSB otherwise.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   605
     Indices are 1-based and scaled as appropriate to allow
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   606
     accessing the memory as an array of doubleWord entries.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   607
     (i.e. indices are 1, 2, ...)"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   608
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   609
    ^ self unsignedInt32At:((int32Index - 1) * 4 + 1) MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   610
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   611
    "Created: / 21.1.1998 / 17:44:07 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   612
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   613
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   614
doubleWordAtDoubleWordIndex:int32Index put:anInteger
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   615
    "set the long at index, anInteger.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   616
     Storing in the machines natural byte order.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   617
     Indices are 1-based and scaled as appropriate to allow
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   618
     accessing the memory as an array of doubleWord entries.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   619
     (i.e. indices are 1, 2, ...)"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   620
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   621
    ^ self doubleWordAtDoubleWordIndex:int32Index put:anInteger MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   622
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   623
    "Created: / 21.1.1998 / 17:44:13 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   624
    "Modified: / 5.3.1998 / 14:58:19 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   625
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   626
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   627
doubleWordAtDoubleWordIndex:int32Index put:anInteger MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   628
    "set the long at index, anInteger.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   629
     Storing is MSB if msb is true, LSB otherwise.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   630
     Indices are 1-based and scaled as appropriate to allow
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   631
     accessing the memory as an array of doubleWord entries.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   632
     (i.e. indices are 1, 2, ...)"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   633
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   634
    ^ self unsignedInt32At:((int32Index - 1) * 4 + 1) put:anInteger MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   635
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   636
    "Created: / 21.1.1998 / 17:44:19 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   637
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   638
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   639
int16At:byteIndex
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   640
    "return the 2-bytes starting at index as a signed Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   641
     The index is a smalltalk index (i.e. 1-based).
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   642
     The value is retrieved in the machine's natural byte order.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   643
     This may be worth a primitive."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   644
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   645
    ^ self signedInt16At:byteIndex
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   646
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   647
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   648
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   649
     b := ByteArray new:2.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   650
     b wordAt:1 put:16rFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   651
     b signedWordAt:1
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   652
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   653
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   654
    "Modified: / 01-07-1996 / 21:14:38 / cg"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   655
    "Modified (comment): / 04-08-2017 / 11:15:48 / cg"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   656
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   657
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   658
int16At:byteIndex MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   659
    "return the 2-bytes starting at index as a signed Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   660
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   661
     The value is retrieved in the machines natural byte order.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   662
     This may be worth a primitive."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   663
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   664
    ^ self signedInt16At:byteIndex MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   665
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   666
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   667
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   668
     b := ByteArray new:2.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   669
     b wordAt:1 put:16rFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   670
     b signedWordAt:1
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   671
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   672
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   673
    "Modified: 1.7.1996 / 21:14:38 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   674
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   675
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   676
int16At:index put:anInteger
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   677
    "set the 2-bytes starting at index from the signed Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   678
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   679
     The stored value must be in the range -32768 .. +32676.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   680
     The value is stored in the machine's natural byteorder"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   681
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   682
    ^ self signedInt16At:index put:anInteger MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   683
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   684
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   685
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   686
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   687
     b shortAt:1 put:1 bigEndian:true.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   688
     b shortAt:3 put:1 bigEndian:false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   689
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   690
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   691
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   692
    "Modified: / 1.7.1996 / 21:12:07 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   693
    "Created: / 5.3.1998 / 11:02:05 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   694
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   695
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   696
int16At:index put:anInteger MSB:bigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   697
    "set the 2-bytes starting at index from the signed Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   698
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   699
     The stored value must be in the range -32768 .. +32676.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   700
     The value is stored in the byteorder given by bigEndian.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   701
     This may be worth a primitive."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   702
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   703
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   704
    ^ self signedInt16At:index put:anInteger MSB:bigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   705
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   706
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   707
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   708
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   709
     b shortAt:1 put:1 bigEndian:true.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   710
     b shortAt:3 put:1 bigEndian:false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   711
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   712
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   713
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   714
    "Modified: / 1.7.1996 / 21:12:07 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   715
    "Created: / 5.3.1998 / 11:02:05 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   716
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   717
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   718
longAt:index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   719
    "return the 4-bytes starting at index as a signed Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   720
     The index is a smalltalk index (i.e. 1-based).
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   721
     The value is retrieved in the machine's natural byte order,
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   722
     therefore, this should only be used for byte-data which is
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   723
     only used inside this machine.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   724
     To setup data packets which are to be sent to other machines,
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   725
     or stored into a file, always use longAt:MSB: and specify
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   726
     a definite byteOrder."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   727
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   728
    ^ self signedInt32At:index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   729
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   730
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   731
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   732
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   733
     b unsignedLongAt:1 put:16rFFFFFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   734
     (b longAt:1)
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   735
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   736
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   737
    "Modified: / 01-07-1996 / 21:11:28 / cg"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   738
    "Modified: / 05-03-1998 / 12:06:28 / stefan"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   739
    "Modified (comment): / 04-08-2017 / 11:15:58 / cg"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   740
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   741
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   742
longAt:index bigEndian:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   743
    "return the 4-bytes starting at index as a signed Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   744
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   745
     Depending on msb, the value is retrieved MSB-first or LSB-first.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   746
     This may be worth a primitive."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   747
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   748
    ^ self signedInt32At:index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   749
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   750
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   751
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   752
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   753
     b unsignedLongAt:1 put:16rFFFFFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   754
     (b longAt:1)
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   755
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   756
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   757
    "Modified: / 1.7.1996 / 21:11:33 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   758
    "Created: / 5.3.1998 / 14:02:03 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   759
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   760
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   761
longAt:index put:value
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   762
    "set the 4-bytes starting at index from the signed Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   763
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   764
     The value is stored in the machine's natural byte order."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   765
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   766
    ^ self signedInt32At:index put:value MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   767
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   768
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   769
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   770
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   771
     b longAt:1 put:-1.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   772
     (b unsignedLongAt:1) printStringRadix:16
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   773
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   774
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   775
    "Modified: / 1.7.1996 / 21:11:39 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   776
    "Created: / 5.3.1998 / 10:57:18 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   777
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   778
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   779
longAt:byteIndex put:anInteger bigEndian:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   780
    "store a signed long (32bit) integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   781
     The index is a smalltalk index (i.e. 1-based)."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   782
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   783
    ^ self signedInt32At:byteIndex put:anInteger MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   784
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   785
    "Created: / 9.5.1998 / 01:10:24 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   786
    "Modified: / 9.5.1998 / 01:13:34 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   787
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   788
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   789
longLongAt:index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   790
    "return the 8-bytes starting at index as a signed Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   791
     The index is a smalltalk index (i.e. 1-based).
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   792
     The value is retrieved in the machine's natural byte order.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   793
     This may be worth a primitive."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   794
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   795
    ^ self signedInt64At:index MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   796
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   797
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   798
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   799
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   800
     b unsignedLongLongAt:1 put:16rFFFFFFFFFFFFFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   801
     (b longLongAt:1)
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   802
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   803
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   804
    "Modified: / 01-07-1996 / 21:11:28 / cg"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   805
    "Created: / 05-03-1998 / 14:40:05 / stefan"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   806
    "Modified (comment): / 04-08-2017 / 11:16:06 / cg"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   807
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   808
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   809
longLongAt:index bigEndian:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   810
    "return the 8-bytes starting at index as a signed Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   811
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   812
     The value is retrieved in the given byte order.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   813
     This may be worth a primitive."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   814
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   815
    ^ self signedInt64At:index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   816
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   817
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   818
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   819
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   820
     b unsignedLongLongAt:1 put:16rFFFFFFFFFFFFFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   821
     (b longLongAt:1 msb:true)
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   822
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   823
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   824
    "Modified: / 5.3.1998 / 12:06:28 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   825
    "Created: / 5.3.1998 / 14:40:54 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   826
    "Modified: / 9.5.1998 / 01:10:59 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   827
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   828
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   829
longLongAt:byteIndex put:anInteger
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   830
    "store a signed longLong (64bit) integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   831
     The index is a smalltalk index (i.e. 1-based).
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   832
     The value is stored in the machine's natural byte order.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   833
     Same as #signedQuadWordAt:put: - for ST80 compatibility."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   834
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   835
    ^ self signedInt64At:byteIndex put:anInteger MSB:IsBigEndian
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   836
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   837
    "Modified (comment): / 04-08-2017 / 11:16:36 / cg"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   838
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   839
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   840
longLongAt:byteIndex put:anInteger bigEndian:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   841
    "store a signed longLong (64bit) integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   842
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   843
     Same as #signedQuadWordAt:put: - for ST80 compatibility."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   844
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   845
    ^ self signedInt64At:byteIndex put:anInteger MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   846
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   847
    "Created: / 9.5.1998 / 01:10:24 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   848
    "Modified: / 9.5.1998 / 01:13:34 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   849
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   850
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   851
quadWordAt:index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   852
    "return the 8-bytes starting at index as an (unsigned) Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   853
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   854
     Depending on msb, the value is retrieved MSB or LSB-first."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   855
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   856
   ^ self unsignedInt64At:index MSB:msb
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   857
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   858
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   859
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   860
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   861
     b := ByteArray withAll:#(1 2 3 4 5 6 7 8).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   862
     (b quadWordAt:1 MSB:false) printStringRadix:16
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   863
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   864
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   865
    "Modified: 5.11.1996 / 14:06:21 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   866
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   867
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   868
quadWordAt:index put:anInteger MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   869
    "set the 8-bytes starting at index from the (unsigned) Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   870
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   871
     The value must be in the range 0 to 16rFFFFFFFFFFFFFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   872
     Depending on msb, the value is stored MSB-first or LSB-first."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   873
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   874
    ^ self unsignedInt64At:index put:anInteger MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   875
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   876
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   877
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   878
     b := ByteArray new:8.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   879
     b quadWordAtIndex:1 put:16r0807060504030201 MSB:false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   880
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   881
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   882
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   883
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   884
shortAt:index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   885
    "return the 2-bytes starting at index as a signed Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   886
     The index is a smalltalk index (i.e. 1-based).
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   887
     The value is retrieved in the machine's natural byte order.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   888
     This may be worth a primitive.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   889
     This is the ST80 equivalent of #signedWordAt:"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   890
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   891
    ^ self signedInt16At:index MSB:IsBigEndian
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   892
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   893
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   894
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   895
     b := ByteArray new:2.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   896
     b unsignedShortAt:1 put:16rFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   897
     b shortAt:1
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   898
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   899
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   900
    "Modified: / 01-07-1996 / 21:14:38 / cg"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   901
    "Created: / 05-03-1998 / 10:59:57 / stefan"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   902
    "Modified: / 05-03-1998 / 23:39:38 / stefan"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   903
    "Modified (comment): / 04-08-2017 / 11:16:20 / cg"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   904
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   905
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   906
shortAt:index bigEndian:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   907
    "return the 2-bytes starting at index as a signed Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   908
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   909
     The value is retrieved MSB-first, if the msb-arg is true;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   910
     LSB-first otherwise.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   911
     This is the ST80 equivalent of #signedWordAt:"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   912
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   913
    ^ self signedInt16At:index MSB:msb
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   914
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   915
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   916
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   917
     b := ByteArray new:2.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   918
     b unsignedShortAt:1 put:16rFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   919
     b shortAt:1
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   920
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   921
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   922
    "Modified: / 1.7.1996 / 21:14:38 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   923
    "Created: / 5.3.1998 / 23:41:21 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   924
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   925
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   926
shortAt:index put:value
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   927
    "set the 2-bytes starting at index from the signed Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   928
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   929
     The stored value must be in the range -32768 .. +32676.
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   930
     The value is stored in the machine's natural byteorder.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   931
     This may be worth a primitive.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   932
     This is the ST80 equivalent of #signedWordAt:put:"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   933
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   934
    ^ self signedInt16At:index put:value MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   935
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   936
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   937
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   938
     b := ByteArray new:6.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   939
     b shortAt:1 put:-1.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   940
     b shortAt:3 put:-2.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   941
     b shortAt:5 put:0.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   942
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   943
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   944
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   945
    "Modified: / 01-07-1996 / 21:12:07 / cg"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   946
    "Created: / 05-03-1998 / 11:02:05 / stefan"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   947
    "Modified (comment): / 04-08-2017 / 11:16:46 / cg"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   948
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   949
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   950
shortAt:index put:value bigEndian:bigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   951
    "set the 2-bytes starting at index from the signed Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   952
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   953
     The stored value must be in the range -32768 .. +32676.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   954
     The value is stored in the byteorder given by bigEndian.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   955
     This may be worth a primitive."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   956
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   957
    ^ self signedInt16At:index put:value MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   958
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   959
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   960
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   961
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   962
     b shortAt:1 put:1 bigEndian:true.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   963
     b shortAt:3 put:1 bigEndian:false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   964
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   965
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   966
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   967
    "Modified: / 1.7.1996 / 21:12:07 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   968
    "Created: / 5.3.1998 / 11:02:05 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   969
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   970
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   971
signedDoubleWordAt:index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   972
    "return the 4-bytes starting at index as a signed Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   973
     The index is a smalltalk index (i.e. 1-based).
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   974
     The value is retrieved in the machine's natural byte order.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   975
     This may be worth a primitive."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   976
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   977
    ^ self signedInt32At:index MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   978
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   979
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   980
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   981
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   982
     b doubleWordAt:1 put:16rFFFFFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   983
     (b signedDoubleWordAt:1)
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   984
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   985
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   986
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   987
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   988
     b signedDoubleWordAt:1 put:-1.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   989
     (b doubleWordAt:1)
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   990
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   991
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   992
    "Modified: / 01-07-1996 / 21:11:28 / cg"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   993
    "Modified (comment): / 04-08-2017 / 11:16:52 / cg"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   994
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   995
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   996
signedDoubleWordAt:index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   997
    "return the 4-bytes starting at index as a (signed) Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   998
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   999
     The value is retrieved MSB-first, if the msb-arg is true;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1000
     LSB-first otherwise."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1001
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1002
    ^ self signedInt32At:index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1003
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1004
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1005
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1006
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1007
     b := ByteArray withAll:#(1 2 3 4).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1008
     (b signedDoubleWordAt:1 MSB:true) printStringRadix:16.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1009
     (b signedDoubleWordAt:1 MSB:false) printStringRadix:16
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1010
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1011
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1012
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1013
signedDoubleWordAt:index put:value
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1014
    "set the 4-bytes starting at index from the signed Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1015
     The index is a smalltalk index (i.e. 1-based).
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1016
     The value is stored in the machine's natural byte order.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1017
     This may be worth a primitive."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1018
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1019
    ^ self signedInt32At:index put:value MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1020
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1021
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1022
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1023
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1024
     b signedDoubleWordAt:1 put:-1.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1025
     (b doubleWordAt:1) printStringRadix:16
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1026
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1027
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1028
    "Modified: / 01-07-1996 / 21:11:39 / cg"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1029
    "Modified (comment): / 04-08-2017 / 11:16:56 / cg"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1030
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1031
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1032
signedDoubleWordAt:index put:value MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1033
    "set the 4-bytes starting at index from the signed Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1034
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1035
     Depending on msb, the value is stored MSB-first or LSB-first.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1036
     This may be worth a primitive."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1037
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1038
    ^ self signedInt32At:index put:value MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1039
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1040
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1041
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1042
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1043
     b signedDoubleWordAt:1 put:-1.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1044
     (b doubleWordAt:1) printStringRadix:16
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1045
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1046
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1047
    "Modified: 1.7.1996 / 21:11:46 / cg"
15087
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1048
!
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1049
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1050
signedLongAt:index
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1051
    "return the 4-bytes starting at index as a signed Integer.
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1052
     The index is a smalltalk index (i.e. 1-based).
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1053
     The value is retrieved in the machine's natural byte order."
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1054
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1055
    ^ self signedInt32At:index
15087
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1056
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1057
    "
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1058
     |b|
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1059
     b := ByteArray new:4.
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1060
     b unsignedLongAt:1 put:16rFFFFFFFF.
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1061
     b signedLongAt:1
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1062
    "
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1063
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1064
    "Modified: 1.7.1996 / 21:14:38 / cg"
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1065
!
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1066
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1067
signedLongAt:index put:newValue
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1068
    "store a 4-bytes signed value starting at index.
15087
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1069
     The index is a smalltalk index (i.e. 1-based).
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1070
     The value is in the machine's natural byte order."
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1071
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1072
    ^ self signedInt32At:index put:newValue
15087
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1073
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1074
    "
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1075
     |b|
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1076
     b := ByteArray new:4.
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1077
     b signedLongAt:1 put:-1.
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1078
     b unsignedLongAt:1
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1079
    "
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1080
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1081
    "Modified: 1.7.1996 / 21:14:38 / cg"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1082
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1083
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1084
signedWordAt:index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1085
    "return the 2-bytes starting at index as a signed Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1086
     The index is a smalltalk index (i.e. 1-based).
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1087
     The value is retrieved in the machine's natural byte order.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1088
     This may be worth a primitive."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1089
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1090
    ^ (self unsignedInt16At:index MSB:IsBigEndian) signExtendedShortValue
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1091
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1092
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1093
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1094
     b := ByteArray new:2.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1095
     b wordAt:1 put:16rFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1096
     b signedWordAt:1
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1097
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1098
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1099
    "Modified: / 01-07-1996 / 21:14:38 / cg"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1100
    "Modified (comment): / 04-08-2017 / 11:17:02 / cg"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1101
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1102
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1103
signedWordAt:index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1104
    "return the 2-bytes starting at index as a signed Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1105
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1106
     The value is retrieved MSB-first if the msb-arg is true,
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1107
     LSB-first otherwise.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1108
     This may be worth a primitive."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1109
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1110
    ^ (self unsignedInt16At:index MSB:msb) signExtendedShortValue
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1111
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1112
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1113
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1114
     b := ByteArray new:2.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1115
     b wordAt:1 put:16r0080.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1116
     b signedWordAt:1 MSB:true.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1117
     b signedWordAt:1 MSB:false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1118
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1119
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1120
    "Modified: 1.7.1996 / 21:15:57 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1121
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1122
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1123
signedWordAt:byteIndex put:anInteger
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1124
    "set the 2-bytes starting at index from the signed Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1125
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1126
     The stored value must be in the range -32768 .. +32676.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1127
     The value is stored in the machine's natural byteorder."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1128
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1129
    ^ self signedInt16At:byteIndex put:anInteger MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1130
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1131
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1132
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1133
     b := ByteArray new:6.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1134
     b shortAt:1 put:-1.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1135
     b shortAt:3 put:-2.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1136
     b shortAt:5 put:0.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1137
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1138
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1139
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1140
    "Modified: / 1.7.1996 / 21:12:07 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1141
    "Modified: / 5.3.1998 / 11:01:30 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1142
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1143
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1144
signedWordAt:byteIndex put:anInteger MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1145
    "set the 2-bytes starting at index from the signed Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1146
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1147
     The stored value must be in the range -32768 .. +32676.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1148
     The value is stored MSB-first, if the msb-arg is true;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1149
     LSB-first otherwise."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1150
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1151
    ^ self signedInt16At:byteIndex put:anInteger MSB:msb
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1152
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1153
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1154
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1155
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1156
     b signedWordAt:1 put:-1.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1157
     b signedWordAt:3 put:-2.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1158
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1159
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1160
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1161
    "Modified: 1.7.1996 / 21:12:13 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1162
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1163
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1164
unsignedLongAt:index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1165
    "return the 4-bytes starting at index as an (unsigned) Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1166
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1167
     The value is retrieved in the machine's natural byte order.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1168
     Subclasses may redefine this for better performance.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1169
     Same as doubleWordAt: for protocol completeness"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1170
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1171
    ^ self unsignedInt32At:index MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1172
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1173
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1174
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1175
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1176
     b := ByteArray withAll:#(1 2 3 4).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1177
     (b unsignedLongAt:1) printStringRadix:16
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1178
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1179
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1180
    "Created: / 5.3.1998 / 11:56:53 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1181
    "Modified: / 5.3.1998 / 14:58:48 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1182
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1183
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1184
unsignedLongAt:index bigEndian:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1185
    "return the 4-bytes starting at index as an (unsigned) Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1186
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1187
     The value is retrieved MSB-first, if the msb-arg is true;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1188
     LSB-first otherwise.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1189
     Subclasses may redefine this for better performance.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1190
     Same as doubleWordAt:MSB: for protocol completeness"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1191
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1192
    ^ self unsignedInt32At:index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1193
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1194
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1195
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1196
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1197
     b := ByteArray withAll:#(1 2 3 4).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1198
     (b unsignedLongAt:1 bigEndian:true) printStringRadix:16.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1199
     (b unsignedLongAt:1 bigEndian:false) printStringRadix:16
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1200
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1201
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1202
    "Modified: / 21.1.1998 / 17:42:30 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1203
    "Created: / 5.3.1998 / 11:46:05 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1204
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1205
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1206
unsignedLongAt:index put:value
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1207
    "set the 4-bytes starting at index from the (unsigned) Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1208
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1209
     The value should be in the range 0 to 16rFFFFFFFF
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1210
     (for negative values, the stored value is not defined).
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1211
     The value is stored in the machine's natural byte order.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1212
     Subclasses may redefine this for better performance.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1213
     Same as doubleWordAt:put: for protocol completeness"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1214
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1215
    ^ self unsignedInt32At:index put:value MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1216
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1217
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1218
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1219
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1220
     b unsignedLongAt:1 put:16r04030201.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1221
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1222
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1223
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1224
    "Created: / 05-03-1998 / 11:57:44 / stefan"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1225
    "Modified: / 05-03-1998 / 14:58:59 / stefan"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1226
    "Modified (comment): / 04-08-2017 / 11:17:11 / cg"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1227
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1228
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1229
unsignedLongAt:index put:aNumber bigEndian:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1230
    "set the 4-bytes starting at index from the (unsigned) Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1231
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1232
     The value must be in the range 0 to 16rFFFFFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1233
     The value is stored MSB-first if msb is true; LSB-first otherwise.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1234
     Subclasses may redefine this for better performance.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1235
     Same as doubleWordAt:put:MSB: for protocol completeness"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1236
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1237
    ^ self unsignedInt32At:index put:aNumber MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1238
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1239
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1240
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1241
     b := ByteArray new:8.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1242
     b unsignedLongAt:1 put:16r04030201 bigEndian:true.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1243
     (b unsignedLongAt:1 bigEndian:false) printStringRadix:16
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1244
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1245
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1246
    "Modified: / 21.1.1998 / 17:43:34 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1247
    "Created: / 5.3.1998 / 11:43:53 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1248
    "Modified: / 5.3.1998 / 11:47:30 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1249
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1250
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1251
unsignedLongLongAt:index bigEndian:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1252
    "return the 8-bytes starting at index as an (unsigned) Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1253
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1254
     Depending on msb, the value is retrieved MSB or LSB-first."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1255
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1256
    ^ self unsignedInt64At:index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1257
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1258
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1259
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1260
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1261
     b := ByteArray withAll:#(1 2 3 4 5 6 7 8).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1262
     (b unsignedLongLongAt:1 bigEndian:false) printStringRadix:16
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1263
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1264
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1265
    "Modified: / 5.11.1996 / 14:06:21 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1266
    "Modified: / 5.3.1998 / 14:04:44 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1267
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1268
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1269
unsignedLongLongAt:index put:anInteger
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1270
    "set the 8-bytes starting at index from the (unsigned) Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1271
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1272
     The value must be in the range 0 to 16rFFFFFFFFFFFFFFFF.
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1273
     The value is stored in the machine's natural byte order."
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1274
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1275
    ^ self unsignedInt64At:index put:anInteger MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1276
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1277
    "Created: / 05-03-1998 / 14:44:00 / stefan"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1278
    "Modified (comment): / 04-08-2017 / 11:17:23 / cg"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1279
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1280
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1281
unsignedLongLongAt:index put:anInteger bigEndian:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1282
    "set the 8-bytes starting at index from the (unsigned) Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1283
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1284
     The value must be in the range 0 to 16rFFFFFFFFFFFFFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1285
     Depending on msb, the value is stored MSB-first or LSB-first."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1286
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1287
    ^ self unsignedInt64At:index put:anInteger MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1288
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1289
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1290
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1291
     b := ByteArray new:8.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1292
     b unsignedLongLongAt:1 put:16r0807060504030201 bigEndian:false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1293
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1294
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1295
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1296
    "Created: / 5.3.1998 / 14:06:02 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1297
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1298
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1299
unsignedShortAt:index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1300
    "return the 2-bytes starting at index as an (unsigned) Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1301
     The index is a smalltalk index (i.e. 1-based).
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1302
     The value is retrieved in the machine's natural byte order
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1303
     Subclasses may redefine this for better performance.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1304
     This is the ST80 equivalent of #wordAt:"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1305
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1306
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1307
    ^ self unsignedInt16At:index MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1308
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1309
    "Created: / 05-03-1998 / 11:38:25 / stefan"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1310
    "Modified: / 05-03-1998 / 14:59:25 / stefan"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1311
    "Modified (comment): / 04-08-2017 / 11:17:28 / cg"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1312
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1313
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1314
unsignedShortAt:index bigEndian:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1315
    "return the 2-bytes starting at index as an (unsigned) Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1316
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1317
     The value is retrieved MSB-first (high 8 bits at lower index) if msb is true;
21437
9503363c3f3f #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 21380
diff changeset
  1318
     LSB-first (i.e. low 8-bits at lower byte index) if it's false)"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1319
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1320
    ^ self unsignedInt16At:index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1321
21437
9503363c3f3f #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 21380
diff changeset
  1322
    "Modified: / 21-01-1998 / 17:46:07 / cg"
9503363c3f3f #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 21380
diff changeset
  1323
    "Created: / 05-03-1998 / 11:49:29 / stefan"
9503363c3f3f #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 21380
diff changeset
  1324
    "Modified (comment): / 13-02-2017 / 20:34:05 / cg"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1325
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1326
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1327
unsignedShortAt:index put:value
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1328
    "set the 2-bytes starting at index from the (unsigned) Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1329
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1330
     The stored value must be in the range 0 .. 16rFFFF.
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1331
     The value is stored in the machine's natural byteorder."
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1332
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1333
    ^ self unsignedInt16At:index put:value
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1334
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1335
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1336
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1337
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1338
     b unsignedShortAt:1 put:16r0102.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1339
     b unsignedShortAt:3 put:16r0304.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1340
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1341
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1342
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1343
    "Created: / 05-03-1998 / 11:54:52 / stefan"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1344
    "Modified: / 05-03-1998 / 14:59:38 / stefan"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1345
    "Modified (comment): / 04-08-2017 / 11:17:31 / cg"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1346
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1347
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1348
unsignedShortAt:index put:value bigEndian:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1349
    "set the 2-bytes starting at index from the (unsigned) Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1350
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1351
     The stored value must be in the range 0 .. 16rFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1352
     The value is stored LSB-first (i.e. the low 8bits are stored at the
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1353
     lower index) if msb is false, MSB-first otherwise"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1354
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1355
    ^ self unsignedInt16At:index put:value MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1356
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1357
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1358
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1359
     b := ByteArray new:8.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1360
     b unsignedShortAt:1 put:16r0102 bigEndian:false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1361
     b unsignedShortAt:3 put:16r0304 bigEndian:false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1362
     b unsignedShortAt:5 put:16r0102 bigEndian:true.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1363
     b unsignedShortAt:7 put:16r0304 bigEndian:true.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1364
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1365
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1366
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1367
    "Modified: / 21.1.1998 / 17:48:15 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1368
    "Modified: / 5.3.1998 / 11:52:28 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1369
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1370
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1371
wordAt:index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1372
    "return the 2-bytes starting at index as an (unsigned) Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1373
     The index is a smalltalk index (i.e. 1-based).
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1374
     The value is retrieved in the machine's natural byte order
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1375
     Subclasses may redefine this for better performance."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1376
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1377
    ^ self unsignedInt16At:index MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1378
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1379
    "Modified: / 05-03-1998 / 14:59:51 / stefan"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1380
    "Modified (comment): / 04-08-2017 / 11:17:35 / cg"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1381
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1382
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1383
wordAt:index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1384
    "return the 2-bytes starting at index as an (unsigned) Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1385
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1386
     The value is retrieved MSB (high 8 bits at lower index) if msb is true;
21437
9503363c3f3f #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 21380
diff changeset
  1387
     LSB-first (i.e. low 8-bits at lower byte index) if it's false.
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1388
     Notice:
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1389
	the index is a byte index; thus, this allows for unaligned access to
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1390
	words on any boundary.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1391
     Question: should it be retrieve signed values ? (see ByteArray>>signedWordAt:)"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1392
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1393
    ^ self unsignedInt16At:index MSB:msb
21437
9503363c3f3f #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 21380
diff changeset
  1394
9503363c3f3f #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 21380
diff changeset
  1395
    "Modified (comment): / 13-02-2017 / 20:34:09 / cg"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1396
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1397
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1398
wordAt:index put:value
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1399
    "set the 2-bytes starting at index from the (unsigned) Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1400
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1401
     The stored value must be in the range 0 .. 16rFFFF.
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1402
     The value is stored in the machine's natural byteorder.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1403
     Question: should it accept signed values ? (see ByteArray>>signedWordAt:put:)"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1404
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1405
    ^ self unsignedInt16At:index put:value MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1406
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1407
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1408
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1409
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1410
     b wordAt:1 put:16r0102.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1411
     b wordAt:3 put:16r0304.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1412
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1413
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1414
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1415
    "Modified: / 05-03-1998 / 15:00:03 / stefan"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1416
    "Modified (comment): / 04-08-2017 / 11:17:39 / cg"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1417
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1418
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1419
wordAt:index put:value MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1420
    "set the 2-bytes starting at index from the (unsigned) Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1421
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1422
     The stored value must be in the range 0 .. 16rFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1423
     The value is stored LSB-first (i.e. the low 8bits are stored at the
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1424
     lower index) if msb is false, MSB-first otherwise.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1425
     Question: should it accept signed values ? (see ByteArray>>signedWordAt:put:)"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1426
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1427
    ^ self unsignedInt16At:index put:value MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1428
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1429
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1430
     b := ByteArray new:8.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1431
     b wordAt:1 put:16r0102 MSB:false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1432
     b wordAt:3 put:16r0304 MSB:false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1433
     b wordAt:5 put:16r0102 MSB:true.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1434
     b wordAt:7 put:16r0304 MSB:true.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1435
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1436
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1437
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1438
    "Modified: / 21.1.1998 / 17:48:15 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1439
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1440
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1441
wordAtWordIndex:int16Index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1442
    "return the unsigned short (uint16) at index, anInteger.
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1443
     Fetching in the machine's natural byte order.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1444
     Indices are 1-based and scaled as appropriate to allow
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1445
     accessing the memory as an array of word entries.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1446
     (i.e. indices are 1, 2, ...)"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1447
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1448
    ^ self unsignedInt16At:int16Index MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1449
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1450
    "Created: / 21-01-1998 / 17:48:26 / cg"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1451
    "Modified: / 05-03-1998 / 15:00:16 / stefan"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1452
    "Modified (comment): / 04-08-2017 / 11:17:43 / cg"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1453
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1454
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1455
wordAtWordIndex:int16Index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1456
    "return the unsigned short (uint16) at index, anInteger.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1457
     Fetching is MSB if msb is true, LSB otherwise.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1458
     Indices are 1-based and scaled as appropriate to allow
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1459
     accessing the memory as an array of word entries.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1460
     (i.e. indices are 1, 2, ...)"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1461
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1462
    ^ self unsignedInt16At:((int16Index - 1) * 2 + 1) MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1463
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1464
    "Created: / 21.1.1998 / 17:48:30 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1465
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1466
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1467
wordAtWordIndex:int16Index put:anInteger
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1468
    "set the unsigned short (uint16) at index, anInteger.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1469
     Storing in the machine's natural byte order.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1470
     Indices are 1-based and scaled as appropriate to allow
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1471
     accessing the memory as an array of word entries.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1472
     (i.e. indices are 1, 2, ...)"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1473
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1474
    ^ self unsignedInt16At:int16Index put:anInteger MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1475
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1476
    "Created: / 21.1.1998 / 17:48:34 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1477
    "Modified: / 5.3.1998 / 15:00:27 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1478
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1479
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1480
wordAtWordIndex:int16Index put:anInteger MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1481
    "set the short at index, anInteger.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1482
     Storing is MSB if msb is true, LSB otherwise.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1483
     Indices are 1-based and scaled as appropriate to allow
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1484
     accessing the memory as an array of word entries.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1485
     (i.e. indices are 1, 2, ...)"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1486
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1487
    ^ self unsignedInt16At:((int16Index - 1) * 2 + 1) put:anInteger MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1488
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1489
    "Created: / 21.1.1998 / 17:48:38 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1490
! !
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1491
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1492
!UninterpretedBytes methodsFor:'Compatibility-Squeak'!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1493
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1494
copyFromByteArray:aByteArray
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1495
    "copy as much as possible from aByteArray"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1496
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1497
    self replaceBytesFrom:1 to:(self size min:aByteArray size) with:aByteArray startingAt:1
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  1498
! !
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  1499
9185
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1500
!UninterpretedBytes methodsFor:'Compatibility-V''Age'!
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1501
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1502
uint32At:zeroBasedIndex
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1503
    "return the 4-bytes starting at index as (unsigned) Integer.
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1504
     WARNING: The index is a C index (i.e. 0-based).
19301
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1505
     The value is retrieved in the machine's natural byte order.
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1506
     Similar to unsignedInt32At:, except for the index base"
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1507
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1508
    ^ self unsignedInt32At:zeroBasedIndex+1
9185
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1509
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1510
    "
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1511
     |b|
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1512
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1513
     b := ByteArray withAll:#(0 0 0 0).
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1514
     b uint32At:0 put:16r12345678.
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1515
     b uint32At:0.
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1516
     b
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1517
    "
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1518
!
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1519
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1520
uint32At:zeroBasedIndex put:anInteger
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1521
    "set the 4-bytes starting at index to the value given by (unsigned) Integer.
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1522
     WARNING: The index is a C index (i.e. 0-based).
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1523
     The value is stored in the machine's natural byte order.
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1524
     Similar to unsignedInt32At:put:, except for the index base"
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1525
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1526
    ^ self unsignedInt32At:zeroBasedIndex+1 put:anInteger
9185
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1527
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1528
    "
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1529
     |b|
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1530
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1531
     b := ByteArray withAll:#(0 0 0 0).
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1532
     b uint32At:0 put:16r12345678.
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1533
     b
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1534
    "
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1535
! !
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1536
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1537
!UninterpretedBytes methodsFor:'accessing-128bit ints'!
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1538
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1539
signedInt128At:index MSB:msb
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1540
    "return the 16-bytes starting at index as a signed Integer.
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1541
     The index is a smalltalk index (i.e. 1-based).
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1542
     The value is retrieved in the given byte order.
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1543
     This may be worth a primitive."
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1544
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1545
    |w|
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1546
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1547
    w := self unsignedInt128At:index MSB:msb.
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1548
    (w > (16r7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF)) ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1549
	^ w - (16r100000000000000000000000000000000)
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1550
    ].
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1551
    ^ w
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1552
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1553
    "
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1554
     |b|
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1555
     b := ByteArray new:16.
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1556
     b unsignedInt128At:1 put:16rFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MSB:true.
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1557
     (b signedInt128At:1 MSB:true)
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1558
    "
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1559
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1560
    "Created: / 04-08-2017 / 11:27:31 / cg"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1561
!
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1562
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1563
signedInt128At:byteIndex put:anInteger MSB:msb
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1564
    "store a signed 128bit integer.
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1565
     The index is a smalltalk index (i.e. 1-based)."
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1566
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1567
    |v|
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1568
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1569
    v := anInteger.
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1570
    anInteger < 0 ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1571
	v := v + 16r100000000000000000000000000000000
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1572
    ].
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1573
    self unsignedInt128At:byteIndex put:v MSB:msb.
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1574
    ^ anInteger
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1575
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1576
    "
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1577
     |b|
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1578
     b := ByteArray new:16.
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1579
     b signedInt128At:1 put:-1 MSB:true.
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1580
     (b unsignedInt128At:1 MSB:true)
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1581
    "
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1582
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1583
    "Created: / 04-08-2017 / 11:08:59 / cg"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1584
!
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1585
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1586
unsignedInt128At:byteIndex MSB:msb
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1587
    "return the 16-bytes starting at index as an unsigned integer.
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1588
     The index is a smalltalk index (i.e. 1-based).
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1589
     Depending on msb, the value is retrieved MSB or LSB-first."
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1590
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1591
    |l
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1592
     bIdx  "{ Class: SmallInteger }"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1593
     delta "{ Class: SmallInteger }"|
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1594
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1595
    l := LargeInteger basicNew numberOfDigits:16.
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1596
    msb ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1597
	bIdx := byteIndex + 15.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1598
	delta := -1
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1599
    ] ifFalse:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1600
	bIdx := byteIndex.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1601
	delta := 1
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1602
    ].
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1603
    1 to:16 do:[:i |
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1604
	l digitAt:i put:(self byteAt:bIdx).
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1605
	bIdx := bIdx + delta
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1606
    ].
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1607
    ^ l compressed
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1608
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1609
    "
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1610
     |b|
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1611
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1612
     b := ByteArray withAll:#(1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16).
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1613
     (b unsignedInt128At:1 MSB:false) printStringRadix:16
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1614
    "
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1615
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1616
    "Created: / 04-08-2017 / 11:12:22 / cg"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1617
!
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1618
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1619
unsignedInt128At:byteIndex put:anInteger MSB:msb
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1620
    "set the 18-bytes starting at index from the (unsigned) Integer value.
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1621
     The index is a smalltalk index (i.e. 1-based).
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1622
     The value must be in the range 0 to 16rFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF.
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1623
     Depending on msb, the value is stored MSB-first or LSB-first."
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1624
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1625
    |bIdx  "{ Class: SmallInteger }"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1626
     delta "{ Class: SmallInteger }"|
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1627
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1628
    ((anInteger < 0)
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1629
     or:[anInteger > 16rFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF]) ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1630
	^ self elementBoundsError:anInteger
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1631
    ].
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1632
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1633
    msb ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1634
	bIdx := byteIndex + 15.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1635
	delta := -1
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1636
    ] ifFalse:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1637
	bIdx := byteIndex.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1638
	delta := 1
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1639
    ].
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1640
    1 to:16 do:[:i |
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1641
	self byteAt:bIdx put:(anInteger digitAt:i).
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1642
	bIdx := bIdx + delta.
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1643
    ].
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1644
    ^ anInteger
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1645
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1646
    "
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1647
     |b|
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1648
     b := ByteArray new:16.
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1649
     b unsignedInt128At:1 put:16r100F0E0D0C0B0A090807060504030201 MSB:false.
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1650
     b inspect
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1651
    "
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1652
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1653
    "Created: / 04-08-2017 / 11:11:02 / cg"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1654
! !
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1655
16796
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1656
!UninterpretedBytes methodsFor:'accessing-arbitrary-long ints'!
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1657
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1658
nativeIntAt:index
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1659
    "return the 4- or 8-bytes (depending on the native integer/pointer size)
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1660
     starting at index as a signed Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1661
     The index is a smalltalk index (i.e. 1-based).
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1662
     The value is retrieved in the machine's natural byte order,
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1663
     therefore, this should only be used for byte-data which is
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1664
     only used inside this machine."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1665
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1666
    |w|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1667
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1668
%{
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1669
    /*
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1670
     * handle the most common cases fast ...
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1671
     */
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1672
    if (__isSmallInteger(index)) {
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1673
	unsigned char *cp;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1674
	INT sz;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1675
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1676
	__fetchBytePointerAndSize__(self, &cp, &sz);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1677
	if (cp) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1678
	    unsigned INT idx = ((unsigned INT)__intVal(index)) - 1;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1679
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1680
	    if ((idx+(sizeof(INT)-1)) < sz) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1681
		cp += idx;
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1682
#if defined(__i386__)
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1683
		/*
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1684
		 * aligned or not, we don't care (i386 can do both)
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1685
		 */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1686
		{
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1687
		    INT iVal = ((INT *)cp)[0];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1688
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1689
		    RETURN (__MKINT(iVal));
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1690
		}
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1691
#else
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1692
		/*
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1693
		 * aligned
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1694
		 */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1695
		if (((INT)cp & (sizeof(INT)-1)) == 0) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1696
		    INT iVal = ((INT *)cp)[0];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1697
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1698
		    RETURN (__MKINT(iVal));
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1699
		}
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1700
#endif
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1701
	    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1702
	}
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1703
    }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1704
%}.
19402
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1705
    SmallInteger maxBytes == 8 ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1706
	^ self signedInt64At:index
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1707
    ].
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1708
    ^ self signedInt32At:index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1709
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1710
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1711
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1712
     b := ByteArray new:8.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1713
     b nativeIntAt:1 put:SmallInteger maxVal.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1714
     b nativeIntAt:1
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1715
    "
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1716
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1717
    "Modified (comment): / 04-08-2017 / 11:18:01 / cg"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1718
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1719
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1720
nativeIntAt:index put:value
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1721
    "set the 4- or 8-bytes (depending on INT-/pointer size) starting at index from the signed Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1722
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1723
     The value is stored in the machine's natural byte order."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1724
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1725
%{  /* NOCONTEXT */
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1726
    /*
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1727
     * handle the most common cases fast ...
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1728
     */
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1729
    if (__isSmallInteger(index)) {
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1730
	unsigned char *cp;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1731
	INT sz;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1732
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1733
	__fetchBytePointerAndSize__(self, &cp, &sz);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1734
	if (cp) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1735
	    unsigned INT idx = ((unsigned INT)__intVal(index)) - 1;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1736
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1737
	    if ((idx+(sizeof(INT)-1)) < sz) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1738
		cp += idx;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1739
		/*
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1740
		 * aligned
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1741
		 */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1742
		if (((INT)cp & (sizeof(INT)-1)) == 0) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1743
		    INT __v;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1744
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1745
		    if (__isSmallInteger(value)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1746
			// how about a range check?
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1747
			((INT *)cp)[0] = (INT)(__intVal(value));
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1748
			RETURN (value);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1749
		    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1750
		    if ((__v = __signedLongIntVal(value)) != 0) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1751
			// how about a range check?
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1752
			((INT *)cp)[0] = (INT)(__v);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1753
			RETURN (value);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1754
		    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1755
		}
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1756
	    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1757
	}
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1758
    }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1759
%}.
19402
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1760
    SmallInteger maxBytes == 8 ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1761
	^ self signedInt64At:index put:value MSB:IsBigEndian
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1762
    ].
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1763
    ^ self signedInt32At:index put:value MSB:IsBigEndian
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1764
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1765
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1766
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1767
     b := ByteArray new:8.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1768
     b nativeIntAt:1 put:SmallInteger maxVal.
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1769
     (b nativeIntAt:1)
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1770
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1771
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1772
19402
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1773
signedIntegerAt:index length:len bigEndian:bigEndian
19197
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1774
    "return the n-byte signed integer starting at index.
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1775
     With n=1, this returns the single signed byte's value,
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1776
     n=2, a signed short, n=4 a signed int etc.
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1777
     Useful to extract arbitrary long integers"
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1778
19402
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1779
    |val highByte
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1780
     iIndex "{ Class:SmallInteger }"
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1781
     last "{ Class:SmallInteger }"|
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1782
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1783
    iIndex := index.
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1784
    last := iIndex + len - 1.
19197
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1785
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1786
    val := 0.
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1787
    bigEndian ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1788
	highByte := self at:iIndex.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1789
	iIndex to:last do:[:i |
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1790
	    val := (val<<8) + (self byteAt:i)
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1791
	]
19197
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1792
    ] ifFalse:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1793
	highByte := self at:last.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1794
	last to:iIndex by:-1 do:[:i |
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1795
	    val := (val<<8) + (self byteAt:i)
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1796
	]
19197
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1797
    ].
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1798
    (highByte bitTest:16r80) ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1799
	^ val - (1 bitShift:(len*8))
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1800
    ].
19197
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1801
    ^ val
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1802
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1803
    "
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1804
     |b|
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1805
     b := #[ 16r01 16rFF 16r00 16r04 16r05 ].
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1806
     (b signedIntegerAt:2 length:2 bigEndian:false). ' -> 255 (00FF) '.
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1807
     (b signedIntegerAt:2 length:2 bigEndian:true).  ' -> -256 (FF00) '.
19197
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1808
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1809
     b := #[ 16r01 16r00 16rFF 16r04 16r05 ].
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1810
     (b signedIntegerAt:2 length:2 bigEndian:false). ' -> -256 (FF00) '.
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1811
     (b signedIntegerAt:2 length:2 bigEndian:true).  ' -> 255 (00FF) '.
19197
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1812
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1813
     b := #[ 16r01 16r7F 16r00 16r04 16r05 ].
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1814
     (b signedIntegerAt:2 length:2 bigEndian:false). ' -> 127 (007F) '.
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1815
     (b signedIntegerAt:2 length:2 bigEndian:true).  ' -> 32512 (7F00) '.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1816
    "
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1817
19197
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1818
    "
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1819
     |b|
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1820
     b := #[ 16r01 16r02 16r03 16r04 16r05 ].
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1821
     (b signedIntegerAt:2 length:4 bigEndian:false).
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1822
     (b signedIntegerAt:2 length:4 bigEndian:true).
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1823
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1824
     b := #[ 16r01 16r82 16r03 16r04 16r05 ].
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1825
     (b signedIntegerAt:2 length:4 bigEndian:false).
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1826
     (b signedIntegerAt:2 length:4 bigEndian:true).
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1827
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1828
     b := #[ 16r01 16r82 16r03 16r04 16r85 ].
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1829
     (b signedIntegerAt:2 length:4 bigEndian:false).
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1830
     (b signedIntegerAt:2 length:4 bigEndian:true).
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1831
    "
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1832
!
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1833
19402
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1834
unsignedIntegerAt:index length:len bigEndian:bigEndian
16796
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1835
    "return the n-byte unsigned integer starting at index.
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1836
     With n=1, this returns the single byte's value,
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1837
     n=2, an unsigned short, n=4 an unsigned int32 etc.
16796
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1838
     Useful to extract arbitrary long integers"
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1839
19402
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1840
    |val
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1841
     iIndex "{ Class:SmallInteger }"
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1842
     last "{ Class:SmallInteger }"|
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1843
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1844
    iIndex := index.
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1845
    last := iIndex + len - 1.
16796
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1846
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1847
    val := 0.
18346
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
  1848
    bigEndian ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1849
	iIndex to:last do:[:i |
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1850
	    val := (val<<8) + (self byteAt:i)
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1851
	]
18346
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
  1852
    ] ifFalse:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1853
	last to:iIndex by:-1 do:[:i |
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1854
	    val := (val<<8) + (self byteAt:i)
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1855
	]
16796
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1856
    ].
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1857
    ^ val
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1858
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1859
    "
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1860
     |b|
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1861
     b := #[ 16r01 16r02 16r03 16r04 16r05 ].
18346
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
  1862
     (b unsignedIntegerAt:2 length:4 bigEndian:false).
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
  1863
     (b unsignedIntegerAt:2 length:4 bigEndian:true).
16796
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1864
    "
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1865
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1866
    "Modified (comment): / 04-08-2017 / 11:14:21 / cg"
19301
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1867
!
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1868
19402
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1869
unsignedIntegerAt:index put:newValue length:len bigEndian:bigEndian
19301
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1870
    "store the n-byte unsigned integer starting at index.
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1871
     With n=1, this stores a single byte's value,
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1872
     n=2, an unsigned short, n=4 an unsigned int32 etc.
19301
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1873
     Useful to replace arbitrary long integers"
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1874
19402
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1875
    |val
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1876
     iIndex "{ Class:SmallInteger }"
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1877
     last "{ Class:SmallInteger }"|
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1878
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1879
    iIndex := index.
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1880
    last := iIndex + len - 1.
19301
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1881
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1882
    val := newValue.
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1883
    bigEndian ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1884
	iIndex to:last do:[:i |
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1885
	    self byteAt:i put:(val bitAnd:16rFF).
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1886
	    val := val bitShift:-8.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1887
	]
19301
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1888
    ] ifFalse:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1889
	last to:iIndex by:-1 do:[:i |
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1890
	    self byteAt:i put:(val bitAnd:16rFF).
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1891
	    val := val bitShift:-8.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1892
	]
19301
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1893
    ].
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1894
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1895
    "
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1896
     |b|
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1897
     b := #[ 16r01 16r02 16r03 16r04 16r05 ] copy.
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1898
     (b unsignedIntegerAt:2 put:16r11223344 length:3 bigEndian:false). b.
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1899
     (b unsignedIntegerAt:2 put:16r11223344 length:3 bigEndian:true). b.
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1900
    "
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1901
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1902
    "Modified (comment): / 04-08-2017 / 11:14:32 / cg"
16796
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1903
! !
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1904
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1905
!UninterpretedBytes methodsFor:'accessing-bytes'!
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1906
4422
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1907
bcdByteAt:index
13724
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  1908
    "return the bcd-value for a byte at index in the range 0..99.
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  1909
     BCD treats nibbles (4-bit) as an encoded decimal number's digits
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  1910
     (i.e. the value n is encoded as: ((n // 10) * 16) + (n \\ 10)"
4422
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1911
4425
a10011c1b6eb bcd support - again.
Claus Gittinger <cg@exept.de>
parents: 4422
diff changeset
  1912
    ^ (self byteAt:index) decodeFromBCD
4422
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1913
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1914
    "
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1915
     #[ 16r55 ] bcdByteAt:1
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1916
     #[ 16r99 ] bcdByteAt:1
19352
3c5b0c74be2e #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19351
diff changeset
  1917
     #[ 16rAA ] bcdByteAt:1
4422
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1918
    "
13724
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  1919
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  1920
    "Modified (comment): / 26-09-2011 / 11:57:33 / cg"
4422
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1921
!
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1922
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1923
bcdByteAt:index put:aNumber
13724
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  1924
    "set the byte at index as bcd-value in the range 0..99.
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  1925
     BCD treats nibbles (4-bit) as an encoded decimal number's digits
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  1926
     (i.e. the value n is encoded as: ((n // 10) * 16) + (n \\ 10)"
4422
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1927
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1928
    (aNumber between:0 and:99) ifFalse:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1929
	self elementBoundsError:aNumber.
4422
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1930
    ].
4425
a10011c1b6eb bcd support - again.
Claus Gittinger <cg@exept.de>
parents: 4422
diff changeset
  1931
    ^ self byteAt:index put:aNumber encodeAsBCD
4422
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1932
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1933
    "
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1934
     (((ByteArray new:1) bcdByteAt:1 put:55; yourself) at:1) hexPrintString
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1935
     (((ByteArray new:1) bcdByteAt:1 put:99; yourself) at:1) hexPrintString
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1936
     (((ByteArray new:1) bcdByteAt:1 put:100; yourself) at:1) hexPrintString
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1937
     (((ByteArray new:1) bcdByteAt:1 put:-1; yourself) at:1) hexPrintString
4422
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1938
    "
13724
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  1939
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  1940
    "Modified (comment): / 26-09-2011 / 11:57:36 / cg"
21377
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  1941
    "Modified: / 07-02-2017 / 20:12:04 / stefan"
4422
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1942
!
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1943
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1944
byteAt:byteIndex
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1945
    "return the byte at byteIndex as an unsigned 8 bit value in the range 0..255.
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1946
     The index is a smalltalk index (i.e. 1-based)."
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1947
21377
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  1948
%{ /* NOCONTEXT */
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1949
    if (__isSmallInteger(byteIndex)) {
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1950
	unsigned char *cp;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1951
	INT sz;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1952
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1953
	__fetchBytePointerAndSize__(self, &cp, &sz);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1954
	if (cp) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1955
	    unsigned INT idx = ((unsigned INT)__intVal(byteIndex)) - 1;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1956
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1957
	    if (idx < sz) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1958
		unsigned char ch = cp[idx] & 0xFF;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1959
		RETURN (__mkSmallInteger( ch ));
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1960
	    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1961
	}
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1962
    }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1963
%}.
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1964
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1965
    ^ self at:byteIndex
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1966
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1967
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1968
     |b|
21377
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  1969
     b := String new:3.
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  1970
     b byteAt:1 put:16rFF.
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  1971
     b byteAt:2 put:16r7F.
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  1972
     b byteAt:3 put:16r80.
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1973
     b byteAt:1.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1974
     b byteAt:2.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1975
     b byteAt:3.
21377
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  1976
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  1977
     |b|
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  1978
     b := ExternalBytes new:3.
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  1979
     b byteAt:1 put:16rFF.
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  1980
     b byteAt:2 put:16r7F.
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  1981
     b byteAt:3 put:16r80.
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1982
     b byteAt:1.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1983
     b byteAt:2.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1984
     b byteAt:3.
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1985
    "
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1986
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1987
    "Modified: / 01-07-1996 / 21:13:53 / cg"
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1988
    "Modified (comment): / 26-09-2011 / 11:57:14 / cg"
21377
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  1989
    "Modified (comment): / 07-02-2017 / 19:49:13 / stefan"
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1990
!
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1991
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1992
byteAt:byteIndex put:anInteger
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1993
    "set the byte at byteIndex as an unsigned 8 bit value in the range 0..255.
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1994
     The index is a smalltalk index (i.e. 1-based)."
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1995
21377
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  1996
%{ /* NOCONTEXT */
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1997
    if (__isSmallInteger(byteIndex) && __isSmallInteger(anInteger)) {
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1998
	unsigned char *cp;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1999
	INT sz;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2000
	INT val = __intVal(anInteger);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2001
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2002
	if ( ((unsigned INT)val) <= 0xFF ) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2003
	    __fetchBytePointerAndSize__(self, &cp, &sz);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2004
	    if (cp) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2005
		unsigned INT idx = ((unsigned INT)__intVal(byteIndex)) - 1;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2006
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2007
		if (idx < sz) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2008
		    cp[idx] = val & 0xFF;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2009
		    RETURN (anInteger);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2010
		}
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2011
	    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2012
	}
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2013
    }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2014
%}.
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2015
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2016
    ^ self at:byteIndex put:anInteger
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2017
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2018
    "
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2019
     |b|
21377
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  2020
     b := String new:3.
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2021
     b byteAt:1 put:16rFF.
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2022
     b byteAt:2 put:16r7F.
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2023
     b byteAt:3 put:16r80.
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2024
     b byteAt:1.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2025
     b byteAt:2.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2026
     b byteAt:3.
21377
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  2027
    "
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  2028
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  2029
    "Modified (comment): / 07-02-2017 / 19:32:26 / stefan"
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2030
!
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2031
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2032
signedByteAt:byteIndex
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2033
    "return the byte at byteIndex as a signed 8 bit value in the range -128..+127.
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2034
     The index is a smalltalk index (i.e. 1-based).
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2035
     This may be worth a primitive."
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2036
21377
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  2037
%{ /* NOCONTEXT */
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2038
    /*
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2039
     * handle the most common cases fast ...
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2040
     */
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2041
    if (__isSmallInteger(byteIndex)) {
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2042
	unsigned char *cp;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2043
	INT sz;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2044
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2045
	__fetchBytePointerAndSize__(self, &cp, &sz);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2046
	if (cp) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2047
	    unsigned INT idx = ((unsigned INT)__intVal(byteIndex)) - 1;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2048
	    char ch;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2049
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2050
	    if (idx < sz) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2051
		cp += idx;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2052
		ch = cp[0];
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2053
# ifndef HAS_SIGNED_CHAR
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2054
		if ( (unsigned int)ch >= 0x80 ) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2055
		    ch = ch - 0x100;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2056
		}
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2057
#endif
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2058
		RETURN (__mkSmallInteger( ch ));
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2059
	    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2060
	}
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2061
    }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2062
%}.
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2063
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2064
    ^ (self byteAt:byteIndex) signExtendedByteValue
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2065
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2066
    "
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2067
     |b|
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2068
     b := ByteArray new:3.
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2069
     b at:1 put:16rFF.
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2070
     b at:2 put:16r7F.
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2071
     b at:3 put:16r80.
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2072
     b signedByteAt:1.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2073
     b signedByteAt:2.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2074
     b signedByteAt:3.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2075
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2076
13724
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  2077
    "Modified: / 01-07-1996 / 21:13:53 / cg"
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  2078
    "Modified (comment): / 26-09-2011 / 11:57:14 / cg"
21377
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  2079
    "Modified: / 07-02-2017 / 19:25:03 / stefan"
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2080
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2081
21377
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  2082
signedByteAt:byteIndex put:aSignedByteValue
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  2083
    "set the byte at byteIndex to aSignedByteValue in the range -128 .. 255
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2084
     The index is a smalltalk index (i.e. 1-based).
21377
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  2085
     Return the signedByteValue argument."
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  2086
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  2087
    |b|
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  2088
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  2089
    b := aSignedByteValue.
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  2090
    b < 0 ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2091
	b := 16r100 + b
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2092
    ].
21377
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  2093
    self byteAt:byteIndex put:b.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2094
    ^ aSignedByteValue
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2095
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2096
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2097
     |b|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2098
     b := ByteArray new:2.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2099
     b signedByteAt:1 put:-1.
21377
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  2100
     b at:1.
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  2101
     b signedByteAt:1.
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  2102
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  2103
     |b|
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  2104
     b := ByteArray new:2.
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  2105
     b signedByteAt:1 put:-1.0.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2106
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2107
13724
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  2108
    "Modified: / 01-07-1996 / 21:12:37 / cg"
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  2109
    "Modified (comment): / 26-09-2011 / 11:57:18 / cg"
21377
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  2110
    "Modified (comment): / 07-02-2017 / 20:03:46 / stefan"
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2111
! !
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2112
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2113
!UninterpretedBytes methodsFor:'accessing-floats & doubles'!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2114
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2115
doubleAt:index
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2116
    "return the 8-bytes starting at index as a Float.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2117
     The index is a smalltalk index (i.e. 1-based).
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2118
     Notice, that (currently) ST/X Floats are what Doubles are in ST-80.
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2119
     Notice also, that the bytes are expected to be in this machine's
19629
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2120
     float representation and byte order - if the bytearray originated from another
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2121
     machine, some conversion is usually needed."
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2122
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2123
    |newFloat|
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2124
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2125
%{
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2126
    /*
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2127
     * handle the most common cases fast ...
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2128
     */
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2129
    if (__isSmallInteger(index)) {
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2130
	unsigned char *cp;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2131
	INT sz;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2132
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2133
	__fetchBytePointerAndSize__(self, &cp, &sz);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2134
	if (cp) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2135
	    INT idx = __intVal(index) - 1;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2136
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2137
	    if ((idx >= 0) && ((idx+(sizeof(double)-1)) < sz)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2138
		cp += idx;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2139
		/*
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2140
		 * aligned
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2141
		 */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2142
		if (((INT)cp & (sizeof(double)-1)) == 0) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2143
		    double dVal = ((double *)cp)[0];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2144
		    OBJ f;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2145
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2146
		    __qMKFLOAT(f, dVal);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2147
		    RETURN (f);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2148
		}
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2149
	    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2150
	}
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2151
    }
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2152
%}.
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2153
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2154
    newFloat := Float basicNew.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2155
    1 to:8 do:[:destIndex|
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2156
	newFloat basicAt:destIndex put:(self byteAt:(index - 1 + destIndex))
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2157
    ].
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2158
    ^ newFloat.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2159
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2160
    "
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2161
     |b|
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2162
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2163
     b := ByteArray new:20.
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2164
     b doubleAt:1 put:(Float pi).
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2165
     Transcript showCR:b.
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2166
     Transcript showCR:(b doubleAt:1)
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2167
    "
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2168
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2169
3446
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2170
doubleAt:index MSB:msb
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2171
    "return the 8-bytes starting at index as a Float.
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2172
     The index is a smalltalk index (i.e. 1-based).
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2173
     Notice, that (currently) ST/X Floats are what Doubles are in ST-80.
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2174
     Notice also, that the bytes are expected to be in this machines
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2175
     float representation - if the bytearray originated from another
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2176
     machine, some conversion is usually needed."
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2177
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2178
    |newFloat|
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2179
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
  2180
    msb == IsBigEndian ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2181
	^ self doubleAt:index.
3446
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2182
    ].
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2183
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2184
    newFloat := Float basicNew.
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2185
    1 to:8 do:[:destIndex|
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2186
	newFloat basicAt:(9-destIndex) put:(self byteAt:(index - 1 + destIndex))
3446
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2187
    ].
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2188
    ^ newFloat.
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2189
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2190
    "Created: / 15.5.1998 / 17:21:45 / cg"
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2191
!
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2192
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2193
doubleAt:index put:aFloat
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2194
    "store the value of the argument, aFloat into the receiver
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2195
     starting at index.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2196
     The index is a smalltalk index (i.e. 1-based).
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2197
     Notice, that (currently) ST/X Floats are what Doubles are in ST-80.
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2198
     Notice also, that the bytes are expected to be in this machine's
19629
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2199
     float representation and byte order - if the bytearray originated from another
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2200
     machine, some conversion is usually needed."
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2201
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2202
    |flt|
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2203
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2204
%{
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2205
    /*
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2206
     * handle the most common cases fast ...
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2207
     */
16320
dcb66fff0a89 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15836
diff changeset
  2208
    if (__isSmallInteger(index)) {
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2209
	unsigned char *cp;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2210
	INT sz;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2211
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2212
	__fetchBytePointerAndSize__(self, &cp, &sz);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2213
	if (cp) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2214
	    INT idx = __intVal(index) - 1;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2215
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2216
	    if ((idx >= 0) && ((idx+(sizeof(double)-1)) < sz)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2217
		cp += idx;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2218
		/*
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2219
		 * aligned
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2220
		 */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2221
		if (((INT)cp & (sizeof(double)-1)) == 0) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2222
		    if (__isFloat(aFloat)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2223
			((double *)cp)[0] = __floatVal(aFloat);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2224
			RETURN (aFloat);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2225
		    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2226
		    if (__isShortFloat(aFloat)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2227
			((double *)cp)[0] = (double)(__shortFloatVal(aFloat));
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2228
			RETURN (aFloat);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2229
		    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2230
		    if (__isSmallInteger(aFloat)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2231
			((double *)cp)[0] = (double)(__intVal(aFloat));
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2232
			RETURN (aFloat);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2233
		    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2234
		}
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2235
	    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2236
	}
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2237
    }
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2238
%}.
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2239
16320
dcb66fff0a89 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15836
diff changeset
  2240
    flt := aFloat asFloat.
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2241
    1 to:8 do:[:srcIndex|
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2242
	self byteAt:(index - 1 + srcIndex) put:(flt basicAt:srcIndex)
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2243
    ].
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2244
    ^ aFloat
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2245
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2246
3446
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2247
doubleAt:index put:aFloat MSB:msb
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2248
    "store the value of the argument, aFloat into the receiver
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2249
     starting at index.
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2250
     The index is a smalltalk index (i.e. 1-based).
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2251
     Notice, that (currently) ST/X Floats are what Doubles are in ST-80.
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2252
     Notice also, that the bytes are expected to be in this machine's
3446
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2253
     float representation - if the bytearray originated from another
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2254
     machine, some conversion is usually needed."
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2255
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2256
    |flt|
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2257
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
  2258
    msb == IsBigEndian ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2259
	^ self doubleAt:index put:aFloat.
3446
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2260
    ].
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2261
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2262
    flt := aFloat asFloat.
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2263
    1 to:8 do:[:srcIndex|
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2264
	self byteAt:(index - 1 + srcIndex) put:(flt basicAt:(9-srcIndex))
3446
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2265
    ].
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2266
    ^ aFloat
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2267
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2268
    "Created: / 15.5.1998 / 17:22:27 / cg"
3447
Claus Gittinger <cg@exept.de>
parents: 3446
diff changeset
  2269
    "Modified: / 15.5.1998 / 17:26:29 / cg"
3446
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2270
!
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2271
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2272
floatAt:index
3434
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2273
    "return the 4-bytes starting at index as a ShortFloat.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2274
     The index is a smalltalk index (i.e. 1-based).
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2275
     Notice, that (currently) ST/X Floats are what Doubles are in ST-80;
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2276
     therefore this method reads a 4-byte float from the byteArray and returns
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2277
     a float object which keeps an 8-byte double internally.
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2278
     Notice also, that the bytes are expected to be in this machine's
19629
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2279
     float representation and byte order - if the bytearray originated from another
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2280
     machine, some conversion is usually needed."
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2281
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2282
    |newFloat|
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2283
3434
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2284
%{
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2285
    /*
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2286
     * handle the most common cases fast ...
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2287
     */
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2288
    if (__isSmallInteger(index)) {
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2289
	unsigned char *cp;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2290
	INT sz;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2291
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2292
	__fetchBytePointerAndSize__(self, &cp, &sz);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2293
	if (cp) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2294
	    INT idx = __intVal(index) - 1;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2295
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2296
	    if ((idx >= 0) && ((idx+(sizeof(float)-1)) < sz)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2297
		cp += idx;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2298
		/*
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2299
		 * aligned
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2300
		 */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2301
		if (((INT)cp & (sizeof(float)-1)) == 0) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2302
		    float fVal = ((float *)cp)[0];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2303
		    OBJ f;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2304
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2305
		    __qMKSFLOAT(f, fVal);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2306
		    RETURN (f);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2307
		}
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2308
	    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2309
	}
3434
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2310
    }
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2311
%}.
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2312
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2313
    newFloat := ShortFloat basicNew.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2314
    1 to:4 do:[:destIndex|
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2315
	newFloat basicAt:destIndex put:(self byteAt:(index - 1 + destIndex))
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2316
    ].
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2317
    ^ newFloat.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2318
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2319
3446
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2320
floatAt:index MSB:msb
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2321
    "return the 4-bytes starting at index as a ShortFloat.
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2322
     The index is a smalltalk index (i.e. 1-based).
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2323
     Notice, that (currently) ST/X Floats are what Doubles are in ST-80;
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2324
     therefore this method reads a 4-byte float from the byteArray and returns
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2325
     a float object which keeps an 8-byte double internally.
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2326
     Notice also, that the bytes are expected to be in this machine's
3446
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2327
     float representation and order - if the bytearray originated from another
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2328
     machine, some conversion is usually needed."
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2329
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2330
    |newFloat|
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2331
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
  2332
    msb == IsBigEndian ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2333
	^ self floatAt:index
3446
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2334
    ].
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2335
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2336
    newFloat := ShortFloat basicNew.
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2337
    1 to:4 do:[:destIndex|
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2338
	newFloat basicAt:(5-destIndex) put:(self byteAt:(index - 1 + destIndex))
3446
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2339
    ].
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2340
    ^ newFloat.
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2341
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2342
    "Modified: / 15.5.1998 / 17:20:19 / cg"
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2343
    "Created: / 15.5.1998 / 17:20:35 / cg"
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2344
!
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2345
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2346
floatAt:index put:aFloat
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2347
    "store the 4 bytes of value of the argument, aFloat into the receiver
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2348
     starting at index.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2349
     The index is a smalltalk index (i.e. 1-based).
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2350
     Notice, that (currently) ST/X Floats are what Doubles are in ST-80.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2351
     Notice also, that the bytes are expected to be in this machines
19629
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2352
     float representation and byte order - if the bytearray originated from another
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2353
     machine, some conversion is usually needed."
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2354
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2355
    |sflt|
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2356
3434
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2357
%{
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2358
    /*
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2359
     * handle the most common cases fast ...
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2360
     */
16320
dcb66fff0a89 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15836
diff changeset
  2361
    if (__isSmallInteger(index)) {
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2362
	unsigned char *cp;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2363
	INT sz;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2364
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2365
	__fetchBytePointerAndSize__(self, &cp, &sz);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2366
	if (cp) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2367
	    INT idx = __intVal(index) - 1;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2368
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2369
	    if ((idx >= 0) && ((idx+(sizeof(float)-1)) < sz)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2370
		cp += idx;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2371
		/*
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2372
		 * aligned
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2373
		 */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2374
		if (((INT)cp & (sizeof(float)-1)) == 0) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2375
		    if (__isShortFloat(aFloat)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2376
			((float *)cp)[0] = __shortFloatVal(aFloat);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2377
			RETURN (self);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2378
		    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2379
		    if (__isFloat(aFloat)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2380
			((float *)cp)[0] = (float)__floatVal(aFloat);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2381
			RETURN (self);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2382
		    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2383
		    if (__isSmallInteger(aFloat)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2384
			((float *)cp)[0] = (float)__intVal(aFloat);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2385
			RETURN (self);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2386
		    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2387
		    // bail out to smalltalk code
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2388
		}
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2389
	    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2390
	}
3434
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2391
    }
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2392
%}.
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2393
16320
dcb66fff0a89 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15836
diff changeset
  2394
    sflt := aFloat asShortFloat.
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2395
    1 to:4 do:[:srcIndex|
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2396
	self byteAt:index - 1 + srcIndex put:(sflt basicAt:srcIndex)
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2397
    ].
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2398
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2399
3446
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2400
floatAt:index put:aFloat MSB:msb
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2401
    "store the 4 bytes of value of the argument, aFloat into the receiver
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2402
     starting at index.
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2403
     The index is a smalltalk index (i.e. 1-based).
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2404
     Notice, that (currently) ST/X Floats are what Doubles are in ST-80.
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2405
     Notice also, that the bytes are expected to be in this machines
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2406
     float representation - if the bytearray originated from another
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2407
     machine, some conversion is usually needed."
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2408
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2409
    |sflt|
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2410
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
  2411
    msb == IsBigEndian ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2412
	self floatAt:index put:aFloat.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2413
	^ self.
3446
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2414
    ].
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2415
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2416
    sflt := aFloat asShortFloat.
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2417
    1 to:4 do:[:srcIndex|
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2418
	self byteAt:(index - 1 + srcIndex) put:(sflt basicAt:(5-srcIndex))
3446
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2419
    ].
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2420
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2421
    "Created: / 15.5.1998 / 17:20:41 / cg"
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2422
!
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2423
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2424
ieeeDoubleAt:index
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2425
    "retrieve the 8 bytes starting at index as a float.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2426
     The index is a smalltalk index (i.e. 1-based).
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2427
     The 8 bytes are assumed to be in IEEE floating point single precision
19629
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2428
     number format in the native byte order."
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2429
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2430
    "
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2431
     currently, we assume that the machine's native number format is already
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2432
     IEEE format - we need some more code here whenever ST/X is ported
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2433
     to an IBM 370 or old VAX etc.
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2434
     To date, all supported systems use IEEE float numbers, so there should be
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2435
     no problem.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2436
    "
9258
83c940f349ea isIEEEFormat
Claus Gittinger <cg@exept.de>
parents: 9185
diff changeset
  2437
    Float isIEEEFormat ifFalse:[self error:'unsupported operation'].
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2438
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2439
    ^ self doubleAt:index
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2440
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2441
    "Created: / 5.3.1998 / 10:50:03 / stefan"
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2442
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2443
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2444
ieeeDoubleAt:index put:aFloat
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2445
    "store the value of the argument, aFloat into the receiver
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2446
     The index is a smalltalk index (i.e. 1-based).
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2447
     starting at index. Storage is in IEEE floating point double precision format.
19629
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2448
     (i.e. 8 bytes are stored in the native byte order)."
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2449
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2450
    "
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2451
     currently, we assume that the machine's native number format is already
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2452
     IEEE format - we need some more code here whenever ST/X is ported
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2453
     to an IBM 370 or old VAX etc.
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2454
     To date, all supported systems use IEEE float numbers, so there should be
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2455
     no problem.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2456
    "
9258
83c940f349ea isIEEEFormat
Claus Gittinger <cg@exept.de>
parents: 9185
diff changeset
  2457
    Float isIEEEFormat ifFalse:[self error:'unsupported operation'].
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2458
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2459
    ^ self doubleAt:index put:aFloat
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2460
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2461
    "Created: / 5.3.1998 / 10:50:26 / stefan"
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2462
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2463
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2464
ieeeFloatAt:index
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2465
    "retrieve the 4 bytes starting at index as a float.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2466
     The index is a smalltalk index (i.e. 1-based).
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2467
     The 4 bytes are assumed to be in IEEE floating point single precision
19629
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2468
     number format in the native byte order."
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2469
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2470
    "
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2471
     currently, we assume that the machine's native number format is already
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2472
     IEEE format - we need some more code here whenever ST/X is ported
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2473
     to an IBM 370 or old VAX etc.
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2474
     To date, all supported systems use IEEE float numbers, so there should be
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2475
     no problem.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2476
    "
9258
83c940f349ea isIEEEFormat
Claus Gittinger <cg@exept.de>
parents: 9185
diff changeset
  2477
    ShortFloat isIEEEFormat ifFalse:[self error:'unsupported operation'].
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2478
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2479
    ^ self floatAt:index
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2480
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2481
    "Created: / 5.3.1998 / 10:50:45 / stefan"
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2482
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2483
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2484
ieeeFloatAt:index put:aFloat
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2485
    "store the value of the argument, aFloat into the receiver
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2486
     starting at index, which is a smalltalk index (i.e. 1-based).
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2487
     Storage is in IEEE floating point single precision format.
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2488
     (i.e. 4 bytes are stored in the native byte order).
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2489
     Since ST/X floats are really doubles,
19629
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2490
     the low- order 4 bytes of the precision are lost."
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2491
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2492
    "
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2493
     currently, we assume that the machine's native number format is already
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2494
     IEEE format - we need some more code here whenever ST/X is ported
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2495
     to an IBM 370 or old VAX etc.
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2496
     To date, all supported systems use IEEE float numbers, so there should be
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2497
     no problem.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2498
    "
9258
83c940f349ea isIEEEFormat
Claus Gittinger <cg@exept.de>
parents: 9185
diff changeset
  2499
    ShortFloat isIEEEFormat ifFalse:[self error:'unsupported operation'].
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2500
16320
dcb66fff0a89 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15836
diff changeset
  2501
    self floatAt:index put:aFloat
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2502
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2503
    "Created: / 5.3.1998 / 10:51:11 / stefan"
22055
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2504
!
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2505
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2506
longDoubleAt:index
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2507
    "return the 16-bytes starting at index as a LongDouble.
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2508
     The index is a smalltalk index (i.e. 1-based).
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2509
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2510
     Notice, that the C-type long double might have different sizes on different
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2511
     machines and may only use part of the 16 bytes;
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2512
     i.e. 10bytes (80bit) as on intel CPUS, 12 bytes (96bits) or 16 bytes (128bits).
22055
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2513
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2514
     Notice also, that the bytes are expected to be in this machine's
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2515
     long double representation and byte order
22055
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2516
     - if the bytearray originated from another
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2517
     machine, some conversion is usually needed."
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2518
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2519
    |newFloat|
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2520
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2521
    newFloat := LongFloat basicNew.
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2522
    1 to:16 do:[:destIndex|
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2523
	newFloat basicAt:destIndex put:(self byteAt:(index - 1 + destIndex))
22055
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2524
    ].
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2525
    ^ newFloat.
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2526
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2527
    "
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2528
     |b|
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2529
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2530
     b := ByteArray new:20.
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2531
     b longDoubleAt:1 put:(LongFloat pi).
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2532
     Transcript showCR:b.
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2533
     Transcript showCR:(b longDoubleAt:1)
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2534
    "
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2535
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2536
    "Created: / 18-07-2017 / 11:31:27 / cg"
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2537
!
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2538
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2539
longDoubleAt:index MSB:msb
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2540
    "return the 16-bytes starting at index as a LongDouble.
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2541
     The index is a smalltalk index (i.e. 1-based).
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2542
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2543
     Notice, that the C-type long double has different sizes on different
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2544
     machines and may only use part of the 16 bytes;
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2545
     i.e. 10bytes (80bit) as on intel CPUS, 12 bytes (96bits) or 16 bytes (128bits).
22055
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2546
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2547
     Notice also, that the bytes are expected to be in this machine's
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2548
     long double representation - if the bytearray originated from another
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2549
     machine, some conversion is usually needed."
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2550
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2551
    |newFloat|
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2552
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2553
    msb == IsBigEndian ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2554
	^ self longDoubleAt:index.
22055
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2555
    ].
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2556
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2557
    newFloat := LongFloat basicNew.
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2558
    1 to:16 do:[:destIndex|
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2559
	newFloat basicAt:(17-destIndex) put:(self byteAt:(index - 1 + destIndex))
22055
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2560
    ].
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2561
    ^ newFloat.
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2562
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2563
    "Created: / 18-07-2017 / 11:30:42 / cg"
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2564
!
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2565
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2566
longDoubleAt:index put:aLongFloat
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2567
    "store the value of the argument, aLongFloat as 16 bytes into the receiver
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2568
     starting at index.
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2569
     The index is a smalltalk index (i.e. 1-based).
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2570
     LongFloats are the machine's long double numbers.
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2571
22055
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2572
     Notice that the bytes are expected to be in this machine's
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2573
     float representation and byte order - if the bytearray originated from another
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2574
     machine, some conversion is usually needed."
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2575
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2576
    |flt|
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2577
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2578
    flt := aLongFloat asLongFloat.
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2579
    1 to:16 do:[:srcIndex|
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2580
	self byteAt:(index - 1 + srcIndex) put:(flt basicAt:srcIndex)
22055
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2581
    ].
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2582
    ^ aLongFloat
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2583
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2584
    "Created: / 18-07-2017 / 11:33:17 / cg"
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2585
!
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2586
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2587
longDoubleAt:index put:aLongFloat MSB:msb
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2588
    "store the value of the argument, aLongFloat as 16 bytes into the receiver
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2589
     starting at index.
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2590
     The index is a smalltalk index (i.e. 1-based).
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2591
     Notice that the bytes are expected to be in this machine's
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2592
     float representation - if the bytearray originated from another
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2593
     machine, some conversion is usually needed."
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2594
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2595
    |flt|
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2596
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2597
    msb == IsBigEndian ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2598
	^ self longDoubleAt:index put:aLongFloat.
22055
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2599
    ].
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2600
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2601
    flt := aLongFloat asLongFloat.
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2602
    1 to:16 do:[:srcIndex|
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2603
	self byteAt:(index - 1 + srcIndex) put:(flt basicAt:(17-srcIndex))
22055
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2604
    ].
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2605
    ^ aLongFloat
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2606
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2607
    "Created: / 18-07-2017 / 11:33:59 / cg"
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2608
! !
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2609
13724
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  2610
!UninterpretedBytes methodsFor:'accessing-longlongs (64bit)'!
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2611
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2612
signedInt64At:index
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2613
    "return the 8-bytes starting at index as a signed Integer.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2614
     The index is a smalltalk index (i.e. 1-based).
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2615
     The value is retrieved in the machine's natural byte order.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2616
     This may be worth a primitive."
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2617
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2618
    |w|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2619
19629
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2620
    w := self unsignedInt64At:index MSB:(UninterpretedBytes isBigEndian).
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2621
    (w > (16r7FFFFFFFFFFFFFFF)) ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2622
	^ w - (16r10000000000000000)
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2623
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2624
    ^ w
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2625
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2626
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2627
     |b|
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2628
     b := ByteArray new:8.
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2629
     b unsignedInt64At:1 put:16rFFFFFFFFFFFFFFFF MSB:true.
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2630
     (b signedInt64At:1 MSB:true)
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2631
    "
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2632
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2633
    "Modified: / 01-07-1996 / 21:11:28 / cg"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2634
    "Created: / 05-03-1998 / 14:40:05 / stefan"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2635
    "Modified (comment): / 04-08-2017 / 11:29:37 / cg"
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2636
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2637
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2638
signedInt64At:index MSB:msb
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2639
    "return the 8-bytes starting at index as a signed Integer.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2640
     The index is a smalltalk index (i.e. 1-based).
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2641
     The value is retrieved in the given byte order.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2642
     This may be worth a primitive."
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2643
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2644
    |w|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2645
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2646
    w := self unsignedInt64At:index MSB:msb.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2647
    (w > (16r7FFFFFFFFFFFFFFF)) ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2648
	^ w - (16r10000000000000000)
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2649
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2650
    ^ w
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2651
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2652
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2653
     |b|
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2654
     b := ByteArray new:8.
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2655
     b unsignedInt64At:1 put:16rFFFFFFFFFFFFFFFF MSB:true.
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2656
     (b signedInt64At:1 MSB:true)
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2657
    "
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2658
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2659
    "Modified: / 05-03-1998 / 12:06:28 / stefan"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2660
    "Created: / 05-03-1998 / 14:40:54 / stefan"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2661
    "Modified: / 09-05-1998 / 01:10:59 / cg"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2662
    "Modified (comment): / 04-08-2017 / 11:29:59 / cg"
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2663
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2664
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2665
signedInt64At:byteIndex put:anInteger
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2666
    "store a signed longLong (64bit) integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2667
     The index is a smalltalk index (i.e. 1-based).
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2668
     The value is stored in the machine's natural byte order.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2669
     Same as #signedQuadWordAt:put: - for ST80 compatibility."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2670
19629
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2671
    ^ self signedInt64At:byteIndex put:anInteger MSB:(UninterpretedBytes isBigEndian)
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2672
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2673
    "Modified (comment): / 04-08-2017 / 11:19:09 / cg"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2674
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2675
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2676
signedInt64At:byteIndex put:anInteger MSB:msb
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2677
    "store a signed longLong (64bit) integer.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2678
     The index is a smalltalk index (i.e. 1-based).
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2679
     Same as #signedQuadWordAt:put: - for ST80 compatibility."
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2680
7813
3cc0b75d1684 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7812
diff changeset
  2681
    |v|
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2682
7813
3cc0b75d1684 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7812
diff changeset
  2683
    v := anInteger.
3cc0b75d1684 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7812
diff changeset
  2684
    anInteger < 0 ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2685
	v := v + 16r10000000000000000
7813
3cc0b75d1684 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7812
diff changeset
  2686
    ].
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2687
    self unsignedInt64At:byteIndex put:v MSB:msb.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2688
    ^ anInteger
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2689
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2690
    "Created: / 9.5.1998 / 01:10:24 / cg"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2691
    "Modified: / 9.5.1998 / 01:13:34 / cg"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2692
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2693
19629
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2694
signedInt64AtLSB:byteIndex
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2695
    "return the 8-bytes starting at index as a signed 64bit Integer.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2696
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2697
     The value is retrieved with least significant byte first"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2698
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2699
    ^ self signedInt64At:byteIndex MSB:false
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2700
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2701
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2702
signedInt64AtLSB:byteIndex put:anInteger
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2703
    "set the 8-bytes starting at index from the signed Integer anInteger.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2704
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2705
     The integer is stored with least significant byte first."
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2706
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2707
    ^ self signedInt64At:byteIndex put:anInteger MSB:false
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2708
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2709
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2710
signedInt64AtMSB:byteIndex
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2711
    "return the 8-bytes starting at index as a signed 64bit Integer.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2712
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2713
     The value is retrieved with most significant byte first"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2714
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2715
    ^ self signedInt64At:byteIndex MSB:true
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2716
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2717
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2718
signedInt64AtMSB:byteIndex put:anInteger
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2719
    "set the 8-bytes starting at index from the signed Integer anInteger.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2720
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2721
     The integer is stored with least significant byte first."
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2722
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2723
    ^ self signedInt64At:byteIndex put:anInteger MSB:true
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2724
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2725
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2726
unsignedInt64At:byteIndex
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2727
    "return the 8-bytes starting at index in the machine's native
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2728
     byteorder as an unsigned integer.
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2729
     The value is retrieved in the machine's natural byte order.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2730
     The index is a smalltalk index (i.e. 1-based)"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2731
19629
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2732
   ^ self unsignedInt64At:byteIndex MSB:(UninterpretedBytes isBigEndian)
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2733
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2734
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2735
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2736
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2737
     b := ByteArray withAll:#(1 2 3 4 5 6 7 8).
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2738
     (b unsignedInt64At:1) printStringRadix:16
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2739
    "
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2740
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2741
    "Modified: / 05-11-1996 / 14:06:21 / cg"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2742
    "Modified: / 05-03-1998 / 14:04:44 / stefan"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2743
    "Modified (comment): / 04-08-2017 / 11:19:21 / cg"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2744
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2745
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2746
unsignedInt64At:byteIndex MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2747
    "return the 8-bytes starting at index as an unsigned integer.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2748
     The index is a smalltalk index (i.e. 1-based).
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2749
     Depending on msb, the value is retrieved MSB or LSB-first."
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2750
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2751
    |l
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2752
     bIdx  "{ Class: SmallInteger }"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2753
     delta "{ Class: SmallInteger }"|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2754
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2755
    l := LargeInteger basicNew numberOfDigits:8.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2756
    msb ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2757
	bIdx := byteIndex + 7.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2758
	delta := -1
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2759
    ] ifFalse:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2760
	bIdx := byteIndex.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2761
	delta := 1
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2762
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2763
    1 to:8 do:[:i |
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2764
	l digitAt:i put:(self byteAt:bIdx).
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2765
	bIdx := bIdx + delta
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2766
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2767
    ^ l compressed
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2768
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2769
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2770
     |b|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2771
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2772
     b := ByteArray withAll:#(1 2 3 4 5 6 7 8).
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2773
     (b unsignedInt64At:1 MSB:false) printStringRadix:16
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2774
    "
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2775
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2776
    "
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2777
     |b|
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2778
     b := ByteArray new:8.
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2779
     b signedInt64At:1 put:-1 MSB:true.
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2780
     (b unsignedInt64At:1 MSB:true)
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2781
    "
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2782
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2783
    "Modified: / 05-11-1996 / 14:06:21 / cg"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2784
    "Modified: / 05-03-1998 / 14:04:44 / stefan"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2785
    "Modified (comment): / 04-08-2017 / 11:30:34 / cg"
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2786
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2787
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2788
unsignedInt64At:byteIndex put:anInteger
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2789
    "set the 8-bytes starting at index from the (unsigned) Integer value.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2790
     The index is a smalltalk index (i.e. 1-based).
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2791
     The value must be in the range 0 to 16rFFFFFFFFFFFFFFFF.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2792
     The value is stored in the machine's natural byteorder."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2793
19629
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2794
    ^ self unsignedInt64At:byteIndex put:anInteger MSB:(UninterpretedBytes isBigEndian)
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2795
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2796
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2797
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2798
     b := ByteArray new:10.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2799
     b unsignedInt64At:1 put:16r0807060504030201 MSB:false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2800
     b unsignedInt64At:1 put:16r0807060504030201 MSB:true.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2801
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2802
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2803
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2804
    "Created: / 5.3.1998 / 14:06:02 / stefan"
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2805
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2806
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2807
unsignedInt64At:byteIndex put:anInteger MSB:msb
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2808
    "set the 8-bytes starting at index from the (unsigned) Integer value.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2809
     The index is a smalltalk index (i.e. 1-based).
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2810
     The value must be in the range 0 to 16rFFFFFFFFFFFFFFFF.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2811
     Depending on msb, the value is stored MSB-first or LSB-first."
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2812
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2813
    |bIdx  "{ Class: SmallInteger }"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2814
     delta "{ Class: SmallInteger }"|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2815
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2816
    ((anInteger < 0)
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2817
     or:[anInteger class ~~ SmallInteger
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2818
	 and:[anInteger > 16rFFFFFFFFFFFFFFFF]]) ifTrue:[
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2819
	^ self elementBoundsError:anInteger
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2820
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2821
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2822
    msb ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2823
	bIdx := byteIndex + 7.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2824
	delta := -1
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2825
    ] ifFalse:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2826
	bIdx := byteIndex.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2827
	delta := 1
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2828
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2829
    1 to:8 do:[:i |
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2830
	self byteAt:bIdx put:(anInteger digitAt:i).
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2831
	bIdx := bIdx + delta.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2832
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2833
    ^ anInteger
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2834
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2835
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2836
     |b|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2837
     b := ByteArray new:8.
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2838
     b unsignedInt64At:1 put:16r0807060504030201 MSB:false.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2839
     b inspect
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2840
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2841
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2842
    "Created: / 05-03-1998 / 14:06:02 / stefan"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2843
    "Modified (comment): / 04-08-2017 / 11:13:59 / cg"
19629
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2844
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2845
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2846
unsignedInt64AtLSB:byteIndex
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2847
    "return the 8-bytes starting at index as an unsigned 64bit Integer.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2848
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2849
     The value is retrieved with most significant byte first"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2850
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2851
    ^ self unsignedInt64At:byteIndex MSB:false
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2852
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2853
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2854
unsignedInt64AtLSB:byteIndex put:anInteger
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2855
    "set the 8-bytes starting at index from the unsigned Integer anInteger.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2856
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2857
     The integer is stored with least significant byte first."
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2858
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2859
    ^ self unsignedInt64At:byteIndex put:anInteger MSB:false
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2860
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2861
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2862
unsignedInt64AtMSB:byteIndex
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2863
    "return the 8-bytes starting at index as an unsigned 64bit Integer.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2864
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2865
     The value is retrieved with most significant byte first"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2866
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2867
    ^ self unsignedInt64At:byteIndex MSB:true
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2868
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2869
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2870
unsignedInt64AtMSB:byteIndex put:anInteger
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2871
    "set the 8-bytes starting at index from the unsigned Integer anInteger.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2872
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2873
     The integer is stored with least significant byte first."
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2874
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2875
    ^ self unsignedInt64At:byteIndex put:anInteger MSB:true
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2876
! !
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2877
13724
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  2878
!UninterpretedBytes methodsFor:'accessing-longs (32bit)'!
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2879
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2880
signedInt32At:byteIndex
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2881
    "return the 4-bytes starting at byteIndex as a signed Integer.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2882
     The index is a smalltalk index (i.e. 1-based).
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2883
     The value is retrieved in the machine's natural byte order,
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2884
     therefore, this should only be used for byte-data which is
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2885
     only used inside this machine.
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2886
     To setup binary data packets which are to be sent to other machines,
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2887
     or stored into a file, always use the corresponding xxx:MSB: method
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2888
     and specify a definite byteOrder."
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2889
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2890
    |w|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2891
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2892
%{
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2893
    /*
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2894
     * handle the most common cases fast ...
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2895
     */
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2896
    if (__isSmallInteger(byteIndex)) {
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2897
	unsigned char *cp;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2898
	INT sz;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2899
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2900
	__fetchBytePointerAndSize__(self, &cp, &sz);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2901
	if (cp) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2902
	    INT idx = __intVal(byteIndex) - 1;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2903
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2904
	    if ((idx >= 0) && ((idx+(4-1)) < sz)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2905
		int iVal;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2906
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2907
		cp += idx;
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2908
#if defined(__i386__)
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2909
		/*
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2910
		 * aligned or not, we don't care (i386 can do both)
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2911
		 */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2912
		{
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2913
		    iVal = ((int *)cp)[0];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2914
		    RETURN (__MKINT(iVal));
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2915
		}
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2916
#else
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2917
# if defined(__x86_64__)
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2918
		/*
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2919
		 * aligned or not, we don't care (i386 can do both)
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2920
		 */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2921
		{
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2922
		    iVal = ((int *)cp)[0];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2923
		    RETURN (__mkSmallInteger(iVal));
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2924
		}
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2925
# else
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2926
		/*
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2927
		 * aligned ?
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2928
		 */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2929
		if (((INT)cp & (sizeof(int)-1)) == 0) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2930
		    iVal = ((int *)cp)[0];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2931
		} else {
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2932
#  ifdef __LSBFIRST__
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2933
		    iVal = cp[0] & 0xFF;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2934
		    iVal += (cp[1] & 0xFF)<<8;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2935
		    iVal += (cp[2] & 0xFF)<<16;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2936
		    iVal += (cp[3] & 0xFF)<<24;
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2937
#  else
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2938
#   ifdef __MSBFIRST__
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2939
		    iVal = cp[0] & 0xFF;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2940
		    iVal = (iVal<<8)+(cp[1] & 0xFF);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2941
		    iVal = (iVal<<8)+(cp[2] & 0xFF);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2942
		    iVal = (iVal<<8)+(cp[3] & 0xFF);
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2943
#   else
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2944
		    {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2945
			union {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2946
			    int i;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2947
			    char c[4];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2948
			} u;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2949
			u.c[0] = cp[0];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2950
			u.c[1] = cp[1];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2951
			u.c[2] = cp[2];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2952
			u.c[3] = cp[3];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2953
			iVal = u.i;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2954
		    }
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2955
#   endif
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2956
#  endif
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2957
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2958
#  if __POINTER_SIZE__ == 8
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2959
		    RETURN (__mkSmallInteger(iVal));
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2960
#  else
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2961
		    RETURN (__MKINT(iVal));
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2962
#  endif
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2963
		}
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2964
# endif
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2965
#endif
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2966
	    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2967
	}
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2968
    }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2969
%}.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2970
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2971
    ^ self signedInt32At:byteIndex MSB:IsBigEndian.
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2972
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2973
    "
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2974
     |b|
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2975
     b := ByteArray new:4.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2976
     b unsignedLongAt:1 put:16rFFFFFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2977
     (b longAt:1)
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2978
    "
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2979
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2980
    "Modified: / 1.7.1996 / 21:11:28 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2981
    "Modified: / 5.3.1998 / 12:06:28 / stefan"
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2982
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2983
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2984
signedInt32At:byteIndex MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2985
    "return the 4-bytes starting at byteIndex as a (signed) Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2986
     The byteIndex is a smalltalk index (i.e. 1-based).
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2987
     The value is retrieved MSB-first, if the msb-arg is true;
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2988
     LSB-first otherwise."
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2989
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2990
    |val
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2991
     ival "{ Class: SmallInteger }"
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2992
     i    "{ Class: SmallInteger }"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2993
     bHH  "{ Class: SmallInteger }"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2994
     bHL  "{ Class: SmallInteger }"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2995
     bLH  "{ Class: SmallInteger }"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2996
     bLL  "{ Class: SmallInteger }"|
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2997
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2998
%{
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2999
    /*
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  3000
     * handle the most common cases fast ...
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  3001
     */
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3002
    if (__isSmallInteger(byteIndex)) {
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3003
	unsigned char *cp;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3004
	INT sz;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3005
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3006
	__fetchBytePointerAndSize__(self, &cp, &sz);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3007
	if (cp) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3008
	    INT idx = __intVal(byteIndex) - 1;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3009
	    int iVal;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3010
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3011
	    cp += idx;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3012
	    if ((idx >= 0) && ((idx+(sizeof(int)-1)) < sz)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3013
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3014
		if (msb == true) {
8901
824a89d0b5c7 alpha64 vs. POINTER_SIZE cleanup
Claus Gittinger <cg@exept.de>
parents: 8893
diff changeset
  3015
#if defined(__MSBFIRST__)
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3016
		    if (((INT)cp & (sizeof(int)-1))== 0) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3017
			/*
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3018
			 * aligned
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3019
			 */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3020
			iVal = ((int *)cp)[0];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3021
		    } else
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  3022
#endif
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3023
		    {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3024
			iVal = cp[0];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3025
			iVal = (iVal << 8) | cp[1];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3026
			iVal = (iVal << 8) | cp[2];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3027
			iVal = (iVal << 8) | cp[3];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3028
		    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3029
		} else {
8901
824a89d0b5c7 alpha64 vs. POINTER_SIZE cleanup
Claus Gittinger <cg@exept.de>
parents: 8893
diff changeset
  3030
#if defined(__i386__) || (defined(UNALIGNED_FETCH_OK) && defined(__LSBFIRST__))
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3031
		    /*
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3032
		     * aligned or not - we don't care
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3033
		     * (i386 can fetch unaligned)
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3034
		     */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3035
		    iVal = ((int *)cp)[0];
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  3036
#else
8901
824a89d0b5c7 alpha64 vs. POINTER_SIZE cleanup
Claus Gittinger <cg@exept.de>
parents: 8893
diff changeset
  3037
# if defined(__LSBFIRST__)
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3038
		    if (((INT)cp & (sizeof(int)-1))== 0) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3039
			/*
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3040
			 * aligned
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3041
			 */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3042
			iVal = ((int *)cp)[0];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3043
		    } else
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  3044
# endif
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3045
		    {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3046
			iVal = cp[3];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3047
			iVal = (iVal << 8) | cp[2];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3048
			iVal = (iVal << 8) | cp[1];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3049
			iVal = (iVal << 8) | cp[0];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3050
		    }
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  3051
#endif
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3052
		}
8901
824a89d0b5c7 alpha64 vs. POINTER_SIZE cleanup
Claus Gittinger <cg@exept.de>
parents: 8893
diff changeset
  3053
#if __POINTER_SIZE__ == 8
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3054
		RETURN (__mkSmallInteger(iVal));
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  3055
#else
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3056
		RETURN (__MKINT(iVal));
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  3057
#endif
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3058
	    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3059
	}
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  3060
    }
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  3061
%}.
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3062
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3063
    val := self unsignedInt32At:byteIndex MSB:msb.
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  3064
    (val > (16r7FFFFFFF)) ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3065
	^ val - (16r100000000)
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  3066
    ].
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  3067
    ^ val
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3068
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3069
    "
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3070
     |b|
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  3071
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  3072
     b := ByteArray withAll:#(1 2 3 4).
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3073
     (b signedInt32At:1 MSB:true) printStringRadix:16.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3074
     (b signedInt32At:1 MSB:false) printStringRadix:16
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3075
    "
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3076
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3077
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3078
signedInt32At:byteIndex put:anInteger
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3079
    "set the 4-bytes starting at index from the signed Integer anInteger.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  3080
     The index is a smalltalk index (i.e. 1-based).
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3081
     The integer is stored in the machine's natural byte order."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3082
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3083
    ^ self signedInt32At:byteIndex put:anInteger MSB:IsBigEndian
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3084
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3085
    "
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3086
     |b|
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3087
     b := ByteArray new:4.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3088
     b longAt:1 put:-1.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3089
     (b unsignedLongAt:1) printStringRadix:16
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3090
    "
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3091
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3092
    "Modified: / 1.7.1996 / 21:11:39 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3093
    "Created: / 5.3.1998 / 10:57:18 / stefan"
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3094
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3095
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3096
signedInt32At:byteIndex put:anInteger MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3097
    "set the 4-bytes starting at byteIndex from the signed Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3098
     The byteIndex is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3099
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3100
     This is the ST80 version of #signedDoubleWordAt:put:"
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3101
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3102
    |v|
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3103
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3104
%{
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3105
    /*
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3106
     * handle the most common case fast ...
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3107
     */
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3108
    if (__isSmallInteger(byteIndex)) {
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3109
	unsigned char *cp;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3110
	INT sz;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3111
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3112
	__fetchBytePointerAndSize__(self, &cp, &sz);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3113
	if (cp) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3114
	    INT idx = __intVal(byteIndex) - 1;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3115
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3116
	    if ((idx >= 0) && ((idx+3) < sz)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3117
		cp += idx;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3118
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3119
		if (__isSmallInteger(anInteger)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3120
		    INT __v = __intVal(anInteger);
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3121
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3122
# if __POINTER_SIZE__ == 8
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3123
		    if ((__v < -0x80000000L) || (__v > 0x7FFFFFFF)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3124
			goto badArg;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3125
		    }
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3126
# endif
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3127
		    if (((INT)cp & 3) == 0) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3128
			/*
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3129
			 * aligned
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3130
			 */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3131
			if (
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3132
# ifdef __LSBFIRST__
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3133
			    (msb == false)
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3134
# else
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3135
#  ifdef __MSBFIRST__
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3136
			    (msb == true)
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3137
#  else
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3138
			    (0)
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3139
#  endif
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3140
# endif
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3141
			) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3142
			    ((int *)cp)[0] = (int)__v;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3143
			    RETURN (anInteger);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3144
			}
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3145
		    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3146
		    if (msb == false) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3147
			cp[0] = __v & 0xFF;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3148
			cp[1] = (__v>>8) & 0xFF;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3149
			cp[2] = (__v>>16) & 0xFF;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3150
			cp[3] = (__v>>24) & 0xFF;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3151
		    } else {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3152
			cp[0] = (__v>>24) & 0xFF;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3153
			cp[1] = (__v>>16) & 0xFF;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3154
			cp[2] = (__v>>8) & 0xFF;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3155
			cp[3] = __v & 0xFF;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3156
		    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3157
		    RETURN (anInteger);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3158
		}
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3159
	    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3160
	}
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3161
    }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3162
  badArg: ;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3163
%}.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3164
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3165
    anInteger >= 0 ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3166
	v := anInteger
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3167
    ] ifFalse:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3168
	v := anInteger + 16r100000000
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3169
    ].
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3170
    self unsignedInt32At:byteIndex put:v MSB:msb.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3171
    ^ anInteger
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3172
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3173
    "
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3174
     |b|
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3175
     b := ByteArray new:4.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3176
     b longAt:1 put:-1.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3177
     (b unsignedLongAt:1) printStringRadix:16
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3178
    "
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3179
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3180
    "Modified: / 1.7.1996 / 21:11:39 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3181
    "Created: / 5.3.1998 / 10:57:18 / stefan"
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3182
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3183
19629
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3184
signedInt32AtLSB:byteIndex
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3185
    "return the 4-bytes starting at index as a signed 32bit Integer.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3186
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3187
     The value is retrieved with least significant byte first"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3188
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3189
    ^ self signedInt32At:byteIndex MSB:false
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3190
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3191
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3192
signedInt32AtLSB:byteIndex put:anInteger
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3193
    "set the 4-bytes starting at index from the signed Integer anInteger.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3194
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3195
     The integer is stored with least significant byte first."
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3196
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3197
    ^ self signedInt32At:byteIndex put:anInteger MSB:false
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3198
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3199
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3200
signedInt32AtMSB:byteIndex
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3201
    "return the 4-bytes starting at index as a signed 32bit Integer.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3202
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3203
     The value is retrieved with most significant byte first"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3204
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3205
    ^ self signedInt32At:byteIndex MSB:true
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3206
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3207
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3208
signedInt32AtMSB:byteIndex put:anInteger
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3209
    "set the 4-bytes starting at index from the signed Integer anInteger.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3210
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3211
     The integer is stored with most significant byte first."
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3212
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3213
    ^ self signedInt32At:byteIndex put:anInteger MSB:true
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3214
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3215
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3216
unsignedInt32At:byteIndex
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3217
    "return the 4-bytes starting at index as an (unsigned) Integer.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  3218
     The index is a smalltalk index (i.e. 1-based).
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3219
     The value is retrieved in the machine's natural byte order."
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3220
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3221
    ^ self unsignedInt32At:byteIndex MSB:IsBigEndian
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3222
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3223
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3224
     |b|
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3225
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3226
     b := ByteArray withAll:#(1 2 3 4).
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3227
     (b unsignedInt32At:1) printStringRadix:16
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3228
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3229
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3230
    "Modified: / 5.3.1998 / 14:57:35 / stefan"
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3231
!
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3232
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3233
unsignedInt32At:byteIndex MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3234
    "return the 4-bytes starting at index as an (unsigned) Integer.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  3235
     The index is a smalltalk index (i.e. 1-based).
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3236
     The value is retrieved MSB-first, if the msb-arg is true;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3237
     LSB-first otherwise."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3238
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3239
    |val
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3240
     ival "{ Class: SmallInteger }"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3241
     i    "{ Class: SmallInteger }"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3242
     bHH  "{ Class: SmallInteger }"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3243
     bHL  "{ Class: SmallInteger }"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3244
     bLH  "{ Class: SmallInteger }"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3245
     bLL  "{ Class: SmallInteger }"|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3246
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3247
%{
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3248
    /*
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3249
     * handle the most common cases fast ...
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3250
     */
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3251
    if (__isSmallInteger(byteIndex)) {
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3252
	unsigned char *cp;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3253
	INT sz;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3254
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3255
	__fetchBytePointerAndSize__(self, &cp, &sz);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3256
	if (cp) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3257
	    INT idx = __intVal(byteIndex) - 1;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3258
	    unsigned int iVal;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3259
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3260
	    if ((idx >= 0) && ((idx+(sizeof(int)-1)) < sz)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3261
		cp += idx;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3262
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3263
		if (msb == true) {
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3264
#if defined(__MSBFIRST__)
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3265
		    if (((INT)cp & (sizeof(int)-1))== 0) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3266
			/*
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3267
			 * aligned
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3268
			 */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3269
			iVal = ((unsigned int *)cp)[0];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3270
		    } else
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3271
#endif
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3272
		    {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3273
			iVal = cp[0];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3274
			iVal = (iVal << 8) | cp[1];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3275
			iVal = (iVal << 8) | cp[2];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3276
			iVal = (iVal << 8) | cp[3];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3277
		    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3278
		} else {
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3279
#if defined(__i386__) || (defined(UNALIGNED_FETCH_OK) && defined(__LSBFIRST__))
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3280
		    /*
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3281
		     * aligned or not - we don't care
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3282
		     * (i386 can fetch unaligned)
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3283
		     */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3284
		    iVal = ((unsigned int *)cp)[0];
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3285
#else
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3286
# if defined(__LSBFIRST__)
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3287
		    if (((INT)cp & (sizeof(int)-1))== 0) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3288
			/*
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3289
			 * aligned
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3290
			 */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3291
			iVal = ((unsigned int *)cp)[0];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3292
		    } else
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3293
# endif
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3294
		    {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3295
			iVal = cp[3];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3296
			iVal = (iVal << 8) | cp[2];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3297
			iVal = (iVal << 8) | cp[1];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3298
			iVal = (iVal << 8) | cp[0];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3299
		    }
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3300
#endif
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3301
		}
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3302
#if __POINTER_SIZE__ == 8
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3303
		RETURN (__mkSmallInteger(iVal));
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3304
#else
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3305
		RETURN (__MKUINT(iVal));
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3306
#endif
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3307
	    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3308
	}
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3309
    }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3310
%}.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3311
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3312
    "/ fallBack code - non ByteArray-like receiver
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3313
    "/ or funny byteIndex
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3314
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3315
    i := byteIndex.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3316
    msb ifFalse:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3317
	bLL := self byteAt:i.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3318
	bLH := self byteAt:(i+1).
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3319
	bHL := self byteAt:(i+2).
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3320
	bHH := self byteAt:(i+3).
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3321
    ] ifTrue:[
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3322
	bHH := self byteAt:i.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3323
	bHL := self byteAt:(i+1).
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3324
	bLH := self byteAt:(i+2).
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3325
	bLL := self byteAt:(i+3).
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3326
    ].
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3327
    ival := (bHH bitShift:8) + bHL.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3328
    ival := (ival bitShift:8) + bLH.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3329
    val := (ival bitShift:8) + bLL.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3330
    ^ val
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3331
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3332
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3333
     |b|
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3334
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3335
     b := ByteArray withAll:#(1 2 3 4).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3336
     (b unsignedInt32At:1 MSB:true) printStringRadix:16.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3337
     (b unsignedInt32At:1 MSB:false) printStringRadix:16
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3338
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3339
!
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3340
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3341
unsignedInt32At:byteIndex put:anInteger
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3342
    "set the 4-bytes starting at index from the (unsigned) integer value.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  3343
     The index is a smalltalk index (i.e. 1-based).
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3344
     The value must be in the range 0 to 16rFFFFFFFF.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3345
     The value is stored in the machine's native byte order"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3346
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3347
    ^ self unsignedInt32At:byteIndex put:anInteger MSB:IsBigEndian
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3348
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3349
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3350
     |b|
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3351
     b := ByteArray new:8.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3352
     b doubleWordAt:1 put:16r04030201 MSB:true.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3353
     b doubleWordAt:5 put:16r04030201 MSB:false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3354
     b inspect
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3355
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3356
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3357
    "Modified: / 21.1.1998 / 17:43:34 / cg"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3358
    "Modified: / 5.3.1998 / 11:42:17 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3359
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3360
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3361
unsignedInt32At:byteIndex put:anInteger MSB:msb
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3362
    "set the 4-bytes starting at byteIndex from the unsigned Integer value.
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3363
     The byteIndex is a smalltalk index (i.e. 1-based).
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3364
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3365
     This is the ST80 version of #doubleWordAt:put:"
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3366
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3367
    |v i b1 b2 b3 b4|
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3368
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3369
%{
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3370
    /*
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3371
     * handle the most common case fast ...
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3372
     */
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3373
    if (__isSmallInteger(byteIndex)) {
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3374
	unsigned char *cp;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3375
	INT sz;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3376
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3377
	__fetchBytePointerAndSize__(self, &cp, &sz);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3378
	if (cp) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3379
	    INT idx = __intVal(byteIndex) - 1;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3380
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3381
	    if ((idx >= 0) && ((idx+3) < sz)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3382
		cp += idx;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3383
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3384
		if (__isSmallInteger(anInteger)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3385
		    INT __v = __intVal(anInteger);
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3386
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3387
# if __POINTER_SIZE__ == 8
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3388
		    if ((__v < 0) || (__v > 0xFFFFFFFF)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3389
			goto badArg;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3390
		    }
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3391
# endif
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3392
		    if (((INT)cp & 3) == 0) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3393
			/*
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3394
			 * aligned
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3395
			 */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3396
			if (
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3397
# ifdef __LSBFIRST__
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3398
			    (msb == false)
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3399
# else
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3400
#  ifdef __MSBFIRST__
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3401
			    (msb == true)
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3402
#  else
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3403
			    (0)
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3404
#  endif
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3405
# endif
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3406
			) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3407
			    ((int *)cp)[0] = (int)__v;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3408
			    RETURN (anInteger);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3409
			}
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3410
		    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3411
		    if (msb == false) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3412
			cp[0] = __v & 0xFF;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3413
			cp[1] = (__v>>8) & 0xFF;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3414
			cp[2] = (__v>>16) & 0xFF;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3415
			cp[3] = (__v>>24) & 0xFF;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3416
		    } else {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3417
			cp[0] = (__v>>24) & 0xFF;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3418
			cp[1] = (__v>>16) & 0xFF;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3419
			cp[2] = (__v>>8) & 0xFF;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3420
			cp[3] = __v & 0xFF;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3421
		    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3422
		    RETURN (anInteger);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3423
		}
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3424
	    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3425
	}
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3426
    }
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3427
  badArg: ;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3428
%}.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3429
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3430
    ((anInteger < 0) or:[anInteger > 16rFFFFFFFF]) ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3431
	^ self elementBoundsError:anInteger
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3432
    ].
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3433
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3434
    i := byteIndex.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3435
    msb ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3436
	b1 := (anInteger digitAt:4).
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3437
	b2 := (anInteger digitAt:3).
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3438
	b3 := (anInteger digitAt:2).
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3439
	b4 := (anInteger digitAt:1).
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3440
    ] ifFalse:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3441
	b1 := (anInteger digitAt:1).
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3442
	b2 := (anInteger digitAt:2).
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3443
	b3 := (anInteger digitAt:3).
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3444
	b4 := (anInteger digitAt:4).
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3445
    ].
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3446
    self byteAt:i     put:b1.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3447
    self byteAt:(i+1) put:b2.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3448
    self byteAt:(i+2) put:b3.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3449
    self byteAt:(i+3) put:b3.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3450
    ^ anInteger
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3451
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3452
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3453
     |b|
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3454
     b := ByteArray new:4.
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3455
     b signedInt32At:1 put:-1.
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3456
     (b unsignedInt32At:1) printStringRadix:16
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3457
    "
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3458
    "
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3459
     |b|
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3460
     b := ByteArray new:4.
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3461
     b unsignedInt32At:1 put:16rFFFFFFFF.
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3462
     (b signedInt32At:1)
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3463
    "
19629
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3464
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3465
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3466
unsignedInt32AtLSB:byteIndex
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3467
    "return the 4-bytes starting at index as an unsigned 32bit Integer.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3468
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3469
     The value is retrieved with least significant byte first"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3470
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3471
    ^ self unsignedInt32At:byteIndex MSB:false
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3472
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3473
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3474
unsignedInt32AtLSB:byteIndex put:anInteger
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3475
    "set the 4-bytes starting at index from the unsigned Integer anInteger.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3476
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3477
     The integer is stored with least significant byte first."
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3478
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3479
    ^ self unsignedInt32At:byteIndex put:anInteger MSB:false
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3480
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3481
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3482
unsignedInt32AtMSB:byteIndex
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3483
    "return the 4-bytes starting at index as an unsigned 32bit Integer.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3484
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3485
     The value is retrieved with most significant byte first"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3486
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3487
    ^ self unsignedInt32At:byteIndex MSB:true
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3488
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3489
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3490
unsignedInt32AtMSB:byteIndex put:anInteger
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3491
    "set the 4-bytes starting at index from the unsigned Integer anInteger.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3492
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3493
     The integer is stored with most significant byte first."
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3494
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3495
    ^ self unsignedInt32At:byteIndex put:anInteger MSB:true
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3496
! !
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3497
20961
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3498
!UninterpretedBytes methodsFor:'accessing-pointers'!
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3499
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3500
pointerAt:byteIndex
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3501
    "get a pointer starting at byteIndex as ExternalAddress.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3502
     The byteIndex is a smalltalk index (i.e. 1-based).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3503
     Only aligned accesses are allowed.
22883
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3504
     The pointer is of native cpu's size (4 or 8 bytes).
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3505
     This returns an external adress."
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3506
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3507
    |failReason|
20961
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3508
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3509
%{
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3510
    if (__isSmallInteger(byteIndex)) {
22883
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3511
        unsigned char *cp;
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3512
        INT sz;
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3513
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3514
        __fetchBytePointerAndSize__(self, &cp, &sz);
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3515
        if (cp) {
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3516
            INT idx = __smallIntegerVal(byteIndex) - 1;
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3517
            char *pointer;
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3518
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3519
            if ((idx >= 0) && ((idx+(sizeof(pointer)-1)) < sz)) {
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3520
                cp += idx;
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3521
                /*
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3522
                 * aligned
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3523
                 */
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3524
                if (((INT)cp & (sizeof(pointer)-1)) == 0) {
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3525
                    pointer = ((char **)cp)[0];
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3526
                    RETURN (__MKEXTERNALADDRESS(pointer));
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3527
                }
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3528
                // fprintf(stderr, "cp UNALIGNED (%"_lx_")\n", (INT)cp);
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3529
                failReason = @symbol(unaligned);
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3530
            } else {
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3531
                // fprintf(stderr, "idx(%"_ld_")+(sizeof(pointer)-1) (%d) >= sz (%"_ld_")\n",
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3532
                //        idx, (int)(sizeof(pointer)-1), sz);
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3533
                failReason = @symbol(invalidIndex);
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3534
            }
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3535
        } else {
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3536
            // fprintf(stderr, "cp is NULL\n");
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3537
            failReason = @symbol(nullPointer);
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3538
        }
20961
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3539
    } else {
22883
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3540
        // fprintf(stderr, "non integer index\n");
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3541
        failReason = @symbol(invalidIndex);
20961
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3542
    }
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3543
bad:;
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3544
%}.
22883
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3545
    ^ self reportError:failReason with:byteIndex
20961
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3546
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3547
    "
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3548
     |b|
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3549
     b := ByteArray new:(ExternalAddress pointerSize).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3550
     b pointerAt:1 put:(ExternalAddress newAddress:16r12345678).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3551
     Transcript showCR:((b unsignedInt32At:1) printStringRadix:16).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3552
     Transcript showCR:((b pointerAt:1)).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3553
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3554
     |b|
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3555
     b := ByteArray new:(ExternalAddress pointerSize).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3556
     b pointerAt:1 put:(ExternalAddress newAddress:16r12345678abcdef).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3557
     Transcript showCR:((b unsignedInt64At:1) printStringRadix:16).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3558
     Transcript showCR:((b pointerAt:1)).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3559
    "
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3560
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3561
    "Modified (comment): / 14-11-2016 / 17:32:23 / cg"
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3562
!
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3563
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3564
pointerAt:byteIndex put:value
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3565
    "set the pointer starting at byteIndex from the integer or externalAddress value.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3566
     The byteIndex is a smalltalk index (i.e. 1-based).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3567
     Only aligned accesses are allowed.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3568
     The pointer is of native cpu's size (4 or 8 bytes).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3569
     The value may be either an ExternalAddress, ExternalBytes or an Integer"
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3570
22883
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3571
    |failReason|
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3572
20961
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3573
%{
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3574
    OBJ *pointer;
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3575
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3576
    if (__isExternalAddressLike(value)) {
22883
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3577
        pointer = __externalAddressVal(value);
20961
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3578
    } else if (__isExternalBytesLike(value)) {
22883
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3579
        pointer = __externalBytesVal(value);
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3580
        if (pointer == (OBJ *)0)
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3581
            pointer = 0;
20961
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3582
    } else if (value == nil) {
22883
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3583
        pointer = 0;
20961
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3584
    } else if (__isSmallInteger(value)) {
22883
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3585
        pointer = (OBJ *)__intVal(value);
20961
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3586
    } else {
22883
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3587
        if ((pointer = (OBJ *)__unsignedLongIntVal(value)) == 0) {
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3588
            // fprintf(stderr, "not a largeInt\n");
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3589
            failReason = @symbol(badValue);
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3590
            goto bad;
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3591
        }
20961
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3592
    }
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3593
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3594
    if (__isSmallInteger(byteIndex)) {
22883
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3595
        unsigned char *cp;
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3596
        INT sz;
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3597
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3598
        __fetchBytePointerAndSize__(self, &cp, &sz);
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3599
        if (cp) {
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3600
            INT idx = __smallIntegerVal(byteIndex) - 1;
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3601
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3602
            if ((idx >= 0) && ((idx+(sizeof(pointer)-1)) < sz)) {
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3603
                cp += idx;
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3604
                /*
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3605
                 * aligned
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3606
                 */
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3607
                if (((INT)cp & (sizeof(pointer)-1)) == 0) {
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3608
                    ((char **)cp)[0] = (char *) pointer;
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3609
                    RETURN (value);
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3610
                }
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3611
                // fprintf(stderr, "cp unaligned\n");
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3612
                failReason = @symbol(unaligned);
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3613
            } else {
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3614
                // fprintf(stderr, "idx out of bounds\n");
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3615
                failReason = @symbol(invalidIndex);
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3616
            }
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3617
        } else {
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3618
            // fprintf(stderr, "cp is null\n");
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3619
            failReason = @symbol(nullPointer);
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3620
        }
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3621
    } else {
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3622
        // fprintf(stderr, "byteIndex not a smallInt\n");
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3623
        failReason = @symbol(invalidIndex);
20961
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3624
    }
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3625
bad:;
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3626
%}.
22883
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3627
    ^ self reportError:failReason with:byteIndex
20961
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3628
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3629
    "
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3630
     |b|
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3631
     b := ByteArray new:ExternalAddress pointerSize.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3632
     b pointerAt:1 put:(ExternalAddress newAddress:16r12345678).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3633
     (b unsignedLongAt:1) printStringRadix:16
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3634
    "
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3635
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3636
    "Created: / 05-03-1998 / 10:57:18 / stefan"
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3637
    "Modified (comment): / 14-11-2016 / 17:28:27 / cg"
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3638
!
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3639
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3640
pointerValueAt:byteIndex
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3641
    "get a pointer value starting at byteIndex as unsigned integer.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3642
     The byteIndex is a smalltalk index (i.e. 1-based).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3643
     Only aligned accesses are allowed.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3644
     The pointer is of native cpu's size (4 or 8 bytes).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3645
     This returns an int with sizeof the machines's native pointer (4 or 8 bytes)"
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3646
22883
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3647
    |failReason|
20961
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3648
%{
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3649
    if (__isSmallInteger(byteIndex)) {
22883
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3650
        unsigned char *cp;
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3651
        INT sz;
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3652
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3653
        __fetchBytePointerAndSize__(self, &cp, &sz);
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3654
        if (cp) {
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3655
            INT idx = __smallIntegerVal(byteIndex) - 1;
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3656
            char *pointer;
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3657
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3658
            if ((idx >= 0) && ((idx+(sizeof(pointer)-1)) < sz)) {
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3659
                cp += idx;
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3660
                /*
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3661
                 * aligned
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3662
                 */
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3663
                if (((INT)cp & (sizeof(pointer)-1)) == 0) {
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3664
                    pointer = ((char **)cp)[0];
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3665
                    RETURN (__MKUINT((INT)(pointer)));
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3666
                }
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3667
                // printf("cp UNALIGNED (%"_lx_")\n", (INT)cp);
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3668
                failReason = @symbol(unaligned);
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3669
            } else {
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3670
                // printf("idx(%"_ld_")+(sizeof(pointer)-1) (%d) >= sz (%"_ld_")\n",
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3671
                //        idx, (int)(sizeof(pointer)-1), sz);
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3672
                failReason = @symbol(invalidIndex);
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3673
            }
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3674
        } else {
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3675
            // fprintf(stderr, "cp is NULL\n");
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3676
            failReason = @symbol(nullPointer);
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3677
        }
20961
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3678
    } else {
22883
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3679
        // fprintf(stderr, "non integer index\n");
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3680
        failReason = @symbol(invalidIndex);
20961
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3681
    }
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3682
bad:;
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3683
%}.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3684
22883
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3685
    ^ self reportError:failReason with:byteIndex
20961
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3686
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3687
    "
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3688
     |b|
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3689
     b := ByteArray new:(ExternalAddress pointerSize).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3690
     b pointerAt:1 put:(ExternalAddress newAddress:16r12345678).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3691
     Transcript showCR:((b unsignedLongAt:1) printStringRadix:16).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3692
     Transcript showCR:((b pointerAt:1)).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3693
     Transcript showCR:((b pointerValueAt:1)).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3694
    "
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3695
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3696
    "Modified (comment): / 14-11-2016 / 17:28:33 / cg"
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3697
! !
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3698
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3699
!UninterpretedBytes methodsFor:'accessing-shorts (16bit)'!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3700
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3701
signedInt16At:byteIndex
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3702
    "return the 2-bytes starting at index as a signed Integer.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3703
     The index is a smalltalk index (i.e. 1-based).
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3704
     The value is retrieved in the machine's natural byte order."
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3705
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3706
    ^ (self unsignedInt16At:byteIndex) signExtendedShortValue
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3707
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3708
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3709
     |b|
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3710
     b := ByteArray new:2.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3711
     b wordAt:1 put:16rFFFF.
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3712
     b signedWordAt:1
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3713
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3714
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3715
    "Modified: 1.7.1996 / 21:14:38 / cg"
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3716
!
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3717
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3718
signedInt16At:byteIndex MSB:msb
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3719
    "return the 2-bytes starting at index as a signed Integer.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  3720
     The index is a smalltalk index (i.e. 1-based).
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3721
     The value is retrieved MSB (high 8 bits at lower index) if msb is true;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3722
     LSB-first (i.e. low 8-bits at lower byte index) if it's false.
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3723
     Notice:
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3724
	the index is a byte index; thus, this allows for unaligned access to
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3725
	words on any boundary."
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3726
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3727
    |b1 "{ Class: SmallInteger }"
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3728
     b2 "{ Class: SmallInteger }"|
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3729
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3730
%{
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3731
    /*
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3732
     * handle the most common cases fast ...
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3733
     */
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3734
    if (__isSmallInteger(byteIndex)) {
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3735
	unsigned char *cp;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3736
	INT sz;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3737
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3738
	__fetchBytePointerAndSize__(self, &cp, &sz);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3739
	if (cp) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3740
	    INT idx = __intVal(byteIndex) - 1;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3741
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3742
	    if ((idx >= 0) && ((idx+(2-1)) < sz)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3743
		short sVal;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3744
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3745
		cp += idx;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3746
		if (msb == false) {
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3747
#if defined(__i386__) || (defined(__LSBFIRST__) && defined(UNALIGNED_FETCH_OK))
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3748
		    /*
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3749
		     * aligned or not, we don't care (i386 can do both)
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3750
		     */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3751
		    sVal = ((short *)cp)[0];
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3752
#else
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3753
		    sVal = (cp[0] & 0xFF) | ((cp[1] & 0xFF) << 8);
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3754
#endif
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3755
		} else {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3756
		    sVal = ((cp[0] & 0xFF) << 8) | (cp[1] & 0xFF);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3757
		}
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3758
		RETURN (__mkSmallInteger(sVal));
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3759
	    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3760
	}
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3761
    }
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3762
%}.
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3763
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3764
    b1 := self byteAt:byteIndex.
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3765
    b2 := self byteAt:(byteIndex + 1).
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3766
    msb ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3767
	^ ((b1 bitShift:8) + b2) signExtendedShortValue
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3768
    ].
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3769
    ^ ((b2 bitShift:8) + b1) signExtendedShortValue
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3770
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3771
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3772
signedInt16At:index put:anInteger
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3773
    "set the 2-bytes starting at index from the signed Integer value.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3774
     The index is a smalltalk index (i.e. 1-based).
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3775
     The stored value must be in the range -32768 .. +32676.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3776
     The value is stored in the machine's natural byte order."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3777
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3778
    ^ self signedInt16At:index put:anInteger MSB:IsBigEndian
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3779
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3780
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3781
     |b|
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3782
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3783
     b signedInt16At:1 put:-2.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3784
     b signedInt16At:3 put:-3.
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3785
     b inspect
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3786
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3787
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3788
    "Modified: 1.7.1996 / 21:12:13 / cg"
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3789
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3790
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3791
signedInt16At:byteIndex put:anInteger MSB:msb
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3792
    "set the 2-bytes starting at byteIndex from the signed integer value.
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3793
     The byteIndex is a smalltalk index (i.e. 1-based).
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3794
     The stored value must be in the range -32768 .. +32676.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3795
     The value is stored MSB-first, if the msb-arg is true;
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3796
     LSB-first otherwise."
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3797
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3798
%{  /* NOCONTEXT */
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3799
    /*
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3800
     * handle the most common case fast ...
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3801
     */
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3802
    if (__isSmallInteger(byteIndex)) {
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3803
	unsigned char *cp;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3804
	INT sz;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3805
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3806
	__fetchBytePointerAndSize__(self, &cp, &sz);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3807
	if (cp) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3808
	    INT idx = __intVal(byteIndex) - 1;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3809
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3810
	    if ((idx >= 0) && ((idx+1) < sz)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3811
		cp += idx;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3812
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3813
		if (__isSmallInteger(anInteger)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3814
		    INT __v = __intVal(anInteger);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3815
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3816
		    if ((__v < -0x8000L) || (__v > 0x7FFF)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3817
			goto badArg;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3818
		    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3819
		    if (msb == false) {
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3820
#if defined(__i386__) || (defined(__LSBFIRST__) && defined(UNALIGNED_FETCH_OK))
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3821
			((short *)cp)[0] = (short)__v;
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3822
#else
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3823
			cp[0] = __v & 0xFF;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3824
			cp[1] = (__v >> 8) & 0xFF;
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3825
#endif
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3826
		    } else {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3827
			cp[0] = (__v >> 8) & 0xFF;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3828
			cp[1] = __v & 0xFF;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3829
		    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3830
		    RETURN (anInteger);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3831
		}
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3832
	    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3833
	}
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3834
    }
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3835
  badArg: ;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3836
%}.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3837
    anInteger >= 0 ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3838
	self unsignedInt16At:byteIndex put:anInteger MSB:msb.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3839
    ] ifFalse:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3840
	self unsignedInt16At:byteIndex put:(16r10000 + anInteger) MSB:msb.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3841
    ].
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3842
    ^ anInteger
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3843
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3844
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3845
     |b|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3846
     b := ByteArray new:4.
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3847
     b signedInt16At:1 put:-1.
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3848
     b signedInt16At:3 put:-2.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3849
     b inspect
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3850
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3851
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3852
    "Modified: 1.7.1996 / 21:12:13 / cg"
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3853
!
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3854
19629
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3855
signedInt16AtLSB:byteIndex
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3856
    "return the 2-bytes starting at index as a signed Integer.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3857
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3858
     The value is retrieved with least significant byte first"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3859
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3860
    ^ self signedInt16At:byteIndex MSB:false
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3861
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3862
    "
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3863
     |b|
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3864
     b := ByteArray new:2.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3865
     b wordAt:1 put:16rFFFE.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3866
     b signedInt16AtLSB:1.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3867
     b signedInt16AtMSB:1.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3868
    "
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3869
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3870
    "Modified: 1.7.1996 / 21:14:38 / cg"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3871
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3872
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3873
signedInt16AtLSB:index put:anInteger
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3874
    "set the 2-bytes starting at index from the signed Integer value.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3875
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3876
     The stored value must be in the range 0 .. 16rFFFF.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3877
     The value is stored with least significant byte first"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3878
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3879
    ^ self signedInt16At:index put:anInteger MSB:false
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3880
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3881
    "
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3882
     |b|
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3883
     b := ByteArray new:4.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3884
     b signedInt16At:1 put:16r0102.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3885
     b signedInt16At:3 put:16r0304.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3886
     b inspect
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3887
    "
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3888
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3889
    "Created: / 5.3.1998 / 11:54:52 / stefan"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3890
    "Modified: / 5.3.1998 / 14:59:38 / stefan"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3891
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3892
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3893
signedInt16AtMSB:byteIndex
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3894
    "return the 2-bytes starting at index as a signed Integer.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3895
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3896
     The value is retrieved with most significant byte first"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3897
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3898
    ^ self signedInt16At:byteIndex MSB:true
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3899
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3900
    "
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3901
     |b|
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3902
     b := ByteArray new:2.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3903
     b wordAt:1 put:16rFFFE.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3904
     b signedInt16AtLSB:1.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3905
     b signedInt16AtMSB:1.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3906
    "
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3907
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3908
    "Modified: 1.7.1996 / 21:14:38 / cg"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3909
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3910
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3911
signedInt16AtMSB:index put:anInteger
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3912
    "set the 2-bytes starting at index from the signed Integer value.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3913
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3914
     The stored value must be in the range 0 .. 16rFFFF.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3915
     The value is stored with most significant byte first"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3916
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3917
    ^ self signedInt16At:index put:anInteger MSB:true
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3918
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3919
    "
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3920
     |b|
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3921
     b := ByteArray new:4.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3922
     b signedInt16At:1 put:16r0102.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3923
     b signedInt16At:3 put:16r0304.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3924
     b inspect
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3925
    "
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3926
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3927
    "Created: / 5.3.1998 / 11:54:52 / stefan"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3928
    "Modified: / 5.3.1998 / 14:59:38 / stefan"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3929
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3930
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3931
unsignedInt16At:index
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3932
    "return the 2-bytes starting at index as an (unsigned) Integer.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  3933
     The index is a smalltalk index (i.e. 1-based).
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3934
     The value is retrieved in the machine's natural byte order"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3935
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3936
    ^ self unsignedInt16At:index MSB:IsBigEndian
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3937
!
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3938
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3939
unsignedInt16At:byteIndex MSB:msb
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3940
    "return the 2-bytes starting at index as an (unsigned) Integer.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  3941
     The index is a smalltalk index (i.e. 1-based).
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3942
     The value is retrieved MSB (high 8 bits at lower index) if msb is true;
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3943
     LSB-first (i.e. low 8-bits at lower byte index) if it's false.
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3944
     Notice:
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3945
	the index is a byte index; thus, this allows for unaligned access to
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3946
	words on any boundary."
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3947
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3948
    |b1 "{ Class: SmallInteger }"
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3949
     b2 "{ Class: SmallInteger }"|
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3950
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3951
%{
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3952
    /*
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3953
     * handle the most common cases fast ...
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3954
     */
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3955
    if (__isSmallInteger(byteIndex)) {
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3956
	unsigned char *cp;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3957
	INT sz;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3958
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3959
	__fetchBytePointerAndSize__(self, &cp, &sz);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3960
	if (cp) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3961
	    INT idx = __intVal(byteIndex) - 1;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3962
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3963
	    if ((idx >= 0) && ((idx+(2-1)) < sz)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3964
		int iVal;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3965
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3966
		cp += idx;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3967
		if (msb == false) {
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3968
#if defined(__i386__) || (defined(__LSBFIRST__) && defined(UNALIGNED_FETCH_OK))
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3969
		    /*
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3970
		     * aligned or not, we don't care (i386 can do both)
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3971
		     */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3972
		    iVal = ((unsigned short *)cp)[0];
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3973
#else
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3974
		    iVal = (cp[0] & 0xFF) | ((cp[1] & 0xFF) << 8);
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3975
#endif
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3976
		} else {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3977
		    iVal = ((cp[0] & 0xFF) << 8) | (cp[1] & 0xFF);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3978
		}
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3979
		RETURN (__mkSmallInteger(iVal));
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3980
	    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3981
	}
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3982
    }
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3983
%}.
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3984
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3985
    b1 := self byteAt:byteIndex.
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3986
    b2 := self byteAt:(byteIndex + 1).
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3987
    msb ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3988
	^ (b1 bitShift:8) + b2
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3989
    ].
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3990
    ^ (b2 bitShift:8) + b1
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3991
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3992
    "
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3993
     #[ 16rFF 16r00 ] unsignedInt16At:1 MSB:true
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3994
     #[ 16rFF 16r00 ] unsignedInt16At:1 MSB:false
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3995
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3996
     #[ 16rFF 16r00 ] unsignedInt16At:2 MSB:true
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3997
     #[ 16rFF 16r00 ] unsignedInt16At:2 MSB:false
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3998
    "
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3999
!
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4000
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  4001
unsignedInt16At:index put:anInteger
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4002
    "set the 2-bytes starting at index from the (unsigned) Integer value.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  4003
     The index is a smalltalk index (i.e. 1-based).
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  4004
     The stored value must be in the range 0 .. 16rFFFF.
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4005
     The value is stored in the machine's natural byteorder."
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4006
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  4007
    ^ self unsignedInt16At:index put:anInteger MSB:IsBigEndian
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4008
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4009
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4010
     |b|
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4011
     b := ByteArray new:4.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  4012
     b unsignedInt16At:1 put:16r0102.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  4013
     b unsignedInt16At:3 put:16r0304.
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  4014
     b inspect
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4015
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4016
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4017
    "Created: / 5.3.1998 / 11:54:52 / stefan"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4018
    "Modified: / 5.3.1998 / 14:59:38 / stefan"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4019
!
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4020
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  4021
unsignedInt16At:byteIndex put:anInteger MSB:msb
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4022
    "set the 2-bytes starting at index from the (unsigned) Integer value.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  4023
     The index is a smalltalk index (i.e. 1-based).
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  4024
     The stored value must be in the range 0 .. 16rFFFF.
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4025
     The value is stored LSB-first (i.e. the low 8bits are stored at the
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4026
     lower index) if msb is false, MSB-first otherwise"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4027
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4028
    |b1 b2
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4029
     iVal "{ Class: SmallInteger }"|
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4030
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  4031
%{  /* NOCONTEXT */
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  4032
    /*
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  4033
     * handle the most common case fast ...
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  4034
     */
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  4035
    if (__isSmallInteger(byteIndex)) {
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4036
	unsigned char *cp;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4037
	INT sz;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4038
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4039
	__fetchBytePointerAndSize__(self, &cp, &sz);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4040
	// printf("cp=%"_lx_"\n", (INT)cp);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4041
	if (cp) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4042
	    INT idx = __intVal(byteIndex) - 1;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4043
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4044
	    if ((idx >= 0) && ((idx+1) < sz)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4045
		cp += idx;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4046
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4047
		if (__isSmallInteger(anInteger)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4048
		    INT __v = __intVal(anInteger);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4049
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4050
		    if (((unsigned INT)__v) > 0xFFFF) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4051
			goto badArg;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4052
		    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4053
		    if (msb == false) {
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  4054
#if defined(__i386__) || (defined(__LSBFIRST__) && defined(UNALIGNED_FETCH_OK))
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4055
			((unsigned short *)cp)[0] = (unsigned short)__v;
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  4056
#else
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4057
			cp[0] = __v & 0xFF;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4058
			cp[1] = (__v >> 8) & 0xFF;
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  4059
#endif
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4060
		    } else {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4061
			cp[0] = (__v >> 8) & 0xFF;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4062
			cp[1] = __v & 0xFF;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4063
		    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4064
		    RETURN (anInteger);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4065
		}
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4066
	    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4067
	}
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  4068
    }
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  4069
  badArg: ;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  4070
%}.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  4071
    iVal := anInteger.
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4072
    ((iVal < 0) or:[iVal > 16rFFFF]) ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4073
	^ self elementBoundsError:iVal
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4074
    ].
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4075
    msb ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4076
	b1 := ((iVal bitShift:-8) bitAnd:16rFF).
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4077
	b2 := (iVal bitAnd:16rFF).
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4078
    ] ifFalse:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4079
	b1 := (iVal bitAnd:16rFF).
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4080
	b2 := ((iVal bitShift:-8) bitAnd:16rFF).
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4081
    ].
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  4082
    self byteAt:byteIndex   put:b1.
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  4083
    self byteAt:byteIndex+1 put:b2.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  4084
    ^ anInteger
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4085
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4086
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4087
     |b|
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4088
     b := ByteArray new:8.
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  4089
     b unsignedInt16At:1 put:16r0102 MSB:false.
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  4090
     b unsignedInt16At:3 put:16r0304 MSB:false.
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  4091
     b unsignedInt16At:5 put:16r0102 MSB:true.
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  4092
     b unsignedInt16At:7 put:16r0304 MSB:true.
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  4093
     b inspect
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4094
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4095
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4096
    "Modified: / 21.1.1998 / 17:48:15 / cg"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4097
    "Modified: / 5.3.1998 / 11:52:28 / stefan"
19629
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4098
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4099
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4100
unsignedInt16AtLSB:byteIndex
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4101
    "return the 2-bytes starting at index as an unsigned Integer.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4102
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4103
     The value is retrieved with least significant byte first"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4104
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4105
    ^ self unsignedInt16At:byteIndex MSB:false
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4106
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4107
    "
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4108
     |b|
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4109
     b := ByteArray new:2.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4110
     b wordAt:1 put:16rFFFE.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4111
     b unsignedInt16AtLSB:1.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4112
     b unsignedInt16AtMSB:1.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4113
    "
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4114
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4115
    "Modified: 1.7.1996 / 21:14:38 / cg"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4116
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4117
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4118
unsignedInt16AtLSB:index put:anInteger
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4119
    "set the 2-bytes starting at index from the (unsigned) Integer value.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4120
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4121
     The stored value must be in the range 0 .. 16rFFFF.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4122
     The value is stored with least significant byte first"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4123
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4124
    ^ self unsignedInt16At:index put:anInteger MSB:false
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4125
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4126
    "
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4127
     |b|
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4128
     b := ByteArray new:4.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4129
     b unsignedInt16At:1 put:16r0102.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4130
     b unsignedInt16At:3 put:16r0304.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4131
     b inspect
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4132
    "
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4133
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4134
    "Created: / 5.3.1998 / 11:54:52 / stefan"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4135
    "Modified: / 5.3.1998 / 14:59:38 / stefan"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4136
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4137
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4138
unsignedInt16AtMSB:byteIndex
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4139
    "return the 2-bytes starting at index as an unsigned Integer.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4140
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4141
     The value is retrieved with most significant byte first"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4142
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4143
    ^ self unsignedInt16At:byteIndex MSB:true
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4144
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4145
    "
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4146
     |b|
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4147
     b := ByteArray new:2.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4148
     b wordAt:1 put:16rFFFF.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4149
     b signedWordAt:1
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4150
    "
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4151
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4152
    "Modified: 1.7.1996 / 21:14:38 / cg"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4153
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4154
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4155
unsignedInt16AtMSB:index put:anInteger
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4156
    "set the 2-bytes starting at index from the (unsigned) Integer value.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4157
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4158
     The stored value must be in the range 0 .. 16rFFFF.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4159
     The value is stored with most significant byte first"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4160
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4161
    ^ self unsignedInt16At:index put:anInteger MSB:true
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4162
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4163
    "
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4164
     |b|
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4165
     b := ByteArray new:4.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4166
     b unsignedInt16At:1 put:16r0102.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4167
     b unsignedInt16At:3 put:16r0304.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4168
     b inspect
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4169
    "
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4170
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4171
    "Created: / 5.3.1998 / 11:54:52 / stefan"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4172
    "Modified: / 5.3.1998 / 14:59:38 / stefan"
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4173
! !
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4174
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4175
!UninterpretedBytes methodsFor:'accessing-strings'!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4176
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4177
stringAt:index
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4178
    "return a string starting at index up to the 0-byte.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4179
     The index is a smalltalk index (i.e. 1-based)."
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4180
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4181
    |stream i "{ Class: SmallInteger }" c|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4182
10676
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4183
    stream := WriteStream on:(String new:40).
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4184
    i := index.
10676
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4185
    [(c := self byteAt:i) ~~ 0] whileTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4186
	stream nextPut:(Character value:c).
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4187
	i := i + 1.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4188
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4189
    ^ stream contents
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4190
10676
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4191
    "
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  4192
      #[71 72 73 74 75 76 77 0] stringAt:1
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  4193
      #[71 72 73 74 75 76 77 0] stringAt:2
10676
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4194
      '1234567890' stringAt:2
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4195
    "
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4196
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4197
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4198
stringAt:index put:aString
19196
1db38251aeb2 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19101
diff changeset
  4199
    "copy aString to the receiver, starting at index up to
7815
6bd3a60a6f0c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7814
diff changeset
  4200
     (and including) the 0-byte (which is always written).
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4201
     The index is a smalltalk index (i.e. 1-based)."
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4202
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4203
    |i "{ Class: SmallInteger }"|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4204
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4205
    i := index.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4206
    aString do:[:aChar |
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4207
	self byteAt:i put:aChar codePoint.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4208
	i := i + 1.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4209
    ].
10676
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4210
    self byteAt:i put:0.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4211
    ^ aString
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4212
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4213
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4214
     |bytes|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4215
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4216
     bytes := ExternalBytes new:10.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4217
     bytes stringAt:1 put:'hello'.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4218
     1 to:bytes size do:[:i |
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4219
	Transcript showCR:(bytes at:i)
10676
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4220
     ].
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4221
    "
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4222
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4223
    "
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4224
     (String new:20) stringAt:1 put:'hello'; stringAt:6 put:' world'; yourself
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4225
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4226
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4227
    "Created: / 21.1.1998 / 17:45:02 / cg"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4228
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4229
7812
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4230
stringAt:index put:aString size:maxSize
19196
1db38251aeb2 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19101
diff changeset
  4231
    "copy aString to the receiver, starting at index up to either maxSize characters,
7812
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4232
     or (and including) the 0-byte, whichever is encountered first.
7815
6bd3a60a6f0c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7814
diff changeset
  4233
     The final 0-byte is only written, if the string is shorter than maxSize.
7812
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4234
     The index is a smalltalk index (i.e. 1-based)."
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4235
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4236
    |remaining "{ Class: SmallInteger }"
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4237
     i         "{ Class: SmallInteger }"|
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4238
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4239
    remaining := maxSize.
7816
827f1cf51862 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7815
diff changeset
  4240
    remaining <= 0 ifTrue:[^ aString].
7812
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4241
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4242
    i := index.
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4243
    aString do:[:aChar |
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4244
	self byteAt:i put:aChar codePoint.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4245
	i := i + 1.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4246
	remaining := remaining - 1.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4247
	remaining <= 0 ifTrue:[^ aString].
7812
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4248
    ].
10676
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4249
    self byteAt:i put:0.
7812
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4250
    ^ aString
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4251
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4252
    "
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4253
     |bytes|
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4254
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4255
     bytes := ExternalBytes new:10.
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4256
     bytes stringAt:1 put:'hello' size:3.
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4257
     1 to:bytes size do:[:i |
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4258
	Transcript showCR:(bytes at:i)
7812
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4259
     ]
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4260
    "
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4261
    "
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4262
     |bytes|
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4263
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4264
     bytes := ByteArray new:10 withAll:16rFF.
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4265
     bytes stringAt:1 put:'he' size:3.
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4266
     1 to:bytes size do:[:i |
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4267
	Transcript showCR:(bytes at:i)
7812
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4268
     ]
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4269
    "
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4270
10676
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4271
    "
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4272
     (String new:20) stringAt:1 put:'hello' size:3 ; stringAt:4 put:' world' size:4; yourself
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4273
    "
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4274
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4275
7812
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4276
    "Created: / 21.1.1998 / 17:45:02 / cg"
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4277
!
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4278
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4279
stringAt:index size:maxSize
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4280
    "return a string starting at index up to maxSize, or a 0-byte.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4281
     The index is a smalltalk index (i.e. 1-based)."
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4282
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  4283
    |stream c
10676
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4284
     max "{ Class: SmallInteger }"
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4285
     start "{ Class: SmallInteger }"|
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4286
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4287
    stream := WriteStream on:(String new:maxSize).
10676
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4288
    start := index.
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4289
    max := start + maxSize - 1.
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4290
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4291
    start to:max do:[:eachIndex|
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4292
	c := self byteAt:eachIndex.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4293
	c == 0 ifTrue:[
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4294
	    ^ stream contents
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4295
	].
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4296
	stream nextPut:(Character value:c).
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4297
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4298
    ^ stream contents
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4299
10676
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4300
    "
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4301
      #[71 72 73 74 75 76 77] stringAt:1 size:7
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4302
      #[71 72 73 74 75 76 77] stringAt:2 size:6
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4303
      '1234567890' stringAt:2 size:6
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4304
    "
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  4305
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  4306
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  4307
zeroByteStringAt:index maximumSize:count
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  4308
    "extract a zeroByte-delimited string, given initial index and
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  4309
     maximum number of characters (bytes).
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  4310
     The index is a smalltalk index (i.e. 1-based)."
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  4311
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4312
    |bytes endIndex idx|
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4313
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4314
    endIndex := self indexOf:0 startingAt:index.
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4315
    endIndex == 0 ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4316
	endIndex := self size + 1
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4317
    ].
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4318
    endIndex := (endIndex min: (index + count)) - 1.
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4319
    bytes := self copyFrom:index to:endIndex.
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  4320
    ^ bytes asString
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  4321
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4322
    "
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4323
     #[ 1 2 3 4 5 6 7 8 ] zeroByteStringAt:2 maximumSize:10
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4324
     #[ 1 2 3 4 5 0 6 7 8 ] zeroByteStringAt:2 maximumSize:10
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4325
     #[ 1 2 3 4 5 0 6 7 8 ] zeroByteStringAt:2 maximumSize:3
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4326
     #[ 1 2 3 4 5 0 6 7 8 ] zeroByteStringAt:2 maximumSize:4
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4327
    "
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  4328
! !
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  4329
12951
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  4330
!UninterpretedBytes methodsFor:'converting'!
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  4331
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  4332
asExternalBytes
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4333
    "in earlier times, this use to return protected memory
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  4334
     (i.e. it would not be garbage collected, and the user had to free it manually).
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  4335
     This was changed to now return garbage collected memory."
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  4336
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  4337
    ^ self asExternalBytesUnprotected.
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  4338
12951
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  4339
    "
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  4340
      #[1 2 3 4 5 6 7] asExternalBytes
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  4341
      'Hello World' asExternalBytes
14142
7a769e54130d changed:
Stefan Vogel <sv@exept.de>
parents: 14132
diff changeset
  4342
      'Hello World' asUnicodeString asExternalBytes
12951
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  4343
    "
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  4344
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  4345
    "Modified (comment): / 04-08-2017 / 11:25:00 / cg"
14132
debafd18f04b added: #asUUID
Stefan Vogel <sv@exept.de>
parents: 14131
diff changeset
  4346
!
debafd18f04b added: #asUUID
Stefan Vogel <sv@exept.de>
parents: 14131
diff changeset
  4347
14155
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4348
asExternalBytesUnprotected
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  4349
    "Like asExternalBytes, but does not protect the bytes from the collector,
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4350
     so the bytes are GARBAGE-COLLECTED
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  4351
     (i.e. free is called when the smalltalk object is no longer referenced)."
14155
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4352
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4353
    |bytes sz|
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4354
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4355
    sz := self byteSize.
15836
cdf0d7258f9e class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15717
diff changeset
  4356
    bytes := ExternalBytes unprotectedNew:sz.
14155
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4357
    bytes replaceFrom:1 to:sz with:self startingAt:1.
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4358
    ^ bytes
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4359
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4360
    "
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4361
     |x|
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4362
     x := 'fooBar' asExternalBytesUnprotected.
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4363
     ObjectMemory garbageCollect
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4364
    "
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4365
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4366
    "Created: / 05-06-2012 / 14:11:35 / Jan Vrany <jan.vrany@fit.cvut.cz>"
15836
cdf0d7258f9e class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15717
diff changeset
  4367
    "Modified: / 30-11-2013 / 11:42:21 / cg"
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  4368
    "Modified (comment): / 04-08-2017 / 11:22:58 / cg"
14155
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4369
!
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4370
18600
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  4371
asSingleByteString
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  4372
    "return the receiver converted to a 'normal' string.
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  4373
     Raises an error if unrepresentable characters are encountered.
21474
151c0f5bf617 #DOCUMENTATION by stefan
Stefan Vogel <sv@exept.de>
parents: 21437
diff changeset
  4374
     See also: #asSingleByteStringIfPossible and #asSingleByteStringReplaceInvalidWith:"
18600
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  4375
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  4376
    ^ String fromString:self
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  4377
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  4378
    "
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  4379
     #[60 61 62 63] asSingleByteString
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4380
     #[60 61 62 63] asExternalBytes  asSingleByteString
18969
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4381
     #[67 68 69 70] asIntegerArray asSingleByteString
21474
151c0f5bf617 #DOCUMENTATION by stefan
Stefan Vogel <sv@exept.de>
parents: 21437
diff changeset
  4382
     'abc' asText asSingleByteString
18600
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  4383
     (Unicode16String with:(Character value:16rFF)) asSingleByteString
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  4384
     (Unicode16String with:(Character value:16rFFFF)) asSingleByteString
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  4385
    "
21474
151c0f5bf617 #DOCUMENTATION by stefan
Stefan Vogel <sv@exept.de>
parents: 21437
diff changeset
  4386
151c0f5bf617 #DOCUMENTATION by stefan
Stefan Vogel <sv@exept.de>
parents: 21437
diff changeset
  4387
    "Modified (comment): / 16-02-2017 / 20:25:14 / stefan"
18600
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  4388
!
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  4389
18969
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4390
asSingleByteStringIfPossible
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4391
    "if possible, return the receiver converted to a 'normal' string.
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4392
     It is only possible, if there are no characters with codePoints above 255 in the receiver.
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4393
     If not possible, the (wideString) receiver is returned."
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4394
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4395
    self containsNon8BitElements ifTrue:[^ self asString].
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4396
    ^ self asSingleByteString.
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4397
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4398
    "
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4399
     #[67 68 69 70] asSingleByteStringIfPossible
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4400
     #[67 68 69 70] asIntegerArray asSingleByteStringIfPossible
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4401
     'hello' asUnicodeString asSingleByteStringIfPossible
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4402
    "
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4403
!
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4404
14132
debafd18f04b added: #asUUID
Stefan Vogel <sv@exept.de>
parents: 14131
diff changeset
  4405
asUUID
debafd18f04b added: #asUUID
Stefan Vogel <sv@exept.de>
parents: 14131
diff changeset
  4406
    ^ UUID fromBytes:self
12951
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  4407
! !
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  4408
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4409
!UninterpretedBytes methodsFor:'encoding & decoding'!
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4410
23626
a08a4299109d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22883
diff changeset
  4411
base64Decoded
a08a4299109d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22883
diff changeset
  4412
    ^ Base64Coder decode:self
a08a4299109d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22883
diff changeset
  4413
a08a4299109d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22883
diff changeset
  4414
    "
a08a4299109d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22883
diff changeset
  4415
     'abc' base64Encoded base64Decoded
a08a4299109d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22883
diff changeset
  4416
     #[1 2 3] base64Encoded base64Decoded
a08a4299109d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22883
diff changeset
  4417
    "
a08a4299109d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22883
diff changeset
  4418
a08a4299109d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22883
diff changeset
  4419
    "Created: / 21-01-2019 / 17:24:00 / Claus Gittinger"
a08a4299109d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22883
diff changeset
  4420
!
a08a4299109d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22883
diff changeset
  4421
a08a4299109d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22883
diff changeset
  4422
base64Encoded
a08a4299109d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22883
diff changeset
  4423
    ^ Base64Coder encode:self
a08a4299109d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22883
diff changeset
  4424
a08a4299109d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22883
diff changeset
  4425
    "
a08a4299109d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22883
diff changeset
  4426
     'abc' base64Encoded
a08a4299109d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22883
diff changeset
  4427
     #[1 2 3] base64Encoded
a08a4299109d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22883
diff changeset
  4428
    "
a08a4299109d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22883
diff changeset
  4429
a08a4299109d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22883
diff changeset
  4430
    "Created: / 21-01-2019 / 17:23:33 / Claus Gittinger"
a08a4299109d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22883
diff changeset
  4431
!
a08a4299109d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22883
diff changeset
  4432
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4433
utf8Decoded
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4434
    "Interpreting myself as an UTF-8 representation, decode and return the decoded string."
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4435
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4436
    ^ CharacterArray decodeFromUTF8:self.
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4437
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4438
    "
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4439
     #[16rC8 16rA0] utf8Decoded
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4440
     #[16rC8 16rA0] asString utf8Decoded
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4441
     #[16rC8 16rA0] asExternalBytes utf8Decoded
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4442
     (Character value:16r220) utf8Encoded utf8Decoded
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4443
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4444
     (Character value:16r800) utf8Encoded
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4445
     (Character value:16r220) utf8Encoded utf8Decoded
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4446
    "
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4447
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4448
    "test:
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4449
21377
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  4450
      1 to:16r10FFFF do:[:codepoint |
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4451
	|utf8Encoding original readBack|
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4452
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4453
	original := (Character value:codepoint) asString.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4454
	utf8Encoding := original utf8Encoded.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4455
	readBack := utf8Encoding utf8Decoded.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4456
	readBack ~= original ifTrue:[
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4457
	    self halt
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4458
	]
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4459
      ]
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4460
    "
21377
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  4461
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  4462
    "Modified (comment): / 07-02-2017 / 17:36:08 / stefan"
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4463
!
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4464
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4465
utf8DecodedWithTwoByteCharactersReplacedBy:replacementCharacter
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4466
    "Interpreting myself as an UTF-8 representation, decode and return
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4467
     the decoded string. Suppress all 2-byte (above 16rFF) characters,
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4468
     and replace them with replacementCharacter"
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4469
22405
e11520f05fef #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 22381
diff changeset
  4470
    |in out|
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4471
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4472
    self containsNon7BitAscii ifFalse:[
22405
e11520f05fef #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 22381
diff changeset
  4473
        ^ self asSingleByteString   "plain ASCII"
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4474
    ].
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4475
22405
e11520f05fef #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 22381
diff changeset
  4476
    out := WriteStream on:(String uninitializedNew:self utf8DecodedSize).
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4477
    in := self readStream.
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4478
    [in atEnd] whileFalse:[
22405
e11520f05fef #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 22381
diff changeset
  4479
        |c|
e11520f05fef #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 22381
diff changeset
  4480
e11520f05fef #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 22381
diff changeset
  4481
        c := Character utf8DecodeFrom:in.
e11520f05fef #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 22381
diff changeset
  4482
        c codePoint > 16rFF ifTrue:[
e11520f05fef #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 22381
diff changeset
  4483
            c := replacementCharacter
e11520f05fef #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 22381
diff changeset
  4484
        ].
e11520f05fef #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 22381
diff changeset
  4485
        out nextPut:c.
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4486
    ].
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4487
    ^ out contents
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4488
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4489
    "
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4490
     (Character value:16r220) utf8Encoded
22405
e11520f05fef #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 22381
diff changeset
  4491
        utf8DecodedWithTwoByteCharactersReplacedBy:(Character space)
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4492
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4493
     (Character value:16r220) utf8Encoded asExternalBytes copyButLast
22405
e11520f05fef #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 22381
diff changeset
  4494
        utf8DecodedWithTwoByteCharactersReplacedBy:(Character space)
e11520f05fef #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 22381
diff changeset
  4495
    "
e11520f05fef #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 22381
diff changeset
  4496
e11520f05fef #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 22381
diff changeset
  4497
    "Modified (comment): / 02-01-2018 / 18:54:18 / stefan"
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4498
! !
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4499
4782
04a2ea1ad3a5 added replaceBytes...
Claus Gittinger <cg@exept.de>
parents: 4530
diff changeset
  4500
!UninterpretedBytes methodsFor:'filling & replacing'!
04a2ea1ad3a5 added replaceBytes...
Claus Gittinger <cg@exept.de>
parents: 4530
diff changeset
  4501
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4502
replaceBytesFrom:start to:stop with:aCollection startingAt:repStart
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4503
    "replace elements from another collection, which must be a ByteArray-
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4504
     like collection.
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4505
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4506
     Notice: This operation modifies the receiver, NOT a copy;
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4507
     therefore the change may affect all others referencing the receiver."
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4508
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4509
%{  /* NOCONTEXT */
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4510
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4511
    int nIndex, repNIndex;
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4512
    int startIndex, stopIndex;
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4513
    REGISTER unsigned char *src;
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4514
    REGISTER int repStartIndex;
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4515
    int repStopIndex, count;
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4516
    REGISTER unsigned char *dst;
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4517
    OBJ cls;
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4518
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4519
#ifndef NO_PRIM_BYTEARR
14082
8ee1315d35eb Revert to 1.81
Stefan Vogel <sv@exept.de>
parents: 14081
diff changeset
  4520
    if ((__isBytes(aCollection) || __isExternalBytesLike(aCollection))
14142
7a769e54130d changed:
Stefan Vogel <sv@exept.de>
parents: 14132
diff changeset
  4521
     && (__isBytes(self) || __isWords(self))
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4522
     && __bothSmallInteger(start, stop)
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4523
     && __isSmallInteger(repStart)) {
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4524
	startIndex = __intVal(start) - 1;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4525
	if (startIndex >= 0) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4526
	    dst = (__ByteArrayInstPtr(self)->ba_element) + startIndex;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4527
	    nIndex = __byteArraySize(self);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4528
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4529
	    if ((cls = __qClass(self)) != @global(ByteArray)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4530
		int nInst;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4531
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4532
		nInst = __OBJS2BYTES__(__intVal(__ClassInstPtr(cls)->c_ninstvars));
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4533
		dst += nInst;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4534
		nIndex -= nInst;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4535
	    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4536
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4537
	    stopIndex = __intVal(stop) - 1;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4538
	    count = stopIndex - startIndex + 1;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4539
	    if (count == 0) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4540
		RETURN ( self );
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4541
	    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4542
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4543
	    if ((count > 0) && (stopIndex < nIndex)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4544
		repStartIndex = __intVal(repStart) - 1;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4545
		if (repStartIndex >= 0) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4546
		    if (__isExternalBytesLike(aCollection)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4547
			OBJ sz;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4548
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4549
			src = __externalAddressVal(aCollection);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4550
			if (src == 0) goto fallBack;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4551
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4552
			sz = __externalBytesSize(aCollection);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4553
			if (__isSmallInteger(sz)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4554
			    repNIndex = __smallIntegerVal(sz);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4555
			} else {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4556
			    repNIndex = repStopIndex+1; /* always enough */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4557
			}
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4558
			src = src + repStartIndex;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4559
		    } else {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4560
			if (__isStringLike(aCollection)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4561
			    repNIndex = __stringSize(aCollection);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4562
			} else {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4563
			    repNIndex = __qSize(aCollection) - OHDR_SIZE;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4564
			}
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4565
			src = (__ByteArrayInstPtr(aCollection)->ba_element) + repStartIndex;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4566
			if ((cls = __qClass(aCollection)) != @global(ByteArray)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4567
			    int nInst;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4568
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4569
			    nInst = __OBJS2BYTES__(__intVal(__ClassInstPtr(cls)->c_ninstvars));
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4570
			    src += nInst;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4571
			    repNIndex -= nInst;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4572
			}
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4573
		    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4574
		    repStopIndex = repStartIndex + (stopIndex - startIndex);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4575
		    if (repStopIndex < repNIndex) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4576
			if (aCollection == self) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4577
			    /* take care of overlapping copy */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4578
			    if (src < dst) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4579
				/* must do a reverse copy */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4580
				src += count;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4581
				dst += count;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4582
				while (count-- > 0) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4583
				    *--dst = *--src;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4584
				}
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4585
				RETURN ( self );
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4586
			    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4587
			}
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4588
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4589
# ifdef bcopy4
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4590
			if (((unsigned INT)src & 3) == ((unsigned INT)dst & 3)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4591
			    int nW;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4592
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4593
			    /* copy unaligned part */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4594
			    while (count && ((unsigned INT)src & 3)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4595
				*dst++ = *src++;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4596
				count--;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4597
			    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4598
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4599
			    if (count > 0) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4600
				/* copy aligned part */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4601
				nW = count >> 2;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4602
				bcopy4(src, dst, nW);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4603
				if ((count = count & 3) != 0) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4604
				    /* copy any remaining part */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4605
				    src += (nW<<2);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4606
				    dst += (nW<<2);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4607
				    while (count--) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4608
					*dst++ = *src++;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4609
				    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4610
				}
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4611
			    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4612
			    RETURN ( self );
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4613
			}
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4614
# else
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4615
#  if __POINTER_SIZE__ == 8
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4616
			if (((unsigned INT)src & 7) == ((unsigned INT)dst & 7)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4617
			    /* copy unaligned part */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4618
			    while (count && ((unsigned INT)src & 7)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4619
				*dst++ = *src++;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4620
				count--;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4621
			    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4622
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4623
			    /* copy aligned part */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4624
			    while (count >= 8) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4625
				((unsigned INT *)dst)[0] = ((unsigned INT *)src)[0];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4626
				dst += 8;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4627
				src += 8;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4628
				count -= 8;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4629
			    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4630
			    while (count--) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4631
				*dst++ = *src++;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4632
			    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4633
			    RETURN ( self );
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4634
			}
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4635
#  endif /* 64bit */
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4636
# endif /* bcopy4 */
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4637
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4638
# ifdef FAST_MEMCPY
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4639
			bcopy(src, dst, count);
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4640
# else
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4641
#  ifdef __UNROLL_LOOPS__
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4642
			while (count >= 8) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4643
			    dst[0] = src[0]; dst[1] = src[1];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4644
			    dst[2] = src[2]; dst[3] = src[3];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4645
			    dst[4] = src[4]; dst[5] = src[5];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4646
			    dst[6] = src[6]; dst[7] = src[7];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4647
			    dst += 8; src += 8;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4648
			    count -= 8;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4649
			}
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4650
#  endif /* __UNROLL_LOOPS__ */
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4651
			while (count-- > 0) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4652
			    *dst++ = *src++;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4653
			}
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4654
# endif
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4655
			RETURN ( self );
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4656
		    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4657
		}
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4658
	    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4659
	}
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4660
    }
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4661
fallBack: ;
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4662
#endif
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4663
%}.
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4664
    "
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4665
     fall back in case of non-ByteArray argument,
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4666
     or for the error report if any index is invalid
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4667
    "
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4668
    self slowReplaceBytesFrom:start to:stop with:aCollection startingAt:repStart
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4669
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4670
    "
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4671
     #[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16]
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4672
	copy
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4673
	    replaceFrom:1 to:8
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4674
	    with:#[10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160]
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4675
	    startingAt:1
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4676
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4677
     #[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16]
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4678
	copy
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4679
	    replaceFrom:3 to:10
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4680
	    with:#[10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160]
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4681
	    startingAt:1
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4682
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4683
     #[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16]
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4684
	copy
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4685
	    replaceFrom:3 to:4
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4686
	    with:#[10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160]
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4687
	    startingAt:1
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4688
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4689
     #[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16]
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4690
	copy
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4691
	    replaceFrom:0 to:9
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4692
	    with:#[10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160]
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4693
	    startingAt:1
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4694
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4695
     #[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16]
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4696
	copy
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4697
	    replaceFrom:1 to:10
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4698
	    with:#[10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160]
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4699
	    startingAt:0
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4700
    "
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4701
!
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4702
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4703
replaceBytesFrom:startIndex with:replacementCollection startingAt:repStartIndex
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4704
    "replace elements from another collection, which must be
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4705
     byte-array-like.
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4706
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4707
     Notice: This operation modifies the receiver, NOT a copy;
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4708
     therefore the change may affect all others referencing the receiver."
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4709
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4710
    ^ self
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4711
	replaceBytesFrom:startIndex
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4712
	to:(startIndex + replacementCollection size - repStartIndex)
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4713
	with:replacementCollection
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4714
	startingAt:repStartIndex
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4715
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4716
    "
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4717
     args:    startIndex            : <integer>
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4718
	      replacementCollection : <collection of <bytes> >
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4719
	      repStartIndex         : <integer>
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4720
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4721
     returns: self
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4722
    "
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4723
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4724
    "Created: / 27.7.1998 / 16:56:46 / cg"
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4725
    "Modified: / 27.7.1998 / 16:58:38 / cg"
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4726
!
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4727
13902
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4728
replaceBytesWith:replacementCollection
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4729
    "replace elements from another collection, which must be byte-array-like.
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4730
     Replace stops at whichever collection is smaller.
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4731
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4732
     Notice: This operation modifies the receiver, NOT a copy;
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4733
     therefore the change may affect all others referencing the receiver."
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4734
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4735
    ^ self
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4736
	replaceBytesFrom:1
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4737
	to:(replacementCollection sizeInBytes min:self sizeInBytes)
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4738
	with:replacementCollection
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4739
	startingAt:1
13902
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4740
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4741
    "
15004
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  4742
     (ByteArray new:10) replaceBytesWith:'hello'
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  4743
     (ByteArray new:10) replaceBytesWith:'hello world bla bla bla'
13902
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4744
    "
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4745
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4746
    "Created: / 09-01-2012 / 16:18:10 / cg"
22215
10bdeb2e5021 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 22161
diff changeset
  4747
    "Modified: / 28-08-2017 / 02:17:23 / cg"
13902
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4748
!
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4749
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4750
replaceFrom:startIndex to:stopIndex with:aCollection startingAt:repStartIndex
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4751
    "replace elements in the receiver between index start and stop,
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4752
     with elements  taken from replacementCollection starting at repStart.
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4753
     Return the receiver.
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4754
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4755
     Notice: This operation modifies the receiver, NOT a copy;
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4756
     therefore the change may affect all others referencing the receiver."
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4757
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4758
    (self class isBytes
22229
74cd3c85fcd2 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 22217
diff changeset
  4759
     and:[aCollection class == self class or:[aCollection isSingleByteCollection]]
74cd3c85fcd2 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 22217
diff changeset
  4760
    ) ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4761
	"can do it fast: just copy the plain bytes"
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4762
	^ self replaceBytesFrom:startIndex to:stopIndex with:aCollection startingAt:repStartIndex
7252
82cd08881a2a abstract replaceBytes fallback is required (lead to recursion)
Claus Gittinger <cg@exept.de>
parents: 7218
diff changeset
  4763
    ].
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4764
    ^ super replaceFrom:startIndex to:stopIndex with:aCollection startingAt:repStartIndex
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4765
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4766
    "
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4767
     args:    startIndex            : <integer>
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4768
	      stopIndex             : <integer>
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4769
	      replacementCollection : <collection of <bytes> >
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4770
	      repStartIndex         : <integer>
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4771
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4772
     returns: self
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4773
    "
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4774
14131
3b0cb7751a71 changed: #replaceFrom:to:with:startingAt:
Claus Gittinger <cg@exept.de>
parents: 14082
diff changeset
  4775
    "Modified: / 08-05-2012 / 13:23:27 / cg"
4782
04a2ea1ad3a5 added replaceBytes...
Claus Gittinger <cg@exept.de>
parents: 4530
diff changeset
  4776
! !
04a2ea1ad3a5 added replaceBytes...
Claus Gittinger <cg@exept.de>
parents: 4530
diff changeset
  4777
12757
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4778
!UninterpretedBytes methodsFor:'hashing'!
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4779
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4780
computeXorHashFrom:startIndex to:endIndex
20372
aa0461b19c97 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20177
diff changeset
  4781
    "compute and answer the 32bit SmallInteger-Hash of the bytes
12757
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4782
     from startIndex to endIndex.
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4783
     If endindex = 0 or endIndex > size, hash up the size.
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4784
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4785
     NOTE: startIndex and endIndex are only hints about what should be hashed.
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4786
	   In fact, more bytes could be involved in hashing.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4787
	   SO ARRAYS MUST BE EQUAL TO HASH TO THE SAME VALUE.
20372
aa0461b19c97 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20177
diff changeset
  4788
aa0461b19c97 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20177
diff changeset
  4789
    Also NOTE:
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4790
	used to return a 32bit hash on 32bit machines and a 64bit integer on 64bit cpus.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4791
	changed to return the same for all (in case hash values are used for other purposes)."
12757
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4792
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4793
    |w|
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4794
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4795
%{
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4796
    if (__bothSmallInteger(startIndex, endIndex)) {
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4797
	unsigned char *cp;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4798
	INT sz;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4799
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4800
	__fetchBytePointerAndSize__(self, &cp, &sz);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4801
	if (cp) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4802
	    INT sidx = ((unsigned INT)__smallIntegerVal(startIndex)) - 1;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4803
	    INT eidx = ((unsigned INT)__smallIntegerVal(endIndex)) - 1;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4804
// #           define H_INT INT
20372
aa0461b19c97 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20177
diff changeset
  4805
// #           define _MAX_H_INT _MAX_INT;
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4806
#           define H_INT int
20372
aa0461b19c97 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20177
diff changeset
  4807
#           define _MAX_H_INT 0x3FFFFFFF
aa0461b19c97 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20177
diff changeset
  4808
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4809
	    unsigned char *ep;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4810
	    unsigned H_INT hash = 0, hash2 = 0, carry;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4811
	    int i;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4812
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4813
	    if (eidx < 0 || eidx >= sz) eidx = sz - 1;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4814
	    if (sidx > eidx) sidx = eidx;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4815
	    if (sidx < 0) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4816
		RETURN(__mkSmallInteger(0));
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4817
	    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4818
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4819
	    ep = cp + eidx;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4820
	    cp += sidx;
12757
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4821
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4822
#if 0
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4823
	    /*
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4824
	     * On LSB-First (little endian) cpus,
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4825
	     * this code does not produce the same result
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4826
	     * if the same bytes are at different positions
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4827
	     */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4828
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4829
	    if ((H_INT)cp & (sizeof(H_INT)-1)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4830
		/* not aligned */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4831
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4832
		for (i=0; cp <= ep; cp++) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4833
		    hash2 = (hash2 << 8) | *cp;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4834
		    if (++i == sizeof(H_INT)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4835
			hash ^= hash2;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4836
			i = hash2 = 0;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4837
		    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4838
		}
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4839
	    } else {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4840
		/* aligned */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4841
		for (; cp+sizeof(H_INT) <= ep; cp += sizeof(H_INT)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4842
		    hash ^= *(unsigned H_INT *)cp;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4843
		}
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4844
		for (; cp <= ep; cp++) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4845
		    hash2 = (hash2 << 8) | *cp;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4846
		}
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4847
	    }
12757
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4848
#else
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4849
	    for (i=0; cp <= ep-sizeof(H_INT); cp += sizeof(H_INT)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4850
		hash2 = cp[0];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4851
		hash2 = (hash2 << 8) | cp[1];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4852
		hash2 = (hash2 << 8) | cp[2];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4853
		hash2 = (hash2 << 8) | cp[3];
20373
bce89424b82a #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20372
diff changeset
  4854
# if 0
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4855
		if (sizeof(H_INT) == 8) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4856
		    hash2 = (hash2 << 8) | cp[4];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4857
		    hash2 = (hash2 << 8) | cp[5];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4858
		    hash2 = (hash2 << 8) | cp[6];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4859
		    hash2 = (hash2 << 8) | cp[7];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4860
		}
20373
bce89424b82a #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20372
diff changeset
  4861
# endif
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4862
		/*
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4863
		 * multiply by large prime to scramble bits and
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4864
		 * to avoid a 0 result from
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4865
		 * #[1 2 3 4 1 2 3 4] computeXorHashFrom:1 to:8.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4866
		 */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4867
		hash ^= (hash * 31415821) ^ hash2;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4868
	    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4869
	    for (hash2 = 0; cp <= ep; cp++) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4870
		hash2 = (hash2 << 8) | *cp;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4871
	    }
12757
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4872
#endif
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4873
	    hash ^= (hash * 31415821) ^ hash2;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4874
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4875
	    /*
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4876
	     * fold the high bits not fitting into a H_INT
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4877
	     */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4878
	    carry = hash & ~_MAX_H_INT;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4879
	    if (carry) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4880
		hash = (hash & _MAX_H_INT) ^ (carry >> 8);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4881
	    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4882
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4883
	    RETURN(__mkSmallInteger(hash));
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4884
	}
12757
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4885
    }
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4886
%}.
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4887
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4888
    ^ self primitiveFailed
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4889
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4890
    "
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4891
     #[1 2 3 4] computeXorHashFrom:1 to:4.
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4892
     #[1 2 3 4] computeXorHashFrom:1 to:32.
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4893
     #[1 2 3 4] computeXorHashFrom:1 to:0.
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4894
     #[1 2 3 4 5] computeXorHashFrom:1 to:4.
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4895
     #[1 2 3 4 1 2 3 4] computeXorHashFrom:1 to:8.
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4896
     #[1 2 3 4 5 6 7 8] computeXorHashFrom:2 to:8.
12757
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4897
     #[2 3 4 5 6 7 8] computeXorHashFrom:1 to:7.
19554
91ec8f105783 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19507
diff changeset
  4898
     #[2 3 4 5 6 7 8] computeXorHashFrom:1 to:8.
91ec8f105783 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19507
diff changeset
  4899
    "
91ec8f105783 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19507
diff changeset
  4900
!
91ec8f105783 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19507
diff changeset
  4901
91ec8f105783 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19507
diff changeset
  4902
hash
91ec8f105783 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19507
diff changeset
  4903
    |sz|
91ec8f105783 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19507
diff changeset
  4904
91ec8f105783 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19507
diff changeset
  4905
    sz := self size.
91ec8f105783 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19507
diff changeset
  4906
    sz <= 32 ifTrue:[
22381
c4270f11aaca #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22264
diff changeset
  4907
        ^ self computeXorHashFrom:1 to:sz.
19554
91ec8f105783 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19507
diff changeset
  4908
    ].
22381
c4270f11aaca #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22264
diff changeset
  4909
    
c4270f11aaca #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22264
diff changeset
  4910
    "/ the code below is actually not doing what was intended (to take the hashes of the first 16
c4270f11aaca #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22264
diff changeset
  4911
    "/ and the last 16 bytes.
c4270f11aaca #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22264
diff changeset
  4912
    "/ It does actually take the last 17 bytes (due to a mistake of the original programmer...)
c4270f11aaca #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22264
diff changeset
  4913
    "/ However, we will not change it, but keep it that way, in case the hashvalue already found
c4270f11aaca #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22264
diff changeset
  4914
    "/ its way into some dictionary (as key-index).
c4270f11aaca #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22264
diff changeset
  4915
    "/ It does not really hurt anyway, so there is no need to change it.
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4916
    ^ (sz bitXor:(self computeXorHashFrom:1 to:16)) bitXor:(self computeXorHashFrom:sz-16 to:sz)
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4917
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4918
    "
22381
c4270f11aaca #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22264
diff changeset
  4919
        #[1 2 3 4] hash
c4270f11aaca #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22264
diff changeset
  4920
        #[1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 ] hash
c4270f11aaca #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22264
diff changeset
  4921
        
c4270f11aaca #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22264
diff changeset
  4922
        #[1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4
c4270f11aaca #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22264
diff changeset
  4923
          1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 ] hash
c4270f11aaca #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22264
diff changeset
  4924
          
c4270f11aaca #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22264
diff changeset
  4925
        #[1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4
c4270f11aaca #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22264
diff changeset
  4926
          1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1] hash
c4270f11aaca #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22264
diff changeset
  4927
    "
c4270f11aaca #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22264
diff changeset
  4928
c4270f11aaca #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22264
diff changeset
  4929
    "Modified (format): / 28-11-2017 / 15:03:36 / cg"
12757
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4930
! !
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4931
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4932
!UninterpretedBytes methodsFor:'image manipulation support'!
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4933
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4934
copyReverse
22102
a1ffa53d31c7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 22055
diff changeset
  4935
    <resource: #obsolete>
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4936
    "create a copy of myself with elements reversed in order"
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4937
22102
a1ffa53d31c7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 22055
diff changeset
  4938
    self obsoleteMethodWarning:'use #reversed'.
a1ffa53d31c7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 22055
diff changeset
  4939
a1ffa53d31c7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 22055
diff changeset
  4940
    ^ self reversed
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4941
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4942
    "
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4943
     #[1 2 3 4 5] copyReverse
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4944
     #[1 2 3 4] copyReverse
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4945
    "
22102
a1ffa53d31c7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 22055
diff changeset
  4946
a1ffa53d31c7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 22055
diff changeset
  4947
    "Modified: / 25-07-2017 / 17:10:02 / stefan"
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4948
!
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4949
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4950
swapBytes
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4951
    "swap bytes (of int16s) inplace -
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4952
     Expects that the receiver has an even number of bytes;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4953
     if not, only the pairs excluding the last byte are swapped"
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4954
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4955
    |b1 lastIndex "{ Class: SmallInteger }"|
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4956
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4957
    lastIndex := self size-1.
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4958
    1 to:lastIndex by:2 do:[:idx |
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4959
	b1 := self byteAt:idx.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4960
	self byteAt:idx put:(self byteAt:idx+1).
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4961
	self byteAt:idx+1 put:b1.
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4962
    ].
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4963
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4964
    "
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4965
     #[1 2 3 4 5] swapBytes
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4966
     #[1 2 3 4] swapBytes
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4967
    "
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4968
! !
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4969
14131
3b0cb7751a71 changed: #replaceFrom:to:with:startingAt:
Claus Gittinger <cg@exept.de>
parents: 14082
diff changeset
  4970
3363
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  4971
!UninterpretedBytes methodsFor:'misc'!
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  4972
22504
00b1dfdd05b4 #FEATURE by stefan
Stefan Vogel <sv@exept.de>
parents: 22420
diff changeset
  4973
copyToEndInto:aStream
00b1dfdd05b4 #FEATURE by stefan
Stefan Vogel <sv@exept.de>
parents: 22420
diff changeset
  4974
    "copy all of myself into aStream. Compatibility with Stream"
00b1dfdd05b4 #FEATURE by stefan
Stefan Vogel <sv@exept.de>
parents: 22420
diff changeset
  4975
00b1dfdd05b4 #FEATURE by stefan
Stefan Vogel <sv@exept.de>
parents: 22420
diff changeset
  4976
    aStream nextPutAll:self.
00b1dfdd05b4 #FEATURE by stefan
Stefan Vogel <sv@exept.de>
parents: 22420
diff changeset
  4977
00b1dfdd05b4 #FEATURE by stefan
Stefan Vogel <sv@exept.de>
parents: 22420
diff changeset
  4978
    "Created: / 23-01-2018 / 18:43:40 / stefan"
00b1dfdd05b4 #FEATURE by stefan
Stefan Vogel <sv@exept.de>
parents: 22420
diff changeset
  4979
!
00b1dfdd05b4 #FEATURE by stefan
Stefan Vogel <sv@exept.de>
parents: 22420
diff changeset
  4980
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  4981
swapLongAt:byteIndex
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  4982
    "swap the byteOrder of a long.
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  4983
     The index is a smalltalk index (i.e. 1-based)."
3363
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  4984
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  4985
    |t|
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  4986
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  4987
    t := self byteAt:byteIndex.
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  4988
    self byteAt:byteIndex put:(self byteAt:(byteIndex + 3)).
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  4989
    self byteAt:(byteIndex + 3) put:t.
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  4990
    t := self byteAt:(byteIndex + 1).
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  4991
    self byteAt:(byteIndex + 1) put:(self byteAt:(byteIndex + 2)).
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  4992
    self byteAt:(byteIndex + 2) put:t
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  4993
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  4994
    "Created: / 3.4.1998 / 13:37:01 / cg"
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  4995
! !
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  4996
18664
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4997
!UninterpretedBytes methodsFor:'printing & storing'!
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4998
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4999
hexPrintOn:aStream
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5000
    "print as hex string, eg: 'FF0243'.
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5001
     This string can be used in #fromHexString: to recreate the byteArray"
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5002
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5003
    self hexPrintOn:aStream withSeparator:nil
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5004
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5005
    "
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5006
      #[1 2 3 4 10 17] hexPrintOn:Transcript
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5007
    "
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5008
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5009
    "
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5010
     |s|
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5011
     s := String streamContents:[:s | #[1 2 3 4 10 17] hexPrintOn:s].
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5012
     ByteArray fromHexString:s
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5013
    "
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5014
!
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5015
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5016
hexPrintOn:aStream withSeparator:aSeparatorStringOrCharacterOrNil
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5017
    "print as hex string with separators, eg: 'FF:02:43'"
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5018
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5019
    |first|
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5020
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5021
    first := true.
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5022
    1 to:self size do:[:idx |
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5023
	aSeparatorStringOrCharacterOrNil notNil ifTrue:[
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5024
	    first ifFalse:[
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5025
		aSeparatorStringOrCharacterOrNil printOn:aStream
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5026
	    ] ifTrue:[
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5027
		first := false.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5028
	    ].
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5029
	].
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5030
	(self byteAt:idx) printOn:aStream base:16 size:2 fill:$0.
18664
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5031
    ].
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5032
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5033
    "
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5034
      #[1 2 3 4 10 17] hexPrintOn:Transcript withSeparator:$:
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5035
      #[1 2 3 4 10 17] hexPrintOn:Transcript withSeparator:(Character space)
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5036
      #[1 2 3 4 10 17] hexPrintOn:Transcript withSeparator:'-'
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5037
      #[1 2 3 4 10 17] hexPrintOn:Transcript withSeparator:nil
20177
0eaabd41cd8a #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20176
diff changeset
  5038
      'hello' hexPrintOn:Transcript withSeparator:'.'
18664
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5039
    "
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5040
!
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5041
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5042
hexPrintString
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5043
    "print as hex string, eg: 'FF0243'.
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5044
     This string can be used in #fromHexString: to recreate the byteArray"
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5045
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5046
    ^ self hexPrintStringWithSeparator:nil
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5047
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5048
    "
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5049
     #[1 2 3 4 10 17] hexPrintString
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5050
     ByteArray fromHexString:#[1 2 3 4 10 17] hexPrintString
20176
2e68059772c7 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20139
diff changeset
  5051
     'hello' hexPrintString
18664
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5052
    "
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5053
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5054
    "Modified: / 03-07-2010 / 01:59:19 / cg"
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5055
!
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5056
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5057
hexPrintStringWithSeparator:aSeparatorStringOrCharacterOrNil
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5058
    "print as hex string, eg: 'FF:02:43'."
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5059
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5060
    ^ String
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5061
	streamContents:[:s |
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5062
	    self hexPrintOn:s withSeparator:aSeparatorStringOrCharacterOrNil.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5063
	]
18664
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5064
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5065
    "
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5066
      #[1 2 3 4 10 17] hexPrintStringWithSeparator:$:
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5067
      #[1 2 3 4 10 17] hexPrintStringWithSeparator:Character space
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5068
      #[1 2 3 4 10 17] hexPrintStringWithSeparator:' - '
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5069
      #[1 2 3 4 10 17] hexPrintStringWithSeparator:nil
20176
2e68059772c7 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20139
diff changeset
  5070
      'hello' hexPrintStringWithSeparator:'.'
18664
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5071
    "
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5072
! !
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5073
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  5074
!UninterpretedBytes methodsFor:'private'!
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  5075
22883
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  5076
reportError:failReason with:parameter
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  5077
    "common helper"
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  5078
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  5079
    (failReason == #invalidIndex) ifTrue:[
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  5080
        ^ self indexNotIntegerOrOutOfBounds:parameter
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  5081
    ].
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  5082
    failReason == #nullPointer ifTrue:[
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  5083
        ^ self error:'free or unallocated object referenced'
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  5084
    ].
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  5085
    failReason == #unaligned ifTrue:[
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  5086
        ^ self error:'unaligned index'. 
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  5087
    ].
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  5088
    self primitiveFailed:failReason.
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  5089
!
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  5090
18969
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  5091
slowReplaceBytesFrom:startArg to:stopArg with:sourceBytes startingAt:sourceIndex
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  5092
    "fallback if primitive code fails"
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  5093
18969
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  5094
    |srcIdx "{ Class:SmallInteger }"
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  5095
     start "{ Class:SmallInteger }"
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  5096
     stop "{ Class:SmallInteger }"|
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  5097
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  5098
    start := startArg.
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  5099
    stop := stopArg.
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  5100
    srcIdx := sourceIndex.
18969
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  5101
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  5102
    start to:stop do:[:dstIdx |
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5103
	self byteAt:dstIdx put:(sourceBytes byteAt:srcIdx).
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5104
	srcIdx := srcIdx + 1
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  5105
    ].
22216
db5b7da6d61e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 22215
diff changeset
  5106
db5b7da6d61e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 22215
diff changeset
  5107
    "Modified: / 28-08-2017 / 02:25:53 / cg"
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  5108
! !
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  5109
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  5110
!UninterpretedBytes methodsFor:'queries'!
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  5111
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  5112
containsNon7BitAscii
18969
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  5113
    "return true, if the underlying collection contains elements longer than 7 bits
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  5114
     (i.e. if it is non-ascii)"
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  5115
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  5116
    |sz "{ Class:SmallInteger }"|
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  5117
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  5118
    sz := self size.
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  5119
    1 to:sz do:[:idx|
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5120
	(self at:idx) > 16r7F ifTrue:[
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5121
	    ^ true.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5122
	].
18969
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  5123
    ].
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  5124
    ^ false.
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  5125
!
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  5126
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  5127
containsNon8BitElements
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  5128
    "return true, if the underlying structure contains elements larger than a single byte"
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  5129
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  5130
    |sz "{ Class:SmallInteger }"|
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  5131
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  5132
    sz := self size.
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  5133
    1 to:sz do:[:idx|
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5134
	(self at:idx) > 16rFF ifTrue:[
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5135
	    ^ true.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5136
	].
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  5137
    ].
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  5138
    ^ false.
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  5139
!
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  5140
7218
b798be6d632f elementBoundsError -> elementBoundsError:
Claus Gittinger <cg@exept.de>
parents: 7197
diff changeset
  5141
defaultElement
b798be6d632f elementBoundsError -> elementBoundsError:
Claus Gittinger <cg@exept.de>
parents: 7197
diff changeset
  5142
    ^ 0
b798be6d632f elementBoundsError -> elementBoundsError:
Claus Gittinger <cg@exept.de>
parents: 7197
diff changeset
  5143
!
b798be6d632f elementBoundsError -> elementBoundsError:
Claus Gittinger <cg@exept.de>
parents: 7197
diff changeset
  5144
24040
cbf03fb244e9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 23946
diff changeset
  5145
isAllocated
cbf03fb244e9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 23946
diff changeset
  5146
    "for compatibility with ExternalBytes"
cbf03fb244e9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 23946
diff changeset
  5147
    
cbf03fb244e9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 23946
diff changeset
  5148
    ^ true
cbf03fb244e9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 23946
diff changeset
  5149
cbf03fb244e9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 23946
diff changeset
  5150
    "Created: / 02-04-2019 / 20:30:50 / Claus Gittinger"
cbf03fb244e9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 23946
diff changeset
  5151
!
cbf03fb244e9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 23946
diff changeset
  5152
cbf03fb244e9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 23946
diff changeset
  5153
isNull
cbf03fb244e9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 23946
diff changeset
  5154
    "for compatibility with ExternalBytes"
cbf03fb244e9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 23946
diff changeset
  5155
    
cbf03fb244e9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 23946
diff changeset
  5156
    ^ false
cbf03fb244e9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 23946
diff changeset
  5157
cbf03fb244e9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 23946
diff changeset
  5158
    "Created: / 02-04-2019 / 20:30:45 / Claus Gittinger"
cbf03fb244e9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 23946
diff changeset
  5159
!
cbf03fb244e9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 23946
diff changeset
  5160
21320
8b0aaee195e6 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20961
diff changeset
  5161
isValidUTF8
21323
986051ecf7f2 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21320
diff changeset
  5162
    "returns true, if the receiver contains a valid UTF8 encoded string"
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5163
21323
986051ecf7f2 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21320
diff changeset
  5164
    |trailing  "{ Class: SmallInteger }"|
986051ecf7f2 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21320
diff changeset
  5165
21320
8b0aaee195e6 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20961
diff changeset
  5166
    trailing := 0.
8b0aaee195e6 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20961
diff changeset
  5167
8b0aaee195e6 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20961
diff changeset
  5168
    1 to:self size do:[:idx |
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5169
	|byte "{ Class: SmallInteger }" |
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5170
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5171
	byte := self byteAt:idx.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5172
	trailing ~~ 0 ifTrue:[
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5173
	    (byte bitAnd:2r11000000) == 2r10000000 ifFalse:[^ false].
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5174
	    trailing := trailing - 1.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5175
	] ifFalse:[
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5176
	    (byte bitAnd:16r80) == 0 ifTrue:[
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5177
		"/ continue
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5178
	    ] ifFalse:[
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5179
		(byte bitAnd:2r11100000) == 2r11000000 ifTrue:[
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5180
		    "/ strict: should not be encoded this way (could have used a shorter sequence)
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5181
		    (byte bitAnd:2r00011110) == 0 ifTrue:[
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5182
			^ false
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5183
		    ].
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5184
		    trailing := 1.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5185
		] ifFalse:[
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5186
		    (byte bitAnd:2r11110000) == 2r11100000 ifTrue:[
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5187
			trailing := 2.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5188
		    ] ifFalse:[
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5189
			(byte bitAnd:2r11111000) == 2r11110000 ifTrue:[
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5190
			    trailing := 3.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5191
			] ifFalse:[
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5192
			    (byte bitAnd:2r11111100) == 2r11111000 ifTrue:[
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5193
				trailing := 4.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5194
			    ] ifFalse:[
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5195
				(byte bitAnd:2r11111110) == 2r11111100 ifTrue:[
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5196
				    trailing := 5.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5197
				] ifFalse:[
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5198
				    ^ false
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5199
				].
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5200
			    ].
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5201
			].
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5202
		    ].
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5203
		].
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5204
	    ].
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5205
	].
21320
8b0aaee195e6 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20961
diff changeset
  5206
    ].
8b0aaee195e6 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20961
diff changeset
  5207
    ^ trailing == 0
8b0aaee195e6 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20961
diff changeset
  5208
8b0aaee195e6 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20961
diff changeset
  5209
    "
8b0aaee195e6 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20961
diff changeset
  5210
     'abc' isValidUTF8
21377
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  5211
     'abcöäü' isValidUTF8
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  5212
     'abcöäü' utf8Encoded isValidUTF8
21323
986051ecf7f2 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21320
diff changeset
  5213
     (Character value:16r800) utf8Encoded isValidUTF8
986051ecf7f2 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21320
diff changeset
  5214
     (Character value:16r1000) utf8Encoded isValidUTF8
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5215
21320
8b0aaee195e6 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20961
diff changeset
  5216
     1 to:255 do:[:c1 |
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5217
	 1 to:255 do:[:c2 |
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5218
	     1 to:255 do:[:c3 |
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5219
		 self assert:(c1 asCharacter , c2 asCharacter , c3 asCharacter) utf8Encoded isValidUTF8
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5220
	     ]
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5221
	 ]
21323
986051ecf7f2 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21320
diff changeset
  5222
     ]
986051ecf7f2 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21320
diff changeset
  5223
986051ecf7f2 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21320
diff changeset
  5224
     |s|
986051ecf7f2 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21320
diff changeset
  5225
     1 to:10000 do:[:c1 |
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5226
	 1 to:255 do:[:c2 |
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5227
	     s := (c1 asCharacter , c2 asCharacter).
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5228
	     self assert:s utf8Encoded isValidUTF8
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5229
	 ]
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5230
     ]
21320
8b0aaee195e6 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20961
diff changeset
  5231
    "
8b0aaee195e6 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20961
diff changeset
  5232
!
8b0aaee195e6 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20961
diff changeset
  5233
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  5234
referencesAny:aCollection
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  5235
    "redefined to speed up searching when many of my instances are present"
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  5236
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  5237
%{ /* NOCONTEXT */
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  5238
    if (__mkSmallInteger(0) == __ClassInstPtr(__qClass(self))->c_ninstvars) {
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5239
	/* I am only bytes */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5240
	RETURN(false)
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  5241
    }
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  5242
%}.
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  5243
    ^ super referencesAny:aCollection
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  5244
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  5245
    "
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5246
	'abc' referencesAny:#()
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  5247
    "
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  5248
!
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  5249
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  5250
sizeInBytes
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  5251
    "return the number of 8-bit bytes in the receiver.
22217
0819f3572300 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 22216
diff changeset
  5252
     This is needed since subclasses may redefine #size (TwoByteString)"
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  5253
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  5254
    ^ super size
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  5255
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  5256
    "Created: / 5.3.1998 / 10:41:13 / stefan"
21377
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  5257
!
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  5258
22217
0819f3572300 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 22216
diff changeset
  5259
utf8DecodedSize
22420
7b32109bff47 #DOCUMENTATION by mawalch
mawalch
parents: 22405
diff changeset
  5260
    "return the number of characters needed when this string is
22405
e11520f05fef #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 22381
diff changeset
  5261
     decoded from UTF-8"
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5262
22217
0819f3572300 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 22216
diff changeset
  5263
    |sz "{ Class:SmallInteger }"
0819f3572300 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 22216
diff changeset
  5264
     cnt "{ Class:SmallInteger }"|
21377
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  5265
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5266
    sz := self size.
21377
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  5267
    cnt := 0.
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  5268
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  5269
    1 to:sz do:[:idx|
22405
e11520f05fef #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 22381
diff changeset
  5270
        "/ count the number of UTF-8 start bytes
e11520f05fef #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 22381
diff changeset
  5271
        ((self byteAt:idx) bitAnd:16rC0) ~~ 16r80 ifTrue:[
e11520f05fef #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 22381
diff changeset
  5272
            cnt := cnt+1.
e11520f05fef #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 22381
diff changeset
  5273
        ].
21377
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  5274
    ].
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  5275
    ^ cnt.
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  5276
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  5277
    "
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  5278
     'hello world' asByteArray utf8DecodedSize
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  5279
     'ä' utf8Encoded asByteArray utf8DecodedSize
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  5280
     'äΣΔΨӕἤῴ' utf8Encoded asByteArray utf8DecodedSize
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  5281
    "
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  5282
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  5283
    "Created: / 07-02-2017 / 15:03:07 / stefan"
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  5284
    "Modified: / 07-02-2017 / 19:14:06 / stefan"
22405
e11520f05fef #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 22381
diff changeset
  5285
    "Modified (comment): / 02-01-2018 / 18:30:27 / stefan"
22420
7b32109bff47 #DOCUMENTATION by mawalch
mawalch
parents: 22405
diff changeset
  5286
    "Modified (comment): / 15-01-2018 / 08:29:10 / mawalch"
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  5287
! !
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  5288
8986
c2962d45eca0 new: #isByteCollection
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
  5289
!UninterpretedBytes methodsFor:'testing'!
c2962d45eca0 new: #isByteCollection
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
  5290
c2962d45eca0 new: #isByteCollection
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
  5291
isByteCollection
c2962d45eca0 new: #isByteCollection
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
  5292
    "return true, if the receiver has access methods for bytes;
22229
74cd3c85fcd2 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 22217
diff changeset
  5293
     This is different from 'self class isBytes',
8986
c2962d45eca0 new: #isByteCollection
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
  5294
     true is returned here - the method is redefined from Object."
c2962d45eca0 new: #isByteCollection
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
  5295
c2962d45eca0 new: #isByteCollection
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
  5296
    ^ true
9005
b82aa6bdc487 #isNonByteCollection
Stefan Vogel <sv@exept.de>
parents: 8995
diff changeset
  5297
!
b82aa6bdc487 #isNonByteCollection
Stefan Vogel <sv@exept.de>
parents: 8995
diff changeset
  5298
b82aa6bdc487 #isNonByteCollection
Stefan Vogel <sv@exept.de>
parents: 8995
diff changeset
  5299
isNonByteCollection
b82aa6bdc487 #isNonByteCollection
Stefan Vogel <sv@exept.de>
parents: 8995
diff changeset
  5300
    "return true, if the receiver is some kind of collection, but not a String, ByteArray etc.;
b82aa6bdc487 #isNonByteCollection
Stefan Vogel <sv@exept.de>
parents: 8995
diff changeset
  5301
     false is returned here - the method is redefined from Collection."
b82aa6bdc487 #isNonByteCollection
Stefan Vogel <sv@exept.de>
parents: 8995
diff changeset
  5302
b82aa6bdc487 #isNonByteCollection
Stefan Vogel <sv@exept.de>
parents: 8995
diff changeset
  5303
    ^ false
22229
74cd3c85fcd2 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 22217
diff changeset
  5304
!
74cd3c85fcd2 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 22217
diff changeset
  5305
74cd3c85fcd2 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 22217
diff changeset
  5306
isSingleByteCollection
74cd3c85fcd2 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 22217
diff changeset
  5307
    "return true, if the receiver has access methods for bytes;
74cd3c85fcd2 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 22217
diff changeset
  5308
     i.e. #at: and #at:put: accesses a byte and are equivalent to #byteAt: and byteAt:put:
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5309
     and #replaceFrom:to: is equivalent to #replaceBytesFrom:to:.
22229
74cd3c85fcd2 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 22217
diff changeset
  5310
     This is different from 'self class isBytes',
74cd3c85fcd2 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 22217
diff changeset
  5311
     true is returned here - the method is redefined from Object."
74cd3c85fcd2 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 22217
diff changeset
  5312
74cd3c85fcd2 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 22217
diff changeset
  5313
    ^ true
8986
c2962d45eca0 new: #isByteCollection
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
  5314
! !
c2962d45eca0 new: #isByteCollection
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
  5315
11009
fb66915c5bb5 changed #acceptVisitor:with: - moved to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 10676
diff changeset
  5316
!UninterpretedBytes methodsFor:'visiting'!
fb66915c5bb5 changed #acceptVisitor:with: - moved to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 10676
diff changeset
  5317
fb66915c5bb5 changed #acceptVisitor:with: - moved to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 10676
diff changeset
  5318
acceptVisitor:aVisitor with:aParameter
16719
19b7ae0bbb49 comment/format only
Claus Gittinger <cg@exept.de>
parents: 16320
diff changeset
  5319
    "dispatch for visitor pattern; send #visitByteArray:with: to aVisitor."
11009
fb66915c5bb5 changed #acceptVisitor:with: - moved to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 10676
diff changeset
  5320
fb66915c5bb5 changed #acceptVisitor:with: - moved to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 10676
diff changeset
  5321
    ^ aVisitor visitByteArray:self with:aParameter
fb66915c5bb5 changed #acceptVisitor:with: - moved to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 10676
diff changeset
  5322
! !
fb66915c5bb5 changed #acceptVisitor:with: - moved to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 10676
diff changeset
  5323
695
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
  5324
!UninterpretedBytes class methodsFor:'documentation'!
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
  5325
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
  5326
version
18600
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  5327
    ^ '$Header$'
12253
c933c6fcdeef changed: #fromHexStringWithSeparators:
Claus Gittinger <cg@exept.de>
parents: 11973
diff changeset
  5328
!
c933c6fcdeef changed: #fromHexStringWithSeparators:
Claus Gittinger <cg@exept.de>
parents: 11973
diff changeset
  5329
c933c6fcdeef changed: #fromHexStringWithSeparators:
Claus Gittinger <cg@exept.de>
parents: 11973
diff changeset
  5330
version_CVS
18600
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  5331
    ^ '$Header$'
695
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
  5332
! !
15087
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  5333
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
  5334
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
  5335
UninterpretedBytes initialize!