UninterpretedBytes.st
author Claus Gittinger <cg@exept.de>
Wed, 18 Dec 2019 19:05:01 +0100
changeset 25155 5ab0366fbef0
parent 24901 144086ff0a20
permissions -rw-r--r--
regenerated
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 */ \
24569
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
    54
	/* because on 32bit machines we need to take care about the alignment */ \
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
    55
	/* but sadly, the same code is wrong for 64bit machines */ \
22264
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
24795
135fcd8b61d6 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 24569
diff changeset
   159
    | sz bytes s hi lo c1 c2|
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
24795
135fcd8b61d6 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 24569
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.
24795
135fcd8b61d6 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 24569
diff changeset
   167
    1 to:(sz // 2) do: [:idx |
135fcd8b61d6 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 24569
diff changeset
   168
        c1 := s next.
135fcd8b61d6 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 24569
diff changeset
   169
        c2 := s next.
135fcd8b61d6 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 24569
diff changeset
   170
        ((c1 isDigitRadix:16) and:[c2 isDigitRadix:16]) ifFalse:[
135fcd8b61d6 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 24569
diff changeset
   171
            ConversionError raiseWith:aString errorString:'invalid hex string (contains non-hex characters)' 
135fcd8b61d6 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 24569
diff changeset
   172
        ].
135fcd8b61d6 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 24569
diff changeset
   173
        hi := c1 digitValue.
135fcd8b61d6 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 24569
diff changeset
   174
        lo := c2 digitValue.
135fcd8b61d6 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 24569
diff changeset
   175
        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
   176
    ].
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   177
    ^ bytes
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
    "
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   180
     ByteArray fromHexString:'1234FEFF'
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   181
     ExternalBytes fromHexString:'1234FEFF'
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   182
    "
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   183
    "
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   184
     |s|
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   185
     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
   186
     ByteArray fromHexString:s
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   187
    "
12551
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   188
    "
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   189
     Time millisecondsToRun:[
24795
135fcd8b61d6 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 24569
diff changeset
   190
        1000000 timesRepeat:[ ByteArray fromHexString:'1234FEFF1234FEFF1234FEFF1234FEFF' ]
12551
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   191
     ].
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   192
    "
15717
b05a01005030 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15087
diff changeset
   193
b05a01005030 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15087
diff changeset
   194
    "Modified (comment): / 28-08-2013 / 20:40:04 / cg"
23946
28f3c19c9020 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 23933
diff changeset
   195
    "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
   196
!
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   197
11874
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   198
fromHexStringWithSeparators:aString
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   199
    "read a bytearray from a printed string representation, where
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   200
     individual bytes are encoded as two hex digits, optionally separated by whiteSpace.
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   201
     See also fromHexString:, which does something similar, but does not allow for spaces"
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   202
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   203
    ^ self streamContents:[:outStream |
24796
debcca59895b #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 24795
diff changeset
   204
        |inStream h|
debcca59895b #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 24795
diff changeset
   205
debcca59895b #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 24795
diff changeset
   206
        inStream := aString readStream.
debcca59895b #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 24795
diff changeset
   207
debcca59895b #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 24795
diff changeset
   208
        [
debcca59895b #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 24795
diff changeset
   209
            inStream skipSeparators.
debcca59895b #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 24795
diff changeset
   210
            inStream atEnd
debcca59895b #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 24795
diff changeset
   211
        ] whileFalse:[
debcca59895b #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 24795
diff changeset
   212
            h := inStream next:2.
debcca59895b #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 24795
diff changeset
   213
            (h conform:[:ch | ch isDigitRadix:16]) ifFalse:[
debcca59895b #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 24795
diff changeset
   214
                ConversionError raiseWith:aString errorString:'invalid hex string (contains non-hex characters)' 
debcca59895b #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 24795
diff changeset
   215
            ].
debcca59895b #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 24795
diff changeset
   216
            outStream nextPut:(Integer readFrom:h base:16).
debcca59895b #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 24795
diff changeset
   217
        ].
11874
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   218
    ].
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   219
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   220
    "
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   221
     ByteArray fromHexString:'1234FEFF'
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   222
     ByteArray fromHexStringWithSeparators:'   12  34 FE FF'
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   223
    "
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   224
!
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   225
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   226
fromPackedString:aString
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   227
    "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
   228
     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
   229
     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
   230
     Every 6 bit packet is encoded as a character in 32..95.
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   231
     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
   232
     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
   233
     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
   234
     ST-80 uses this encoding for Images ...
16798
acfbeccbc226 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16796
diff changeset
   235
     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
   236
     PS: It took a while to figure that one out ...
18633
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   237
     PPS: I don't like it ;-)"
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
    |index    "{ Class: SmallInteger }"
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   240
     dstIndex "{ Class: SmallInteger }"
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   241
     stop     "{ Class: SmallInteger }"
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   242
     sixBits  "{ Class: SmallInteger }"
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   243
     n        "{ Class: SmallInteger }"
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   244
     sz       "{ Class: SmallInteger }"
12551
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   245
     last bytes|
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   246
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   247
    sz := aString size.
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   248
    sz == 0 ifTrue:[^ self new].
12551
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   249
    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
   250
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   251
    stop := sz // 4 * 3.
12551
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   252
    "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
   253
     range 97 .. otherwise, its exact."
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   254
12551
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   255
    last := aString last codePoint.
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   256
    last > 96 ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   257
	stop := stop - 3 + (last - 96)
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   258
    ].
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   259
    bytes := self new:stop.
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   260
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   261
    index := 1. dstIndex := 1.
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   262
    [dstIndex <= stop] whileTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   263
	"/ take 4 characters ...
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   264
	"/ allow a line break before each group of 4
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   265
	sixBits := (aString at:index) codePoint.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   266
	[sixBits < 32] whileTrue:[
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   267
	    index := index + 1.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   268
	    sixBits := (aString at:index) codePoint.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   269
	].
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   270
	sixBits := sixBits bitAnd:16r3F.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   271
	n := 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+1) codePoint >= 32.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   274
	sixBits := (aString at:index+1) 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
	"/ self assert:(aString at:index+2) codePoint >= 32.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   278
	sixBits := (aString at:index+2) codePoint bitAnd:16r3F.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   279
	n := (n bitShift:6) + sixBits.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   280
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   281
	"/ self assert:(aString at:index+3) codePoint >= 32.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   282
	sixBits := (aString at:index+3) codePoint bitAnd:16r3F.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   283
	n := (n bitShift:6) + sixBits.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   284
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   285
	index := index + 4.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   286
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   287
	"/ now have 24 bits in n
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   288
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   289
	bytes at:dstIndex put:(n bitShift:-16).
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   290
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   291
	dstIndex < stop ifTrue:[
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   292
	    bytes at:dstIndex+1 put:((n bitShift:-8) bitAnd:16rFF).
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   293
	    dstIndex+2 <= stop ifTrue:[
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   294
		bytes at:dstIndex+2 put:(n bitAnd:16rFF).
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   295
	    ]
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   296
	].
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   297
	dstIndex := dstIndex + 3.
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   298
    ].
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   299
    ^ bytes
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   300
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   301
    "
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   302
     ByteArray fromPackedString:(#[1 1 1 1] asPackedString)
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   303
     ByteArray fromPackedString:(#[1 1 1 1 1] asPackedString)
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   304
     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
   305
     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
   306
     ByteArray fromPackedString:(#[1 1 1 1 1 1 1 1] asPackedString)
18633
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   307
     ByteArray fromPackedString:((ByteArray new:256) asPackedString)
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   308
     ByteArray fromPackedString:((ByteArray new:128) asPackedString)
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   309
     ByteArray fromPackedString:((ByteArray new:129) asPackedString)
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   310
     ByteArray fromPackedString:((ByteArray new:130) asPackedString)
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   311
     ByteArray fromPackedString:((ByteArray new:131) asPackedString)
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   312
     ByteArray fromPackedString:((ByteArray new:132) asPackedString)
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   313
     ByteArray fromPackedString:((ByteArray new:64) asPackedString)
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   314
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   315
     0 to:256 do:[:l |
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   316
	|orig copy|
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   317
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   318
	0 to:255 do:[:fill |
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   319
	    orig := ByteArray new:l withAll:fill.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   320
	    copy := ByteArray fromPackedString:(orig asPackedString).
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   321
	    self assert:(orig = copy).
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   322
	 ]
18633
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   323
     ]
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   324
    "
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   325
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   326
    "Modified: / 6.3.1997 / 15:28:52 / cg"
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   327
    "Modified: / 18.12.1997 / 17:17:11 / stefan"
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   328
!
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   329
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   330
uninitializedNew:anInteger
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   331
    "return a new instance of the receiver with uninitialized
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   332
     (i.e. undefined) contents. The indexed elements have any random
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   333
     value. However, any named instance variables are still nilled.
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   334
     For use, when contents will be set anyway shortly after - this
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   335
     is a bit faster than the regular basicNew:, which clears the bytes.
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   336
     Of course, it only makes a difference for very big ByteArrays, such
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   337
     as used for images/bitmaps.
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   338
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   339
     Notice: if you want to port code using uninitializedNew: to another
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   340
     smalltalk, you have to add an 'uninitializedNew: -> basicNew:'-calling
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   341
     method to the ByteArray class of the other smalltalk."
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   342
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   343
%{  /* NOCONTEXT */
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   344
    OBJ newobj;
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   345
    INT instsize, nInstVars, nindexedinstvars;
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   346
    REGISTER OBJ *op;
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   347
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   348
    if (__isSmallInteger(anInteger)) {
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   349
	nindexedinstvars = __intVal(anInteger);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   350
	if (nindexedinstvars >= 0) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   351
	    if (self == ByteArray) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   352
		/*
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   353
		 * the most common case
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   354
		 */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   355
		instsize = OHDR_SIZE + nindexedinstvars;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   356
		if (__CanDoQuickNew(instsize)) {        /* OBJECT ALLOCATION */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   357
		    __qCheckedNew(newobj, instsize);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   358
		    __InstPtr(newobj)->o_class = self;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   359
		    __qSTORE(newobj, self);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   360
		    RETURN (newobj );
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   361
		}
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   362
	    } else {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   363
		/*
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   364
		 * Take care for subclasses like TwoByteString
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   365
		 */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   366
		switch (__smallIntegerVal(__ClassInstPtr(self)->c_flags) & ARRAYMASK) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   367
		case BYTEARRAY:
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   368
		    break;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   369
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   370
		case WORDARRAY:
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   371
		case SWORDARRAY:
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   372
		    nindexedinstvars *= 2;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   373
		    break;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   374
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   375
		case LONGARRAY:
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   376
		case SLONGARRAY:
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   377
		    nindexedinstvars *= 4;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   378
		    break;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   379
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   380
		default:
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   381
		    /* don't know about this array type, delegate to super */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   382
		    goto out;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   383
		}
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   384
	    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   385
	    nInstVars = __intVal(__ClassInstPtr(self)->c_ninstvars);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   386
	    instsize = OHDR_SIZE + __OBJS2BYTES__(nInstVars) + nindexedinstvars;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   387
	    __PROTECT_CONTEXT__
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   388
	    __qNew(newobj, instsize);   /* OBJECT ALLOCATION */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   389
	    __UNPROTECT_CONTEXT__
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   390
	    if (newobj != nil) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   391
		__InstPtr(newobj)->o_class = self;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   392
		__qSTORE(newobj, self);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   393
		if (nInstVars) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   394
		    /*
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   395
		     * still have to nil out named instvars ...
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   396
		     */
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   397
#if defined(memset4) && defined(FAST_OBJECT_MEMSET4)
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   398
		    memset4(__InstPtr(newobj)->i_instvars, nil, nInstVars);
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   399
#else
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   400
# if defined(FAST_MEMSET) && !defined(NEGATIVE_ADDRESSES)
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   401
		    /*
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   402
		     * knowing that nil is 0
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   403
		     */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   404
		    memset(__InstPtr(newobj)->i_instvars, 0, instsize - OHDR_SIZE);
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   405
# else
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   406
		    op = __InstPtr(newobj)->i_instvars;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   407
		    while (nInstVars--)
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   408
			*op++ = nil;
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   409
# endif
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   410
#endif
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   411
		}
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   412
		RETURN ( newobj );
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   413
	    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   414
	}
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   415
    }
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   416
out:;
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   417
%}.
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   418
    ^ self basicNew:anInteger
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   419
!
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   420
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   421
with:aByteArray from:start to:stop
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   422
    "return new instance with a copy of aByteArray
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   423
     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
   424
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   425
    |len bytes|
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   426
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   427
    len := stop-start+1.
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   428
    bytes := self new:len.
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   429
    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
   430
    ^ bytes
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   431
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   432
    "
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   433
      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
   434
    "
3363
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
   435
! !
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
   436
21830
c5ea23cc3ba2 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21474
diff changeset
   437
!UninterpretedBytes class methodsFor:'Compatibility-Squeak'!
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
readHexFrom:aString
c5ea23cc3ba2 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21474
diff changeset
   440
    "same as fromHexString: for squeak/Pharo compatibility"
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   441
21830
c5ea23cc3ba2 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21474
diff changeset
   442
    ^ self fromHexString:aString
c5ea23cc3ba2 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21474
diff changeset
   443
c5ea23cc3ba2 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21474
diff changeset
   444
    "
c5ea23cc3ba2 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21474
diff changeset
   445
     (ByteArray readHexFrom: 'C3A1C3A5C3A6C3B1C386C2A5C3BC')
c5ea23cc3ba2 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21474
diff changeset
   446
    "
c5ea23cc3ba2 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21474
diff changeset
   447
c5ea23cc3ba2 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21474
diff changeset
   448
    "Created: / 18-06-2017 / 18:01:18 / cg"
c5ea23cc3ba2 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21474
diff changeset
   449
! !
c5ea23cc3ba2 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21474
diff changeset
   450
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   451
!UninterpretedBytes class methodsFor:'queries'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   452
8893
99996b25482e +isAbstract
Claus Gittinger <cg@exept.de>
parents: 8092
diff changeset
   453
isAbstract
11220
1ed300ff0d21 comment
Claus Gittinger <cg@exept.de>
parents: 11009
diff changeset
   454
    "Return if this class is an abstract class.
1ed300ff0d21 comment
Claus Gittinger <cg@exept.de>
parents: 11009
diff changeset
   455
     True is returned for UninterpretedBytes here; false for subclasses.
19461
7a4d28b76572 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19415
diff changeset
   456
     Abstract subclasses must redefine this again."
11220
1ed300ff0d21 comment
Claus Gittinger <cg@exept.de>
parents: 11009
diff changeset
   457
8893
99996b25482e +isAbstract
Claus Gittinger <cg@exept.de>
parents: 8092
diff changeset
   458
    ^ self == UninterpretedBytes
99996b25482e +isAbstract
Claus Gittinger <cg@exept.de>
parents: 8092
diff changeset
   459
!
99996b25482e +isAbstract
Claus Gittinger <cg@exept.de>
parents: 8092
diff changeset
   460
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   461
isBigEndian
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   462
    "return true, if words/shorts store the most-significant
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   463
     byte first (MSB), false if least-sign.-first (LSB).
24569
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
   464
     Returns
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
   465
	false for vax, intel,
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
   466
	true for m68k, m88k, power, sparc.
4019
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
   467
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
   468
     Notice: UninterpretedBytes isBigEndian
24569
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
   469
	     this is inlined both by stc and the jit compiler"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   470
a27a279701f8 Initial revision
claus
parents:
diff changeset
   471
%{  /* NOCONTEXT */
a27a279701f8 Initial revision
claus
parents:
diff changeset
   472
8901
824a89d0b5c7 alpha64 vs. POINTER_SIZE cleanup
Claus Gittinger <cg@exept.de>
parents: 8893
diff changeset
   473
#if defined(__MSBFIRST__)
3936
dd8cd28d4a9b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3459
diff changeset
   474
    RETURN (true);
dd8cd28d4a9b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3459
diff changeset
   475
#else
8901
824a89d0b5c7 alpha64 vs. POINTER_SIZE cleanup
Claus Gittinger <cg@exept.de>
parents: 8893
diff changeset
   476
# if defined(__LSBFIRST__)
4275
9fc4a735a1d3 BFIRST stuff
Claus Gittinger <cg@exept.de>
parents: 4019
diff changeset
   477
    RETURN (false);
9fc4a735a1d3 BFIRST stuff
Claus Gittinger <cg@exept.de>
parents: 4019
diff changeset
   478
# else
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   479
    /*
20816
986549374231 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20595
diff changeset
   480
     * I don't like ifdefs - you always forget some ...
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   481
     * therefore we look into a structure at run-time.
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   482
     * (also, there are CPUs around [mips], where the byteorder
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   483
     *  is programmable, and which come in different flavours)
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   484
     *
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   485
     * NOTICE:
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   486
     *    both the JIT and stc may inline this to a
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   487
     *    constant for systems where this is known.
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   488
     */
a27a279701f8 Initial revision
claus
parents:
diff changeset
   489
    union {
24569
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
   490
	unsigned int   u_l;
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
   491
	char           u_c[sizeof(int)];
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   492
    } u;
a27a279701f8 Initial revision
claus
parents:
diff changeset
   493
a27a279701f8 Initial revision
claus
parents:
diff changeset
   494
    u.u_l = 0x87654321;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   495
    if (u.u_c[0] == 0x21) RETURN (false);
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   496
    RETURN (true);
4275
9fc4a735a1d3 BFIRST stuff
Claus Gittinger <cg@exept.de>
parents: 4019
diff changeset
   497
# endif
3936
dd8cd28d4a9b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3459
diff changeset
   498
#endif
18346
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   499
%}.
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   500
    ^ false     "/ an arbitrary default
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   501
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   502
    "
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   503
     UninterpretedBytes isBigEndian
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   504
    "
23933
d2fd46589fe6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 23626
diff changeset
   505
d2fd46589fe6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 23626
diff changeset
   506
    "Modified (comment): / 17-03-2019 / 13:02:29 / Claus Gittinger"
3209
eff7ad7f0825 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3207
diff changeset
   507
!
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   508
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   509
isBuiltInClass
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   510
    "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
   511
     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
   512
     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
   513
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   514
    ^ self == UninterpretedBytes
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   515
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
   516
    "Modified: / 23.4.1996 / 15:56:25 / cg"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
   517
    "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
   518
! !
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   519
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   520
!UninterpretedBytes methodsFor:'Compatibility'!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   521
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   522
doubleWordAt:index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   523
    "return the 4-bytes starting at index as an (unsigned) Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   524
     The index is a smalltalk index (i.e. 1-based).
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   525
     The value is retrieved in the machine's natural byte order."
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   526
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   527
    ^ self unsignedInt32At:index MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   528
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   529
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   530
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   531
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   532
     b := ByteArray withAll:#(1 2 3 4).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   533
     (b doubleWordAt:1) printStringRadix:16
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   534
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   535
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   536
    "Modified: / 05-03-1998 / 14:57:35 / stefan"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   537
    "Modified (comment): / 04-08-2017 / 11:15:29 / cg"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   538
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   539
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   540
doubleWordAt:index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   541
    "return the 4-bytes starting at index as an (unsigned) Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   542
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   543
     The value is retrieved MSB-first, if the msb-arg is true;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   544
     LSB-first otherwise."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   545
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   546
    ^ self unsignedInt32At:index MSB:msb
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
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   550
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   551
     b := ByteArray withAll:#(1 2 3 4).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   552
     (b doubleWordAt:1 MSB:true) printStringRadix:16.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   553
     (b doubleWordAt:1 MSB:false) printStringRadix:16
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   554
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   555
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   556
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   557
doubleWordAt:byteIndex put:anInteger
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   558
    "set the 4-bytes starting at index from the (unsigned) Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   559
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   560
     The value should be in the range 0 to 16rFFFFFFFF
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   561
     (for negative values, the stored value is not defined).
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   562
     The value is stored in the machine's natural byte order."
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   563
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   564
   ^ self unsignedInt32At:byteIndex put:anInteger MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   565
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   566
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   567
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   568
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   569
     b doubleWordAt:1 put:16r04030201.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   570
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   571
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   572
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   573
    "Modified: / 05-03-1998 / 14:57:48 / stefan"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   574
    "Modified (comment): / 04-08-2017 / 11:15:38 / cg"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   575
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   576
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   577
doubleWordAt:byteIndex put:anInteger MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   578
    "set the 4-bytes starting at index from the (unsigned) Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   579
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   580
     The value must be in the range 0 to 16rFFFFFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   581
     The value is stored MSB-first if msb is true; LSB-first otherwise."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   582
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   583
   ^ self unsignedInt32At:byteIndex put:anInteger MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   584
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   585
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   586
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   587
     b := ByteArray new:8.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   588
     b doubleWordAt:1 put:16r04030201 MSB:true.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   589
     b doubleWordAt:5 put:16r04030201 MSB:false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   590
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   591
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   592
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   593
    "Modified: / 21.1.1998 / 17:43:34 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   594
    "Modified: / 5.3.1998 / 11:42:17 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   595
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   596
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   597
doubleWordAtDoubleWordIndex:int32Index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   598
    "return the unsigned long (int32) at index, anInteger.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   599
     Fetching in the machine's natural byte order.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   600
     Indices are 1-based and scaled as appropriate to allow
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   601
     accessing the memory as an array of doubleWord entries.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   602
     (i.e. indices are 1, 2, ...)"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   603
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   604
    ^ self doubleWordAtDoubleWordIndex:int32Index MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   605
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   606
    "Created: / 21.1.1998 / 17:43:53 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   607
    "Modified: / 5.3.1998 / 14:58:06 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   608
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   609
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   610
doubleWordAtDoubleWordIndex:int32Index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   611
    "return the unsigned long (int32) at index, anInteger.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   612
     Fetching is MSB if msb is true, LSB otherwise.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   613
     Indices are 1-based and scaled as appropriate to allow
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   614
     accessing the memory as an array of doubleWord entries.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   615
     (i.e. indices are 1, 2, ...)"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   616
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   617
    ^ self unsignedInt32At:((int32Index - 1) * 4 + 1) MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   618
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   619
    "Created: / 21.1.1998 / 17:44:07 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   620
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   621
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   622
doubleWordAtDoubleWordIndex:int32Index put:anInteger
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   623
    "set the long at index, anInteger.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   624
     Storing in the machines natural byte order.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   625
     Indices are 1-based and scaled as appropriate to allow
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   626
     accessing the memory as an array of doubleWord entries.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   627
     (i.e. indices are 1, 2, ...)"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   628
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   629
    ^ self doubleWordAtDoubleWordIndex:int32Index put:anInteger MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   630
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   631
    "Created: / 21.1.1998 / 17:44:13 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   632
    "Modified: / 5.3.1998 / 14:58:19 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   633
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   634
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   635
doubleWordAtDoubleWordIndex:int32Index put:anInteger MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   636
    "set the long at index, anInteger.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   637
     Storing is MSB if msb is true, LSB otherwise.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   638
     Indices are 1-based and scaled as appropriate to allow
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   639
     accessing the memory as an array of doubleWord entries.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   640
     (i.e. indices are 1, 2, ...)"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   641
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   642
    ^ self unsignedInt32At:((int32Index - 1) * 4 + 1) put:anInteger MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   643
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   644
    "Created: / 21.1.1998 / 17:44:19 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   645
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   646
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   647
int16At:byteIndex
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   648
    "return the 2-bytes starting at index as a signed Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   649
     The index is a smalltalk index (i.e. 1-based).
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   650
     The value is retrieved in the machine's natural byte order.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   651
     This may be worth a primitive."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   652
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   653
    ^ self signedInt16At:byteIndex
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   654
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   655
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   656
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   657
     b := ByteArray new:2.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   658
     b wordAt:1 put:16rFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   659
     b signedWordAt:1
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   660
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   661
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   662
    "Modified: / 01-07-1996 / 21:14:38 / cg"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   663
    "Modified (comment): / 04-08-2017 / 11:15:48 / cg"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   664
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   665
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   666
int16At:byteIndex MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   667
    "return the 2-bytes starting at index as a signed Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   668
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   669
     The value is retrieved in the machines natural byte order.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   670
     This may be worth a primitive."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   671
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   672
    ^ self signedInt16At:byteIndex MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   673
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   674
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   675
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   676
     b := ByteArray new:2.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   677
     b wordAt:1 put:16rFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   678
     b signedWordAt:1
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   679
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   680
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   681
    "Modified: 1.7.1996 / 21:14:38 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   682
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   683
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   684
int16At:index put:anInteger
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   685
    "set the 2-bytes starting at index from the signed Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   686
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   687
     The stored value must be in the range -32768 .. +32676.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   688
     The value is stored in the machine's natural byteorder"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   689
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   690
    ^ self signedInt16At:index put:anInteger MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   691
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   692
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   693
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   694
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   695
     b shortAt:1 put:1 bigEndian:true.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   696
     b shortAt:3 put:1 bigEndian:false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   697
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   698
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   699
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   700
    "Modified: / 1.7.1996 / 21:12:07 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   701
    "Created: / 5.3.1998 / 11:02:05 / stefan"
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
int16At:index put:anInteger MSB:bigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   705
    "set the 2-bytes starting at index from the signed Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   706
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   707
     The stored value must be in the range -32768 .. +32676.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   708
     The value is stored in the byteorder given by bigEndian.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   709
     This may be worth a primitive."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   710
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   711
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   712
    ^ self signedInt16At:index put:anInteger MSB:bigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   713
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   714
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   715
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   716
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   717
     b shortAt:1 put:1 bigEndian:true.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   718
     b shortAt:3 put:1 bigEndian:false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   719
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   720
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   721
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   722
    "Modified: / 1.7.1996 / 21:12:07 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   723
    "Created: / 5.3.1998 / 11:02:05 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   724
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   725
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   726
longAt:index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   727
    "return the 4-bytes starting at index as a signed Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   728
     The index is a smalltalk index (i.e. 1-based).
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   729
     The value is retrieved in the machine's natural byte order,
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   730
     therefore, this should only be used for byte-data which is
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   731
     only used inside this machine.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   732
     To setup data packets which are to be sent to other machines,
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   733
     or stored into a file, always use longAt:MSB: and specify
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   734
     a definite byteOrder."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   735
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   736
    ^ self signedInt32At:index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   737
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   738
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   739
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   740
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   741
     b unsignedLongAt:1 put:16rFFFFFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   742
     (b longAt:1)
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   743
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   744
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   745
    "Modified: / 01-07-1996 / 21:11:28 / cg"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   746
    "Modified: / 05-03-1998 / 12:06:28 / stefan"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   747
    "Modified (comment): / 04-08-2017 / 11:15:58 / cg"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   748
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   749
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   750
longAt:index bigEndian:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   751
    "return the 4-bytes starting at index as a signed Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   752
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   753
     Depending on msb, the value is retrieved MSB-first or LSB-first.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   754
     This may be worth a primitive."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   755
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   756
    ^ self signedInt32At:index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   757
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   758
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   759
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   760
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   761
     b unsignedLongAt:1 put:16rFFFFFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   762
     (b longAt:1)
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   763
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   764
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   765
    "Modified: / 1.7.1996 / 21:11:33 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   766
    "Created: / 5.3.1998 / 14:02:03 / stefan"
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
longAt:index put:value
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   770
    "set the 4-bytes starting at index from the signed Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   771
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   772
     The value is stored in the machine's natural byte order."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   773
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   774
    ^ self signedInt32At:index put:value MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   775
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   776
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   777
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   778
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   779
     b longAt:1 put:-1.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   780
     (b unsignedLongAt:1) printStringRadix:16
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   781
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   782
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   783
    "Modified: / 1.7.1996 / 21:11:39 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   784
    "Created: / 5.3.1998 / 10:57:18 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   785
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   786
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   787
longAt:byteIndex put:anInteger bigEndian:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   788
    "store a signed long (32bit) integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   789
     The index is a smalltalk index (i.e. 1-based)."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   790
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   791
    ^ self signedInt32At:byteIndex put:anInteger MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   792
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   793
    "Created: / 9.5.1998 / 01:10:24 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   794
    "Modified: / 9.5.1998 / 01:13:34 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   795
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   796
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   797
longLongAt:index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   798
    "return the 8-bytes starting at index as a signed Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   799
     The index is a smalltalk index (i.e. 1-based).
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   800
     The value is retrieved in the machine's natural byte order.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   801
     This may be worth a primitive."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   802
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   803
    ^ self signedInt64At:index MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   804
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   805
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   806
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   807
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   808
     b unsignedLongLongAt:1 put:16rFFFFFFFFFFFFFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   809
     (b longLongAt:1)
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   810
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   811
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   812
    "Modified: / 01-07-1996 / 21:11:28 / cg"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   813
    "Created: / 05-03-1998 / 14:40:05 / stefan"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   814
    "Modified (comment): / 04-08-2017 / 11:16:06 / cg"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   815
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   816
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   817
longLongAt:index bigEndian:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   818
    "return the 8-bytes starting at index as a signed Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   819
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   820
     The value is retrieved in the given byte order.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   821
     This may be worth a primitive."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   822
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   823
    ^ self signedInt64At:index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   824
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   825
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   826
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   827
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   828
     b unsignedLongLongAt:1 put:16rFFFFFFFFFFFFFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   829
     (b longLongAt:1 msb:true)
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   830
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   831
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   832
    "Modified: / 5.3.1998 / 12:06:28 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   833
    "Created: / 5.3.1998 / 14:40:54 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   834
    "Modified: / 9.5.1998 / 01:10:59 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   835
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   836
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   837
longLongAt:byteIndex put:anInteger
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   838
    "store a signed longLong (64bit) integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   839
     The index is a smalltalk index (i.e. 1-based).
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   840
     The value is stored in the machine's natural byte order.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   841
     Same as #signedQuadWordAt:put: - for ST80 compatibility."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   842
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   843
    ^ self signedInt64At:byteIndex put:anInteger MSB:IsBigEndian
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   844
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   845
    "Modified (comment): / 04-08-2017 / 11:16:36 / cg"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   846
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   847
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   848
longLongAt:byteIndex put:anInteger bigEndian:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   849
    "store a signed longLong (64bit) integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   850
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   851
     Same as #signedQuadWordAt:put: - for ST80 compatibility."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   852
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   853
    ^ self signedInt64At:byteIndex put:anInteger MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   854
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   855
    "Created: / 9.5.1998 / 01:10:24 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   856
    "Modified: / 9.5.1998 / 01:13:34 / cg"
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
quadWordAt:index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   860
    "return the 8-bytes starting at index as an (unsigned) Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   861
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   862
     Depending on msb, the value is retrieved MSB or LSB-first."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   863
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   864
   ^ self unsignedInt64At:index MSB:msb
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   865
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   866
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   867
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   868
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   869
     b := ByteArray withAll:#(1 2 3 4 5 6 7 8).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   870
     (b quadWordAt:1 MSB:false) printStringRadix:16
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   871
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   872
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   873
    "Modified: 5.11.1996 / 14:06:21 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   874
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   875
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   876
quadWordAt:index put:anInteger MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   877
    "set the 8-bytes starting at index from the (unsigned) Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   878
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   879
     The value must be in the range 0 to 16rFFFFFFFFFFFFFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   880
     Depending on msb, the value is stored MSB-first or LSB-first."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   881
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   882
    ^ self unsignedInt64At:index put:anInteger MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   883
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   884
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   885
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   886
     b := ByteArray new:8.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   887
     b quadWordAtIndex:1 put:16r0807060504030201 MSB:false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   888
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   889
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   890
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   891
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   892
shortAt:index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   893
    "return the 2-bytes starting at index as a signed Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   894
     The index is a smalltalk index (i.e. 1-based).
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   895
     The value is retrieved in the machine's natural byte order.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   896
     This may be worth a primitive.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   897
     This is the ST80 equivalent of #signedWordAt:"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   898
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   899
    ^ self signedInt16At:index MSB:IsBigEndian
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   900
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   901
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   902
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   903
     b := ByteArray new:2.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   904
     b unsignedShortAt:1 put:16rFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   905
     b shortAt:1
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   906
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   907
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   908
    "Modified: / 01-07-1996 / 21:14:38 / cg"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   909
    "Created: / 05-03-1998 / 10:59:57 / stefan"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   910
    "Modified: / 05-03-1998 / 23:39:38 / stefan"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   911
    "Modified (comment): / 04-08-2017 / 11:16:20 / cg"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   912
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   913
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   914
shortAt:index bigEndian:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   915
    "return the 2-bytes starting at index as a signed Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   916
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   917
     The value is retrieved MSB-first, if the msb-arg is true;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   918
     LSB-first otherwise.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   919
     This is the ST80 equivalent of #signedWordAt:"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   920
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   921
    ^ self signedInt16At:index MSB:msb
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   922
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   923
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   924
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   925
     b := ByteArray new:2.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   926
     b unsignedShortAt:1 put:16rFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   927
     b shortAt:1
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   928
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   929
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   930
    "Modified: / 1.7.1996 / 21:14:38 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   931
    "Created: / 5.3.1998 / 23:41:21 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   932
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   933
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   934
shortAt:index put:value
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   935
    "set the 2-bytes starting at index from the signed Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   936
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   937
     The stored value must be in the range -32768 .. +32676.
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   938
     The value is stored in the machine's natural byteorder.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   939
     This may be worth a primitive.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   940
     This is the ST80 equivalent of #signedWordAt:put:"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   941
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   942
    ^ self signedInt16At:index put:value MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   943
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   944
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   945
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   946
     b := ByteArray new:6.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   947
     b shortAt:1 put:-1.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   948
     b shortAt:3 put:-2.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   949
     b shortAt:5 put:0.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   950
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   951
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   952
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   953
    "Modified: / 01-07-1996 / 21:12:07 / cg"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   954
    "Created: / 05-03-1998 / 11:02:05 / stefan"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   955
    "Modified (comment): / 04-08-2017 / 11:16:46 / cg"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   956
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   957
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   958
shortAt:index put:value bigEndian:bigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   959
    "set the 2-bytes starting at index from the signed Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   960
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   961
     The stored value must be in the range -32768 .. +32676.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   962
     The value is stored in the byteorder given by bigEndian.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   963
     This may be worth a primitive."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   964
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   965
    ^ self signedInt16At:index put:value MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   966
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   967
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   968
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   969
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   970
     b shortAt:1 put:1 bigEndian:true.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   971
     b shortAt:3 put:1 bigEndian:false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   972
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   973
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   974
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   975
    "Modified: / 1.7.1996 / 21:12:07 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   976
    "Created: / 5.3.1998 / 11:02:05 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   977
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   978
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   979
signedDoubleWordAt:index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   980
    "return the 4-bytes starting at index as a signed Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   981
     The index is a smalltalk index (i.e. 1-based).
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   982
     The value is retrieved in the machine's natural byte order.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   983
     This may be worth a primitive."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   984
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   985
    ^ self signedInt32At:index MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   986
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   987
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   988
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   989
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   990
     b doubleWordAt:1 put:16rFFFFFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   991
     (b signedDoubleWordAt:1)
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   992
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   993
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   994
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   995
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   996
     b signedDoubleWordAt:1 put:-1.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   997
     (b doubleWordAt:1)
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   998
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   999
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1000
    "Modified: / 01-07-1996 / 21:11:28 / cg"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1001
    "Modified (comment): / 04-08-2017 / 11:16:52 / cg"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1002
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1003
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1004
signedDoubleWordAt:index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1005
    "return the 4-bytes starting at index as a (signed) Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1006
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1007
     The value is retrieved MSB-first, if the msb-arg is true;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1008
     LSB-first otherwise."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1009
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1010
    ^ self signedInt32At:index MSB:msb
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
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1014
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1015
     b := ByteArray withAll:#(1 2 3 4).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1016
     (b signedDoubleWordAt:1 MSB:true) printStringRadix:16.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1017
     (b signedDoubleWordAt:1 MSB:false) printStringRadix:16
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1018
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1019
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1020
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1021
signedDoubleWordAt:index put:value
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1022
    "set the 4-bytes starting at index from the signed Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1023
     The index is a smalltalk index (i.e. 1-based).
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1024
     The value is stored in the machine's natural byte order.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1025
     This may be worth a primitive."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1026
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1027
    ^ self signedInt32At:index put:value MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1028
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1029
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1030
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1031
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1032
     b signedDoubleWordAt:1 put:-1.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1033
     (b doubleWordAt:1) printStringRadix:16
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1034
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1035
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1036
    "Modified: / 01-07-1996 / 21:11:39 / cg"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1037
    "Modified (comment): / 04-08-2017 / 11:16:56 / cg"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1038
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1039
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1040
signedDoubleWordAt:index put:value MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1041
    "set the 4-bytes starting at index from the signed Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1042
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1043
     Depending on msb, the value is stored MSB-first or LSB-first.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1044
     This may be worth a primitive."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1045
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1046
    ^ self signedInt32At:index put:value MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1047
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1048
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1049
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1050
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1051
     b signedDoubleWordAt:1 put:-1.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1052
     (b doubleWordAt:1) printStringRadix:16
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1053
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1054
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1055
    "Modified: 1.7.1996 / 21:11:46 / cg"
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
signedLongAt:index
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1059
    "return the 4-bytes starting at index as a signed Integer.
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1060
     The index is a smalltalk index (i.e. 1-based).
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1061
     The value is retrieved in the machine's natural byte order."
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1062
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1063
    ^ self signedInt32At:index
15087
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1064
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
     |b|
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1067
     b := ByteArray new:4.
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1068
     b unsignedLongAt:1 put:16rFFFFFFFF.
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1069
     b signedLongAt:1
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1070
    "
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1071
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1072
    "Modified: 1.7.1996 / 21:14:38 / cg"
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
signedLongAt:index put:newValue
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1076
    "store a 4-bytes signed value starting at index.
15087
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1077
     The index is a smalltalk index (i.e. 1-based).
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1078
     The value is in the machine's natural byte order."
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1079
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1080
    ^ self signedInt32At:index put:newValue
15087
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1081
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1082
    "
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1083
     |b|
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1084
     b := ByteArray new:4.
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1085
     b signedLongAt:1 put:-1.
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1086
     b unsignedLongAt:1
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1087
    "
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1088
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1089
    "Modified: 1.7.1996 / 21:14:38 / cg"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1090
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1091
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1092
signedWordAt:index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1093
    "return the 2-bytes starting at index as a signed Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1094
     The index is a smalltalk index (i.e. 1-based).
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1095
     The value is retrieved in the machine's natural byte order.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1096
     This may be worth a primitive."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1097
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1098
    ^ (self unsignedInt16At:index MSB:IsBigEndian) signExtendedShortValue
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1099
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1100
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1101
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1102
     b := ByteArray new:2.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1103
     b wordAt:1 put:16rFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1104
     b signedWordAt:1
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1105
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1106
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1107
    "Modified: / 01-07-1996 / 21:14:38 / cg"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1108
    "Modified (comment): / 04-08-2017 / 11:17:02 / cg"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1109
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1110
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1111
signedWordAt:index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1112
    "return the 2-bytes starting at index as a signed Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1113
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1114
     The value is retrieved MSB-first if the msb-arg is true,
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1115
     LSB-first otherwise.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1116
     This may be worth a primitive."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1117
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1118
    ^ (self unsignedInt16At:index MSB:msb) signExtendedShortValue
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1119
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1120
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1121
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1122
     b := ByteArray new:2.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1123
     b wordAt:1 put:16r0080.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1124
     b signedWordAt:1 MSB:true.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1125
     b signedWordAt:1 MSB:false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1126
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1127
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1128
    "Modified: 1.7.1996 / 21:15:57 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1129
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1130
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1131
signedWordAt:byteIndex put:anInteger
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1132
    "set the 2-bytes starting at index from the signed Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1133
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1134
     The stored value must be in the range -32768 .. +32676.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1135
     The value is stored in the machine's natural byteorder."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1136
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1137
    ^ self signedInt16At:byteIndex put:anInteger MSB:IsBigEndian
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
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1141
     b := ByteArray new:6.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1142
     b shortAt:1 put:-1.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1143
     b shortAt:3 put:-2.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1144
     b shortAt:5 put:0.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1145
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1146
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1147
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1148
    "Modified: / 1.7.1996 / 21:12:07 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1149
    "Modified: / 5.3.1998 / 11:01:30 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1150
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1151
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1152
signedWordAt:byteIndex put:anInteger MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1153
    "set the 2-bytes starting at index from the signed Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1154
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1155
     The stored value must be in the range -32768 .. +32676.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1156
     The value is stored MSB-first, if the msb-arg is true;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1157
     LSB-first otherwise."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1158
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1159
    ^ self signedInt16At:byteIndex put:anInteger MSB:msb
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1160
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1161
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1162
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1163
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1164
     b signedWordAt:1 put:-1.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1165
     b signedWordAt:3 put:-2.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1166
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1167
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1168
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1169
    "Modified: 1.7.1996 / 21:12:13 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1170
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1171
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1172
unsignedLongAt:index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1173
    "return the 4-bytes starting at index as an (unsigned) Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1174
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1175
     The value is retrieved in the machine's natural byte order.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1176
     Subclasses may redefine this for better performance.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1177
     Same as doubleWordAt: for protocol completeness"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1178
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1179
    ^ self unsignedInt32At:index MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1180
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1181
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1182
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1183
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1184
     b := ByteArray withAll:#(1 2 3 4).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1185
     (b unsignedLongAt:1) printStringRadix:16
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1186
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1187
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1188
    "Created: / 5.3.1998 / 11:56:53 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1189
    "Modified: / 5.3.1998 / 14:58:48 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1190
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1191
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1192
unsignedLongAt:index bigEndian:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1193
    "return the 4-bytes starting at index as an (unsigned) Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1194
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1195
     The value is retrieved MSB-first, if the msb-arg is true;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1196
     LSB-first otherwise.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1197
     Subclasses may redefine this for better performance.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1198
     Same as doubleWordAt:MSB: for protocol completeness"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1199
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1200
    ^ self unsignedInt32At:index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1201
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1202
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1203
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1204
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1205
     b := ByteArray withAll:#(1 2 3 4).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1206
     (b unsignedLongAt:1 bigEndian:true) printStringRadix:16.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1207
     (b unsignedLongAt:1 bigEndian:false) printStringRadix:16
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1208
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1209
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1210
    "Modified: / 21.1.1998 / 17:42:30 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1211
    "Created: / 5.3.1998 / 11:46:05 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1212
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1213
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1214
unsignedLongAt:index put:value
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1215
    "set the 4-bytes starting at index from the (unsigned) Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1216
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1217
     The value should be in the range 0 to 16rFFFFFFFF
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1218
     (for negative values, the stored value is not defined).
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1219
     The value is stored in the machine's natural byte order.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1220
     Subclasses may redefine this for better performance.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1221
     Same as doubleWordAt:put: for protocol completeness"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1222
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1223
    ^ self unsignedInt32At:index put:value MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1224
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1225
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1226
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1227
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1228
     b unsignedLongAt:1 put:16r04030201.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1229
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1230
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1231
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1232
    "Created: / 05-03-1998 / 11:57:44 / stefan"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1233
    "Modified: / 05-03-1998 / 14:58:59 / stefan"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1234
    "Modified (comment): / 04-08-2017 / 11:17:11 / cg"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1235
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1236
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1237
unsignedLongAt:index put:aNumber bigEndian:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1238
    "set the 4-bytes starting at index from the (unsigned) Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1239
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1240
     The value must be in the range 0 to 16rFFFFFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1241
     The value is stored MSB-first if msb is true; LSB-first otherwise.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1242
     Subclasses may redefine this for better performance.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1243
     Same as doubleWordAt:put:MSB: for protocol completeness"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1244
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1245
    ^ self unsignedInt32At:index put:aNumber MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1246
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1247
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1248
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1249
     b := ByteArray new:8.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1250
     b unsignedLongAt:1 put:16r04030201 bigEndian:true.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1251
     (b unsignedLongAt:1 bigEndian:false) printStringRadix:16
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1252
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1253
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1254
    "Modified: / 21.1.1998 / 17:43:34 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1255
    "Created: / 5.3.1998 / 11:43:53 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1256
    "Modified: / 5.3.1998 / 11:47:30 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1257
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1258
24450
8a439196334f #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 24040
diff changeset
  1259
unsignedLongLongAt:index
8a439196334f #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 24040
diff changeset
  1260
    "get the 8-bytes starting at index as (unsigned) Integer value.
8a439196334f #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 24040
diff changeset
  1261
     The index is a smalltalk index (i.e. 1-based).
8a439196334f #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 24040
diff changeset
  1262
     The value will be in the range 0 to 16rFFFFFFFFFFFFFFFF.
8a439196334f #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 24040
diff changeset
  1263
     The value is fetched in the machine's natural byte order."
8a439196334f #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 24040
diff changeset
  1264
8a439196334f #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 24040
diff changeset
  1265
    ^ self unsignedInt64At:index MSB:IsBigEndian
8a439196334f #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 24040
diff changeset
  1266
8a439196334f #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 24040
diff changeset
  1267
    "Created: / 22-07-2019 / 01:14:47 / Claus Gittinger"
8a439196334f #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 24040
diff changeset
  1268
!
8a439196334f #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 24040
diff changeset
  1269
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1270
unsignedLongLongAt:index bigEndian:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1271
    "return the 8-bytes starting at index as an (unsigned) Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1272
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1273
     Depending on msb, the value is retrieved MSB or LSB-first."
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 MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1276
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1277
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1278
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1279
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1280
     b := ByteArray withAll:#(1 2 3 4 5 6 7 8).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1281
     (b unsignedLongLongAt:1 bigEndian:false) printStringRadix:16
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1282
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1283
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1284
    "Modified: / 5.11.1996 / 14:06:21 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1285
    "Modified: / 5.3.1998 / 14:04:44 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1286
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1287
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1288
unsignedLongLongAt:index put:anInteger
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1289
    "set the 8-bytes starting at index from the (unsigned) Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1290
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1291
     The value must be in the range 0 to 16rFFFFFFFFFFFFFFFF.
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1292
     The value is stored in the machine's natural byte order."
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1293
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1294
    ^ self unsignedInt64At:index put:anInteger MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1295
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1296
    "Created: / 05-03-1998 / 14:44:00 / stefan"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1297
    "Modified (comment): / 04-08-2017 / 11:17:23 / cg"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1298
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1299
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1300
unsignedLongLongAt:index put:anInteger bigEndian:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1301
    "set the 8-bytes starting at index from the (unsigned) Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1302
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1303
     The value must be in the range 0 to 16rFFFFFFFFFFFFFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1304
     Depending on msb, the value is stored MSB-first or LSB-first."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1305
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1306
    ^ self unsignedInt64At:index put:anInteger MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1307
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1308
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1309
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1310
     b := ByteArray new:8.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1311
     b unsignedLongLongAt:1 put:16r0807060504030201 bigEndian:false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1312
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1313
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1314
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1315
    "Created: / 5.3.1998 / 14:06:02 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1316
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1317
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1318
unsignedShortAt:index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1319
    "return the 2-bytes starting at index as an (unsigned) Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1320
     The index is a smalltalk index (i.e. 1-based).
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1321
     The value is retrieved in the machine's natural byte order
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1322
     Subclasses may redefine this for better performance.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1323
     This is the ST80 equivalent of #wordAt:"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1324
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1325
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1326
    ^ self unsignedInt16At:index MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1327
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1328
    "Created: / 05-03-1998 / 11:38:25 / stefan"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1329
    "Modified: / 05-03-1998 / 14:59:25 / stefan"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1330
    "Modified (comment): / 04-08-2017 / 11:17:28 / cg"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1331
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1332
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1333
unsignedShortAt:index bigEndian:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1334
    "return the 2-bytes starting at index as an (unsigned) Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1335
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1336
     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
  1337
     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
  1338
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1339
    ^ self unsignedInt16At:index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1340
21437
9503363c3f3f #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 21380
diff changeset
  1341
    "Modified: / 21-01-1998 / 17:46:07 / cg"
9503363c3f3f #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 21380
diff changeset
  1342
    "Created: / 05-03-1998 / 11:49:29 / stefan"
9503363c3f3f #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 21380
diff changeset
  1343
    "Modified (comment): / 13-02-2017 / 20:34:05 / cg"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1344
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1345
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1346
unsignedShortAt:index put:value
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1347
    "set the 2-bytes starting at index from the (unsigned) Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1348
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1349
     The stored value must be in the range 0 .. 16rFFFF.
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1350
     The value is stored in the machine's natural byteorder."
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1351
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1352
    ^ self unsignedInt16At:index put:value
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1353
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1354
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1355
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1356
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1357
     b unsignedShortAt:1 put:16r0102.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1358
     b unsignedShortAt:3 put:16r0304.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1359
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1360
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1361
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1362
    "Created: / 05-03-1998 / 11:54:52 / stefan"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1363
    "Modified: / 05-03-1998 / 14:59:38 / stefan"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1364
    "Modified (comment): / 04-08-2017 / 11:17:31 / cg"
19349
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
unsignedShortAt:index put:value bigEndian:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1368
    "set the 2-bytes starting at index from the (unsigned) Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1369
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1370
     The stored value must be in the range 0 .. 16rFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1371
     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
  1372
     lower index) if msb is false, MSB-first otherwise"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1373
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1374
    ^ self unsignedInt16At:index put:value MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1375
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1376
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1377
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1378
     b := ByteArray new:8.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1379
     b unsignedShortAt:1 put:16r0102 bigEndian:false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1380
     b unsignedShortAt:3 put:16r0304 bigEndian:false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1381
     b unsignedShortAt:5 put:16r0102 bigEndian:true.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1382
     b unsignedShortAt:7 put:16r0304 bigEndian:true.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1383
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1384
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1385
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1386
    "Modified: / 21.1.1998 / 17:48:15 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1387
    "Modified: / 5.3.1998 / 11:52:28 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1388
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1389
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1390
wordAt:index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1391
    "return the 2-bytes starting at index as an (unsigned) Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1392
     The index is a smalltalk index (i.e. 1-based).
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1393
     The value is retrieved in the machine's natural byte order
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1394
     Subclasses may redefine this for better performance."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1395
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1396
    ^ self unsignedInt16At:index MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1397
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1398
    "Modified: / 05-03-1998 / 14:59:51 / stefan"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1399
    "Modified (comment): / 04-08-2017 / 11:17:35 / cg"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1400
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1401
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1402
wordAt:index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1403
    "return the 2-bytes starting at index as an (unsigned) Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1404
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1405
     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
  1406
     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
  1407
     Notice:
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1408
	the index is a byte index; thus, this allows for unaligned access to
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1409
	words on any boundary.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1410
     Question: should it be retrieve signed values ? (see ByteArray>>signedWordAt:)"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1411
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1412
    ^ self unsignedInt16At:index MSB:msb
21437
9503363c3f3f #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 21380
diff changeset
  1413
9503363c3f3f #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 21380
diff changeset
  1414
    "Modified (comment): / 13-02-2017 / 20:34:09 / cg"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1415
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1416
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1417
wordAt:index put:value
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1418
    "set the 2-bytes starting at index from the (unsigned) Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1419
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1420
     The stored value must be in the range 0 .. 16rFFFF.
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1421
     The value is stored in the machine's natural byteorder.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1422
     Question: should it accept signed values ? (see ByteArray>>signedWordAt:put:)"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1423
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1424
    ^ self unsignedInt16At:index put:value MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1425
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1426
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1427
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1428
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1429
     b wordAt:1 put:16r0102.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1430
     b wordAt:3 put:16r0304.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1431
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1432
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1433
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1434
    "Modified: / 05-03-1998 / 15:00:03 / stefan"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1435
    "Modified (comment): / 04-08-2017 / 11:17:39 / cg"
19349
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
wordAt:index put:value MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1439
    "set the 2-bytes starting at index from the (unsigned) Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1440
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1441
     The stored value must be in the range 0 .. 16rFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1442
     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
  1443
     lower index) if msb is false, MSB-first otherwise.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1444
     Question: should it accept signed values ? (see ByteArray>>signedWordAt:put:)"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1445
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1446
    ^ self unsignedInt16At:index put:value MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1447
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1448
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1449
     b := ByteArray new:8.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1450
     b wordAt:1 put:16r0102 MSB:false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1451
     b wordAt:3 put:16r0304 MSB:false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1452
     b wordAt:5 put:16r0102 MSB:true.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1453
     b wordAt:7 put:16r0304 MSB:true.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1454
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1455
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1456
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1457
    "Modified: / 21.1.1998 / 17:48:15 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1458
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1459
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1460
wordAtWordIndex:int16Index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1461
    "return the unsigned short (uint16) at index, anInteger.
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1462
     Fetching in the machine's natural byte order.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1463
     Indices are 1-based and scaled as appropriate to allow
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1464
     accessing the memory as an array of word entries.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1465
     (i.e. indices are 1, 2, ...)"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1466
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1467
    ^ self unsignedInt16At:int16Index MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1468
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1469
    "Created: / 21-01-1998 / 17:48:26 / cg"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1470
    "Modified: / 05-03-1998 / 15:00:16 / stefan"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1471
    "Modified (comment): / 04-08-2017 / 11:17:43 / cg"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1472
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1473
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1474
wordAtWordIndex:int16Index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1475
    "return the unsigned short (uint16) at index, anInteger.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1476
     Fetching is MSB if msb is true, LSB otherwise.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1477
     Indices are 1-based and scaled as appropriate to allow
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1478
     accessing the memory as an array of word entries.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1479
     (i.e. indices are 1, 2, ...)"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1480
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1481
    ^ self unsignedInt16At:((int16Index - 1) * 2 + 1) MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1482
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1483
    "Created: / 21.1.1998 / 17:48:30 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1484
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1485
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1486
wordAtWordIndex:int16Index put:anInteger
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1487
    "set the unsigned short (uint16) at index, anInteger.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1488
     Storing in the machine's natural byte order.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1489
     Indices are 1-based and scaled as appropriate to allow
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1490
     accessing the memory as an array of word entries.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1491
     (i.e. indices are 1, 2, ...)"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1492
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1493
    ^ self unsignedInt16At:int16Index put:anInteger MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1494
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1495
    "Created: / 21.1.1998 / 17:48:34 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1496
    "Modified: / 5.3.1998 / 15:00:27 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1497
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1498
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1499
wordAtWordIndex:int16Index put:anInteger MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1500
    "set the short at index, anInteger.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1501
     Storing is MSB if msb is true, LSB otherwise.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1502
     Indices are 1-based and scaled as appropriate to allow
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1503
     accessing the memory as an array of word entries.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1504
     (i.e. indices are 1, 2, ...)"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1505
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1506
    ^ self unsignedInt16At:((int16Index - 1) * 2 + 1) put:anInteger MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1507
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1508
    "Created: / 21.1.1998 / 17:48:38 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1509
! !
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1510
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1511
!UninterpretedBytes methodsFor:'Compatibility-Squeak'!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1512
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1513
copyFromByteArray:aByteArray
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1514
    "copy as much as possible from aByteArray"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1515
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1516
    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
  1517
! !
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  1518
9185
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1519
!UninterpretedBytes methodsFor:'Compatibility-V''Age'!
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1520
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1521
uint32At:zeroBasedIndex
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1522
    "return the 4-bytes starting at index as (unsigned) Integer.
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1523
     WARNING: The index is a C index (i.e. 0-based).
19301
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1524
     The value is retrieved in the machine's natural byte order.
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1525
     Similar to unsignedInt32At:, except for the index base"
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1526
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1527
    ^ self unsignedInt32At:zeroBasedIndex+1
9185
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
    "
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1530
     |b|
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1531
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1532
     b := ByteArray withAll:#(0 0 0 0).
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1533
     b uint32At:0 put:16r12345678.
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1534
     b uint32At:0.
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1535
     b
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1536
    "
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1537
!
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1538
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1539
uint32At:zeroBasedIndex put:anInteger
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1540
    "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
  1541
     WARNING: The index is a C index (i.e. 0-based).
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1542
     The value is stored in the machine's natural byte order.
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1543
     Similar to unsignedInt32At:put:, except for the index base"
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1544
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1545
    ^ self unsignedInt32At:zeroBasedIndex+1 put:anInteger
9185
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1546
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1547
    "
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1548
     |b|
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1549
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1550
     b := ByteArray withAll:#(0 0 0 0).
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1551
     b uint32At:0 put:16r12345678.
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1552
     b
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1553
    "
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1554
! !
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1555
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1556
!UninterpretedBytes methodsFor:'accessing-128bit ints'!
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1557
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1558
signedInt128At:index MSB:msb
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1559
    "return the 16-bytes starting at index as a signed Integer.
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1560
     The index is a smalltalk index (i.e. 1-based).
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1561
     The value is retrieved in the given byte order.
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1562
     This may be worth a primitive."
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1563
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1564
    |w|
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1565
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1566
    w := self unsignedInt128At:index MSB:msb.
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1567
    (w > (16r7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF)) ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1568
	^ w - (16r100000000000000000000000000000000)
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1569
    ].
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1570
    ^ w
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1571
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
     |b|
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1574
     b := ByteArray new:16.
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1575
     b unsignedInt128At:1 put:16rFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MSB:true.
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1576
     (b signedInt128At:1 MSB:true)
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1577
    "
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1578
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1579
    "Created: / 04-08-2017 / 11:27:31 / cg"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1580
!
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
signedInt128At:byteIndex put:anInteger MSB:msb
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1583
    "store a signed 128bit integer.
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1584
     The index is a smalltalk index (i.e. 1-based)."
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
    |v|
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1587
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1588
    v := anInteger.
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1589
    anInteger < 0 ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1590
	v := v + 16r100000000000000000000000000000000
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1591
    ].
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1592
    self unsignedInt128At:byteIndex put:v MSB:msb.
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1593
    ^ anInteger
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
    "
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1596
     |b|
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1597
     b := ByteArray new:16.
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1598
     b signedInt128At:1 put:-1 MSB:true.
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1599
     (b unsignedInt128At:1 MSB:true)
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1600
    "
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1601
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1602
    "Created: / 04-08-2017 / 11:08:59 / cg"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1603
!
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1604
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1605
unsignedInt128At:byteIndex MSB:msb
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1606
    "return the 16-bytes starting at index as an unsigned integer.
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1607
     The index is a smalltalk index (i.e. 1-based).
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1608
     Depending on msb, the value is retrieved MSB or LSB-first."
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
    |l
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1611
     bIdx  "{ Class: SmallInteger }"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1612
     delta "{ Class: SmallInteger }"|
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1613
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1614
    l := LargeInteger basicNew numberOfDigits:16.
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1615
    msb ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1616
	bIdx := byteIndex + 15.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1617
	delta := -1
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1618
    ] ifFalse:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1619
	bIdx := byteIndex.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1620
	delta := 1
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1621
    ].
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1622
    1 to:16 do:[:i |
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1623
	l digitAt:i put:(self byteAt:bIdx).
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1624
	bIdx := bIdx + delta
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1625
    ].
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1626
    ^ l compressed
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1627
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1628
    "
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1629
     |b|
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1630
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1631
     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
  1632
     (b unsignedInt128At:1 MSB:false) printStringRadix:16
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1633
    "
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1634
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1635
    "Created: / 04-08-2017 / 11:12:22 / cg"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1636
!
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1637
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1638
unsignedInt128At:byteIndex put:anInteger MSB:msb
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1639
    "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
  1640
     The index is a smalltalk index (i.e. 1-based).
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1641
     The value must be in the range 0 to 16rFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF.
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1642
     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
  1643
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1644
    |bIdx  "{ Class: SmallInteger }"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1645
     delta "{ Class: SmallInteger }"|
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1646
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1647
    ((anInteger < 0)
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1648
     or:[anInteger > 16rFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF]) ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1649
	^ self elementBoundsError:anInteger
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1650
    ].
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
    msb ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1653
	bIdx := byteIndex + 15.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1654
	delta := -1
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1655
    ] ifFalse:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1656
	bIdx := byteIndex.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1657
	delta := 1
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1658
    ].
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1659
    1 to:16 do:[:i |
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1660
	self byteAt:bIdx put:(anInteger digitAt:i).
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1661
	bIdx := bIdx + delta.
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1662
    ].
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1663
    ^ anInteger
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1664
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1665
    "
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1666
     |b|
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1667
     b := ByteArray new:16.
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1668
     b unsignedInt128At:1 put:16r100F0E0D0C0B0A090807060504030201 MSB:false.
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1669
     b inspect
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1670
    "
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1671
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1672
    "Created: / 04-08-2017 / 11:11:02 / cg"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1673
! !
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1674
16796
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1675
!UninterpretedBytes methodsFor:'accessing-arbitrary-long ints'!
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1676
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1677
nativeIntAt:index
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1678
    "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
  1679
     starting at index as a signed Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1680
     The index is a smalltalk index (i.e. 1-based).
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1681
     The value is retrieved in the machine's natural byte order,
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1682
     therefore, this should only be used for byte-data which is
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1683
     only used inside this machine."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1684
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1685
    |w|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1686
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1687
%{
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1688
    /*
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1689
     * handle the most common cases fast ...
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1690
     */
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1691
    if (__isSmallInteger(index)) {
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1692
	unsigned char *cp;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1693
	INT sz;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1694
24569
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  1695
	__STX_fetchBytePointerAndSize__(self, &cp, &sz);
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1696
	if (cp) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1697
	    unsigned INT idx = ((unsigned INT)__intVal(index)) - 1;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1698
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1699
	    if ((idx+(sizeof(INT)-1)) < sz) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1700
		cp += idx;
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1701
#if defined(__i386__)
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1702
		/*
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1703
		 * aligned or not, we don't care (i386 can do both)
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1704
		 */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1705
		{
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1706
		    INT iVal = ((INT *)cp)[0];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1707
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1708
		    RETURN (__MKINT(iVal));
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1709
		}
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1710
#else
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1711
		/*
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1712
		 * aligned
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1713
		 */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1714
		if (((INT)cp & (sizeof(INT)-1)) == 0) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1715
		    INT iVal = ((INT *)cp)[0];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1716
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1717
		    RETURN (__MKINT(iVal));
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1718
		}
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1719
#endif
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1720
	    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1721
	}
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1722
    }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1723
%}.
19402
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1724
    SmallInteger maxBytes == 8 ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1725
	^ self signedInt64At:index
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1726
    ].
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1727
    ^ self signedInt32At:index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1728
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1729
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1730
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1731
     b := ByteArray new:8.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1732
     b nativeIntAt:1 put:SmallInteger maxVal.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1733
     b nativeIntAt:1
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1734
    "
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1735
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1736
    "Modified (comment): / 04-08-2017 / 11:18:01 / cg"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1737
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1738
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1739
nativeIntAt:index put:value
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1740
    "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
  1741
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1742
     The value is stored in the machine's natural byte order."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1743
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1744
%{  /* NOCONTEXT */
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1745
    /*
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1746
     * handle the most common cases fast ...
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1747
     */
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1748
    if (__isSmallInteger(index)) {
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1749
	unsigned char *cp;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1750
	INT sz;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1751
24569
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  1752
	__STX_fetchBytePointerAndSize__(self, &cp, &sz);
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1753
	if (cp) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1754
	    unsigned INT idx = ((unsigned INT)__intVal(index)) - 1;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1755
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1756
	    if ((idx+(sizeof(INT)-1)) < sz) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1757
		cp += idx;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1758
		/*
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1759
		 * aligned
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1760
		 */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1761
		if (((INT)cp & (sizeof(INT)-1)) == 0) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1762
		    INT __v;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1763
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1764
		    if (__isSmallInteger(value)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1765
			// how about a range check?
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1766
			((INT *)cp)[0] = (INT)(__intVal(value));
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1767
			RETURN (value);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1768
		    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1769
		    if ((__v = __signedLongIntVal(value)) != 0) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1770
			// how about a range check?
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1771
			((INT *)cp)[0] = (INT)(__v);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1772
			RETURN (value);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1773
		    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1774
		}
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1775
	    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1776
	}
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1777
    }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1778
%}.
19402
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1779
    SmallInteger maxBytes == 8 ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1780
	^ self signedInt64At:index put:value MSB:IsBigEndian
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1781
    ].
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1782
    ^ self signedInt32At:index put:value MSB:IsBigEndian
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1783
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1784
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1785
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1786
     b := ByteArray new:8.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1787
     b nativeIntAt:1 put:SmallInteger maxVal.
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1788
     (b nativeIntAt:1)
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1789
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1790
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1791
19402
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1792
signedIntegerAt:index length:len bigEndian:bigEndian
19197
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1793
    "return the n-byte signed integer starting at index.
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1794
     With n=1, this returns the single signed byte's value,
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1795
     n=2, a signed short, n=4 a signed int etc.
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1796
     Useful to extract arbitrary long integers"
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1797
19402
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1798
    |val highByte
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1799
     iIndex "{ Class:SmallInteger }"
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1800
     last "{ Class:SmallInteger }"|
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1801
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1802
    iIndex := index.
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1803
    last := iIndex + len - 1.
19197
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1804
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1805
    val := 0.
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1806
    bigEndian ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1807
	highByte := self at:iIndex.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1808
	iIndex to:last do:[:i |
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1809
	    val := (val<<8) + (self byteAt:i)
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1810
	]
19197
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1811
    ] ifFalse:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1812
	highByte := self at:last.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1813
	last to:iIndex by:-1 do:[:i |
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1814
	    val := (val<<8) + (self byteAt:i)
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1815
	]
19197
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1816
    ].
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1817
    (highByte bitTest:16r80) ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1818
	^ val - (1 bitShift:(len*8))
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1819
    ].
19197
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1820
    ^ val
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1821
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1822
    "
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1823
     |b|
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1824
     b := #[ 16r01 16rFF 16r00 16r04 16r05 ].
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1825
     (b signedIntegerAt:2 length:2 bigEndian:false). ' -> 255 (00FF) '.
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1826
     (b signedIntegerAt:2 length:2 bigEndian:true).  ' -> -256 (FF00) '.
19197
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 16r00 16rFF 16r04 16r05 ].
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1829
     (b signedIntegerAt:2 length:2 bigEndian:false). ' -> -256 (FF00) '.
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1830
     (b signedIntegerAt:2 length:2 bigEndian:true).  ' -> 255 (00FF) '.
19197
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1831
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1832
     b := #[ 16r01 16r7F 16r00 16r04 16r05 ].
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1833
     (b signedIntegerAt:2 length:2 bigEndian:false). ' -> 127 (007F) '.
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1834
     (b signedIntegerAt:2 length:2 bigEndian:true).  ' -> 32512 (7F00) '.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1835
    "
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1836
19197
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1837
    "
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1838
     |b|
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1839
     b := #[ 16r01 16r02 16r03 16r04 16r05 ].
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1840
     (b signedIntegerAt:2 length:4 bigEndian:false).
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1841
     (b signedIntegerAt:2 length:4 bigEndian:true).
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1842
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1843
     b := #[ 16r01 16r82 16r03 16r04 16r05 ].
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1844
     (b signedIntegerAt:2 length:4 bigEndian:false).
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1845
     (b signedIntegerAt:2 length:4 bigEndian:true).
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1846
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1847
     b := #[ 16r01 16r82 16r03 16r04 16r85 ].
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1848
     (b signedIntegerAt:2 length:4 bigEndian:false).
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1849
     (b signedIntegerAt:2 length:4 bigEndian:true).
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1850
    "
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1851
!
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1852
19402
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1853
unsignedIntegerAt:index length:len bigEndian:bigEndian
16796
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1854
    "return the n-byte unsigned integer starting at index.
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1855
     With n=1, this returns the single byte's value,
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1856
     n=2, an unsigned short, n=4 an unsigned int32 etc.
16796
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1857
     Useful to extract arbitrary long integers"
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1858
19402
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1859
    |val
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1860
     iIndex "{ Class:SmallInteger }"
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1861
     last "{ Class:SmallInteger }"|
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1862
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1863
    iIndex := index.
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1864
    last := iIndex + len - 1.
16796
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1865
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1866
    val := 0.
18346
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
  1867
    bigEndian ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1868
	iIndex to:last do:[:i |
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1869
	    val := (val<<8) + (self byteAt:i)
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1870
	]
18346
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
  1871
    ] ifFalse:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1872
	last to:iIndex by:-1 do:[:i |
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1873
	    val := (val<<8) + (self byteAt:i)
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1874
	]
16796
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1875
    ].
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1876
    ^ val
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1877
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1878
    "
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1879
     |b|
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1880
     b := #[ 16r01 16r02 16r03 16r04 16r05 ].
18346
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
  1881
     (b unsignedIntegerAt:2 length:4 bigEndian:false).
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
  1882
     (b unsignedIntegerAt:2 length:4 bigEndian:true).
16796
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1883
    "
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1884
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1885
    "Modified (comment): / 04-08-2017 / 11:14:21 / cg"
19301
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1886
!
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1887
19402
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1888
unsignedIntegerAt:index put:newValue length:len bigEndian:bigEndian
19301
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1889
    "store the n-byte unsigned integer starting at index.
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1890
     With n=1, this stores a single byte's value,
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1891
     n=2, an unsigned short, n=4 an unsigned int32 etc.
19301
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1892
     Useful to replace arbitrary long integers"
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1893
19402
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1894
    |val
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1895
     iIndex "{ Class:SmallInteger }"
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1896
     last "{ Class:SmallInteger }"|
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1897
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1898
    iIndex := index.
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1899
    last := iIndex + len - 1.
19301
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1900
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1901
    val := newValue.
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1902
    bigEndian ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1903
	iIndex to:last do:[:i |
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1904
	    self byteAt:i put:(val bitAnd:16rFF).
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1905
	    val := val bitShift:-8.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1906
	]
19301
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1907
    ] ifFalse:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1908
	last to:iIndex by:-1 do:[:i |
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1909
	    self byteAt:i put:(val bitAnd:16rFF).
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1910
	    val := val bitShift:-8.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1911
	]
19301
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1912
    ].
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1913
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1914
    "
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1915
     |b|
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1916
     b := #[ 16r01 16r02 16r03 16r04 16r05 ] copy.
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1917
     (b unsignedIntegerAt:2 put:16r11223344 length:3 bigEndian:false). b.
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1918
     (b unsignedIntegerAt:2 put:16r11223344 length:3 bigEndian:true). b.
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1919
    "
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1920
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1921
    "Modified (comment): / 04-08-2017 / 11:14:32 / cg"
16796
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1922
! !
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1923
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1924
!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
  1925
4422
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1926
bcdByteAt:index
13724
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  1927
    "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
  1928
     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
  1929
     (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
  1930
4425
a10011c1b6eb bcd support - again.
Claus Gittinger <cg@exept.de>
parents: 4422
diff changeset
  1931
    ^ (self byteAt:index) decodeFromBCD
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
    "
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1934
     #[ 16r55 ] bcdByteAt:1
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1935
     #[ 16r99 ] bcdByteAt:1
19352
3c5b0c74be2e #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19351
diff changeset
  1936
     #[ 16rAA ] bcdByteAt:1
4422
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1937
    "
13724
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  1938
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  1939
    "Modified (comment): / 26-09-2011 / 11:57:33 / cg"
4422
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1940
!
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1941
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1942
bcdByteAt:index put:aNumber
13724
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  1943
    "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
  1944
     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
  1945
     (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
  1946
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1947
    (aNumber between:0 and:99) ifFalse:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1948
	self elementBoundsError:aNumber.
4422
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1949
    ].
4425
a10011c1b6eb bcd support - again.
Claus Gittinger <cg@exept.de>
parents: 4422
diff changeset
  1950
    ^ self byteAt:index put:aNumber encodeAsBCD
4422
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1951
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1952
    "
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1953
     (((ByteArray new:1) bcdByteAt:1 put:55; yourself) at:1) hexPrintString
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1954
     (((ByteArray new:1) bcdByteAt:1 put:99; yourself) at:1) hexPrintString
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1955
     (((ByteArray new:1) bcdByteAt:1 put:100; yourself) at:1) hexPrintString
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1956
     (((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
  1957
    "
13724
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  1958
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  1959
    "Modified (comment): / 26-09-2011 / 11:57:36 / cg"
21377
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  1960
    "Modified: / 07-02-2017 / 20:12:04 / stefan"
4422
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1961
!
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1962
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1963
byteAt:byteIndex
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1964
    "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
  1965
     The index is a smalltalk index (i.e. 1-based)."
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1966
21377
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  1967
%{ /* NOCONTEXT */
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1968
    if (__isSmallInteger(byteIndex)) {
24569
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  1969
	unsigned char *cp;
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  1970
	INT sz;
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  1971
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  1972
	__STX_fetchBytePointerAndSize__(self, &cp, &sz);
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  1973
	if (cp) {
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  1974
	    unsigned INT idx = ((unsigned INT)__intVal(byteIndex)) - 1;
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  1975
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  1976
	    if (idx < sz) {
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  1977
		unsigned char ch = cp[idx] & 0xFF;
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  1978
		RETURN (__mkSmallInteger( ch ));
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  1979
	    }
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  1980
	}
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1981
    }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1982
%}.
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1983
24569
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  1984
    byteIndex > self size ifTrue:[ ^ self subscriptBoundsError:byteIndex ].
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1985
    ^ self at:byteIndex
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1986
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1987
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1988
     |b|
21377
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  1989
     b := String new:3.
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  1990
     b byteAt:1 put:16rFF.
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  1991
     b byteAt:2 put:16r7F.
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  1992
     b byteAt:3 put:16r80.
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1993
     b byteAt:1.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1994
     b byteAt:2.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1995
     b byteAt:3.
21377
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  1996
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  1997
     |b|
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  1998
     b := ExternalBytes new:3.
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  1999
     b byteAt:1 put:16rFF.
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  2000
     b byteAt:2 put:16r7F.
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  2001
     b byteAt:3 put:16r80.
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2002
     b byteAt:1.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2003
     b byteAt:2.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2004
     b byteAt:3.
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2005
    "
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2006
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2007
    "Modified: / 01-07-1996 / 21:13:53 / cg"
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2008
    "Modified (comment): / 26-09-2011 / 11:57:14 / cg"
21377
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  2009
    "Modified (comment): / 07-02-2017 / 19:49:13 / stefan"
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2010
!
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2011
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2012
byteAt:byteIndex put:anInteger
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2013
    "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
  2014
     The index is a smalltalk index (i.e. 1-based)."
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2015
21377
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  2016
%{ /* NOCONTEXT */
24901
144086ff0a20 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 24796
diff changeset
  2017
    if (__bothSmallInteger(byteIndex, anInteger)) {
144086ff0a20 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 24796
diff changeset
  2018
        unsigned char *cp;
144086ff0a20 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 24796
diff changeset
  2019
        INT sz;
144086ff0a20 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 24796
diff changeset
  2020
        INT val = __intVal(anInteger);
144086ff0a20 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 24796
diff changeset
  2021
144086ff0a20 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 24796
diff changeset
  2022
        if ( ((unsigned INT)val) <= 0xFF ) {
144086ff0a20 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 24796
diff changeset
  2023
            __STX_fetchBytePointerAndSize__(self, &cp, &sz);
144086ff0a20 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 24796
diff changeset
  2024
            if (cp) {
144086ff0a20 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 24796
diff changeset
  2025
                unsigned INT idx = ((unsigned INT)__intVal(byteIndex)) - 1;
144086ff0a20 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 24796
diff changeset
  2026
144086ff0a20 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 24796
diff changeset
  2027
                if (idx < sz) {
144086ff0a20 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 24796
diff changeset
  2028
                    cp[idx] = val & 0xFF;
144086ff0a20 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 24796
diff changeset
  2029
                    RETURN (anInteger);
144086ff0a20 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 24796
diff changeset
  2030
                }
144086ff0a20 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 24796
diff changeset
  2031
            }
144086ff0a20 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 24796
diff changeset
  2032
        }
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2033
    }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2034
%}.
24569
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  2035
    byteIndex > self size ifTrue:[ ^ self subscriptBoundsError:byteIndex ].
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2036
    ^ self at:byteIndex put:anInteger
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2037
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2038
    "
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2039
     |b|
21377
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  2040
     b := String new:3.
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2041
     b byteAt:1 put:16rFF.
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2042
     b byteAt:2 put:16r7F.
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2043
     b byteAt:3 put:16r80.
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2044
     b byteAt:1.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2045
     b byteAt:2.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2046
     b byteAt:3.
21377
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  2047
    "
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  2048
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  2049
    "Modified (comment): / 07-02-2017 / 19:32:26 / stefan"
24901
144086ff0a20 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 24796
diff changeset
  2050
    "Modified: / 15-11-2019 / 17:38:45 / Stefan Vogel"
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2051
!
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2052
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2053
signedByteAt:byteIndex
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2054
    "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
  2055
     The index is a smalltalk index (i.e. 1-based).
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2056
     This may be worth a primitive."
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2057
21377
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  2058
%{ /* NOCONTEXT */
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2059
    /*
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2060
     * handle the most common cases fast ...
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2061
     */
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2062
    if (__isSmallInteger(byteIndex)) {
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2063
	unsigned char *cp;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2064
	INT sz;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2065
24569
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  2066
	__STX_fetchBytePointerAndSize__(self, &cp, &sz);
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2067
	if (cp) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2068
	    unsigned INT idx = ((unsigned INT)__intVal(byteIndex)) - 1;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2069
	    char ch;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2070
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2071
	    if (idx < sz) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2072
		cp += idx;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2073
		ch = cp[0];
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2074
# ifndef HAS_SIGNED_CHAR
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2075
		if ( (unsigned int)ch >= 0x80 ) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2076
		    ch = ch - 0x100;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2077
		}
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2078
#endif
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2079
		RETURN (__mkSmallInteger( ch ));
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2080
	    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2081
	}
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2082
    }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2083
%}.
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2084
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2085
    ^ (self byteAt:byteIndex) signExtendedByteValue
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2086
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2087
    "
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2088
     |b|
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2089
     b := ByteArray new:3.
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2090
     b at:1 put:16rFF.
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2091
     b at:2 put:16r7F.
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2092
     b at:3 put:16r80.
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2093
     b signedByteAt:1.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2094
     b signedByteAt:2.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2095
     b signedByteAt:3.
3459
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
13724
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  2098
    "Modified: / 01-07-1996 / 21:13:53 / cg"
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  2099
    "Modified (comment): / 26-09-2011 / 11:57:14 / cg"
21377
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  2100
    "Modified: / 07-02-2017 / 19:25:03 / stefan"
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2101
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2102
21377
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  2103
signedByteAt:byteIndex put:aSignedByteValue
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  2104
    "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
  2105
     The index is a smalltalk index (i.e. 1-based).
21377
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  2106
     Return the signedByteValue argument."
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  2107
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  2108
    |b|
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  2109
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  2110
    b := aSignedByteValue.
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  2111
    b < 0 ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2112
	b := 16r100 + b
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2113
    ].
21377
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  2114
    self byteAt:byteIndex put:b.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2115
    ^ aSignedByteValue
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2116
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2117
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2118
     |b|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2119
     b := ByteArray new:2.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2120
     b signedByteAt:1 put:-1.
21377
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  2121
     b at:1.
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  2122
     b signedByteAt:1.
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  2123
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  2124
     |b|
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  2125
     b := ByteArray new:2.
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  2126
     b signedByteAt:1 put:-1.0.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2127
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2128
13724
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  2129
    "Modified: / 01-07-1996 / 21:12:37 / cg"
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  2130
    "Modified (comment): / 26-09-2011 / 11:57:18 / cg"
21377
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  2131
    "Modified (comment): / 07-02-2017 / 20:03:46 / stefan"
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2132
! !
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2133
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2134
!UninterpretedBytes methodsFor:'accessing-floats & doubles'!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2135
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2136
doubleAt:index
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2137
    "return the 8-bytes starting at index as a Float.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2138
     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
  2139
     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
  2140
     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
  2141
     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
  2142
     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
  2143
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2144
    |newFloat|
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2145
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2146
%{
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2147
    /*
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2148
     * handle the most common cases fast ...
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2149
     */
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2150
    if (__isSmallInteger(index)) {
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2151
	unsigned char *cp;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2152
	INT sz;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2153
24569
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  2154
	__STX_fetchBytePointerAndSize__(self, &cp, &sz);
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2155
	if (cp) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2156
	    INT idx = __intVal(index) - 1;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2157
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2158
	    if ((idx >= 0) && ((idx+(sizeof(double)-1)) < sz)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2159
		cp += idx;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2160
		/*
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2161
		 * aligned
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2162
		 */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2163
		if (((INT)cp & (sizeof(double)-1)) == 0) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2164
		    double dVal = ((double *)cp)[0];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2165
		    OBJ f;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2166
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2167
		    __qMKFLOAT(f, dVal);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2168
		    RETURN (f);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2169
		}
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2170
	    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2171
	}
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2172
    }
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2173
%}.
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2174
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2175
    newFloat := Float basicNew.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2176
    1 to:8 do:[:destIndex|
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2177
	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
  2178
    ].
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2179
    ^ newFloat.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2180
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2181
    "
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2182
     |b|
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2183
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2184
     b := ByteArray new:20.
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2185
     b doubleAt:1 put:(Float pi).
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2186
     Transcript showCR:b.
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2187
     Transcript showCR:(b doubleAt:1)
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2188
    "
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2189
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2190
3446
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2191
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
  2192
    "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
  2193
     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
  2194
     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
  2195
     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
  2196
     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
  2197
     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
  2198
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2199
    |newFloat|
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2200
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
  2201
    msb == IsBigEndian ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2202
	^ 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
  2203
    ].
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2204
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2205
    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
  2206
    1 to:8 do:[:destIndex|
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2207
	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
  2208
    ].
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2209
    ^ newFloat.
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2210
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2211
    "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
  2212
!
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2213
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2214
doubleAt:index put:aFloat
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2215
    "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
  2216
     starting at index.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2217
     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
  2218
     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
  2219
     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
  2220
     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
  2221
     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
  2222
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2223
    |flt|
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2224
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2225
%{
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2226
    /*
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2227
     * handle the most common cases fast ...
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2228
     */
16320
dcb66fff0a89 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15836
diff changeset
  2229
    if (__isSmallInteger(index)) {
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2230
	unsigned char *cp;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2231
	INT sz;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2232
24569
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  2233
	__STX_fetchBytePointerAndSize__(self, &cp, &sz);
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2234
	if (cp) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2235
	    INT idx = __intVal(index) - 1;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2236
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2237
	    if ((idx >= 0) && ((idx+(sizeof(double)-1)) < sz)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2238
		cp += idx;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2239
		/*
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2240
		 * aligned
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2241
		 */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2242
		if (((INT)cp & (sizeof(double)-1)) == 0) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2243
		    if (__isFloat(aFloat)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2244
			((double *)cp)[0] = __floatVal(aFloat);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2245
			RETURN (aFloat);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2246
		    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2247
		    if (__isShortFloat(aFloat)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2248
			((double *)cp)[0] = (double)(__shortFloatVal(aFloat));
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2249
			RETURN (aFloat);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2250
		    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2251
		    if (__isSmallInteger(aFloat)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2252
			((double *)cp)[0] = (double)(__intVal(aFloat));
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2253
			RETURN (aFloat);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2254
		    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2255
		}
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2256
	    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2257
	}
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2258
    }
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2259
%}.
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2260
16320
dcb66fff0a89 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15836
diff changeset
  2261
    flt := aFloat asFloat.
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2262
    1 to:8 do:[:srcIndex|
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2263
	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
  2264
    ].
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2265
    ^ aFloat
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2266
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2267
3446
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2268
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
  2269
    "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
  2270
     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
  2271
     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
  2272
     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
  2273
     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
  2274
     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
  2275
     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
  2276
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2277
    |flt|
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2278
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
  2279
    msb == IsBigEndian ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2280
	^ 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
  2281
    ].
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2282
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2283
    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
  2284
    1 to:8 do:[:srcIndex|
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2285
	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
  2286
    ].
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2287
    ^ aFloat
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2288
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2289
    "Created: / 15.5.1998 / 17:22:27 / cg"
3447
Claus Gittinger <cg@exept.de>
parents: 3446
diff changeset
  2290
    "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
  2291
!
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2292
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2293
floatAt:index
3434
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2294
    "return the 4-bytes starting at index as a ShortFloat.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2295
     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
  2296
     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
  2297
     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
  2298
     a float object which keeps an 8-byte double internally.
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2299
     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
  2300
     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
  2301
     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
  2302
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2303
    |newFloat|
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2304
3434
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2305
%{
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2306
    /*
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2307
     * handle the most common cases fast ...
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2308
     */
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2309
    if (__isSmallInteger(index)) {
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2310
	unsigned char *cp;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2311
	INT sz;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2312
24569
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  2313
	__STX_fetchBytePointerAndSize__(self, &cp, &sz);
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2314
	if (cp) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2315
	    INT idx = __intVal(index) - 1;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2316
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2317
	    if ((idx >= 0) && ((idx+(sizeof(float)-1)) < sz)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2318
		cp += idx;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2319
		/*
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2320
		 * aligned
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2321
		 */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2322
		if (((INT)cp & (sizeof(float)-1)) == 0) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2323
		    float fVal = ((float *)cp)[0];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2324
		    OBJ f;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2325
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2326
		    __qMKSFLOAT(f, fVal);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2327
		    RETURN (f);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2328
		}
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2329
	    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2330
	}
3434
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2331
    }
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2332
%}.
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2333
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2334
    newFloat := ShortFloat basicNew.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2335
    1 to:4 do:[:destIndex|
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2336
	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
  2337
    ].
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2338
    ^ newFloat.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2339
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2340
3446
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2341
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
  2342
    "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
  2343
     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
  2344
     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
  2345
     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
  2346
     a float object which keeps an 8-byte double internally.
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2347
     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
  2348
     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
  2349
     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
  2350
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2351
    |newFloat|
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2352
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
  2353
    msb == IsBigEndian ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2354
	^ 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
  2355
    ].
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2356
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2357
    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
  2358
    1 to:4 do:[:destIndex|
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2359
	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
  2360
    ].
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2361
    ^ newFloat.
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2362
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2363
    "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
  2364
    "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
  2365
!
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2366
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2367
floatAt:index put:aFloat
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2368
    "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
  2369
     starting at index.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2370
     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
  2371
     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
  2372
     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
  2373
     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
  2374
     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
  2375
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2376
    |sflt|
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2377
3434
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2378
%{
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2379
    /*
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2380
     * handle the most common cases fast ...
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2381
     */
16320
dcb66fff0a89 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15836
diff changeset
  2382
    if (__isSmallInteger(index)) {
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2383
	unsigned char *cp;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2384
	INT sz;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2385
24569
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  2386
	__STX_fetchBytePointerAndSize__(self, &cp, &sz);
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2387
	if (cp) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2388
	    INT idx = __intVal(index) - 1;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2389
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2390
	    if ((idx >= 0) && ((idx+(sizeof(float)-1)) < sz)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2391
		cp += idx;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2392
		/*
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2393
		 * aligned
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2394
		 */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2395
		if (((INT)cp & (sizeof(float)-1)) == 0) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2396
		    if (__isShortFloat(aFloat)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2397
			((float *)cp)[0] = __shortFloatVal(aFloat);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2398
			RETURN (self);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2399
		    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2400
		    if (__isFloat(aFloat)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2401
			((float *)cp)[0] = (float)__floatVal(aFloat);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2402
			RETURN (self);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2403
		    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2404
		    if (__isSmallInteger(aFloat)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2405
			((float *)cp)[0] = (float)__intVal(aFloat);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2406
			RETURN (self);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2407
		    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2408
		    // bail out to smalltalk code
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2409
		}
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2410
	    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2411
	}
3434
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2412
    }
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2413
%}.
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2414
16320
dcb66fff0a89 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15836
diff changeset
  2415
    sflt := aFloat asShortFloat.
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2416
    1 to:4 do:[:srcIndex|
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2417
	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
  2418
    ].
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2419
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2420
3446
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2421
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
  2422
    "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
  2423
     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
  2424
     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
  2425
     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
  2426
     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
  2427
     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
  2428
     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
  2429
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2430
    |sflt|
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2431
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
  2432
    msb == IsBigEndian ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2433
	self floatAt:index put:aFloat.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2434
	^ self.
3446
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2435
    ].
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2436
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2437
    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
  2438
    1 to:4 do:[:srcIndex|
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2439
	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
  2440
    ].
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2441
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2442
    "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
  2443
!
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2444
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2445
ieeeDoubleAt:index
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2446
    "retrieve the 8 bytes starting at index as a float.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2447
     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
  2448
     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
  2449
     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
  2450
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2451
    "
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2452
     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
  2453
     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
  2454
     to an IBM 370 or old VAX etc.
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2455
     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
  2456
     no problem.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2457
    "
9258
83c940f349ea isIEEEFormat
Claus Gittinger <cg@exept.de>
parents: 9185
diff changeset
  2458
    Float isIEEEFormat ifFalse:[self error:'unsupported operation'].
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2459
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2460
    ^ self doubleAt:index
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2461
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2462
    "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
  2463
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2464
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2465
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
  2466
    "store the value of the argument, aFloat into the receiver
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2467
     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
  2468
     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
  2469
     (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
  2470
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2471
    "
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2472
     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
  2473
     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
  2474
     to an IBM 370 or old VAX etc.
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2475
     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
  2476
     no problem.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2477
    "
9258
83c940f349ea isIEEEFormat
Claus Gittinger <cg@exept.de>
parents: 9185
diff changeset
  2478
    Float isIEEEFormat ifFalse:[self error:'unsupported operation'].
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2479
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2480
    ^ self doubleAt:index put:aFloat
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2481
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2482
    "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
  2483
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2484
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2485
ieeeFloatAt:index
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2486
    "retrieve the 4 bytes starting at index as a float.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2487
     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
  2488
     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
  2489
     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
  2490
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2491
    "
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2492
     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
  2493
     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
  2494
     to an IBM 370 or old VAX etc.
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2495
     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
  2496
     no problem.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2497
    "
9258
83c940f349ea isIEEEFormat
Claus Gittinger <cg@exept.de>
parents: 9185
diff changeset
  2498
    ShortFloat isIEEEFormat ifFalse:[self error:'unsupported operation'].
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2499
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2500
    ^ self floatAt:index
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2501
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2502
    "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
  2503
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2504
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2505
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
  2506
    "store the value of the argument, aFloat into the receiver
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2507
     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
  2508
     Storage is in IEEE floating point single precision format.
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2509
     (i.e. 4 bytes are stored in the native byte order).
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2510
     Since ST/X floats are really doubles,
19629
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2511
     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
  2512
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2513
    "
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2514
     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
  2515
     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
  2516
     to an IBM 370 or old VAX etc.
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2517
     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
  2518
     no problem.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2519
    "
9258
83c940f349ea isIEEEFormat
Claus Gittinger <cg@exept.de>
parents: 9185
diff changeset
  2520
    ShortFloat isIEEEFormat ifFalse:[self error:'unsupported operation'].
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2521
16320
dcb66fff0a89 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15836
diff changeset
  2522
    self floatAt:index put:aFloat
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2523
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2524
    "Created: / 5.3.1998 / 10:51:11 / stefan"
22055
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2525
!
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
longDoubleAt:index
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2528
    "return the 16-bytes starting at index as a LongDouble.
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2529
     The index is a smalltalk index (i.e. 1-based).
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2530
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2531
     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
  2532
     machines and may only use part of the 16 bytes;
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2533
     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
  2534
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2535
     Notice also, that the bytes are expected to be in this machine's
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2536
     long double representation and byte order
22055
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2537
     - if the bytearray originated from another
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2538
     machine, some conversion is usually needed."
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2539
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2540
    |newFloat|
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2541
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2542
    newFloat := LongFloat basicNew.
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2543
    1 to:16 do:[:destIndex|
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2544
	newFloat basicAt:destIndex put:(self byteAt:(index - 1 + destIndex))
22055
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2545
    ].
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2546
    ^ newFloat.
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2547
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2548
    "
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2549
     |b|
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
     b := ByteArray new:20.
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2552
     b longDoubleAt:1 put:(LongFloat pi).
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2553
     Transcript showCR:b.
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2554
     Transcript showCR:(b longDoubleAt:1)
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
    "Created: / 18-07-2017 / 11:31:27 / cg"
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2558
!
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2559
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2560
longDoubleAt:index MSB:msb
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2561
    "return the 16-bytes starting at index as a LongDouble.
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2562
     The index is a smalltalk index (i.e. 1-based).
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2563
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2564
     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
  2565
     machines and may only use part of the 16 bytes;
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2566
     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
  2567
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2568
     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
  2569
     long double representation - if the bytearray originated from another
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2570
     machine, some conversion is usually needed."
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2571
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2572
    |newFloat|
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2573
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2574
    msb == IsBigEndian ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2575
	^ self longDoubleAt:index.
22055
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2576
    ].
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
    newFloat := LongFloat basicNew.
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2579
    1 to:16 do:[:destIndex|
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2580
	newFloat basicAt:(17-destIndex) put:(self byteAt:(index - 1 + destIndex))
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
    ^ newFloat.
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:30:42 / 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
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
     LongFloats are the machine's long double numbers.
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2592
22055
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2593
     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
  2594
     float representation and byte order - if the bytearray originated from another
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2595
     machine, some conversion is usually needed."
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
    |flt|
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2598
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2599
    flt := aLongFloat asLongFloat.
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2600
    1 to:16 do:[:srcIndex|
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2601
	self byteAt:(index - 1 + srcIndex) put:(flt basicAt:srcIndex)
22055
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2602
    ].
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2603
    ^ aLongFloat
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
    "Created: / 18-07-2017 / 11:33:17 / cg"
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
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2608
longDoubleAt:index put:aLongFloat MSB:msb
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2609
    "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
  2610
     starting at index.
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2611
     The index is a smalltalk index (i.e. 1-based).
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2612
     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
  2613
     float representation - if the bytearray originated from another
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2614
     machine, some conversion is usually needed."
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2615
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2616
    |flt|
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2617
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2618
    msb == IsBigEndian ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2619
	^ self longDoubleAt:index put:aLongFloat.
22055
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2620
    ].
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2621
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2622
    flt := aLongFloat asLongFloat.
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2623
    1 to:16 do:[:srcIndex|
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2624
	self byteAt:(index - 1 + srcIndex) put:(flt basicAt:(17-srcIndex))
22055
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2625
    ].
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2626
    ^ aLongFloat
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2627
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2628
    "Created: / 18-07-2017 / 11:33:59 / cg"
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2629
! !
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2630
13724
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  2631
!UninterpretedBytes methodsFor:'accessing-longlongs (64bit)'!
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2632
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2633
signedInt64At:index
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2634
    "return the 8-bytes starting at index as a signed Integer.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2635
     The index is a smalltalk index (i.e. 1-based).
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2636
     The value is retrieved in the machine's natural byte order.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2637
     This may be worth a primitive."
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2638
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2639
    |w|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2640
19629
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2641
    w := self unsignedInt64At:index MSB:(UninterpretedBytes isBigEndian).
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2642
    (w > (16r7FFFFFFFFFFFFFFF)) ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2643
	^ w - (16r10000000000000000)
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2644
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2645
    ^ w
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2646
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2647
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2648
     |b|
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2649
     b := ByteArray new:8.
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2650
     b unsignedInt64At:1 put:16rFFFFFFFFFFFFFFFF MSB:true.
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2651
     (b signedInt64At:1 MSB:true)
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2652
    "
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2653
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2654
    "Modified: / 01-07-1996 / 21:11:28 / cg"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2655
    "Created: / 05-03-1998 / 14:40:05 / stefan"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2656
    "Modified (comment): / 04-08-2017 / 11:29:37 / cg"
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2657
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2658
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2659
signedInt64At:index MSB:msb
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2660
    "return the 8-bytes starting at index as a signed Integer.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2661
     The index is a smalltalk index (i.e. 1-based).
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2662
     The value is retrieved in the given byte order.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2663
     This may be worth a primitive."
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2664
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2665
    |w|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2666
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2667
    w := self unsignedInt64At:index MSB:msb.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2668
    (w > (16r7FFFFFFFFFFFFFFF)) ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2669
	^ w - (16r10000000000000000)
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2670
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2671
    ^ w
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2672
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2673
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2674
     |b|
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2675
     b := ByteArray new:8.
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2676
     b unsignedInt64At:1 put:16rFFFFFFFFFFFFFFFF MSB:true.
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2677
     (b signedInt64At:1 MSB:true)
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2678
    "
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2679
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2680
    "Modified: / 05-03-1998 / 12:06:28 / stefan"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2681
    "Created: / 05-03-1998 / 14:40:54 / stefan"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2682
    "Modified: / 09-05-1998 / 01:10:59 / cg"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2683
    "Modified (comment): / 04-08-2017 / 11:29:59 / cg"
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2684
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2685
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2686
signedInt64At:byteIndex put:anInteger
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2687
    "store a signed longLong (64bit) integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2688
     The index is a smalltalk index (i.e. 1-based).
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2689
     The value is stored in the machine's natural byte order.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2690
     Same as #signedQuadWordAt:put: - for ST80 compatibility."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2691
19629
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2692
    ^ self signedInt64At:byteIndex put:anInteger MSB:(UninterpretedBytes isBigEndian)
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2693
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2694
    "Modified (comment): / 04-08-2017 / 11:19:09 / cg"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2695
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2696
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2697
signedInt64At:byteIndex put:anInteger MSB:msb
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2698
    "store a signed longLong (64bit) integer.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2699
     The index is a smalltalk index (i.e. 1-based).
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2700
     Same as #signedQuadWordAt:put: - for ST80 compatibility."
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2701
7813
3cc0b75d1684 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7812
diff changeset
  2702
    |v|
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2703
7813
3cc0b75d1684 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7812
diff changeset
  2704
    v := anInteger.
3cc0b75d1684 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7812
diff changeset
  2705
    anInteger < 0 ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2706
	v := v + 16r10000000000000000
7813
3cc0b75d1684 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7812
diff changeset
  2707
    ].
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2708
    self unsignedInt64At:byteIndex put:v MSB:msb.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2709
    ^ anInteger
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2710
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2711
    "Created: / 9.5.1998 / 01:10:24 / cg"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2712
    "Modified: / 9.5.1998 / 01:13:34 / cg"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2713
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2714
19629
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2715
signedInt64AtLSB:byteIndex
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2716
    "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
  2717
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2718
     The value is retrieved with least significant byte first"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2719
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2720
    ^ self signedInt64At:byteIndex MSB:false
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2721
!
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
signedInt64AtLSB:byteIndex put:anInteger
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2724
    "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
  2725
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2726
     The integer is stored with least significant byte first."
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2727
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2728
    ^ self signedInt64At:byteIndex put:anInteger MSB:false
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2729
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2730
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2731
signedInt64AtMSB:byteIndex
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2732
    "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
  2733
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2734
     The value is retrieved with most significant byte first"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2735
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2736
    ^ self signedInt64At:byteIndex MSB:true
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2737
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2738
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2739
signedInt64AtMSB:byteIndex put:anInteger
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2740
    "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
  2741
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2742
     The integer is stored with least significant byte first."
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2743
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2744
    ^ self signedInt64At:byteIndex put:anInteger MSB:true
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2745
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2746
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2747
unsignedInt64At:byteIndex
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2748
    "return the 8-bytes starting at index in the machine's native
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2749
     byteorder as an unsigned integer.
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2750
     The value is retrieved in the machine's natural byte order.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2751
     The index is a smalltalk index (i.e. 1-based)"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2752
19629
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2753
   ^ self unsignedInt64At:byteIndex MSB:(UninterpretedBytes isBigEndian)
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2754
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2755
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2756
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2757
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2758
     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
  2759
     (b unsignedInt64At:1) printStringRadix:16
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2760
    "
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2761
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2762
    "Modified: / 05-11-1996 / 14:06:21 / cg"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2763
    "Modified: / 05-03-1998 / 14:04:44 / stefan"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2764
    "Modified (comment): / 04-08-2017 / 11:19:21 / cg"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2765
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2766
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2767
unsignedInt64At:byteIndex MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2768
    "return the 8-bytes starting at index as an unsigned integer.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2769
     The index is a smalltalk index (i.e. 1-based).
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2770
     Depending on msb, the value is retrieved MSB or LSB-first."
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2771
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2772
    |l
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2773
     bIdx  "{ Class: SmallInteger }"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2774
     delta "{ Class: SmallInteger }"|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2775
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2776
    l := LargeInteger basicNew numberOfDigits:8.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2777
    msb ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2778
	bIdx := byteIndex + 7.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2779
	delta := -1
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2780
    ] ifFalse:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2781
	bIdx := byteIndex.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2782
	delta := 1
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2783
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2784
    1 to:8 do:[:i |
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2785
	l digitAt:i put:(self byteAt:bIdx).
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2786
	bIdx := bIdx + delta
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2787
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2788
    ^ l compressed
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2789
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2790
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2791
     |b|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2792
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2793
     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
  2794
     (b unsignedInt64At:1 MSB:false) printStringRadix:16
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2795
    "
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2796
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2797
    "
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2798
     |b|
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2799
     b := ByteArray new:8.
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2800
     b signedInt64At:1 put:-1 MSB:true.
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2801
     (b unsignedInt64At:1 MSB:true)
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2802
    "
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2803
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2804
    "Modified: / 05-11-1996 / 14:06:21 / cg"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2805
    "Modified: / 05-03-1998 / 14:04:44 / stefan"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2806
    "Modified (comment): / 04-08-2017 / 11:30:34 / cg"
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2807
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2808
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2809
unsignedInt64At:byteIndex put:anInteger
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2810
    "set the 8-bytes starting at index from the (unsigned) Integer value.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2811
     The index is a smalltalk index (i.e. 1-based).
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2812
     The value must be in the range 0 to 16rFFFFFFFFFFFFFFFF.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2813
     The value is stored in the machine's natural byteorder."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2814
19629
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2815
    ^ self unsignedInt64At:byteIndex put:anInteger MSB:(UninterpretedBytes isBigEndian)
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2816
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2817
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2818
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2819
     b := ByteArray new:10.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2820
     b unsignedInt64At:1 put:16r0807060504030201 MSB:false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2821
     b unsignedInt64At:1 put:16r0807060504030201 MSB:true.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2822
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2823
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2824
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2825
    "Created: / 5.3.1998 / 14:06:02 / stefan"
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2826
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2827
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2828
unsignedInt64At:byteIndex put:anInteger MSB:msb
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2829
    "set the 8-bytes starting at index from the (unsigned) Integer value.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2830
     The index is a smalltalk index (i.e. 1-based).
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2831
     The value must be in the range 0 to 16rFFFFFFFFFFFFFFFF.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2832
     Depending on msb, the value is stored MSB-first or LSB-first."
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2833
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2834
    |bIdx  "{ Class: SmallInteger }"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2835
     delta "{ Class: SmallInteger }"|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2836
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2837
    ((anInteger < 0)
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2838
     or:[anInteger class ~~ SmallInteger
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2839
	 and:[anInteger > 16rFFFFFFFFFFFFFFFF]]) ifTrue:[
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2840
	^ self elementBoundsError:anInteger
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2841
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2842
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2843
    msb ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2844
	bIdx := byteIndex + 7.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2845
	delta := -1
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2846
    ] ifFalse:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2847
	bIdx := byteIndex.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2848
	delta := 1
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2849
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2850
    1 to:8 do:[:i |
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2851
	self byteAt:bIdx put:(anInteger digitAt:i).
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2852
	bIdx := bIdx + delta.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2853
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2854
    ^ anInteger
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2855
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2856
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2857
     |b|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2858
     b := ByteArray new:8.
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2859
     b unsignedInt64At:1 put:16r0807060504030201 MSB:false.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2860
     b inspect
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2861
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2862
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2863
    "Created: / 05-03-1998 / 14:06:02 / stefan"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2864
    "Modified (comment): / 04-08-2017 / 11:13:59 / cg"
19629
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2865
!
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
unsignedInt64AtLSB:byteIndex
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2868
    "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
  2869
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2870
     The value is retrieved with most significant byte first"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2871
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2872
    ^ self unsignedInt64At:byteIndex MSB:false
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2873
!
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
unsignedInt64AtLSB:byteIndex put:anInteger
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2876
    "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
  2877
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2878
     The integer is stored with least significant byte first."
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2879
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2880
    ^ self unsignedInt64At:byteIndex put:anInteger MSB:false
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2881
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2882
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2883
unsignedInt64AtMSB:byteIndex
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2884
    "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
  2885
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2886
     The value is retrieved with most significant byte first"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2887
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2888
    ^ self unsignedInt64At:byteIndex MSB:true
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2889
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2890
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2891
unsignedInt64AtMSB:byteIndex put:anInteger
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2892
    "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
  2893
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2894
     The integer is stored with least significant byte first."
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2895
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2896
    ^ self unsignedInt64At:byteIndex put:anInteger MSB:true
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2897
! !
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2898
13724
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  2899
!UninterpretedBytes methodsFor:'accessing-longs (32bit)'!
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2900
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2901
signedInt32At:byteIndex
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2902
    "return the 4-bytes starting at byteIndex as a signed Integer.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2903
     The index is a smalltalk index (i.e. 1-based).
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2904
     The value is retrieved in the machine's natural byte order,
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2905
     therefore, this should only be used for byte-data which is
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2906
     only used inside this machine.
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2907
     To setup binary data packets which are to be sent to other machines,
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2908
     or stored into a file, always use the corresponding xxx:MSB: method
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2909
     and specify a definite byteOrder."
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2910
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2911
    |w|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2912
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2913
%{
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2914
    /*
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2915
     * handle the most common cases fast ...
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2916
     */
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2917
    if (__isSmallInteger(byteIndex)) {
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2918
	unsigned char *cp;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2919
	INT sz;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2920
24569
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  2921
	__STX_fetchBytePointerAndSize__(self, &cp, &sz);
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2922
	if (cp) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2923
	    INT idx = __intVal(byteIndex) - 1;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2924
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2925
	    if ((idx >= 0) && ((idx+(4-1)) < sz)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2926
		int iVal;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2927
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2928
		cp += idx;
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2929
#if defined(__i386__)
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2930
		/*
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2931
		 * aligned or not, we don't care (i386 can do both)
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2932
		 */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2933
		{
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2934
		    iVal = ((int *)cp)[0];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2935
		    RETURN (__MKINT(iVal));
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2936
		}
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2937
#else
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2938
# if defined(__x86_64__)
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2939
		/*
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2940
		 * aligned or not, we don't care (i386 can do both)
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2941
		 */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2942
		{
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2943
		    iVal = ((int *)cp)[0];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2944
		    RETURN (__mkSmallInteger(iVal));
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2945
		}
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2946
# else
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2947
		/*
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2948
		 * aligned ?
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2949
		 */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2950
		if (((INT)cp & (sizeof(int)-1)) == 0) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2951
		    iVal = ((int *)cp)[0];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2952
		} else {
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2953
#  ifdef __LSBFIRST__
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2954
		    iVal = cp[0] & 0xFF;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2955
		    iVal += (cp[1] & 0xFF)<<8;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2956
		    iVal += (cp[2] & 0xFF)<<16;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2957
		    iVal += (cp[3] & 0xFF)<<24;
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2958
#  else
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2959
#   ifdef __MSBFIRST__
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2960
		    iVal = cp[0] & 0xFF;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2961
		    iVal = (iVal<<8)+(cp[1] & 0xFF);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2962
		    iVal = (iVal<<8)+(cp[2] & 0xFF);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2963
		    iVal = (iVal<<8)+(cp[3] & 0xFF);
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2964
#   else
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2965
		    {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2966
			union {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2967
			    int i;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2968
			    char c[4];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2969
			} u;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2970
			u.c[0] = cp[0];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2971
			u.c[1] = cp[1];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2972
			u.c[2] = cp[2];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2973
			u.c[3] = cp[3];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2974
			iVal = u.i;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2975
		    }
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2976
#   endif
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2977
#  endif
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2978
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2979
#  if __POINTER_SIZE__ == 8
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2980
		    RETURN (__mkSmallInteger(iVal));
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2981
#  else
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2982
		    RETURN (__MKINT(iVal));
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2983
#  endif
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2984
		}
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2985
# endif
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2986
#endif
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2987
	    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2988
	}
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2989
    }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2990
%}.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2991
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2992
    ^ 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
  2993
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2994
    "
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2995
     |b|
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2996
     b := ByteArray new:4.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2997
     b unsignedLongAt:1 put:16rFFFFFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2998
     (b longAt:1)
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2999
    "
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3000
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3001
    "Modified: / 1.7.1996 / 21:11:28 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3002
    "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
  3003
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3004
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3005
signedInt32At:byteIndex MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3006
    "return the 4-bytes starting at byteIndex as a (signed) Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3007
     The byteIndex is a smalltalk index (i.e. 1-based).
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  3008
     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
  3009
     LSB-first otherwise."
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  3010
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3011
    |val
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  3012
     ival "{ Class: SmallInteger }"
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  3013
     i    "{ Class: SmallInteger }"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3014
     bHH  "{ Class: SmallInteger }"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3015
     bHL  "{ Class: SmallInteger }"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3016
     bLH  "{ Class: SmallInteger }"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3017
     bLL  "{ Class: SmallInteger }"|
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  3018
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  3019
%{
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  3020
    /*
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  3021
     * handle the most common cases fast ...
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  3022
     */
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3023
    if (__isSmallInteger(byteIndex)) {
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3024
	unsigned char *cp;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3025
	INT sz;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3026
24569
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3027
	__STX_fetchBytePointerAndSize__(self, &cp, &sz);
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3028
	if (cp) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3029
	    INT idx = __intVal(byteIndex) - 1;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3030
	    int iVal;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3031
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3032
	    cp += idx;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3033
	    if ((idx >= 0) && ((idx+(sizeof(int)-1)) < sz)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3034
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3035
		if (msb == true) {
8901
824a89d0b5c7 alpha64 vs. POINTER_SIZE cleanup
Claus Gittinger <cg@exept.de>
parents: 8893
diff changeset
  3036
#if defined(__MSBFIRST__)
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3037
		    if (((INT)cp & (sizeof(int)-1))== 0) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3038
			/*
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3039
			 * aligned
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3040
			 */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3041
			iVal = ((int *)cp)[0];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3042
		    } else
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  3043
#endif
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3044
		    {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3045
			iVal = cp[0];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3046
			iVal = (iVal << 8) | cp[1];
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[3];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3049
		    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3050
		} else {
8901
824a89d0b5c7 alpha64 vs. POINTER_SIZE cleanup
Claus Gittinger <cg@exept.de>
parents: 8893
diff changeset
  3051
#if defined(__i386__) || (defined(UNALIGNED_FETCH_OK) && defined(__LSBFIRST__))
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3052
		    /*
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3053
		     * aligned or not - we don't care
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3054
		     * (i386 can fetch unaligned)
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3055
		     */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3056
		    iVal = ((int *)cp)[0];
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  3057
#else
8901
824a89d0b5c7 alpha64 vs. POINTER_SIZE cleanup
Claus Gittinger <cg@exept.de>
parents: 8893
diff changeset
  3058
# if defined(__LSBFIRST__)
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3059
		    if (((INT)cp & (sizeof(int)-1))== 0) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3060
			/*
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3061
			 * aligned
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3062
			 */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3063
			iVal = ((int *)cp)[0];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3064
		    } else
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  3065
# endif
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3066
		    {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3067
			iVal = cp[3];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3068
			iVal = (iVal << 8) | cp[2];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3069
			iVal = (iVal << 8) | cp[1];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3070
			iVal = (iVal << 8) | cp[0];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3071
		    }
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  3072
#endif
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3073
		}
8901
824a89d0b5c7 alpha64 vs. POINTER_SIZE cleanup
Claus Gittinger <cg@exept.de>
parents: 8893
diff changeset
  3074
#if __POINTER_SIZE__ == 8
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3075
		RETURN (__mkSmallInteger(iVal));
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  3076
#else
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3077
		RETURN (__MKINT(iVal));
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  3078
#endif
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3079
	    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3080
	}
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  3081
    }
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  3082
%}.
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3083
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3084
    val := self unsignedInt32At:byteIndex MSB:msb.
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  3085
    (val > (16r7FFFFFFF)) ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3086
	^ val - (16r100000000)
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  3087
    ].
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  3088
    ^ val
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3089
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
     |b|
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  3092
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  3093
     b := ByteArray withAll:#(1 2 3 4).
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3094
     (b signedInt32At:1 MSB:true) printStringRadix:16.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3095
     (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
  3096
    "
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3097
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3098
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3099
signedInt32At:byteIndex put:anInteger
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3100
    "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
  3101
     The index is a smalltalk index (i.e. 1-based).
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3102
     The integer is stored in the machine's natural byte order."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3103
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3104
    ^ 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
  3105
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3106
    "
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3107
     |b|
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3108
     b := ByteArray new:4.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3109
     b longAt:1 put:-1.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3110
     (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
  3111
    "
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3112
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3113
    "Modified: / 1.7.1996 / 21:11:39 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3114
    "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
  3115
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3116
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3117
signedInt32At:byteIndex put:anInteger MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3118
    "set the 4-bytes starting at byteIndex from the signed Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3119
     The byteIndex is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3120
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3121
     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
  3122
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3123
    |v|
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3124
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3125
%{
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3126
    /*
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3127
     * handle the most common case fast ...
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3128
     */
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3129
    if (__isSmallInteger(byteIndex)) {
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3130
	unsigned char *cp;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3131
	INT sz;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3132
24569
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3133
	__STX_fetchBytePointerAndSize__(self, &cp, &sz);
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3134
	if (cp) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3135
	    INT idx = __intVal(byteIndex) - 1;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3136
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3137
	    if ((idx >= 0) && ((idx+3) < sz)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3138
		cp += idx;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3139
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3140
		if (__isSmallInteger(anInteger)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3141
		    INT __v = __intVal(anInteger);
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3142
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3143
# if __POINTER_SIZE__ == 8
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3144
		    if ((__v < -0x80000000L) || (__v > 0x7FFFFFFF)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3145
			goto badArg;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3146
		    }
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3147
# endif
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3148
		    if (((INT)cp & 3) == 0) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3149
			/*
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3150
			 * aligned
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3151
			 */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3152
			if (
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3153
# ifdef __LSBFIRST__
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3154
			    (msb == false)
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3155
# else
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3156
#  ifdef __MSBFIRST__
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3157
			    (msb == true)
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3158
#  else
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3159
			    (0)
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3160
#  endif
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3161
# endif
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3162
			) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3163
			    ((int *)cp)[0] = (int)__v;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3164
			    RETURN (anInteger);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3165
			}
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3166
		    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3167
		    if (msb == false) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3168
			cp[0] = __v & 0xFF;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3169
			cp[1] = (__v>>8) & 0xFF;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3170
			cp[2] = (__v>>16) & 0xFF;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3171
			cp[3] = (__v>>24) & 0xFF;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3172
		    } else {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3173
			cp[0] = (__v>>24) & 0xFF;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3174
			cp[1] = (__v>>16) & 0xFF;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3175
			cp[2] = (__v>>8) & 0xFF;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3176
			cp[3] = __v & 0xFF;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3177
		    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3178
		    RETURN (anInteger);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3179
		}
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3180
	    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3181
	}
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3182
    }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3183
  badArg: ;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3184
%}.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3185
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3186
    anInteger >= 0 ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3187
	v := anInteger
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3188
    ] ifFalse:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3189
	v := anInteger + 16r100000000
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3190
    ].
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3191
    self unsignedInt32At:byteIndex put:v MSB:msb.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3192
    ^ anInteger
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3193
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3194
    "
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3195
     |b|
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3196
     b := ByteArray new:4.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3197
     b longAt:1 put:-1.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3198
     (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
  3199
    "
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3200
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3201
    "Modified: / 1.7.1996 / 21:11:39 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3202
    "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
  3203
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3204
19629
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3205
signedInt32AtLSB:byteIndex
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3206
    "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
  3207
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3208
     The value is retrieved with least significant byte first"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3209
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3210
    ^ self signedInt32At:byteIndex MSB:false
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3211
!
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
signedInt32AtLSB:byteIndex put:anInteger
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3214
    "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
  3215
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3216
     The integer is stored with least significant byte first."
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3217
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3218
    ^ self signedInt32At:byteIndex put:anInteger MSB:false
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3219
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3220
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3221
signedInt32AtMSB:byteIndex
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3222
    "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
  3223
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3224
     The value is retrieved with most significant byte first"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3225
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3226
    ^ self signedInt32At:byteIndex MSB:true
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3227
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3228
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3229
signedInt32AtMSB:byteIndex put:anInteger
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3230
    "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
  3231
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3232
     The integer is stored with most significant byte first."
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3233
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3234
    ^ self signedInt32At:byteIndex put:anInteger MSB:true
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3235
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3236
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3237
unsignedInt32At:byteIndex
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3238
    "return the 4-bytes starting at index as an (unsigned) Integer.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  3239
     The index is a smalltalk index (i.e. 1-based).
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3240
     The value is retrieved in the machine's natural byte order."
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3241
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3242
    ^ self unsignedInt32At:byteIndex MSB:IsBigEndian
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3243
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3244
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3245
     |b|
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3246
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3247
     b := ByteArray withAll:#(1 2 3 4).
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3248
     (b unsignedInt32At:1) printStringRadix:16
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3249
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3250
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3251
    "Modified: / 5.3.1998 / 14:57:35 / stefan"
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3252
!
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3253
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3254
unsignedInt32At:byteIndex MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3255
    "return the 4-bytes starting at index as an (unsigned) Integer.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  3256
     The index is a smalltalk index (i.e. 1-based).
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3257
     The value is retrieved MSB-first, if the msb-arg is true;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3258
     LSB-first otherwise."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3259
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3260
    |val
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3261
     ival "{ Class: SmallInteger }"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3262
     i    "{ Class: SmallInteger }"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3263
     bHH  "{ Class: SmallInteger }"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3264
     bHL  "{ Class: SmallInteger }"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3265
     bLH  "{ Class: SmallInteger }"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3266
     bLL  "{ Class: SmallInteger }"|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3267
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3268
%{
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3269
    /*
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3270
     * handle the most common cases fast ...
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3271
     */
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3272
    if (__isSmallInteger(byteIndex)) {
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3273
	unsigned char *cp;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3274
	INT sz;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3275
24569
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3276
	__STX_fetchBytePointerAndSize__(self, &cp, &sz);
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3277
	if (cp) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3278
	    INT idx = __intVal(byteIndex) - 1;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3279
	    unsigned int iVal;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3280
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3281
	    if ((idx >= 0) && ((idx+(sizeof(int)-1)) < sz)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3282
		cp += idx;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3283
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3284
		if (msb == true) {
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3285
#if defined(__MSBFIRST__)
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3286
		    if (((INT)cp & (sizeof(int)-1))== 0) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3287
			/*
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3288
			 * aligned
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3289
			 */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3290
			iVal = ((unsigned int *)cp)[0];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3291
		    } else
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3292
#endif
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3293
		    {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3294
			iVal = cp[0];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3295
			iVal = (iVal << 8) | cp[1];
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[3];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3298
		    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3299
		} else {
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3300
#if defined(__i386__) || (defined(UNALIGNED_FETCH_OK) && defined(__LSBFIRST__))
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3301
		    /*
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3302
		     * aligned or not - we don't care
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3303
		     * (i386 can fetch unaligned)
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3304
		     */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3305
		    iVal = ((unsigned int *)cp)[0];
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3306
#else
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3307
# if defined(__LSBFIRST__)
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3308
		    if (((INT)cp & (sizeof(int)-1))== 0) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3309
			/*
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3310
			 * aligned
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3311
			 */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3312
			iVal = ((unsigned int *)cp)[0];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3313
		    } else
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3314
# endif
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3315
		    {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3316
			iVal = cp[3];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3317
			iVal = (iVal << 8) | cp[2];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3318
			iVal = (iVal << 8) | cp[1];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3319
			iVal = (iVal << 8) | cp[0];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3320
		    }
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3321
#endif
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3322
		}
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3323
#if __POINTER_SIZE__ == 8
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3324
		RETURN (__mkSmallInteger(iVal));
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3325
#else
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3326
		RETURN (__MKUINT(iVal));
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3327
#endif
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3328
	    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3329
	}
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3330
    }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3331
%}.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3332
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3333
    "/ fallBack code - non ByteArray-like receiver
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3334
    "/ or funny byteIndex
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3335
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3336
    i := byteIndex.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3337
    msb ifFalse:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3338
	bLL := self byteAt:i.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3339
	bLH := self byteAt:(i+1).
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3340
	bHL := self byteAt:(i+2).
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3341
	bHH := self byteAt:(i+3).
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3342
    ] ifTrue:[
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3343
	bHH := self byteAt:i.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3344
	bHL := self byteAt:(i+1).
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3345
	bLH := self byteAt:(i+2).
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3346
	bLL := self byteAt:(i+3).
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3347
    ].
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3348
    ival := (bHH bitShift:8) + bHL.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3349
    ival := (ival bitShift:8) + bLH.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3350
    val := (ival bitShift:8) + bLL.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3351
    ^ val
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3352
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3353
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3354
     |b|
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3355
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3356
     b := ByteArray withAll:#(1 2 3 4).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3357
     (b unsignedInt32At:1 MSB:true) printStringRadix:16.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3358
     (b unsignedInt32At:1 MSB:false) printStringRadix:16
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3359
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3360
!
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3361
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3362
unsignedInt32At:byteIndex put:anInteger
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3363
    "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
  3364
     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
  3365
     The value must be in the range 0 to 16rFFFFFFFF.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3366
     The value is stored in the machine's native byte order"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3367
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3368
    ^ self unsignedInt32At:byteIndex put:anInteger MSB:IsBigEndian
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3369
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3370
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3371
     |b|
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3372
     b := ByteArray new:8.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3373
     b doubleWordAt:1 put:16r04030201 MSB:true.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3374
     b doubleWordAt:5 put:16r04030201 MSB:false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3375
     b inspect
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3376
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3377
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3378
    "Modified: / 21.1.1998 / 17:43:34 / cg"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3379
    "Modified: / 5.3.1998 / 11:42:17 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3380
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3381
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3382
unsignedInt32At:byteIndex put:anInteger MSB:msb
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3383
    "set the 4-bytes starting at byteIndex from the unsigned Integer value.
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3384
     The byteIndex is a smalltalk index (i.e. 1-based).
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3385
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3386
     This is the ST80 version of #doubleWordAt:put:"
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3387
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3388
    |v i b1 b2 b3 b4|
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3389
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3390
%{
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3391
    /*
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3392
     * handle the most common case fast ...
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3393
     */
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3394
    if (__isSmallInteger(byteIndex)) {
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3395
	unsigned char *cp;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3396
	INT sz;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3397
24569
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3398
	__STX_fetchBytePointerAndSize__(self, &cp, &sz);
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3399
	if (cp) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3400
	    INT idx = __intVal(byteIndex) - 1;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3401
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3402
	    if ((idx >= 0) && ((idx+3) < sz)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3403
		cp += idx;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3404
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3405
		if (__isSmallInteger(anInteger)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3406
		    INT __v = __intVal(anInteger);
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3407
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3408
# if __POINTER_SIZE__ == 8
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3409
		    if ((__v < 0) || (__v > 0xFFFFFFFF)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3410
			goto badArg;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3411
		    }
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3412
# endif
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3413
		    if (((INT)cp & 3) == 0) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3414
			/*
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3415
			 * aligned
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3416
			 */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3417
			if (
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3418
# ifdef __LSBFIRST__
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3419
			    (msb == false)
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3420
# else
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3421
#  ifdef __MSBFIRST__
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3422
			    (msb == true)
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3423
#  else
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3424
			    (0)
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3425
#  endif
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3426
# endif
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3427
			) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3428
			    ((int *)cp)[0] = (int)__v;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3429
			    RETURN (anInteger);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3430
			}
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3431
		    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3432
		    if (msb == false) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3433
			cp[0] = __v & 0xFF;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3434
			cp[1] = (__v>>8) & 0xFF;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3435
			cp[2] = (__v>>16) & 0xFF;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3436
			cp[3] = (__v>>24) & 0xFF;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3437
		    } else {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3438
			cp[0] = (__v>>24) & 0xFF;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3439
			cp[1] = (__v>>16) & 0xFF;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3440
			cp[2] = (__v>>8) & 0xFF;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3441
			cp[3] = __v & 0xFF;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3442
		    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3443
		    RETURN (anInteger);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3444
		}
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3445
	    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3446
	}
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3447
    }
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3448
  badArg: ;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3449
%}.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3450
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3451
    ((anInteger < 0) or:[anInteger > 16rFFFFFFFF]) ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3452
	^ self elementBoundsError:anInteger
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3453
    ].
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3454
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3455
    i := byteIndex.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3456
    msb ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3457
	b1 := (anInteger digitAt:4).
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3458
	b2 := (anInteger digitAt:3).
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3459
	b3 := (anInteger digitAt:2).
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3460
	b4 := (anInteger digitAt:1).
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3461
    ] ifFalse:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3462
	b1 := (anInteger digitAt:1).
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3463
	b2 := (anInteger digitAt:2).
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3464
	b3 := (anInteger digitAt:3).
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3465
	b4 := (anInteger digitAt:4).
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3466
    ].
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3467
    self byteAt:i     put:b1.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3468
    self byteAt:(i+1) put:b2.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3469
    self byteAt:(i+2) put:b3.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3470
    self byteAt:(i+3) put:b3.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3471
    ^ anInteger
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3472
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3473
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3474
     |b|
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3475
     b := ByteArray new:4.
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3476
     b signedInt32At:1 put:-1.
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3477
     (b unsignedInt32At:1) printStringRadix:16
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3478
    "
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3479
    "
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3480
     |b|
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3481
     b := ByteArray new:4.
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3482
     b unsignedInt32At:1 put:16rFFFFFFFF.
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3483
     (b signedInt32At:1)
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3484
    "
19629
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3485
!
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
unsignedInt32AtLSB:byteIndex
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3488
    "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
  3489
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3490
     The value is retrieved with least significant byte first"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3491
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3492
    ^ self unsignedInt32At:byteIndex MSB:false
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3493
!
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
unsignedInt32AtLSB:byteIndex put:anInteger
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3496
    "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
  3497
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3498
     The integer is stored with least significant byte first."
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3499
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3500
    ^ self unsignedInt32At:byteIndex put:anInteger MSB:false
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3501
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3502
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3503
unsignedInt32AtMSB:byteIndex
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3504
    "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
  3505
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3506
     The value is retrieved with most significant byte first"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3507
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3508
    ^ self unsignedInt32At:byteIndex MSB:true
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3509
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3510
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3511
unsignedInt32AtMSB:byteIndex put:anInteger
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3512
    "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
  3513
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3514
     The integer is stored with most significant byte first."
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3515
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3516
    ^ self unsignedInt32At:byteIndex put:anInteger MSB:true
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3517
! !
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3518
20961
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3519
!UninterpretedBytes methodsFor:'accessing-pointers'!
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3520
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3521
pointerAt:byteIndex
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3522
    "get a pointer starting at byteIndex as ExternalAddress.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3523
     The byteIndex is a smalltalk index (i.e. 1-based).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3524
     Only aligned accesses are allowed.
22883
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3525
     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
  3526
     This returns an external adress."
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
    |failReason|
20961
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3529
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3530
%{
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3531
    if (__isSmallInteger(byteIndex)) {
24569
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3532
	unsigned char *cp;
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3533
	INT sz;
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3534
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3535
	__STX_fetchBytePointerAndSize__(self, &cp, &sz);
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3536
	if (cp) {
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3537
	    INT idx = __smallIntegerVal(byteIndex) - 1;
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3538
	    char *pointer;
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3539
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3540
	    if ((idx >= 0) && ((idx+(sizeof(pointer)-1)) < sz)) {
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3541
		cp += idx;
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3542
		/*
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3543
		 * aligned
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3544
		 */
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3545
		if (((INT)cp & (sizeof(pointer)-1)) == 0) {
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3546
		    pointer = ((char **)cp)[0];
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3547
		    RETURN (__MKEXTERNALADDRESS(pointer));
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3548
		}
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3549
		// fprintf(stderr, "cp UNALIGNED (%"_lx_")\n", (INT)cp);
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3550
		failReason = @symbol(unaligned);
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3551
	    } else {
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3552
		// fprintf(stderr, "idx(%"_ld_")+(sizeof(pointer)-1) (%d) >= sz (%"_ld_")\n",
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3553
		//        idx, (int)(sizeof(pointer)-1), sz);
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3554
		failReason = @symbol(invalidIndex);
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3555
	    }
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3556
	} else {
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3557
	    // fprintf(stderr, "cp is NULL\n");
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3558
	    failReason = @symbol(nullPointer);
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3559
	}
20961
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3560
    } else {
24569
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3561
	// fprintf(stderr, "non integer index\n");
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3562
	failReason = @symbol(invalidIndex);
20961
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
bad:;
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3565
%}.
22883
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3566
    ^ self reportError:failReason with:byteIndex
20961
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3567
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3568
    "
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3569
     |b|
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3570
     b := ByteArray new:(ExternalAddress pointerSize).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3571
     b pointerAt:1 put:(ExternalAddress newAddress:16r12345678).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3572
     Transcript showCR:((b unsignedInt32At:1) printStringRadix:16).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3573
     Transcript showCR:((b pointerAt:1)).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3574
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3575
     |b|
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3576
     b := ByteArray new:(ExternalAddress pointerSize).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3577
     b pointerAt:1 put:(ExternalAddress newAddress:16r12345678abcdef).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3578
     Transcript showCR:((b unsignedInt64At:1) printStringRadix:16).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3579
     Transcript showCR:((b pointerAt:1)).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3580
    "
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3581
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3582
    "Modified (comment): / 14-11-2016 / 17:32:23 / cg"
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3583
!
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3584
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3585
pointerAt:byteIndex put:value
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3586
    "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
  3587
     The byteIndex is a smalltalk index (i.e. 1-based).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3588
     Only aligned accesses are allowed.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3589
     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
  3590
     The value may be either an ExternalAddress, ExternalBytes or an Integer"
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3591
22883
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3592
    |failReason|
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3593
20961
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3594
%{
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3595
    OBJ *pointer;
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3596
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3597
    if (__isExternalAddressLike(value)) {
24569
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3598
	pointer = __externalAddressVal(value);
20961
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3599
    } else if (__isExternalBytesLike(value)) {
24569
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3600
	pointer = __externalBytesVal(value);
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3601
	if (pointer == (OBJ *)0)
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3602
	    pointer = 0;
20961
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3603
    } else if (value == nil) {
24569
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3604
	pointer = 0;
20961
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3605
    } else if (__isSmallInteger(value)) {
24569
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3606
	pointer = (OBJ *)__intVal(value);
20961
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3607
    } else {
24569
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3608
	if ((pointer = (OBJ *)__unsignedLongIntVal(value)) == 0) {
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3609
	    // fprintf(stderr, "not a largeInt\n");
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3610
	    failReason = @symbol(badValue);
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3611
	    goto bad;
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3612
	}
20961
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3613
    }
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3614
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3615
    if (__isSmallInteger(byteIndex)) {
24569
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3616
	unsigned char *cp;
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3617
	INT sz;
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3618
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3619
	__STX_fetchBytePointerAndSize__(self, &cp, &sz);
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3620
	if (cp) {
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3621
	    INT idx = __smallIntegerVal(byteIndex) - 1;
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3622
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3623
	    if ((idx >= 0) && ((idx+(sizeof(pointer)-1)) < sz)) {
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3624
		cp += idx;
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3625
		/*
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3626
		 * aligned
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3627
		 */
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3628
		if (((INT)cp & (sizeof(pointer)-1)) == 0) {
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3629
		    ((char **)cp)[0] = (char *) pointer;
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3630
		    RETURN (value);
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3631
		}
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3632
		// fprintf(stderr, "cp unaligned\n");
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3633
		failReason = @symbol(unaligned);
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3634
	    } else {
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3635
		// fprintf(stderr, "idx out of bounds\n");
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3636
		failReason = @symbol(invalidIndex);
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3637
	    }
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3638
	} else {
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3639
	    // fprintf(stderr, "cp is null\n");
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3640
	    failReason = @symbol(nullPointer);
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3641
	}
22883
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3642
    } else {
24569
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3643
	// fprintf(stderr, "byteIndex not a smallInt\n");
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3644
	failReason = @symbol(invalidIndex);
20961
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3645
    }
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3646
bad:;
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3647
%}.
22883
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3648
    ^ self reportError:failReason with:byteIndex
20961
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3649
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3650
    "
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3651
     |b|
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3652
     b := ByteArray new:ExternalAddress pointerSize.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3653
     b pointerAt:1 put:(ExternalAddress newAddress:16r12345678).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3654
     (b unsignedLongAt:1) printStringRadix:16
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3655
    "
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3656
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3657
    "Created: / 05-03-1998 / 10:57:18 / stefan"
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3658
    "Modified (comment): / 14-11-2016 / 17:28:27 / cg"
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3659
!
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3660
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3661
pointerValueAt:byteIndex
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3662
    "get a pointer value starting at byteIndex as unsigned integer.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3663
     The byteIndex is a smalltalk index (i.e. 1-based).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3664
     Only aligned accesses are allowed.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3665
     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
  3666
     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
  3667
22883
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3668
    |failReason|
20961
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3669
%{
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3670
    if (__isSmallInteger(byteIndex)) {
24569
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3671
	unsigned char *cp;
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3672
	INT sz;
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3673
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3674
	__STX_fetchBytePointerAndSize__(self, &cp, &sz);
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3675
	if (cp) {
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3676
	    INT idx = __smallIntegerVal(byteIndex) - 1;
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3677
	    char *pointer;
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3678
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3679
	    if ((idx >= 0) && ((idx+(sizeof(pointer)-1)) < sz)) {
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3680
		cp += idx;
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3681
		/*
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3682
		 * aligned
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3683
		 */
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3684
		if (((INT)cp & (sizeof(pointer)-1)) == 0) {
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3685
		    pointer = ((char **)cp)[0];
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3686
		    RETURN (__MKUINT((INT)(pointer)));
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3687
		}
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3688
		// printf("cp UNALIGNED (%"_lx_")\n", (INT)cp);
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3689
		failReason = @symbol(unaligned);
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3690
	    } else {
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3691
		// printf("idx(%"_ld_")+(sizeof(pointer)-1) (%d) >= sz (%"_ld_")\n",
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3692
		//        idx, (int)(sizeof(pointer)-1), sz);
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3693
		failReason = @symbol(invalidIndex);
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3694
	    }
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3695
	} else {
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3696
	    // fprintf(stderr, "cp is NULL\n");
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3697
	    failReason = @symbol(nullPointer);
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3698
	}
20961
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3699
    } else {
24569
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3700
	// fprintf(stderr, "non integer index\n");
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3701
	failReason = @symbol(invalidIndex);
20961
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3702
    }
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3703
bad:;
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3704
%}.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3705
22883
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3706
    ^ self reportError:failReason with:byteIndex
20961
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3707
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3708
    "
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3709
     |b|
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3710
     b := ByteArray new:(ExternalAddress pointerSize).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3711
     b pointerAt:1 put:(ExternalAddress newAddress:16r12345678).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3712
     Transcript showCR:((b unsignedLongAt:1) printStringRadix:16).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3713
     Transcript showCR:((b pointerAt:1)).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3714
     Transcript showCR:((b pointerValueAt:1)).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3715
    "
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3716
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3717
    "Modified (comment): / 14-11-2016 / 17:28:33 / cg"
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3718
! !
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3719
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3720
!UninterpretedBytes methodsFor:'accessing-shorts (16bit)'!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3721
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3722
signedInt16At:byteIndex
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3723
    "return the 2-bytes starting at index as a signed Integer.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3724
     The index is a smalltalk index (i.e. 1-based).
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3725
     The value is retrieved in the machine's natural byte order."
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3726
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3727
    ^ (self unsignedInt16At:byteIndex) signExtendedShortValue
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3728
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3729
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3730
     |b|
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3731
     b := ByteArray new:2.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3732
     b wordAt:1 put:16rFFFF.
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3733
     b signedWordAt:1
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3734
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3735
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3736
    "Modified: 1.7.1996 / 21:14:38 / cg"
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3737
!
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3738
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3739
signedInt16At:byteIndex MSB:msb
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3740
    "return the 2-bytes starting at index as a signed Integer.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  3741
     The index is a smalltalk index (i.e. 1-based).
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3742
     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
  3743
     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
  3744
     Notice:
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3745
	the index is a byte index; thus, this allows for unaligned access to
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3746
	words on any boundary."
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3747
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3748
    |b1 "{ Class: SmallInteger }"
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3749
     b2 "{ Class: SmallInteger }"|
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3750
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3751
%{
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3752
    /*
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3753
     * handle the most common cases fast ...
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3754
     */
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3755
    if (__isSmallInteger(byteIndex)) {
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3756
	unsigned char *cp;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3757
	INT sz;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3758
24569
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3759
	__STX_fetchBytePointerAndSize__(self, &cp, &sz);
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3760
	if (cp) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3761
	    INT idx = __intVal(byteIndex) - 1;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3762
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3763
	    if ((idx >= 0) && ((idx+(2-1)) < sz)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3764
		short sVal;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3765
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3766
		cp += idx;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3767
		if (msb == false) {
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3768
#if defined(__i386__) || (defined(__LSBFIRST__) && defined(UNALIGNED_FETCH_OK))
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3769
		    /*
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3770
		     * aligned or not, we don't care (i386 can do both)
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3771
		     */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3772
		    sVal = ((short *)cp)[0];
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3773
#else
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3774
		    sVal = (cp[0] & 0xFF) | ((cp[1] & 0xFF) << 8);
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3775
#endif
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3776
		} else {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3777
		    sVal = ((cp[0] & 0xFF) << 8) | (cp[1] & 0xFF);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3778
		}
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3779
		RETURN (__mkSmallInteger(sVal));
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3780
	    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3781
	}
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3782
    }
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3783
%}.
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3784
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3785
    b1 := self byteAt:byteIndex.
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3786
    b2 := self byteAt:(byteIndex + 1).
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3787
    msb ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3788
	^ ((b1 bitShift:8) + b2) signExtendedShortValue
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3789
    ].
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3790
    ^ ((b2 bitShift:8) + b1) signExtendedShortValue
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3791
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3792
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3793
signedInt16At:index put:anInteger
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3794
    "set the 2-bytes starting at index from the signed Integer value.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3795
     The index is a smalltalk index (i.e. 1-based).
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3796
     The stored value must be in the range -32768 .. +32676.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3797
     The value is stored in the machine's natural byte order."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3798
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3799
    ^ self signedInt16At:index put:anInteger MSB:IsBigEndian
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3800
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3801
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3802
     |b|
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3803
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3804
     b signedInt16At:1 put:-2.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3805
     b signedInt16At:3 put:-3.
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3806
     b inspect
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3807
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3808
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3809
    "Modified: 1.7.1996 / 21:12:13 / cg"
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3810
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3811
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3812
signedInt16At:byteIndex put:anInteger MSB:msb
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3813
    "set the 2-bytes starting at byteIndex from the signed integer value.
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3814
     The byteIndex is a smalltalk index (i.e. 1-based).
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3815
     The stored value must be in the range -32768 .. +32676.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3816
     The value is stored MSB-first, if the msb-arg is true;
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3817
     LSB-first otherwise."
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3818
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3819
%{  /* NOCONTEXT */
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3820
    /*
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3821
     * handle the most common case fast ...
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3822
     */
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3823
    if (__isSmallInteger(byteIndex)) {
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3824
	unsigned char *cp;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3825
	INT sz;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3826
24569
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3827
	__STX_fetchBytePointerAndSize__(self, &cp, &sz);
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3828
	if (cp) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3829
	    INT idx = __intVal(byteIndex) - 1;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3830
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3831
	    if ((idx >= 0) && ((idx+1) < sz)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3832
		cp += idx;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3833
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3834
		if (__isSmallInteger(anInteger)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3835
		    INT __v = __intVal(anInteger);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3836
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3837
		    if ((__v < -0x8000L) || (__v > 0x7FFF)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3838
			goto badArg;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3839
		    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3840
		    if (msb == false) {
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3841
#if defined(__i386__) || (defined(__LSBFIRST__) && defined(UNALIGNED_FETCH_OK))
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3842
			((short *)cp)[0] = (short)__v;
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3843
#else
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3844
			cp[0] = __v & 0xFF;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3845
			cp[1] = (__v >> 8) & 0xFF;
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3846
#endif
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3847
		    } else {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3848
			cp[0] = (__v >> 8) & 0xFF;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3849
			cp[1] = __v & 0xFF;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3850
		    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3851
		    RETURN (anInteger);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3852
		}
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3853
	    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3854
	}
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3855
    }
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3856
  badArg: ;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3857
%}.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3858
    anInteger >= 0 ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3859
	self unsignedInt16At:byteIndex put:anInteger MSB:msb.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3860
    ] ifFalse:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3861
	self unsignedInt16At:byteIndex put:(16r10000 + anInteger) MSB:msb.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3862
    ].
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3863
    ^ anInteger
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3864
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3865
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3866
     |b|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3867
     b := ByteArray new:4.
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3868
     b signedInt16At:1 put:-1.
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3869
     b signedInt16At:3 put:-2.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3870
     b inspect
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3871
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3872
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3873
    "Modified: 1.7.1996 / 21:12:13 / cg"
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3874
!
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3875
19629
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3876
signedInt16AtLSB:byteIndex
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3877
    "return the 2-bytes starting at index as a signed Integer.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3878
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3879
     The value is retrieved with least significant byte first"
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
    ^ self signedInt16At:byteIndex MSB:false
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3882
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3883
    "
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3884
     |b|
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3885
     b := ByteArray new:2.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3886
     b wordAt:1 put:16rFFFE.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3887
     b signedInt16AtLSB:1.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3888
     b signedInt16AtMSB:1.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3889
    "
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3890
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3891
    "Modified: 1.7.1996 / 21:14:38 / cg"
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
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3894
signedInt16AtLSB:index put:anInteger
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3895
    "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
  3896
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3897
     The stored value must be in the range 0 .. 16rFFFF.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3898
     The value is stored with least significant byte first"
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
    ^ self signedInt16At:index put:anInteger MSB:false
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3901
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3902
    "
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3903
     |b|
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3904
     b := ByteArray new:4.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3905
     b signedInt16At:1 put:16r0102.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3906
     b signedInt16At:3 put:16r0304.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3907
     b inspect
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3908
    "
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
    "Created: / 5.3.1998 / 11:54:52 / stefan"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3911
    "Modified: / 5.3.1998 / 14:59:38 / stefan"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3912
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3913
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3914
signedInt16AtMSB:byteIndex
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3915
    "return the 2-bytes starting at index as a signed Integer.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3916
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3917
     The value is retrieved with most significant byte first"
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
    ^ self signedInt16At:byteIndex MSB:true
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3920
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3921
    "
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3922
     |b|
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3923
     b := ByteArray new:2.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3924
     b wordAt:1 put:16rFFFE.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3925
     b signedInt16AtLSB:1.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3926
     b signedInt16AtMSB:1.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3927
    "
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3928
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3929
    "Modified: 1.7.1996 / 21:14:38 / cg"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3930
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3931
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3932
signedInt16AtMSB:index put:anInteger
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3933
    "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
  3934
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3935
     The stored value must be in the range 0 .. 16rFFFF.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3936
     The value is stored with most significant byte first"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3937
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3938
    ^ self signedInt16At:index put:anInteger MSB:true
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3939
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3940
    "
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3941
     |b|
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3942
     b := ByteArray new:4.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3943
     b signedInt16At:1 put:16r0102.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3944
     b signedInt16At:3 put:16r0304.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3945
     b inspect
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3946
    "
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3947
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3948
    "Created: / 5.3.1998 / 11:54:52 / stefan"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3949
    "Modified: / 5.3.1998 / 14:59:38 / stefan"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3950
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3951
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3952
unsignedInt16At:index
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3953
    "return the 2-bytes starting at index as an (unsigned) Integer.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  3954
     The index is a smalltalk index (i.e. 1-based).
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3955
     The value is retrieved in the machine's natural byte order"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3956
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3957
    ^ self unsignedInt16At:index MSB:IsBigEndian
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3958
!
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3959
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3960
unsignedInt16At:byteIndex MSB:msb
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3961
    "return the 2-bytes starting at index as an (unsigned) Integer.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  3962
     The index is a smalltalk index (i.e. 1-based).
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3963
     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
  3964
     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
  3965
     Notice:
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3966
	the index is a byte index; thus, this allows for unaligned access to
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3967
	words on any boundary."
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3968
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3969
    |b1 "{ Class: SmallInteger }"
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3970
     b2 "{ Class: SmallInteger }"|
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3971
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3972
%{
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3973
    /*
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3974
     * handle the most common cases fast ...
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3975
     */
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3976
    if (__isSmallInteger(byteIndex)) {
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3977
	unsigned char *cp;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3978
	INT sz;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3979
24569
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  3980
	__STX_fetchBytePointerAndSize__(self, &cp, &sz);
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3981
	if (cp) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3982
	    INT idx = __intVal(byteIndex) - 1;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3983
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3984
	    if ((idx >= 0) && ((idx+(2-1)) < sz)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3985
		int iVal;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3986
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3987
		cp += idx;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3988
		if (msb == false) {
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3989
#if defined(__i386__) || (defined(__LSBFIRST__) && defined(UNALIGNED_FETCH_OK))
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3990
		    /*
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3991
		     * aligned or not, we don't care (i386 can do both)
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3992
		     */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3993
		    iVal = ((unsigned short *)cp)[0];
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3994
#else
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3995
		    iVal = (cp[0] & 0xFF) | ((cp[1] & 0xFF) << 8);
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3996
#endif
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3997
		} else {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3998
		    iVal = ((cp[0] & 0xFF) << 8) | (cp[1] & 0xFF);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3999
		}
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4000
		RETURN (__mkSmallInteger(iVal));
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4001
	    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4002
	}
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  4003
    }
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  4004
%}.
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  4005
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  4006
    b1 := self byteAt:byteIndex.
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  4007
    b2 := self byteAt:(byteIndex + 1).
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4008
    msb ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4009
	^ (b1 bitShift:8) + b2
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4010
    ].
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4011
    ^ (b2 bitShift:8) + b1
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4012
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4013
    "
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4014
     #[ 16rFF 16r00 ] unsignedInt16At:1 MSB:true
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4015
     #[ 16rFF 16r00 ] unsignedInt16At:1 MSB:false
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4016
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4017
     #[ 16rFF 16r00 ] unsignedInt16At:2 MSB:true
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4018
     #[ 16rFF 16r00 ] unsignedInt16At:2 MSB:false
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4019
    "
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4020
!
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4021
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  4022
unsignedInt16At:index put:anInteger
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4023
    "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
  4024
     The index is a smalltalk index (i.e. 1-based).
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  4025
     The stored value must be in the range 0 .. 16rFFFF.
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4026
     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
  4027
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  4028
    ^ self unsignedInt16At:index put:anInteger MSB:IsBigEndian
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4029
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4030
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4031
     |b|
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4032
     b := ByteArray new:4.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  4033
     b unsignedInt16At:1 put:16r0102.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  4034
     b unsignedInt16At:3 put:16r0304.
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  4035
     b inspect
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4036
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4037
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4038
    "Created: / 5.3.1998 / 11:54:52 / stefan"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4039
    "Modified: / 5.3.1998 / 14:59:38 / stefan"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4040
!
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4041
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  4042
unsignedInt16At:byteIndex put:anInteger MSB:msb
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4043
    "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
  4044
     The index is a smalltalk index (i.e. 1-based).
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  4045
     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
  4046
     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
  4047
     lower index) if msb is false, MSB-first otherwise"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4048
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4049
    |b1 b2
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4050
     iVal "{ Class: SmallInteger }"|
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4051
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  4052
%{  /* NOCONTEXT */
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  4053
    /*
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  4054
     * handle the most common case fast ...
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  4055
     */
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  4056
    if (__isSmallInteger(byteIndex)) {
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4057
	unsigned char *cp;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4058
	INT sz;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4059
24569
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4060
	__STX_fetchBytePointerAndSize__(self, &cp, &sz);
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4061
	// printf("cp=%"_lx_"\n", (INT)cp);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4062
	if (cp) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4063
	    INT idx = __intVal(byteIndex) - 1;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4064
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4065
	    if ((idx >= 0) && ((idx+1) < sz)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4066
		cp += idx;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4067
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4068
		if (__isSmallInteger(anInteger)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4069
		    INT __v = __intVal(anInteger);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4070
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4071
		    if (((unsigned INT)__v) > 0xFFFF) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4072
			goto badArg;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4073
		    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4074
		    if (msb == false) {
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  4075
#if defined(__i386__) || (defined(__LSBFIRST__) && defined(UNALIGNED_FETCH_OK))
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4076
			((unsigned short *)cp)[0] = (unsigned short)__v;
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  4077
#else
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4078
			cp[0] = __v & 0xFF;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4079
			cp[1] = (__v >> 8) & 0xFF;
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  4080
#endif
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4081
		    } else {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4082
			cp[0] = (__v >> 8) & 0xFF;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4083
			cp[1] = __v & 0xFF;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4084
		    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4085
		    RETURN (anInteger);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4086
		}
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4087
	    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4088
	}
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  4089
    }
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  4090
  badArg: ;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  4091
%}.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  4092
    iVal := anInteger.
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4093
    ((iVal < 0) or:[iVal > 16rFFFF]) ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4094
	^ self elementBoundsError:iVal
3323
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
    msb ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4097
	b1 := ((iVal bitShift:-8) bitAnd:16rFF).
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4098
	b2 := (iVal bitAnd:16rFF).
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4099
    ] ifFalse:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4100
	b1 := (iVal bitAnd:16rFF).
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4101
	b2 := ((iVal bitShift:-8) bitAnd:16rFF).
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4102
    ].
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  4103
    self byteAt:byteIndex   put:b1.
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  4104
    self byteAt:byteIndex+1 put:b2.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  4105
    ^ anInteger
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4106
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4107
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4108
     |b|
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4109
     b := ByteArray new:8.
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  4110
     b unsignedInt16At:1 put:16r0102 MSB:false.
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  4111
     b unsignedInt16At:3 put:16r0304 MSB:false.
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  4112
     b unsignedInt16At:5 put:16r0102 MSB:true.
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  4113
     b unsignedInt16At:7 put:16r0304 MSB:true.
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  4114
     b inspect
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4115
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4116
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4117
    "Modified: / 21.1.1998 / 17:48:15 / cg"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4118
    "Modified: / 5.3.1998 / 11:52:28 / stefan"
19629
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4119
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4120
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4121
unsignedInt16AtLSB:byteIndex
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4122
    "return the 2-bytes starting at index as an unsigned Integer.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4123
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4124
     The value is retrieved with least significant byte first"
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
    ^ self unsignedInt16At:byteIndex MSB:false
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4127
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4128
    "
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4129
     |b|
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4130
     b := ByteArray new:2.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4131
     b wordAt:1 put:16rFFFE.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4132
     b unsignedInt16AtLSB:1.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4133
     b unsignedInt16AtMSB:1.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4134
    "
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4135
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4136
    "Modified: 1.7.1996 / 21:14:38 / cg"
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
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4139
unsignedInt16AtLSB:index put:anInteger
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4140
    "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
  4141
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4142
     The stored value must be in the range 0 .. 16rFFFF.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4143
     The value is stored with least significant byte first"
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
    ^ self unsignedInt16At:index put:anInteger MSB:false
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4146
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4147
    "
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4148
     |b|
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4149
     b := ByteArray new:4.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4150
     b unsignedInt16At:1 put:16r0102.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4151
     b unsignedInt16At:3 put:16r0304.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4152
     b inspect
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
    "Created: / 5.3.1998 / 11:54:52 / stefan"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4156
    "Modified: / 5.3.1998 / 14:59:38 / stefan"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4157
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4158
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4159
unsignedInt16AtMSB:byteIndex
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4160
    "return the 2-bytes starting at index as an unsigned Integer.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4161
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4162
     The value is retrieved with most significant byte first"
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
    ^ self unsignedInt16At:byteIndex MSB:true
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4165
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4166
    "
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4167
     |b|
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4168
     b := ByteArray new:2.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4169
     b wordAt:1 put:16rFFFF.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4170
     b signedWordAt:1
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4171
    "
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4172
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4173
    "Modified: 1.7.1996 / 21:14:38 / cg"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4174
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4175
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4176
unsignedInt16AtMSB:index put:anInteger
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4177
    "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
  4178
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4179
     The stored value must be in the range 0 .. 16rFFFF.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4180
     The value is stored with most significant byte first"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4181
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4182
    ^ self unsignedInt16At:index put:anInteger MSB:true
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4183
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4184
    "
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4185
     |b|
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4186
     b := ByteArray new:4.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4187
     b unsignedInt16At:1 put:16r0102.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4188
     b unsignedInt16At:3 put:16r0304.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4189
     b inspect
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4190
    "
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4191
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4192
    "Created: / 5.3.1998 / 11:54:52 / stefan"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4193
    "Modified: / 5.3.1998 / 14:59:38 / stefan"
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4194
! !
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4195
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4196
!UninterpretedBytes methodsFor:'accessing-strings'!
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
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4199
    "return a string starting at index up to the 0-byte.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4200
     The index is a smalltalk index (i.e. 1-based)."
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4201
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4202
    |stream i "{ Class: SmallInteger }" c|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4203
10676
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4204
    stream := WriteStream on:(String new:40).
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4205
    i := index.
10676
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4206
    [(c := self byteAt:i) ~~ 0] whileTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4207
	stream nextPut:(Character value:c).
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
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4210
    ^ stream contents
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4211
10676
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4212
    "
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  4213
      #[71 72 73 74 75 76 77 0] stringAt:1
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  4214
      #[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
  4215
      '1234567890' stringAt:2
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4216
    "
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4217
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4218
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4219
stringAt:index put:aString
19196
1db38251aeb2 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19101
diff changeset
  4220
    "copy aString to the receiver, starting at index up to
7815
6bd3a60a6f0c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7814
diff changeset
  4221
     (and including) the 0-byte (which is always written).
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4222
     The index is a smalltalk index (i.e. 1-based)."
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4223
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4224
    |i "{ Class: SmallInteger }"|
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
    i := index.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4227
    aString do:[:aChar |
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4228
	self byteAt:i put:aChar codePoint.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4229
	i := i + 1.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4230
    ].
10676
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4231
    self byteAt:i put:0.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4232
    ^ aString
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4233
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4234
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4235
     |bytes|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4236
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4237
     bytes := ExternalBytes new:10.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4238
     bytes stringAt:1 put:'hello'.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4239
     1 to:bytes size do:[:i |
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4240
	Transcript showCR:(bytes at:i)
10676
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4241
     ].
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4242
    "
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4243
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4244
    "
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4245
     (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
  4246
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4247
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4248
    "Created: / 21.1.1998 / 17:45:02 / cg"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4249
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4250
7812
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4251
stringAt:index put:aString size:maxSize
19196
1db38251aeb2 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19101
diff changeset
  4252
    "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
  4253
     or (and including) the 0-byte, whichever is encountered first.
7815
6bd3a60a6f0c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7814
diff changeset
  4254
     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
  4255
     The index is a smalltalk index (i.e. 1-based)."
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4256
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4257
    |remaining "{ Class: SmallInteger }"
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4258
     i         "{ Class: SmallInteger }"|
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
    remaining := maxSize.
7816
827f1cf51862 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7815
diff changeset
  4261
    remaining <= 0 ifTrue:[^ aString].
7812
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4262
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4263
    i := index.
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4264
    aString do:[:aChar |
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4265
	self byteAt:i put:aChar codePoint.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4266
	i := i + 1.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4267
	remaining := remaining - 1.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4268
	remaining <= 0 ifTrue:[^ aString].
7812
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4269
    ].
10676
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4270
    self byteAt:i put:0.
7812
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4271
    ^ aString
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4272
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4273
    "
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4274
     |bytes|
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4275
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4276
     bytes := ExternalBytes new:10.
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4277
     bytes stringAt:1 put:'hello' size:3.
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4278
     1 to:bytes size do:[:i |
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4279
	Transcript showCR:(bytes at:i)
7812
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4280
     ]
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4281
    "
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4282
    "
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4283
     |bytes|
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4284
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4285
     bytes := ByteArray new:10 withAll:16rFF.
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4286
     bytes stringAt:1 put:'he' size:3.
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4287
     1 to:bytes size do:[:i |
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4288
	Transcript showCR:(bytes at:i)
7812
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4289
     ]
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4290
    "
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4291
10676
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4292
    "
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4293
     (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
  4294
    "
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4295
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4296
7812
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4297
    "Created: / 21.1.1998 / 17:45:02 / cg"
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4298
!
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4299
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4300
stringAt:index size:maxSize
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4301
    "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
  4302
     The index is a smalltalk index (i.e. 1-based)."
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4303
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  4304
    |stream c
10676
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4305
     max "{ Class: SmallInteger }"
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4306
     start "{ Class: SmallInteger }"|
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4307
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4308
    stream := WriteStream on:(String new:maxSize).
10676
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4309
    start := index.
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4310
    max := start + maxSize - 1.
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4311
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4312
    start to:max do:[:eachIndex|
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4313
	c := self byteAt:eachIndex.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4314
	c == 0 ifTrue:[
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4315
	    ^ stream contents
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4316
	].
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4317
	stream nextPut:(Character value:c).
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4318
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4319
    ^ stream contents
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4320
10676
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4321
    "
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4322
      #[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
  4323
      #[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
  4324
      '1234567890' stringAt:2 size:6
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4325
    "
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  4326
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  4327
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  4328
zeroByteStringAt:index maximumSize:count
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  4329
    "extract a zeroByte-delimited string, given initial index and
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  4330
     maximum number of characters (bytes).
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  4331
     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
  4332
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4333
    |bytes endIndex idx|
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4334
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4335
    endIndex := self indexOf:0 startingAt:index.
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4336
    endIndex == 0 ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4337
	endIndex := self size + 1
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4338
    ].
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4339
    endIndex := (endIndex min: (index + count)) - 1.
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4340
    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
  4341
    ^ bytes asString
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  4342
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4343
    "
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4344
     #[ 1 2 3 4 5 6 7 8 ] zeroByteStringAt:2 maximumSize:10
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4345
     #[ 1 2 3 4 5 0 6 7 8 ] zeroByteStringAt:2 maximumSize:10
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4346
     #[ 1 2 3 4 5 0 6 7 8 ] zeroByteStringAt:2 maximumSize:3
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4347
     #[ 1 2 3 4 5 0 6 7 8 ] zeroByteStringAt:2 maximumSize:4
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4348
    "
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  4349
! !
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  4350
12951
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  4351
!UninterpretedBytes methodsFor:'converting'!
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  4352
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  4353
asExternalBytes
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4354
    "in earlier times, this use to return protected memory
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  4355
     (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
  4356
     This was changed to now return garbage collected memory."
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  4357
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  4358
    ^ self asExternalBytesUnprotected.
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  4359
12951
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  4360
    "
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  4361
      #[1 2 3 4 5 6 7] asExternalBytes
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  4362
      'Hello World' asExternalBytes
14142
7a769e54130d changed:
Stefan Vogel <sv@exept.de>
parents: 14132
diff changeset
  4363
      'Hello World' asUnicodeString asExternalBytes
12951
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  4364
    "
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  4365
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  4366
    "Modified (comment): / 04-08-2017 / 11:25:00 / cg"
14132
debafd18f04b added: #asUUID
Stefan Vogel <sv@exept.de>
parents: 14131
diff changeset
  4367
!
debafd18f04b added: #asUUID
Stefan Vogel <sv@exept.de>
parents: 14131
diff changeset
  4368
14155
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4369
asExternalBytesUnprotected
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  4370
    "Like asExternalBytes, but does not protect the bytes from the collector,
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4371
     so the bytes are GARBAGE-COLLECTED
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  4372
     (i.e. free is called when the smalltalk object is no longer referenced)."
14155
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4373
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4374
    |bytes sz|
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4375
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4376
    sz := self byteSize.
15836
cdf0d7258f9e class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15717
diff changeset
  4377
    bytes := ExternalBytes unprotectedNew:sz.
14155
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4378
    bytes replaceFrom:1 to:sz with:self startingAt:1.
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4379
    ^ bytes
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4380
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4381
    "
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4382
     |x|
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4383
     x := 'fooBar' asExternalBytesUnprotected.
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4384
     ObjectMemory garbageCollect
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4385
    "
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4386
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4387
    "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
  4388
    "Modified: / 30-11-2013 / 11:42:21 / cg"
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  4389
    "Modified (comment): / 04-08-2017 / 11:22:58 / cg"
14155
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4390
!
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4391
18600
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  4392
asSingleByteString
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  4393
    "return the receiver converted to a 'normal' string.
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  4394
     Raises an error if unrepresentable characters are encountered.
21474
151c0f5bf617 #DOCUMENTATION by stefan
Stefan Vogel <sv@exept.de>
parents: 21437
diff changeset
  4395
     See also: #asSingleByteStringIfPossible and #asSingleByteStringReplaceInvalidWith:"
18600
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  4396
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  4397
    ^ String fromString:self
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  4398
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  4399
    "
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  4400
     #[60 61 62 63] asSingleByteString
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4401
     #[60 61 62 63] asExternalBytes  asSingleByteString
18969
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4402
     #[67 68 69 70] asIntegerArray asSingleByteString
21474
151c0f5bf617 #DOCUMENTATION by stefan
Stefan Vogel <sv@exept.de>
parents: 21437
diff changeset
  4403
     'abc' asText asSingleByteString
18600
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  4404
     (Unicode16String with:(Character value:16rFF)) asSingleByteString
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  4405
     (Unicode16String with:(Character value:16rFFFF)) asSingleByteString
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  4406
    "
21474
151c0f5bf617 #DOCUMENTATION by stefan
Stefan Vogel <sv@exept.de>
parents: 21437
diff changeset
  4407
151c0f5bf617 #DOCUMENTATION by stefan
Stefan Vogel <sv@exept.de>
parents: 21437
diff changeset
  4408
    "Modified (comment): / 16-02-2017 / 20:25:14 / stefan"
18600
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  4409
!
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  4410
18969
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4411
asSingleByteStringIfPossible
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4412
    "if possible, return the receiver converted to a 'normal' string.
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4413
     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
  4414
     If not possible, the (wideString) receiver is returned."
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4415
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4416
    self containsNon8BitElements ifTrue:[^ self asString].
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4417
    ^ self asSingleByteString.
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4418
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4419
    "
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4420
     #[67 68 69 70] asSingleByteStringIfPossible
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4421
     #[67 68 69 70] asIntegerArray asSingleByteStringIfPossible
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4422
     'hello' asUnicodeString asSingleByteStringIfPossible
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4423
    "
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4424
!
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4425
14132
debafd18f04b added: #asUUID
Stefan Vogel <sv@exept.de>
parents: 14131
diff changeset
  4426
asUUID
debafd18f04b added: #asUUID
Stefan Vogel <sv@exept.de>
parents: 14131
diff changeset
  4427
    ^ UUID fromBytes:self
12951
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  4428
! !
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  4429
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4430
!UninterpretedBytes methodsFor:'encoding & decoding'!
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4431
23626
a08a4299109d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22883
diff changeset
  4432
base64Decoded
a08a4299109d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22883
diff changeset
  4433
    ^ Base64Coder decode:self
a08a4299109d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22883
diff changeset
  4434
a08a4299109d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22883
diff changeset
  4435
    "
a08a4299109d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22883
diff changeset
  4436
     'abc' base64Encoded base64Decoded
a08a4299109d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22883
diff changeset
  4437
     #[1 2 3] base64Encoded base64Decoded
a08a4299109d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22883
diff changeset
  4438
    "
a08a4299109d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22883
diff changeset
  4439
a08a4299109d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22883
diff changeset
  4440
    "Created: / 21-01-2019 / 17:24:00 / Claus Gittinger"
a08a4299109d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22883
diff changeset
  4441
!
a08a4299109d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22883
diff changeset
  4442
a08a4299109d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22883
diff changeset
  4443
base64Encoded
a08a4299109d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22883
diff changeset
  4444
    ^ Base64Coder encode:self
a08a4299109d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22883
diff changeset
  4445
a08a4299109d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22883
diff changeset
  4446
    "
a08a4299109d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22883
diff changeset
  4447
     'abc' base64Encoded
a08a4299109d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22883
diff changeset
  4448
     #[1 2 3] base64Encoded
a08a4299109d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22883
diff changeset
  4449
    "
a08a4299109d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22883
diff changeset
  4450
a08a4299109d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22883
diff changeset
  4451
    "Created: / 21-01-2019 / 17:23:33 / Claus Gittinger"
a08a4299109d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22883
diff changeset
  4452
!
a08a4299109d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22883
diff changeset
  4453
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4454
utf8Decoded
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4455
    "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
  4456
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4457
    ^ CharacterArray decodeFromUTF8:self.
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4458
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
     #[16rC8 16rA0] utf8Decoded
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4461
     #[16rC8 16rA0] asString utf8Decoded
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4462
     #[16rC8 16rA0] asExternalBytes utf8Decoded
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4463
     (Character value:16r220) utf8Encoded utf8Decoded
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
     (Character value:16r800) utf8Encoded
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4466
     (Character value:16r220) utf8Encoded utf8Decoded
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4467
    "
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4468
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4469
    "test:
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4470
21377
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  4471
      1 to:16r10FFFF do:[:codepoint |
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4472
	|utf8Encoding original readBack|
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4473
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4474
	original := (Character value:codepoint) asString.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4475
	utf8Encoding := original utf8Encoded.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4476
	readBack := utf8Encoding utf8Decoded.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4477
	readBack ~= original ifTrue:[
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4478
	    self halt
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4479
	]
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4480
      ]
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4481
    "
21377
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  4482
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  4483
    "Modified (comment): / 07-02-2017 / 17:36:08 / stefan"
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4484
!
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4485
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4486
utf8DecodedWithTwoByteCharactersReplacedBy:replacementCharacter
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4487
    "Interpreting myself as an UTF-8 representation, decode and return
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4488
     the decoded string. Suppress all 2-byte (above 16rFF) characters,
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4489
     and replace them with replacementCharacter"
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4490
22405
e11520f05fef #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 22381
diff changeset
  4491
    |in out|
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
    self containsNon7BitAscii ifFalse:[
24569
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4494
	^ self asSingleByteString   "plain ASCII"
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4495
    ].
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4496
22405
e11520f05fef #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 22381
diff changeset
  4497
    out := WriteStream on:(String uninitializedNew:self utf8DecodedSize).
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4498
    in := self readStream.
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4499
    [in atEnd] whileFalse:[
24569
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4500
	|c|
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4501
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4502
	c := Character utf8DecodeFrom:in.
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4503
	c codePoint > 16rFF ifTrue:[
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4504
	    c := replacementCharacter
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4505
	].
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4506
	out nextPut:c.
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4507
    ].
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4508
    ^ out contents
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4509
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4510
    "
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4511
     (Character value:16r220) utf8Encoded
24569
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4512
	utf8DecodedWithTwoByteCharactersReplacedBy:(Character space)
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4513
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4514
     (Character value:16r220) utf8Encoded asExternalBytes copyButLast
24569
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4515
	utf8DecodedWithTwoByteCharactersReplacedBy:(Character space)
22405
e11520f05fef #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 22381
diff changeset
  4516
    "
e11520f05fef #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 22381
diff changeset
  4517
e11520f05fef #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 22381
diff changeset
  4518
    "Modified (comment): / 02-01-2018 / 18:54:18 / stefan"
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4519
! !
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4520
4782
04a2ea1ad3a5 added replaceBytes...
Claus Gittinger <cg@exept.de>
parents: 4530
diff changeset
  4521
!UninterpretedBytes methodsFor:'filling & replacing'!
04a2ea1ad3a5 added replaceBytes...
Claus Gittinger <cg@exept.de>
parents: 4530
diff changeset
  4522
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4523
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
  4524
    "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
  4525
     like collection.
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4526
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4527
     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
  4528
     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
  4529
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4530
%{  /* NOCONTEXT */
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4531
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4532
    int nIndex, repNIndex;
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4533
    int startIndex, stopIndex;
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4534
    REGISTER unsigned char *src;
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4535
    REGISTER int repStartIndex;
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4536
    int repStopIndex, count;
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4537
    REGISTER unsigned char *dst;
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4538
    OBJ cls;
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4539
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4540
#ifndef NO_PRIM_BYTEARR
14082
8ee1315d35eb Revert to 1.81
Stefan Vogel <sv@exept.de>
parents: 14081
diff changeset
  4541
    if ((__isBytes(aCollection) || __isExternalBytesLike(aCollection))
14142
7a769e54130d changed:
Stefan Vogel <sv@exept.de>
parents: 14132
diff changeset
  4542
     && (__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
  4543
     && __bothSmallInteger(start, stop)
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4544
     && __isSmallInteger(repStart)) {
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4545
	startIndex = __intVal(start) - 1;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4546
	if (startIndex >= 0) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4547
	    dst = (__ByteArrayInstPtr(self)->ba_element) + startIndex;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4548
	    nIndex = __byteArraySize(self);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4549
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4550
	    if ((cls = __qClass(self)) != @global(ByteArray)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4551
		int nInst;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4552
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4553
		nInst = __OBJS2BYTES__(__intVal(__ClassInstPtr(cls)->c_ninstvars));
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4554
		dst += nInst;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4555
		nIndex -= nInst;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4556
	    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4557
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4558
	    stopIndex = __intVal(stop) - 1;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4559
	    count = stopIndex - startIndex + 1;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4560
	    if (count == 0) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4561
		RETURN ( self );
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4562
	    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4563
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4564
	    if ((count > 0) && (stopIndex < nIndex)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4565
		repStartIndex = __intVal(repStart) - 1;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4566
		if (repStartIndex >= 0) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4567
		    if (__isExternalBytesLike(aCollection)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4568
			OBJ sz;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4569
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4570
			src = __externalAddressVal(aCollection);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4571
			if (src == 0) goto fallBack;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4572
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4573
			sz = __externalBytesSize(aCollection);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4574
			if (__isSmallInteger(sz)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4575
			    repNIndex = __smallIntegerVal(sz);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4576
			} else {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4577
			    repNIndex = repStopIndex+1; /* always enough */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4578
			}
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4579
			src = src + repStartIndex;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4580
		    } else {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4581
			if (__isStringLike(aCollection)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4582
			    repNIndex = __stringSize(aCollection);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4583
			} else {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4584
			    repNIndex = __qSize(aCollection) - OHDR_SIZE;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4585
			}
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4586
			src = (__ByteArrayInstPtr(aCollection)->ba_element) + repStartIndex;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4587
			if ((cls = __qClass(aCollection)) != @global(ByteArray)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4588
			    int nInst;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4589
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4590
			    nInst = __OBJS2BYTES__(__intVal(__ClassInstPtr(cls)->c_ninstvars));
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4591
			    src += nInst;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4592
			    repNIndex -= nInst;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4593
			}
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4594
		    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4595
		    repStopIndex = repStartIndex + (stopIndex - startIndex);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4596
		    if (repStopIndex < repNIndex) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4597
			if (aCollection == self) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4598
			    /* take care of overlapping copy */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4599
			    if (src < dst) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4600
				/* must do a reverse copy */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4601
				src += count;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4602
				dst += count;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4603
				while (count-- > 0) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4604
				    *--dst = *--src;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4605
				}
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4606
				RETURN ( self );
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4607
			    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4608
			}
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4609
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4610
# ifdef bcopy4
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4611
			if (((unsigned INT)src & 3) == ((unsigned INT)dst & 3)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4612
			    int nW;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4613
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4614
			    /* copy unaligned part */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4615
			    while (count && ((unsigned INT)src & 3)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4616
				*dst++ = *src++;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4617
				count--;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4618
			    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4619
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4620
			    if (count > 0) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4621
				/* copy aligned part */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4622
				nW = count >> 2;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4623
				bcopy4(src, dst, nW);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4624
				if ((count = count & 3) != 0) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4625
				    /* copy any remaining part */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4626
				    src += (nW<<2);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4627
				    dst += (nW<<2);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4628
				    while (count--) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4629
					*dst++ = *src++;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4630
				    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4631
				}
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
# else
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4636
#  if __POINTER_SIZE__ == 8
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4637
			if (((unsigned INT)src & 7) == ((unsigned INT)dst & 7)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4638
			    /* copy unaligned part */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4639
			    while (count && ((unsigned INT)src & 7)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4640
				*dst++ = *src++;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4641
				count--;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4642
			    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4643
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4644
			    /* copy aligned part */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4645
			    while (count >= 8) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4646
				((unsigned INT *)dst)[0] = ((unsigned INT *)src)[0];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4647
				dst += 8;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4648
				src += 8;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4649
				count -= 8;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4650
			    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4651
			    while (count--) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4652
				*dst++ = *src++;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4653
			    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4654
			    RETURN ( self );
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4655
			}
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4656
#  endif /* 64bit */
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4657
# endif /* bcopy4 */
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4658
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4659
# ifdef FAST_MEMCPY
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4660
			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
  4661
# else
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4662
#  ifdef __UNROLL_LOOPS__
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4663
			while (count >= 8) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4664
			    dst[0] = src[0]; dst[1] = src[1];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4665
			    dst[2] = src[2]; dst[3] = src[3];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4666
			    dst[4] = src[4]; dst[5] = src[5];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4667
			    dst[6] = src[6]; dst[7] = src[7];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4668
			    dst += 8; src += 8;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4669
			    count -= 8;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4670
			}
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4671
#  endif /* __UNROLL_LOOPS__ */
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4672
			while (count-- > 0) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4673
			    *dst++ = *src++;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4674
			}
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4675
# endif
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4676
			RETURN ( self );
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4677
		    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4678
		}
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4679
	    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4680
	}
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4681
    }
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4682
fallBack: ;
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4683
#endif
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4684
%}.
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4685
    "
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4686
     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
  4687
     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
  4688
    "
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4689
    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
  4690
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4691
    "
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4692
     #[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
  4693
	copy
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4694
	    replaceFrom:1 to:8
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4695
	    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
  4696
	    startingAt:1
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4697
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4698
     #[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
  4699
	copy
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4700
	    replaceFrom:3 to:10
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4701
	    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
  4702
	    startingAt:1
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4703
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4704
     #[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
  4705
	copy
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4706
	    replaceFrom:3 to:4
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4707
	    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
  4708
	    startingAt:1
12769
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
     #[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
  4711
	copy
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4712
	    replaceFrom:0 to:9
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4713
	    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
  4714
	    startingAt:1
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
     #[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
  4717
	copy
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4718
	    replaceFrom:1 to:10
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4719
	    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
  4720
	    startingAt:0
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4721
    "
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
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
  4725
    "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
  4726
     byte-array-like.
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4727
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4728
     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
  4729
     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
  4730
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4731
    ^ self
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4732
	replaceBytesFrom:startIndex
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4733
	to:(startIndex + replacementCollection size - repStartIndex)
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4734
	with:replacementCollection
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4735
	startingAt:repStartIndex
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4736
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4737
    "
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4738
     args:    startIndex            : <integer>
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4739
	      replacementCollection : <collection of <bytes> >
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4740
	      repStartIndex         : <integer>
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4741
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4742
     returns: self
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4743
    "
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4744
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4745
    "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
  4746
    "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
  4747
!
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4748
13902
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4749
replaceBytesWith:replacementCollection
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4750
    "replace elements from another collection, which must be byte-array-like.
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4751
     Replace stops at whichever collection is smaller.
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4752
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4753
     Notice: This operation modifies the receiver, NOT a copy;
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4754
     therefore the change may affect all others referencing the receiver."
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4755
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4756
    ^ self
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4757
	replaceBytesFrom:1
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4758
	to:(replacementCollection sizeInBytes min:self sizeInBytes)
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4759
	with:replacementCollection
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4760
	startingAt:1
13902
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4761
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4762
    "
15004
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  4763
     (ByteArray new:10) replaceBytesWith:'hello'
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  4764
     (ByteArray new:10) replaceBytesWith:'hello world bla bla bla'
13902
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4765
    "
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4766
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4767
    "Created: / 09-01-2012 / 16:18:10 / cg"
22215
10bdeb2e5021 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 22161
diff changeset
  4768
    "Modified: / 28-08-2017 / 02:17:23 / cg"
13902
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4769
!
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4770
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4771
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
  4772
    "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
  4773
     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
  4774
     Return the receiver.
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4775
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4776
     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
  4777
     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
  4778
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4779
    (self class isBytes
22229
74cd3c85fcd2 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 22217
diff changeset
  4780
     and:[aCollection class == self class or:[aCollection isSingleByteCollection]]
74cd3c85fcd2 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 22217
diff changeset
  4781
    ) ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4782
	"can do it fast: just copy the plain bytes"
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4783
	^ 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
  4784
    ].
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4785
    ^ 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
  4786
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4787
    "
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4788
     args:    startIndex            : <integer>
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4789
	      stopIndex             : <integer>
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4790
	      replacementCollection : <collection of <bytes> >
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4791
	      repStartIndex         : <integer>
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4792
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4793
     returns: self
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4794
    "
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4795
14131
3b0cb7751a71 changed: #replaceFrom:to:with:startingAt:
Claus Gittinger <cg@exept.de>
parents: 14082
diff changeset
  4796
    "Modified: / 08-05-2012 / 13:23:27 / cg"
4782
04a2ea1ad3a5 added replaceBytes...
Claus Gittinger <cg@exept.de>
parents: 4530
diff changeset
  4797
! !
04a2ea1ad3a5 added replaceBytes...
Claus Gittinger <cg@exept.de>
parents: 4530
diff changeset
  4798
12757
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4799
!UninterpretedBytes methodsFor:'hashing'!
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4800
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4801
computeXorHashFrom:startIndex to:endIndex
20372
aa0461b19c97 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20177
diff changeset
  4802
    "compute and answer the 32bit SmallInteger-Hash of the bytes
12757
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4803
     from startIndex to endIndex.
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4804
     If endindex = 0 or endIndex > size, hash up the size.
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4805
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4806
     NOTE: startIndex and endIndex are only hints about what should be hashed.
24569
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4807
	   In fact, more bytes could be involved in hashing.
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4808
	   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
  4809
aa0461b19c97 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20177
diff changeset
  4810
    Also NOTE:
24569
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4811
	used to return a 32bit hash on 32bit machines and a 64bit integer on 64bit cpus.
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4812
	changed to return the same for all (in case hash values are used for other purposes)."
24540
c26af911bbdd #TUNING by exept
Claus Gittinger <cg@exept.de>
parents: 24536
diff changeset
  4813
c26af911bbdd #TUNING by exept
Claus Gittinger <cg@exept.de>
parents: 24536
diff changeset
  4814
%{  /* NOCONTEXT */
12757
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4815
    if (__bothSmallInteger(startIndex, endIndex)) {
24569
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4816
	unsigned char *cp;
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4817
	INT sz;
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4818
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4819
	__STX_fetchBytePointerAndSize__(self, &cp, &sz);
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4820
	if (cp) {
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4821
	    INT sidx = ((unsigned INT)__smallIntegerVal(startIndex)) - 1;
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4822
	    INT eidx = ((unsigned INT)__smallIntegerVal(endIndex)) - 1;
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4823
// #           define H_INT INT
20372
aa0461b19c97 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20177
diff changeset
  4824
// #           define _MAX_H_INT _MAX_INT;
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4825
#           define H_INT int
20372
aa0461b19c97 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20177
diff changeset
  4826
#           define _MAX_H_INT 0x3FFFFFFF
aa0461b19c97 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20177
diff changeset
  4827
24569
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4828
	    unsigned char *ep;
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4829
	    unsigned H_INT hash = 0, hash2 = 0, carry;
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4830
	    int i;
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4831
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4832
	    if (eidx < 0 || eidx >= sz) eidx = sz - 1;
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4833
	    if (sidx > eidx) sidx = eidx;
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4834
	    if (sidx < 0) {
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4835
		RETURN(__mkSmallInteger(0));
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4836
	    }
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4837
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4838
	    ep = cp + eidx;
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4839
	    cp += sidx;
12757
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4840
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4841
#if 0
24569
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4842
	    /*
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4843
	     * On LSB-First (little endian) cpus,
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4844
	     * this code does not produce the same result
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4845
	     * if the same bytes are at different positions
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4846
	     */
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4847
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4848
	    if ((H_INT)cp & (sizeof(H_INT)-1)) {
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4849
		/* not aligned */
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4850
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4851
		for (i=0; cp <= ep; cp++) {
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4852
		    hash2 = (hash2 << 8) | *cp;
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4853
		    if (++i == sizeof(H_INT)) {
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4854
			hash ^= hash2;
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4855
			i = hash2 = 0;
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4856
		    }
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4857
		}
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4858
	    } else {
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4859
		/* aligned */
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4860
		for (; cp+sizeof(H_INT) <= ep; cp += sizeof(H_INT)) {
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4861
		    hash ^= *(unsigned H_INT *)cp;
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4862
		}
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4863
		for (; cp <= ep; cp++) {
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4864
		    hash2 = (hash2 << 8) | *cp;
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4865
		}
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4866
	    }
12757
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4867
#else
24569
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4868
	    for (i=0; cp <= ep-sizeof(H_INT); cp += sizeof(H_INT)) {
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4869
		hash2 = cp[0];
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4870
		hash2 = (hash2 << 8) | cp[1];
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4871
		hash2 = (hash2 << 8) | cp[2];
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4872
		hash2 = (hash2 << 8) | cp[3];
20373
bce89424b82a #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20372
diff changeset
  4873
# if 0
24569
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4874
		if (sizeof(H_INT) == 8) {
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4875
		    hash2 = (hash2 << 8) | cp[4];
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4876
		    hash2 = (hash2 << 8) | cp[5];
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4877
		    hash2 = (hash2 << 8) | cp[6];
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4878
		    hash2 = (hash2 << 8) | cp[7];
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4879
		}
20373
bce89424b82a #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20372
diff changeset
  4880
# endif
24569
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4881
		/*
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4882
		 * multiply by large prime to scramble bits and
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4883
		 * to avoid a 0 result from
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4884
		 * #[1 2 3 4 1 2 3 4] computeXorHashFrom:1 to:8.
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4885
		 */
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4886
		hash ^= (hash * 31415821) ^ hash2;
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4887
	    }
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4888
	    for (hash2 = 0; cp <= ep; cp++) {
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4889
		hash2 = (hash2 << 8) | *cp;
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4890
	    }
12757
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4891
#endif
24569
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4892
	    hash ^= (hash * 31415821) ^ hash2;
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4893
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4894
	    /*
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4895
	     * fold the high bits not fitting into a H_INT
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4896
	     */
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4897
	    carry = hash & ~_MAX_H_INT;
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4898
	    if (carry) {
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4899
		hash = (hash & _MAX_H_INT) ^ (carry >> 8);
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4900
	    }
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4901
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4902
	    RETURN(__mkSmallInteger(hash));
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4903
	}
12757
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4904
    }
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4905
%}.
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4906
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4907
    ^ self primitiveFailed
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4908
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4909
    "
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4910
     #[1 2 3 4] computeXorHashFrom:1 to:4.
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4911
     #[1 2 3 4] computeXorHashFrom:1 to:32.
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4912
     #[1 2 3 4] computeXorHashFrom:1 to:0.
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4913
     #[1 2 3 4 5] computeXorHashFrom:1 to:4.
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4914
     #[1 2 3 4 1 2 3 4] computeXorHashFrom:1 to:8.
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4915
     #[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
  4916
     #[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
  4917
     #[2 3 4 5 6 7 8] computeXorHashFrom:1 to:8.
91ec8f105783 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19507
diff changeset
  4918
    "
91ec8f105783 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19507
diff changeset
  4919
!
91ec8f105783 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19507
diff changeset
  4920
91ec8f105783 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19507
diff changeset
  4921
hash
91ec8f105783 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19507
diff changeset
  4922
    |sz|
91ec8f105783 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19507
diff changeset
  4923
91ec8f105783 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19507
diff changeset
  4924
    sz := self size.
91ec8f105783 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19507
diff changeset
  4925
    sz <= 32 ifTrue:[
24569
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4926
	^ self computeXorHashFrom:1 to:sz.
19554
91ec8f105783 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19507
diff changeset
  4927
    ].
24569
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4928
22381
c4270f11aaca #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22264
diff changeset
  4929
    "/ 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
  4930
    "/ and the last 16 bytes.
c4270f11aaca #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22264
diff changeset
  4931
    "/ 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
  4932
    "/ 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
  4933
    "/ its way into some dictionary (as key-index).
c4270f11aaca #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22264
diff changeset
  4934
    "/ It does not really hurt anyway, so there is no need to change it.
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4935
    ^ (sz bitXor:(self computeXorHashFrom:1 to:16)) bitXor:(self computeXorHashFrom:sz-16 to:sz)
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4936
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4937
    "
24569
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4938
	#[1 2 3 4] hash
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4939
	#[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
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4940
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4941
	#[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
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4942
	  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
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4943
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4944
	#[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
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  4945
	  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
22381
c4270f11aaca #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22264
diff changeset
  4946
    "
c4270f11aaca #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22264
diff changeset
  4947
c4270f11aaca #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22264
diff changeset
  4948
    "Modified (format): / 28-11-2017 / 15:03:36 / cg"
12757
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4949
! !
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4950
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4951
!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
  4952
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4953
copyReverse
22102
a1ffa53d31c7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 22055
diff changeset
  4954
    <resource: #obsolete>
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4955
    "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
  4956
22102
a1ffa53d31c7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 22055
diff changeset
  4957
    self obsoleteMethodWarning:'use #reversed'.
a1ffa53d31c7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 22055
diff changeset
  4958
a1ffa53d31c7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 22055
diff changeset
  4959
    ^ self reversed
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4960
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4961
    "
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4962
     #[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
  4963
     #[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
  4964
    "
22102
a1ffa53d31c7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 22055
diff changeset
  4965
a1ffa53d31c7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 22055
diff changeset
  4966
    "Modified: / 25-07-2017 / 17:10:02 / stefan"
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4967
!
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4968
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4969
swapBytes
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4970
    "swap bytes (of int16s) inplace -
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4971
     Expects that the receiver has an even number of bytes;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4972
     if not, only the pairs excluding the last byte are swapped"
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4973
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4974
    |b1 lastIndex "{ Class: SmallInteger }"|
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4975
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4976
    lastIndex := self size-1.
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4977
    1 to:lastIndex by:2 do:[:idx |
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4978
	b1 := self byteAt:idx.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4979
	self byteAt:idx put:(self byteAt:idx+1).
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4980
	self byteAt:idx+1 put:b1.
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4981
    ].
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4982
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4983
    "
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4984
     #[1 2 3 4 5] swapBytes
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4985
     #[1 2 3 4] swapBytes
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4986
    "
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4987
! !
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4988
14131
3b0cb7751a71 changed: #replaceFrom:to:with:startingAt:
Claus Gittinger <cg@exept.de>
parents: 14082
diff changeset
  4989
3363
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  4990
!UninterpretedBytes methodsFor:'misc'!
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  4991
22504
00b1dfdd05b4 #FEATURE by stefan
Stefan Vogel <sv@exept.de>
parents: 22420
diff changeset
  4992
copyToEndInto:aStream
00b1dfdd05b4 #FEATURE by stefan
Stefan Vogel <sv@exept.de>
parents: 22420
diff changeset
  4993
    "copy all of myself into aStream. Compatibility with Stream"
00b1dfdd05b4 #FEATURE by stefan
Stefan Vogel <sv@exept.de>
parents: 22420
diff changeset
  4994
00b1dfdd05b4 #FEATURE by stefan
Stefan Vogel <sv@exept.de>
parents: 22420
diff changeset
  4995
    aStream nextPutAll:self.
00b1dfdd05b4 #FEATURE by stefan
Stefan Vogel <sv@exept.de>
parents: 22420
diff changeset
  4996
00b1dfdd05b4 #FEATURE by stefan
Stefan Vogel <sv@exept.de>
parents: 22420
diff changeset
  4997
    "Created: / 23-01-2018 / 18:43:40 / stefan"
00b1dfdd05b4 #FEATURE by stefan
Stefan Vogel <sv@exept.de>
parents: 22420
diff changeset
  4998
!
00b1dfdd05b4 #FEATURE by stefan
Stefan Vogel <sv@exept.de>
parents: 22420
diff changeset
  4999
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  5000
swapLongAt:byteIndex
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  5001
    "swap the byteOrder of a long.
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  5002
     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
  5003
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  5004
    |t|
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  5005
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  5006
    t := self byteAt:byteIndex.
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  5007
    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
  5008
    self byteAt:(byteIndex + 3) put:t.
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  5009
    t := self byteAt:(byteIndex + 1).
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  5010
    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
  5011
    self byteAt:(byteIndex + 2) put:t
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  5012
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  5013
    "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
  5014
! !
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  5015
18664
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5016
!UninterpretedBytes methodsFor:'printing & storing'!
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5017
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5018
hexPrintOn:aStream
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5019
    "print as hex string, eg: 'FF0243'.
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5020
     This string can be used in #fromHexString: to recreate the byteArray"
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5021
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5022
    self hexPrintOn:aStream withSeparator:nil
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5023
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5024
    "
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5025
      #[1 2 3 4 10 17] hexPrintOn:Transcript
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5026
    "
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5027
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5028
    "
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5029
     |s|
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5030
     s := String streamContents:[:s | #[1 2 3 4 10 17] hexPrintOn:s].
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5031
     ByteArray fromHexString:s
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
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5035
hexPrintOn:aStream withSeparator:aSeparatorStringOrCharacterOrNil
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5036
    "print as hex string with separators, eg: 'FF:02:43'"
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5037
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5038
    |first|
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
    first := true.
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5041
    1 to:self size do:[:idx |
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5042
	aSeparatorStringOrCharacterOrNil notNil ifTrue:[
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5043
	    first ifFalse:[
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5044
		aSeparatorStringOrCharacterOrNil printOn:aStream
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5045
	    ] ifTrue:[
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5046
		first := false.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5047
	    ].
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5048
	].
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5049
	(self byteAt:idx) printOn:aStream base:16 size:2 fill:$0.
18664
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5050
    ].
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5051
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
      #[1 2 3 4 10 17] hexPrintOn:Transcript withSeparator:$:
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5054
      #[1 2 3 4 10 17] hexPrintOn:Transcript withSeparator:(Character space)
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5055
      #[1 2 3 4 10 17] hexPrintOn:Transcript withSeparator:'-'
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5056
      #[1 2 3 4 10 17] hexPrintOn:Transcript withSeparator:nil
20177
0eaabd41cd8a #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20176
diff changeset
  5057
      'hello' hexPrintOn:Transcript withSeparator:'.'
18664
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5058
    "
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
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5061
hexPrintString
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5062
    "print as hex string, eg: 'FF0243'.
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5063
     This string can be used in #fromHexString: to recreate the byteArray"
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
    ^ self hexPrintStringWithSeparator:nil
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5066
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5067
    "
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5068
     #[1 2 3 4 10 17] hexPrintString
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5069
     ByteArray fromHexString:#[1 2 3 4 10 17] hexPrintString
20176
2e68059772c7 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20139
diff changeset
  5070
     'hello' hexPrintString
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
    "Modified: / 03-07-2010 / 01:59:19 / cg"
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5074
!
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5075
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5076
hexPrintStringWithSeparator:aSeparatorStringOrCharacterOrNil
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5077
    "print as hex string, eg: 'FF:02:43'."
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5078
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5079
    ^ String
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5080
	streamContents:[:s |
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5081
	    self hexPrintOn:s withSeparator:aSeparatorStringOrCharacterOrNil.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5082
	]
18664
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5083
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5084
    "
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5085
      #[1 2 3 4 10 17] hexPrintStringWithSeparator:$:
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5086
      #[1 2 3 4 10 17] hexPrintStringWithSeparator:Character space
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5087
      #[1 2 3 4 10 17] hexPrintStringWithSeparator:' - '
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5088
      #[1 2 3 4 10 17] hexPrintStringWithSeparator:nil
20176
2e68059772c7 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20139
diff changeset
  5089
      'hello' hexPrintStringWithSeparator:'.'
18664
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5090
    "
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5091
! !
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5092
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  5093
!UninterpretedBytes methodsFor:'private'!
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  5094
22883
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  5095
reportError:failReason with:parameter
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  5096
    "common helper"
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  5097
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  5098
    (failReason == #invalidIndex) ifTrue:[
24569
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  5099
	^ self indexNotIntegerOrOutOfBounds:parameter
22883
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  5100
    ].
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  5101
    failReason == #nullPointer ifTrue:[
24569
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  5102
	^ self error:'free or unallocated object referenced'
22883
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  5103
    ].
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  5104
    failReason == #unaligned ifTrue:[
24569
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  5105
	^ self error:'unaligned index'.
22883
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  5106
    ].
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  5107
    self primitiveFailed:failReason.
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  5108
!
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  5109
18969
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  5110
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
  5111
    "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
  5112
18969
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  5113
    |srcIdx "{ Class:SmallInteger }"
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  5114
     start "{ Class:SmallInteger }"
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  5115
     stop "{ Class:SmallInteger }"|
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  5116
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  5117
    start := startArg.
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  5118
    stop := stopArg.
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  5119
    srcIdx := sourceIndex.
18969
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  5120
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  5121
    start to:stop do:[:dstIdx |
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5122
	self byteAt:dstIdx put:(sourceBytes byteAt:srcIdx).
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5123
	srcIdx := srcIdx + 1
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  5124
    ].
22216
db5b7da6d61e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 22215
diff changeset
  5125
db5b7da6d61e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 22215
diff changeset
  5126
    "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
  5127
! !
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  5128
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  5129
!UninterpretedBytes methodsFor:'queries'!
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  5130
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  5131
containsNon7BitAscii
18969
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  5132
    "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
  5133
     (i.e. if it is non-ascii)"
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  5134
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  5135
    |sz "{ Class:SmallInteger }"|
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  5136
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  5137
    sz := self size.
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  5138
    1 to:sz do:[:idx|
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5139
	(self at:idx) > 16r7F ifTrue:[
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5140
	    ^ true.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5141
	].
18969
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  5142
    ].
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  5143
    ^ false.
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  5144
!
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  5145
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  5146
containsNon8BitElements
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  5147
    "return true, if the underlying structure contains elements larger than a single byte"
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  5148
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  5149
    |sz "{ Class:SmallInteger }"|
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  5150
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  5151
    sz := self size.
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  5152
    1 to:sz do:[:idx|
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5153
	(self at:idx) > 16rFF ifTrue:[
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5154
	    ^ true.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5155
	].
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  5156
    ].
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  5157
    ^ false.
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  5158
!
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  5159
7218
b798be6d632f elementBoundsError -> elementBoundsError:
Claus Gittinger <cg@exept.de>
parents: 7197
diff changeset
  5160
defaultElement
b798be6d632f elementBoundsError -> elementBoundsError:
Claus Gittinger <cg@exept.de>
parents: 7197
diff changeset
  5161
    ^ 0
b798be6d632f elementBoundsError -> elementBoundsError:
Claus Gittinger <cg@exept.de>
parents: 7197
diff changeset
  5162
!
b798be6d632f elementBoundsError -> elementBoundsError:
Claus Gittinger <cg@exept.de>
parents: 7197
diff changeset
  5163
24040
cbf03fb244e9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 23946
diff changeset
  5164
isAllocated
cbf03fb244e9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 23946
diff changeset
  5165
    "for compatibility with ExternalBytes"
24569
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  5166
24040
cbf03fb244e9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 23946
diff changeset
  5167
    ^ true
cbf03fb244e9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 23946
diff changeset
  5168
cbf03fb244e9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 23946
diff changeset
  5169
    "Created: / 02-04-2019 / 20:30:50 / Claus Gittinger"
cbf03fb244e9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 23946
diff changeset
  5170
!
cbf03fb244e9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 23946
diff changeset
  5171
cbf03fb244e9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 23946
diff changeset
  5172
isNull
cbf03fb244e9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 23946
diff changeset
  5173
    "for compatibility with ExternalBytes"
24569
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  5174
24040
cbf03fb244e9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 23946
diff changeset
  5175
    ^ false
cbf03fb244e9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 23946
diff changeset
  5176
cbf03fb244e9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 23946
diff changeset
  5177
    "Created: / 02-04-2019 / 20:30:45 / Claus Gittinger"
cbf03fb244e9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 23946
diff changeset
  5178
!
cbf03fb244e9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 23946
diff changeset
  5179
21320
8b0aaee195e6 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20961
diff changeset
  5180
isValidUTF8
21323
986051ecf7f2 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21320
diff changeset
  5181
    "returns true, if the receiver contains a valid UTF8 encoded string"
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5182
21323
986051ecf7f2 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21320
diff changeset
  5183
    |trailing  "{ Class: SmallInteger }"|
986051ecf7f2 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21320
diff changeset
  5184
21320
8b0aaee195e6 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20961
diff changeset
  5185
    trailing := 0.
8b0aaee195e6 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20961
diff changeset
  5186
8b0aaee195e6 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20961
diff changeset
  5187
    1 to:self size do:[:idx |
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5188
	|byte "{ Class: SmallInteger }" |
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5189
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5190
	byte := self byteAt:idx.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5191
	trailing ~~ 0 ifTrue:[
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5192
	    (byte bitAnd:2r11000000) == 2r10000000 ifFalse:[^ false].
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5193
	    trailing := trailing - 1.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5194
	] ifFalse:[
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5195
	    (byte bitAnd:16r80) == 0 ifTrue:[
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5196
		"/ continue
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5197
	    ] ifFalse:[
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5198
		(byte bitAnd:2r11100000) == 2r11000000 ifTrue:[
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5199
		    "/ strict: should not be encoded this way (could have used a shorter sequence)
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5200
		    (byte bitAnd:2r00011110) == 0 ifTrue:[
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5201
			^ false
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5202
		    ].
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5203
		    trailing := 1.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5204
		] ifFalse:[
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5205
		    (byte bitAnd:2r11110000) == 2r11100000 ifTrue:[
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5206
			trailing := 2.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5207
		    ] ifFalse:[
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5208
			(byte bitAnd:2r11111000) == 2r11110000 ifTrue:[
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5209
			    trailing := 3.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5210
			] ifFalse:[
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5211
			    (byte bitAnd:2r11111100) == 2r11111000 ifTrue:[
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5212
				trailing := 4.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5213
			    ] ifFalse:[
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5214
				(byte bitAnd:2r11111110) == 2r11111100 ifTrue:[
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5215
				    trailing := 5.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5216
				] ifFalse:[
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5217
				    ^ false
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5218
				].
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5219
			    ].
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5220
			].
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5221
		    ].
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5222
		].
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5223
	    ].
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5224
	].
21320
8b0aaee195e6 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20961
diff changeset
  5225
    ].
8b0aaee195e6 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20961
diff changeset
  5226
    ^ trailing == 0
8b0aaee195e6 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20961
diff changeset
  5227
8b0aaee195e6 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20961
diff changeset
  5228
    "
8b0aaee195e6 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20961
diff changeset
  5229
     'abc' isValidUTF8
21377
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  5230
     'abcöäü' isValidUTF8
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  5231
     'abcöäü' utf8Encoded isValidUTF8
21323
986051ecf7f2 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21320
diff changeset
  5232
     (Character value:16r800) utf8Encoded isValidUTF8
986051ecf7f2 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21320
diff changeset
  5233
     (Character value:16r1000) utf8Encoded isValidUTF8
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5234
21320
8b0aaee195e6 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20961
diff changeset
  5235
     1 to:255 do:[:c1 |
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5236
	 1 to:255 do:[:c2 |
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5237
	     1 to:255 do:[:c3 |
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5238
		 self assert:(c1 asCharacter , c2 asCharacter , c3 asCharacter) utf8Encoded isValidUTF8
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5239
	     ]
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5240
	 ]
21323
986051ecf7f2 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21320
diff changeset
  5241
     ]
986051ecf7f2 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21320
diff changeset
  5242
986051ecf7f2 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21320
diff changeset
  5243
     |s|
986051ecf7f2 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21320
diff changeset
  5244
     1 to:10000 do:[:c1 |
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5245
	 1 to:255 do:[:c2 |
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5246
	     s := (c1 asCharacter , c2 asCharacter).
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5247
	     self assert:s utf8Encoded isValidUTF8
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5248
	 ]
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5249
     ]
21320
8b0aaee195e6 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20961
diff changeset
  5250
    "
8b0aaee195e6 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20961
diff changeset
  5251
!
8b0aaee195e6 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20961
diff changeset
  5252
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  5253
referencesAny:aCollection
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  5254
    "redefined to speed up searching when many of my instances are present"
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  5255
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  5256
%{ /* NOCONTEXT */
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  5257
    if (__mkSmallInteger(0) == __ClassInstPtr(__qClass(self))->c_ninstvars) {
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5258
	/* I am only bytes */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5259
	RETURN(false)
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  5260
    }
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  5261
%}.
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  5262
    ^ super referencesAny:aCollection
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  5263
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  5264
    "
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5265
	'abc' referencesAny:#()
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  5266
    "
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  5267
!
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  5268
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  5269
sizeInBytes
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  5270
    "return the number of 8-bit bytes in the receiver.
22217
0819f3572300 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 22216
diff changeset
  5271
     This is needed since subclasses may redefine #size (TwoByteString)"
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  5272
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  5273
    ^ super size
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  5274
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  5275
    "Created: / 5.3.1998 / 10:41:13 / stefan"
21377
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
22217
0819f3572300 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 22216
diff changeset
  5278
utf8DecodedSize
22420
7b32109bff47 #DOCUMENTATION by mawalch
mawalch
parents: 22405
diff changeset
  5279
    "return the number of characters needed when this string is
22405
e11520f05fef #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 22381
diff changeset
  5280
     decoded from UTF-8"
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5281
22217
0819f3572300 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 22216
diff changeset
  5282
    |sz "{ Class:SmallInteger }"
0819f3572300 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 22216
diff changeset
  5283
     cnt "{ Class:SmallInteger }"|
21377
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  5284
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5285
    sz := self size.
21377
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  5286
    cnt := 0.
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  5287
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  5288
    1 to:sz do:[:idx|
24569
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  5289
	"/ count the number of UTF-8 start bytes
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  5290
	((self byteAt:idx) bitAnd:16rC0) ~~ 16r80 ifTrue:[
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  5291
	    cnt := cnt+1.
cef5eed70303 refactoring
Claus Gittinger <cg@exept.de>
parents: 24540
diff changeset
  5292
	].
21377
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  5293
    ].
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  5294
    ^ cnt.
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  5295
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  5296
    "
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  5297
     'hello world' asByteArray utf8DecodedSize
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  5298
     'ä' utf8Encoded asByteArray utf8DecodedSize
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  5299
     'äΣΔΨӕἤῴ' utf8Encoded asByteArray utf8DecodedSize
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  5300
    "
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  5301
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  5302
    "Created: / 07-02-2017 / 15:03:07 / stefan"
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  5303
    "Modified: / 07-02-2017 / 19:14:06 / stefan"
22405
e11520f05fef #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 22381
diff changeset
  5304
    "Modified (comment): / 02-01-2018 / 18:30:27 / stefan"
22420
7b32109bff47 #DOCUMENTATION by mawalch
mawalch
parents: 22405
diff changeset
  5305
    "Modified (comment): / 15-01-2018 / 08:29:10 / mawalch"
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  5306
! !
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  5307
8986
c2962d45eca0 new: #isByteCollection
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
  5308
!UninterpretedBytes methodsFor:'testing'!
c2962d45eca0 new: #isByteCollection
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
  5309
c2962d45eca0 new: #isByteCollection
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
  5310
isByteCollection
c2962d45eca0 new: #isByteCollection
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
  5311
    "return true, if the receiver has access methods for bytes;
22229
74cd3c85fcd2 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 22217
diff changeset
  5312
     This is different from 'self class isBytes',
8986
c2962d45eca0 new: #isByteCollection
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
  5313
     true is returned here - the method is redefined from Object."
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
    ^ true
9005
b82aa6bdc487 #isNonByteCollection
Stefan Vogel <sv@exept.de>
parents: 8995
diff changeset
  5316
!
b82aa6bdc487 #isNonByteCollection
Stefan Vogel <sv@exept.de>
parents: 8995
diff changeset
  5317
b82aa6bdc487 #isNonByteCollection
Stefan Vogel <sv@exept.de>
parents: 8995
diff changeset
  5318
isNonByteCollection
b82aa6bdc487 #isNonByteCollection
Stefan Vogel <sv@exept.de>
parents: 8995
diff changeset
  5319
    "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
  5320
     false is returned here - the method is redefined from Collection."
b82aa6bdc487 #isNonByteCollection
Stefan Vogel <sv@exept.de>
parents: 8995
diff changeset
  5321
b82aa6bdc487 #isNonByteCollection
Stefan Vogel <sv@exept.de>
parents: 8995
diff changeset
  5322
    ^ false
22229
74cd3c85fcd2 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 22217
diff changeset
  5323
!
74cd3c85fcd2 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 22217
diff changeset
  5324
74cd3c85fcd2 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 22217
diff changeset
  5325
isSingleByteCollection
74cd3c85fcd2 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 22217
diff changeset
  5326
    "return true, if the receiver has access methods for bytes;
74cd3c85fcd2 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 22217
diff changeset
  5327
     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
  5328
     and #replaceFrom:to: is equivalent to #replaceBytesFrom:to:.
22229
74cd3c85fcd2 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 22217
diff changeset
  5329
     This is different from 'self class isBytes',
74cd3c85fcd2 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 22217
diff changeset
  5330
     true is returned here - the method is redefined from Object."
74cd3c85fcd2 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 22217
diff changeset
  5331
74cd3c85fcd2 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 22217
diff changeset
  5332
    ^ true
8986
c2962d45eca0 new: #isByteCollection
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
  5333
! !
c2962d45eca0 new: #isByteCollection
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
  5334
11009
fb66915c5bb5 changed #acceptVisitor:with: - moved to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 10676
diff changeset
  5335
!UninterpretedBytes methodsFor:'visiting'!
fb66915c5bb5 changed #acceptVisitor:with: - moved to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 10676
diff changeset
  5336
fb66915c5bb5 changed #acceptVisitor:with: - moved to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 10676
diff changeset
  5337
acceptVisitor:aVisitor with:aParameter
16719
19b7ae0bbb49 comment/format only
Claus Gittinger <cg@exept.de>
parents: 16320
diff changeset
  5338
    "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
  5339
fb66915c5bb5 changed #acceptVisitor:with: - moved to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 10676
diff changeset
  5340
    ^ aVisitor visitByteArray:self with:aParameter
fb66915c5bb5 changed #acceptVisitor:with: - moved to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 10676
diff changeset
  5341
! !
fb66915c5bb5 changed #acceptVisitor:with: - moved to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 10676
diff changeset
  5342
695
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
  5343
!UninterpretedBytes class methodsFor:'documentation'!
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
  5344
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
  5345
version
18600
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  5346
    ^ '$Header$'
12253
c933c6fcdeef changed: #fromHexStringWithSeparators:
Claus Gittinger <cg@exept.de>
parents: 11973
diff changeset
  5347
!
c933c6fcdeef changed: #fromHexStringWithSeparators:
Claus Gittinger <cg@exept.de>
parents: 11973
diff changeset
  5348
c933c6fcdeef changed: #fromHexStringWithSeparators:
Claus Gittinger <cg@exept.de>
parents: 11973
diff changeset
  5349
version_CVS
18600
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  5350
    ^ '$Header$'
695
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
  5351
! !
15087
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  5352
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
  5353
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
  5354
UninterpretedBytes initialize!