UninterpretedBytes.st
author Claus Gittinger <cg@exept.de>
Tue, 03 Jul 2018 11:09:55 +0200
changeset 23188 709c48bf557e
parent 22883 711de6b11ff1
child 23626 a08a4299109d
permissions -rw-r--r--
#FEATURE by cg class: CharacterArray added: #trimBoth
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
21377
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
     1
"{ Encoding: utf8 }"
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
     2
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
     3
"
a27a279701f8 Initial revision
claus
parents:
diff changeset
     4
 COPYRIGHT (c) 1993 by Claus Gittinger
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
     5
	      All Rights Reserved
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
     6
a27a279701f8 Initial revision
claus
parents:
diff changeset
     7
 This software is furnished under a license and may be used
a27a279701f8 Initial revision
claus
parents:
diff changeset
     8
 only in accordance with the terms of that license and with the
a27a279701f8 Initial revision
claus
parents:
diff changeset
     9
 inclusion of the above copyright notice.   This software may not
a27a279701f8 Initial revision
claus
parents:
diff changeset
    10
 be provided or otherwise made available to, or used by, any
a27a279701f8 Initial revision
claus
parents:
diff changeset
    11
 other person.  No title to or ownership of the software is
a27a279701f8 Initial revision
claus
parents:
diff changeset
    12
 hereby transferred.
a27a279701f8 Initial revision
claus
parents:
diff changeset
    13
"
6492
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
    14
"{ Package: 'stx:libbasic' }"
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
    15
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
    16
"{ NameSpace: Smalltalk }"
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
    17
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
    18
ArrayedCollection subclass:#UninterpretedBytes
20372
aa0461b19c97 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20177
diff changeset
    19
	instanceVariableNames:''
aa0461b19c97 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20177
diff changeset
    20
	classVariableNames:'IsBigEndian'
aa0461b19c97 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20177
diff changeset
    21
	poolDictionaries:''
aa0461b19c97 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20177
diff changeset
    22
	category:'Collections-Abstract'
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    23
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    24
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    25
!UninterpretedBytes primitiveDefinitions!
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    26
%{
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    27
/*
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    28
 * Notice: I am abstract, and my subclasses may be anything.
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    29
 * Therefore, the code must always handle the fallback case
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    30
 * where the receiver is neither an ExternalBytes nor a ByteArray.
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    31
 * (which are, however, the most common)
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    32
 *
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    33
 * macro to fetch my byte address and size-in-bytes;
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    34
 * convenient for inline-C code.
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    35
 * (yes, C is bad ...)
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    36
 */
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    37
#define __fetchBytePointerAndSize__(o, pPtr, pSize) \
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    38
    {\
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    39
      if (__isNonNilObject(o)) { \
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
    40
	if (__isByteArrayLike(o)) { \
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
    41
	  *(pPtr) = (unsigned char *)__ByteArrayInstPtr(o)->ba_element; \
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
    42
	  *(pSize) = __byteArraySize(o); \
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
    43
	} else if (__qIsExternalBytesLike(o)) { \
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
    44
	  OBJ __sz__ = __externalBytesSize(o); \
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
    45
	  if (__isSmallInteger(__sz__)) { \
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
    46
	    *(pSize) = __intVal(__sz__); \
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
    47
	    *(pPtr) = (unsigned char *)(__externalBytesAddress(o)); \
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
    48
	  } else { \
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
    49
	    *(pSize) = 0; \
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
    50
	    *(pPtr) = (unsigned char *)0; \
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
    51
	  } \
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
    52
	} else { \
22264
52bc85fd2fb8 *** empty log message ***
sr
parents: 22261
diff changeset
    53
		/* here we need to differ 32bit and 64bit */ \
52bc85fd2fb8 *** empty log message ***
sr
parents: 22261
diff changeset
    54
        /* because on 32bit machines we need to take care about the alignment */ \
52bc85fd2fb8 *** empty log message ***
sr
parents: 22261
diff changeset
    55
        /* but sadly, the same code is wrong for 64bit machines */ \
52bc85fd2fb8 *** empty log message ***
sr
parents: 22261
diff changeset
    56
		if (__POINTER_SIZE__ == 8) {\
52bc85fd2fb8 *** empty log message ***
sr
parents: 22261
diff changeset
    57
			*(pSize) /* nInstBytes */ = OHDR_SIZE + __OBJS2BYTES__(__intVal(__ClassInstPtr(__qClass(o))->c_ninstvars)); \
52bc85fd2fb8 *** empty log message ***
sr
parents: 22261
diff changeset
    58
		  } else { \
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
    59
	    if (__isFloatArray(o)) { \
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
    60
		*(pSize) = sizeof(struct __FloatArray) - sizeof(float) + __OBJS2BYTES__(__intVal(__ClassInstPtr(__qClass(o))->c_ninstvars)); \
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
    61
	    } else { \
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
    62
		if (__isDoubleArray(o)) { \
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
    63
		    *(pSize) = sizeof(struct __DoubleArray) - sizeof(double) + __OBJS2BYTES__(__intVal(__ClassInstPtr(__qClass(o))->c_ninstvars)); \
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
    64
		} else { \
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
    65
		    if (__isLongLongsOrSignedLongLongs(o)) { \
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
    66
			*(pSize) = sizeof(struct __LongIntegerArray) - sizeof(__uint64__) + __OBJS2BYTES__(__intVal(__ClassInstPtr(__qClass(o))->c_ninstvars)); \
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
    67
		    } else { \
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
    68
			*(pSize) /* nInstBytes */ = OHDR_SIZE + __OBJS2BYTES__(__intVal(__ClassInstPtr(__qClass(o))->c_ninstvars)); \
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
    69
		    } \
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
    70
		} \
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
    71
	    } \
22264
52bc85fd2fb8 *** empty log message ***
sr
parents: 22261
diff changeset
    72
	    } \
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
    73
	    *(pPtr) = (char *)(__InstPtr(self)) + *(pSize) /* nInstBytes */; \
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
    74
	    *(pSize) = __qSize(self) - *(pSize) /* nInstBytes */; \
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
    75
	} \
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    76
      } else { \
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
    77
	*(pSize) = 0; \
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
    78
	*(pPtr) = (unsigned char *)0; \
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    79
      } \
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    80
    }
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    81
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    82
%}
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    83
! !
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    84
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
    85
!UninterpretedBytes class methodsFor:'documentation'!
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    86
88
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    87
copyright
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    88
"
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    89
 COPYRIGHT (c) 1993 by Claus Gittinger
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
    90
	      All Rights Reserved
88
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    91
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    92
 This software is furnished under a license and may be used
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    93
 only in accordance with the terms of that license and with the
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    94
 inclusion of the above copyright notice.   This software may not
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    95
 be provided or otherwise made available to, or used by, any
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    96
 other person.  No title to or ownership of the software is
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    97
 hereby transferred.
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    98
"
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    99
!
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
   100
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   101
documentation
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   102
"
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   103
    UninterpretedBytes provides the common protocol for byte-storage
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   104
    containers; concrete subclasses are
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   105
	ByteArray (which store the bytes within the Smalltalk object memory)
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   106
	String    (knows that the bytes represent characters)
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   107
    and
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   108
	ExternalBytes (which store the bytes in the malloc-heap).
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   109
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   110
    UninterpretedBytes itself is abstract, so no instances of it can be created.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   111
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   112
    [See also:]
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   113
	ByteArray String ExternalBytes
1294
e26bbb61f6b2 documentation
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
   114
e26bbb61f6b2 documentation
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
   115
    [author:]
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   116
	Claus Gittinger
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   117
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   118
    [Notice:]
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   119
	Notice the confusion due to multiple methods with the same
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   120
	functionality (i.e. 'xxxx:MSB:' vs. 'xxxx:bigEndian:').
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   121
	The reason is that at the time this class was written,
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   122
	ST80 did not offer protocol to specify the byteOrder, and
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   123
	ST/X provided methods ending in 'MSB:' for this.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   124
	In the meanwhile, VW added protocol ending in 'bigEndian:',
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   125
	which has been added here for compatibility.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   126
	(certainly a point, where an ansi-standard will help)
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   127
"
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   128
! !
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   129
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   130
!UninterpretedBytes class methodsFor:'initialization'!
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   131
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   132
initialize
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   133
    IsBigEndian := self isBigEndian.
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   134
! !
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   135
3363
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
   136
!UninterpretedBytes class methodsFor:'instance creation'!
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
   137
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   138
from:aByteArray
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   139
    "return new instance which is a copy of aByteArray"
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   140
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   141
    |len bytes|
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   142
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   143
    len := aByteArray size.
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   144
    bytes := self new:len.
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   145
    bytes replaceBytesFrom:1 to:len with:aByteArray startingAt:1.
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   146
    ^ bytes
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   147
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   148
    "
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   149
      String from:#[40 41 42]
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   150
      String with:#[40 41 42 43 44 45 46 47 48 49 50] from:2 to:5
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   151
    "
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   152
!
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   153
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   154
fromHexString:aString
15717
b05a01005030 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15087
diff changeset
   155
    "decode a byteArray from a hex string (as generated by hexPrintOn:)"
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   156
12551
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   157
    | sz bytes s hi lo |
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   158
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   159
    sz := aString size.
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   160
    sz == 0 ifTrue:[^ self new].
14970
319eeed62505 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 14224
diff changeset
   161
    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
   162
12551
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   163
    bytes := self new: sz // 2.
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   164
    s := aString readStream.
12551
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   165
    1 to: sz // 2 do: [ :idx |
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   166
	hi := s next digitValue.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   167
	lo := s next digitValue.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   168
	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
   169
    ].
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   170
    ^ bytes
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   171
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   172
    "
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   173
     ByteArray fromHexString:'1234FEFF'
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   174
     ExternalBytes fromHexString:'1234FEFF'
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   175
    "
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
     |s|
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   178
     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
   179
     ByteArray fromHexString:s
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   180
    "
12551
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   181
    "
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   182
     Time millisecondsToRun:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   183
	1000000 timesRepeat:[ ByteArray fromHexString:'1234FEFF1234FEFF1234FEFF1234FEFF' ]
12551
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   184
     ].
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   185
    "
15717
b05a01005030 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15087
diff changeset
   186
b05a01005030 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15087
diff changeset
   187
    "Modified (comment): / 28-08-2013 / 20:40:04 / cg"
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   188
!
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   189
11874
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   190
fromHexStringWithSeparators:aString
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   191
    "read a bytearray from a printed string representation, where
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   192
     individual bytes are encoded as two hex digits, optionally separated by whiteSpace.
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   193
     See also fromHexString:, which does something similar, but does not allow for spaces"
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   194
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   195
    ^ self streamContents:[:outStream |
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   196
	|inStream h|
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   197
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   198
	inStream := aString readStream.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   199
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   200
	[
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   201
	    inStream skipSeparators.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   202
	    inStream atEnd
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   203
	] whileFalse:[
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   204
	    h := inStream next:2.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   205
	    outStream nextPut:(Integer readFrom:h base:16).
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   206
	].
11874
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   207
    ].
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   208
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   209
    "
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   210
     ByteArray fromHexString:'1234FEFF'
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   211
     ByteArray fromHexStringWithSeparators:'   12  34 FE FF'
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   212
    "
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   213
!
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   214
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   215
fromPackedString:aString
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   216
    "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
   217
     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
   218
     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
   219
     Every 6 bit packet is encoded as a character in 32..95.
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   220
     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
   221
     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
   222
     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
   223
     ST-80 uses this encoding for Images ...
16798
acfbeccbc226 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16796
diff changeset
   224
     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
   225
     PS: It took a while to figure that one out ...
18633
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   226
     PPS: I don't like it ;-)"
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   227
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   228
    |index    "{ Class: SmallInteger }"
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   229
     dstIndex "{ Class: SmallInteger }"
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   230
     stop     "{ Class: SmallInteger }"
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   231
     sixBits  "{ Class: SmallInteger }"
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   232
     n        "{ Class: SmallInteger }"
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   233
     sz       "{ Class: SmallInteger }"
12551
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   234
     last bytes|
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   235
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   236
    sz := aString size.
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   237
    sz == 0 ifTrue:[^ self new].
12551
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   238
    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
   239
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   240
    stop := sz // 4 * 3.
12551
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   241
    "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
   242
     range 97 .. otherwise, its exact."
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   243
12551
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   244
    last := aString last codePoint.
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   245
    last > 96 ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   246
	stop := stop - 3 + (last - 96)
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   247
    ].
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   248
    bytes := self new:stop.
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   249
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   250
    index := 1. dstIndex := 1.
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   251
    [dstIndex <= stop] whileTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   252
	"/ take 4 characters ...
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   253
	"/ allow a line break before each group of 4
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   254
	sixBits := (aString at:index) codePoint.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   255
	[sixBits < 32] whileTrue:[
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   256
	    index := index + 1.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   257
	    sixBits := (aString at:index) codePoint.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   258
	].
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   259
	sixBits := sixBits bitAnd:16r3F.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   260
	n := sixBits.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   262
	"/ self assert:(aString at:index+1) codePoint >= 32.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   263
	sixBits := (aString at:index+1) codePoint bitAnd:16r3F.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   264
	n := (n bitShift:6) + sixBits.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   265
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   266
	"/ self assert:(aString at:index+2) codePoint >= 32.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   267
	sixBits := (aString at:index+2) codePoint bitAnd:16r3F.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   268
	n := (n bitShift:6) + sixBits.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   269
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   270
	"/ self assert:(aString at:index+3) codePoint >= 32.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   271
	sixBits := (aString at:index+3) codePoint bitAnd:16r3F.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   272
	n := (n bitShift:6) + sixBits.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   273
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   274
	index := index + 4.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   275
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   276
	"/ now have 24 bits in n
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   277
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   278
	bytes at:dstIndex put:(n bitShift:-16).
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   279
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   280
	dstIndex < stop ifTrue:[
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   281
	    bytes at:dstIndex+1 put:((n bitShift:-8) bitAnd:16rFF).
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   282
	    dstIndex+2 <= stop ifTrue:[
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   283
		bytes at:dstIndex+2 put:(n bitAnd:16rFF).
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   284
	    ]
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   285
	].
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   286
	dstIndex := dstIndex + 3.
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   287
    ].
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   288
    ^ bytes
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   289
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   290
    "
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   291
     ByteArray fromPackedString:(#[1 1 1 1] asPackedString)
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   292
     ByteArray fromPackedString:(#[1 1 1 1 1] asPackedString)
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   293
     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
   294
     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
   295
     ByteArray fromPackedString:(#[1 1 1 1 1 1 1 1] asPackedString)
18633
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   296
     ByteArray fromPackedString:((ByteArray new:256) asPackedString)
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   297
     ByteArray fromPackedString:((ByteArray new:128) asPackedString)
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   298
     ByteArray fromPackedString:((ByteArray new:129) asPackedString)
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   299
     ByteArray fromPackedString:((ByteArray new:130) asPackedString)
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   300
     ByteArray fromPackedString:((ByteArray new:131) asPackedString)
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   301
     ByteArray fromPackedString:((ByteArray new:132) asPackedString)
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   302
     ByteArray fromPackedString:((ByteArray new:64) asPackedString)
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   303
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   304
     0 to:256 do:[:l |
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   305
	|orig copy|
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   306
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   307
	0 to:255 do:[:fill |
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   308
	    orig := ByteArray new:l withAll:fill.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   309
	    copy := ByteArray fromPackedString:(orig asPackedString).
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   310
	    self assert:(orig = copy).
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   311
	 ]
18633
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   312
     ]
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   313
    "
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   314
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   315
    "Modified: / 6.3.1997 / 15:28:52 / cg"
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   316
    "Modified: / 18.12.1997 / 17:17:11 / stefan"
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   317
!
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   318
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   319
uninitializedNew:anInteger
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   320
    "return a new instance of the receiver with uninitialized
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   321
     (i.e. undefined) contents. The indexed elements have any random
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   322
     value. However, any named instance variables are still nilled.
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   323
     For use, when contents will be set anyway shortly after - this
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   324
     is a bit faster than the regular basicNew:, which clears the bytes.
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   325
     Of course, it only makes a difference for very big ByteArrays, such
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   326
     as used for images/bitmaps.
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   327
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   328
     Notice: if you want to port code using uninitializedNew: to another
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   329
     smalltalk, you have to add an 'uninitializedNew: -> basicNew:'-calling
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   330
     method to the ByteArray class of the other smalltalk."
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   331
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   332
%{  /* NOCONTEXT */
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   333
    OBJ newobj;
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   334
    INT instsize, nInstVars, nindexedinstvars;
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   335
    REGISTER OBJ *op;
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   336
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   337
    if (__isSmallInteger(anInteger)) {
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   338
	nindexedinstvars = __intVal(anInteger);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   339
	if (nindexedinstvars >= 0) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   340
	    if (self == ByteArray) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   341
		/*
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   342
		 * the most common case
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   343
		 */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   344
		instsize = OHDR_SIZE + nindexedinstvars;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   345
		if (__CanDoQuickNew(instsize)) {        /* OBJECT ALLOCATION */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   346
		    __qCheckedNew(newobj, instsize);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   347
		    __InstPtr(newobj)->o_class = self;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   348
		    __qSTORE(newobj, self);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   349
		    RETURN (newobj );
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   350
		}
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   351
	    } else {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   352
		/*
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   353
		 * Take care for subclasses like TwoByteString
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   354
		 */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   355
		switch (__smallIntegerVal(__ClassInstPtr(self)->c_flags) & ARRAYMASK) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   356
		case BYTEARRAY:
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   357
		    break;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   358
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   359
		case WORDARRAY:
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   360
		case SWORDARRAY:
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   361
		    nindexedinstvars *= 2;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   362
		    break;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   363
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   364
		case LONGARRAY:
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   365
		case SLONGARRAY:
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   366
		    nindexedinstvars *= 4;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   367
		    break;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   368
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   369
		default:
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   370
		    /* don't know about this array type, delegate to super */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   371
		    goto out;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   372
		}
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   373
	    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   374
	    nInstVars = __intVal(__ClassInstPtr(self)->c_ninstvars);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   375
	    instsize = OHDR_SIZE + __OBJS2BYTES__(nInstVars) + nindexedinstvars;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   376
	    __PROTECT_CONTEXT__
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   377
	    __qNew(newobj, instsize);   /* OBJECT ALLOCATION */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   378
	    __UNPROTECT_CONTEXT__
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   379
	    if (newobj != nil) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   380
		__InstPtr(newobj)->o_class = self;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   381
		__qSTORE(newobj, self);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   382
		if (nInstVars) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   383
		    /*
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   384
		     * still have to nil out named instvars ...
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   385
		     */
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   386
#if defined(memset4) && defined(FAST_OBJECT_MEMSET4)
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   387
		    memset4(__InstPtr(newobj)->i_instvars, nil, nInstVars);
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   388
#else
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   389
# if defined(FAST_MEMSET) && !defined(NEGATIVE_ADDRESSES)
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   390
		    /*
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   391
		     * knowing that nil is 0
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   392
		     */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   393
		    memset(__InstPtr(newobj)->i_instvars, 0, instsize - OHDR_SIZE);
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   394
# else
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   395
		    op = __InstPtr(newobj)->i_instvars;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   396
		    while (nInstVars--)
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   397
			*op++ = nil;
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   398
# endif
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   399
#endif
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   400
		}
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   401
		RETURN ( newobj );
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   402
	    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   403
	}
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   404
    }
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   405
out:;
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   406
%}.
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   407
    ^ self basicNew:anInteger
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   408
!
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   409
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   410
with:aByteArray from:start to:stop
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   411
    "return new instance with a copy of aByteArray
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   412
     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
   413
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   414
    |len bytes|
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   415
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   416
    len := stop-start+1.
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   417
    bytes := self new:len.
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   418
    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
   419
    ^ bytes
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   420
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   421
    "
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   422
      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
   423
    "
3363
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
   424
! !
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
   425
21830
c5ea23cc3ba2 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21474
diff changeset
   426
!UninterpretedBytes class methodsFor:'Compatibility-Squeak'!
c5ea23cc3ba2 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21474
diff changeset
   427
c5ea23cc3ba2 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21474
diff changeset
   428
readHexFrom:aString
c5ea23cc3ba2 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21474
diff changeset
   429
    "same as fromHexString: for squeak/Pharo compatibility"
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   430
21830
c5ea23cc3ba2 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21474
diff changeset
   431
    ^ self fromHexString:aString
c5ea23cc3ba2 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21474
diff changeset
   432
c5ea23cc3ba2 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21474
diff changeset
   433
    "
c5ea23cc3ba2 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21474
diff changeset
   434
     (ByteArray readHexFrom: 'C3A1C3A5C3A6C3B1C386C2A5C3BC')
c5ea23cc3ba2 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21474
diff changeset
   435
    "
c5ea23cc3ba2 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21474
diff changeset
   436
c5ea23cc3ba2 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21474
diff changeset
   437
    "Created: / 18-06-2017 / 18:01:18 / cg"
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
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   440
!UninterpretedBytes class methodsFor:'queries'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   441
8893
99996b25482e +isAbstract
Claus Gittinger <cg@exept.de>
parents: 8092
diff changeset
   442
isAbstract
11220
1ed300ff0d21 comment
Claus Gittinger <cg@exept.de>
parents: 11009
diff changeset
   443
    "Return if this class is an abstract class.
1ed300ff0d21 comment
Claus Gittinger <cg@exept.de>
parents: 11009
diff changeset
   444
     True is returned for UninterpretedBytes here; false for subclasses.
19461
7a4d28b76572 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19415
diff changeset
   445
     Abstract subclasses must redefine this again."
11220
1ed300ff0d21 comment
Claus Gittinger <cg@exept.de>
parents: 11009
diff changeset
   446
8893
99996b25482e +isAbstract
Claus Gittinger <cg@exept.de>
parents: 8092
diff changeset
   447
    ^ self == UninterpretedBytes
99996b25482e +isAbstract
Claus Gittinger <cg@exept.de>
parents: 8092
diff changeset
   448
!
99996b25482e +isAbstract
Claus Gittinger <cg@exept.de>
parents: 8092
diff changeset
   449
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   450
isBigEndian
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   451
    "return true, if words/shorts store the most-significant
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   452
     byte first (MSB), false if least-sign.-first (LSB).
4019
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
   453
     I.e. false for vax, intel; true for m68k, sun.
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
   454
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
   455
     Notice: UninterpretedBytes isBigEndian
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   456
	     this is inlined both by stc and the jit compiler"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   457
a27a279701f8 Initial revision
claus
parents:
diff changeset
   458
%{  /* NOCONTEXT */
a27a279701f8 Initial revision
claus
parents:
diff changeset
   459
8901
824a89d0b5c7 alpha64 vs. POINTER_SIZE cleanup
Claus Gittinger <cg@exept.de>
parents: 8893
diff changeset
   460
#if defined(__MSBFIRST__)
3936
dd8cd28d4a9b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3459
diff changeset
   461
    RETURN (true);
dd8cd28d4a9b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3459
diff changeset
   462
#else
8901
824a89d0b5c7 alpha64 vs. POINTER_SIZE cleanup
Claus Gittinger <cg@exept.de>
parents: 8893
diff changeset
   463
# if defined(__LSBFIRST__)
4275
9fc4a735a1d3 BFIRST stuff
Claus Gittinger <cg@exept.de>
parents: 4019
diff changeset
   464
    RETURN (false);
9fc4a735a1d3 BFIRST stuff
Claus Gittinger <cg@exept.de>
parents: 4019
diff changeset
   465
# else
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   466
    /*
20816
986549374231 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20595
diff changeset
   467
     * I don't like ifdefs - you always forget some ...
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   468
     * therefore we look into a structure at run-time.
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   469
     * (also, there are CPUs around [mips], where the byteorder
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   470
     *  is programmable, and which come in different flavours)
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   471
     *
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   472
     * NOTICE:
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   473
     *    both the JIT and stc may inline this to a
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   474
     *    constant for systems where this is known.
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   475
     */
a27a279701f8 Initial revision
claus
parents:
diff changeset
   476
    union {
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   477
	unsigned int   u_l;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   478
	char           u_c[sizeof(int)];
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   479
    } u;
a27a279701f8 Initial revision
claus
parents:
diff changeset
   480
a27a279701f8 Initial revision
claus
parents:
diff changeset
   481
    u.u_l = 0x87654321;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   482
    if (u.u_c[0] == 0x21) RETURN (false);
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   483
    RETURN (true);
4275
9fc4a735a1d3 BFIRST stuff
Claus Gittinger <cg@exept.de>
parents: 4019
diff changeset
   484
# endif
3936
dd8cd28d4a9b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3459
diff changeset
   485
#endif
18346
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   486
%}.
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   487
    ^ false     "/ an arbitrary default
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   488
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   489
    "
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   490
     UninterpretedBytes isBigEndian
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   491
    "
3209
eff7ad7f0825 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3207
diff changeset
   492
!
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   493
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   494
isBuiltInClass
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   495
    "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
   496
     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
   497
     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
   498
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   499
    ^ self == UninterpretedBytes
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   500
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
   501
    "Modified: / 23.4.1996 / 15:56:25 / cg"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
   502
    "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
   503
! !
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   504
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   505
!UninterpretedBytes methodsFor:'Compatibility'!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   506
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   507
doubleWordAt:index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   508
    "return the 4-bytes starting at index as an (unsigned) Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   509
     The index is a smalltalk index (i.e. 1-based).
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   510
     The value is retrieved in the machine's natural byte order."
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   511
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   512
    ^ self unsignedInt32At:index MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   513
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   514
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   515
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   516
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   517
     b := ByteArray withAll:#(1 2 3 4).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   518
     (b doubleWordAt:1) printStringRadix:16
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   519
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   520
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   521
    "Modified: / 05-03-1998 / 14:57:35 / stefan"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   522
    "Modified (comment): / 04-08-2017 / 11:15:29 / cg"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   523
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   524
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   525
doubleWordAt:index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   526
    "return the 4-bytes starting at index as an (unsigned) Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   527
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   528
     The value is retrieved MSB-first, if the msb-arg is true;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   529
     LSB-first otherwise."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   530
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   531
    ^ self unsignedInt32At:index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   532
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   533
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   534
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   535
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   536
     b := ByteArray withAll:#(1 2 3 4).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   537
     (b doubleWordAt:1 MSB:true) printStringRadix:16.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   538
     (b doubleWordAt:1 MSB:false) printStringRadix:16
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   539
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   540
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   541
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   542
doubleWordAt:byteIndex put:anInteger
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   543
    "set the 4-bytes starting at index from the (unsigned) Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   544
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   545
     The value should be in the range 0 to 16rFFFFFFFF
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   546
     (for negative values, the stored value is not defined).
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   547
     The value is stored in the machine's natural byte order."
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   548
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   549
   ^ self unsignedInt32At:byteIndex put:anInteger MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   550
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   551
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   552
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   553
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   554
     b doubleWordAt:1 put:16r04030201.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   555
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   556
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   557
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   558
    "Modified: / 05-03-1998 / 14:57:48 / stefan"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   559
    "Modified (comment): / 04-08-2017 / 11:15:38 / cg"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   560
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   561
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   562
doubleWordAt:byteIndex put:anInteger MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   563
    "set the 4-bytes starting at index from the (unsigned) Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   564
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   565
     The value must be in the range 0 to 16rFFFFFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   566
     The value is stored MSB-first if msb is true; LSB-first otherwise."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   567
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   568
   ^ self unsignedInt32At:byteIndex put:anInteger MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   569
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   570
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   571
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   572
     b := ByteArray new:8.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   573
     b doubleWordAt:1 put:16r04030201 MSB:true.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   574
     b doubleWordAt:5 put:16r04030201 MSB:false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   575
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   576
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   577
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   578
    "Modified: / 21.1.1998 / 17:43:34 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   579
    "Modified: / 5.3.1998 / 11:42:17 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   580
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   581
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   582
doubleWordAtDoubleWordIndex:int32Index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   583
    "return the unsigned long (int32) at index, anInteger.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   584
     Fetching in the machine's natural byte order.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   585
     Indices are 1-based and scaled as appropriate to allow
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   586
     accessing the memory as an array of doubleWord entries.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   587
     (i.e. indices are 1, 2, ...)"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   588
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   589
    ^ self doubleWordAtDoubleWordIndex:int32Index MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   590
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   591
    "Created: / 21.1.1998 / 17:43:53 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   592
    "Modified: / 5.3.1998 / 14:58:06 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   593
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   594
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   595
doubleWordAtDoubleWordIndex:int32Index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   596
    "return the unsigned long (int32) at index, anInteger.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   597
     Fetching is MSB if msb is true, LSB otherwise.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   598
     Indices are 1-based and scaled as appropriate to allow
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   599
     accessing the memory as an array of doubleWord entries.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   600
     (i.e. indices are 1, 2, ...)"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   601
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   602
    ^ self unsignedInt32At:((int32Index - 1) * 4 + 1) MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   603
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   604
    "Created: / 21.1.1998 / 17:44:07 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   605
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   606
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   607
doubleWordAtDoubleWordIndex:int32Index put:anInteger
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   608
    "set the long at index, anInteger.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   609
     Storing in the machines natural byte order.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   610
     Indices are 1-based and scaled as appropriate to allow
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   611
     accessing the memory as an array of doubleWord entries.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   612
     (i.e. indices are 1, 2, ...)"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   613
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   614
    ^ self doubleWordAtDoubleWordIndex:int32Index put:anInteger MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   615
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   616
    "Created: / 21.1.1998 / 17:44:13 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   617
    "Modified: / 5.3.1998 / 14:58:19 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   618
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   619
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   620
doubleWordAtDoubleWordIndex:int32Index put:anInteger MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   621
    "set the long at index, anInteger.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   622
     Storing is MSB if msb is true, LSB otherwise.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   623
     Indices are 1-based and scaled as appropriate to allow
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   624
     accessing the memory as an array of doubleWord entries.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   625
     (i.e. indices are 1, 2, ...)"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   626
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   627
    ^ self unsignedInt32At:((int32Index - 1) * 4 + 1) put:anInteger MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   628
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   629
    "Created: / 21.1.1998 / 17:44:19 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   630
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   631
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   632
int16At:byteIndex
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   633
    "return the 2-bytes starting at index as a signed Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   634
     The index is a smalltalk index (i.e. 1-based).
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   635
     The value is retrieved in the machine's natural byte order.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   636
     This may be worth a primitive."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   637
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   638
    ^ self signedInt16At:byteIndex
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   639
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   640
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   641
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   642
     b := ByteArray new:2.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   643
     b wordAt:1 put:16rFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   644
     b signedWordAt:1
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   645
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   646
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   647
    "Modified: / 01-07-1996 / 21:14:38 / cg"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   648
    "Modified (comment): / 04-08-2017 / 11:15:48 / cg"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   649
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   650
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   651
int16At:byteIndex MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   652
    "return the 2-bytes starting at index as a signed Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   653
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   654
     The value is retrieved in the machines natural byte order.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   655
     This may be worth a primitive."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   656
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   657
    ^ self signedInt16At:byteIndex MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   658
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   659
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   660
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   661
     b := ByteArray new:2.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   662
     b wordAt:1 put:16rFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   663
     b signedWordAt:1
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
    "Modified: 1.7.1996 / 21:14:38 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   667
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   668
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   669
int16At:index put:anInteger
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   670
    "set the 2-bytes starting at index from the signed Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   671
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   672
     The stored value must be in the range -32768 .. +32676.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   673
     The value is stored in the machine's natural byteorder"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   674
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   675
    ^ self signedInt16At:index put:anInteger MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   676
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   677
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   678
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   679
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   680
     b shortAt:1 put:1 bigEndian:true.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   681
     b shortAt:3 put:1 bigEndian:false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   682
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   683
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   684
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   685
    "Modified: / 1.7.1996 / 21:12:07 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   686
    "Created: / 5.3.1998 / 11:02:05 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   687
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   688
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   689
int16At:index put:anInteger MSB:bigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   690
    "set the 2-bytes starting at index from the signed Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   691
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   692
     The stored value must be in the range -32768 .. +32676.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   693
     The value is stored in the byteorder given by bigEndian.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   694
     This may be worth a primitive."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   695
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   696
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   697
    ^ self signedInt16At:index put:anInteger MSB:bigEndian
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
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   701
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   702
     b shortAt:1 put:1 bigEndian:true.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   703
     b shortAt:3 put:1 bigEndian:false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   704
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   705
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   706
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   707
    "Modified: / 1.7.1996 / 21:12:07 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   708
    "Created: / 5.3.1998 / 11:02:05 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   709
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   710
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   711
longAt:index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   712
    "return the 4-bytes starting at index as a signed Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   713
     The index is a smalltalk index (i.e. 1-based).
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   714
     The value is retrieved in the machine's natural byte order,
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   715
     therefore, this should only be used for byte-data which is
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   716
     only used inside this machine.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   717
     To setup data packets which are to be sent to other machines,
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   718
     or stored into a file, always use longAt:MSB: and specify
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   719
     a definite byteOrder."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   720
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   721
    ^ self signedInt32At:index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   722
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   723
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   724
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   725
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   726
     b unsignedLongAt:1 put:16rFFFFFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   727
     (b longAt:1)
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   728
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   729
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   730
    "Modified: / 01-07-1996 / 21:11:28 / cg"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   731
    "Modified: / 05-03-1998 / 12:06:28 / stefan"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   732
    "Modified (comment): / 04-08-2017 / 11:15:58 / cg"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   733
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   734
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   735
longAt:index bigEndian:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   736
    "return the 4-bytes starting at index as a signed Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   737
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   738
     Depending on msb, the value is retrieved MSB-first or LSB-first.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   739
     This may be worth a primitive."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   740
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   741
    ^ self signedInt32At:index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   742
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   743
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   744
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   745
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   746
     b unsignedLongAt:1 put:16rFFFFFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   747
     (b longAt:1)
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
    "Modified: / 1.7.1996 / 21:11:33 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   751
    "Created: / 5.3.1998 / 14:02:03 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   752
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   753
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   754
longAt:index put:value
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   755
    "set the 4-bytes starting at index from the signed Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   756
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   757
     The value is stored in the machine's natural byte order."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   758
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   759
    ^ self signedInt32At:index put:value MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   760
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   761
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   762
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   763
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   764
     b longAt:1 put:-1.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   765
     (b unsignedLongAt:1) printStringRadix:16
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   766
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   767
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   768
    "Modified: / 1.7.1996 / 21:11:39 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   769
    "Created: / 5.3.1998 / 10:57:18 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   770
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   771
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   772
longAt:byteIndex put:anInteger bigEndian:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   773
    "store a signed long (32bit) integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   774
     The index is a smalltalk index (i.e. 1-based)."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   775
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   776
    ^ self signedInt32At:byteIndex put:anInteger MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   777
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   778
    "Created: / 9.5.1998 / 01:10:24 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   779
    "Modified: / 9.5.1998 / 01:13:34 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   780
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   781
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   782
longLongAt:index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   783
    "return the 8-bytes starting at index as a signed Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   784
     The index is a smalltalk index (i.e. 1-based).
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   785
     The value is retrieved in the machine's natural byte order.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   786
     This may be worth a primitive."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   787
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   788
    ^ self signedInt64At:index MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   789
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   790
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   791
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   792
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   793
     b unsignedLongLongAt:1 put:16rFFFFFFFFFFFFFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   794
     (b longLongAt:1)
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   795
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   796
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   797
    "Modified: / 01-07-1996 / 21:11:28 / cg"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   798
    "Created: / 05-03-1998 / 14:40:05 / stefan"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   799
    "Modified (comment): / 04-08-2017 / 11:16:06 / cg"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   800
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   801
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   802
longLongAt:index bigEndian:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   803
    "return the 8-bytes starting at index as a signed Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   804
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   805
     The value is retrieved in the given byte order.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   806
     This may be worth a primitive."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   807
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   808
    ^ self signedInt64At:index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   809
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   810
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   811
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   812
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   813
     b unsignedLongLongAt:1 put:16rFFFFFFFFFFFFFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   814
     (b longLongAt:1 msb:true)
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
    "Modified: / 5.3.1998 / 12:06:28 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   818
    "Created: / 5.3.1998 / 14:40:54 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   819
    "Modified: / 9.5.1998 / 01:10:59 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   820
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   821
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   822
longLongAt:byteIndex put:anInteger
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   823
    "store a signed longLong (64bit) integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   824
     The index is a smalltalk index (i.e. 1-based).
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   825
     The value is stored in the machine's natural byte order.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   826
     Same as #signedQuadWordAt:put: - for ST80 compatibility."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   827
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   828
    ^ self signedInt64At:byteIndex put:anInteger MSB:IsBigEndian
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   829
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   830
    "Modified (comment): / 04-08-2017 / 11:16:36 / cg"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   831
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   832
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   833
longLongAt:byteIndex put:anInteger bigEndian:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   834
    "store a signed longLong (64bit) integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   835
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   836
     Same as #signedQuadWordAt:put: - for ST80 compatibility."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   837
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   838
    ^ self signedInt64At:byteIndex put:anInteger MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   839
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   840
    "Created: / 9.5.1998 / 01:10:24 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   841
    "Modified: / 9.5.1998 / 01:13:34 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   842
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   843
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   844
quadWordAt:index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   845
    "return the 8-bytes starting at index as an (unsigned) Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   846
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   847
     Depending on msb, the value is retrieved MSB or LSB-first."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   848
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
   849
   ^ self unsignedInt64At:index MSB:msb
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   850
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   851
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   852
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   853
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   854
     b := ByteArray withAll:#(1 2 3 4 5 6 7 8).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   855
     (b quadWordAt:1 MSB:false) printStringRadix:16
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   856
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   857
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   858
    "Modified: 5.11.1996 / 14:06:21 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   859
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   860
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   861
quadWordAt:index put:anInteger MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   862
    "set the 8-bytes starting at index from the (unsigned) Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   863
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   864
     The value must be in the range 0 to 16rFFFFFFFFFFFFFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   865
     Depending on msb, the value is stored MSB-first or LSB-first."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   866
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   867
    ^ self unsignedInt64At:index put:anInteger MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   868
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   869
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   870
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   871
     b := ByteArray new:8.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   872
     b quadWordAtIndex:1 put:16r0807060504030201 MSB:false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   873
     b inspect
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
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   877
shortAt:index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   878
    "return the 2-bytes starting at index as a signed Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   879
     The index is a smalltalk index (i.e. 1-based).
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   880
     The value is retrieved in the machine's natural byte order.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   881
     This may be worth a primitive.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   882
     This is the ST80 equivalent of #signedWordAt:"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   883
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   884
    ^ self signedInt16At:index MSB:IsBigEndian
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   885
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   886
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   887
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   888
     b := ByteArray new:2.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   889
     b unsignedShortAt:1 put:16rFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   890
     b shortAt:1
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   891
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   892
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   893
    "Modified: / 01-07-1996 / 21:14:38 / cg"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   894
    "Created: / 05-03-1998 / 10:59:57 / stefan"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   895
    "Modified: / 05-03-1998 / 23:39:38 / stefan"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   896
    "Modified (comment): / 04-08-2017 / 11:16:20 / cg"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   897
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   898
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   899
shortAt:index bigEndian:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   900
    "return the 2-bytes starting at index as a signed Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   901
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   902
     The value is retrieved MSB-first, if the msb-arg is true;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   903
     LSB-first otherwise.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   904
     This is the ST80 equivalent of #signedWordAt:"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   905
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   906
    ^ self signedInt16At:index MSB:msb
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   907
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   908
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   909
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   910
     b := ByteArray new:2.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   911
     b unsignedShortAt:1 put:16rFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   912
     b shortAt:1
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   913
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   914
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   915
    "Modified: / 1.7.1996 / 21:14:38 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   916
    "Created: / 5.3.1998 / 23:41:21 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   917
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   918
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   919
shortAt:index put:value
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   920
    "set the 2-bytes starting at index from the signed Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   921
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   922
     The stored value must be in the range -32768 .. +32676.
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   923
     The value is stored in the machine's natural byteorder.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   924
     This may be worth a primitive.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   925
     This is the ST80 equivalent of #signedWordAt:put:"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   926
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   927
    ^ self signedInt16At:index put:value MSB:IsBigEndian
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
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   931
     b := ByteArray new:6.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   932
     b shortAt:1 put:-1.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   933
     b shortAt:3 put:-2.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   934
     b shortAt:5 put:0.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   935
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   936
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   937
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   938
    "Modified: / 01-07-1996 / 21:12:07 / cg"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   939
    "Created: / 05-03-1998 / 11:02:05 / stefan"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   940
    "Modified (comment): / 04-08-2017 / 11:16:46 / cg"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   941
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   942
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   943
shortAt:index put:value bigEndian:bigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   944
    "set the 2-bytes starting at index from the signed Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   945
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   946
     The stored value must be in the range -32768 .. +32676.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   947
     The value is stored in the byteorder given by bigEndian.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   948
     This may be worth a primitive."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   949
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   950
    ^ self signedInt16At:index put:value MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   951
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   952
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   953
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   954
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   955
     b shortAt:1 put:1 bigEndian:true.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   956
     b shortAt:3 put:1 bigEndian:false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   957
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   958
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   959
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   960
    "Modified: / 1.7.1996 / 21:12:07 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   961
    "Created: / 5.3.1998 / 11:02:05 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   962
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   963
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   964
signedDoubleWordAt:index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   965
    "return the 4-bytes starting at index as a signed Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   966
     The index is a smalltalk index (i.e. 1-based).
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   967
     The value is retrieved in the machine's natural byte order.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   968
     This may be worth a primitive."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   969
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   970
    ^ self signedInt32At:index MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   971
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   972
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   973
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   974
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   975
     b doubleWordAt:1 put:16rFFFFFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   976
     (b signedDoubleWordAt:1)
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
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   980
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   981
     b signedDoubleWordAt:1 put:-1.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   982
     (b doubleWordAt:1)
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   983
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   984
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   985
    "Modified: / 01-07-1996 / 21:11:28 / cg"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
   986
    "Modified (comment): / 04-08-2017 / 11:16:52 / cg"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   987
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   988
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   989
signedDoubleWordAt:index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   990
    "return the 4-bytes starting at index as a (signed) Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   991
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   992
     The value is retrieved MSB-first, if the msb-arg is true;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   993
     LSB-first otherwise."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   994
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   995
    ^ self signedInt32At:index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   996
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   997
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   998
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   999
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1000
     b := ByteArray withAll:#(1 2 3 4).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1001
     (b signedDoubleWordAt:1 MSB:true) printStringRadix:16.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1002
     (b signedDoubleWordAt:1 MSB:false) printStringRadix:16
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1003
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1004
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1005
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1006
signedDoubleWordAt:index put:value
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1007
    "set the 4-bytes starting at index from the signed Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1008
     The index is a smalltalk index (i.e. 1-based).
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1009
     The value is stored in the machine's natural byte order.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1010
     This may be worth a primitive."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1011
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1012
    ^ self signedInt32At:index put:value MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1013
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|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1016
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1017
     b signedDoubleWordAt:1 put:-1.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1018
     (b doubleWordAt:1) printStringRadix:16
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1019
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1020
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1021
    "Modified: / 01-07-1996 / 21:11:39 / cg"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1022
    "Modified (comment): / 04-08-2017 / 11:16:56 / cg"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1023
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1024
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1025
signedDoubleWordAt:index put:value MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1026
    "set the 4-bytes starting at index from the signed Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1027
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1028
     Depending on msb, the value is stored MSB-first or LSB-first.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1029
     This may be worth a primitive."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1030
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1031
    ^ self signedInt32At:index put:value MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1032
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1033
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1034
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1035
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1036
     b signedDoubleWordAt:1 put:-1.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1037
     (b doubleWordAt:1) printStringRadix:16
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
    "Modified: 1.7.1996 / 21:11:46 / cg"
15087
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1041
!
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1042
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1043
signedLongAt:index
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1044
    "return the 4-bytes starting at index as a signed Integer.
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1045
     The index is a smalltalk index (i.e. 1-based).
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1046
     The value is retrieved in the machine's natural byte order."
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1047
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1048
    ^ self signedInt32At:index
15087
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1049
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1050
    "
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1051
     |b|
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1052
     b := ByteArray new:4.
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1053
     b unsignedLongAt:1 put:16rFFFFFFFF.
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1054
     b signedLongAt:1
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1055
    "
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
    "Modified: 1.7.1996 / 21:14:38 / cg"
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1058
!
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1059
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1060
signedLongAt:index put:newValue
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1061
    "store a 4-bytes signed value starting at index.
15087
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1062
     The index is a smalltalk index (i.e. 1-based).
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1063
     The value is in the machine's natural byte order."
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1064
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1065
    ^ self signedInt32At:index put:newValue
15087
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1066
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1067
    "
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1068
     |b|
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1069
     b := ByteArray new:4.
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1070
     b signedLongAt:1 put:-1.
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1071
     b unsignedLongAt:1
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1072
    "
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
    "Modified: 1.7.1996 / 21:14:38 / cg"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1075
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1076
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1077
signedWordAt:index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1078
    "return the 2-bytes starting at index as a signed Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1079
     The index is a smalltalk index (i.e. 1-based).
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1080
     The value is retrieved in the machine's natural byte order.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1081
     This may be worth a primitive."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1082
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1083
    ^ (self unsignedInt16At:index MSB:IsBigEndian) signExtendedShortValue
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1084
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1085
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1086
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1087
     b := ByteArray new:2.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1088
     b wordAt:1 put:16rFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1089
     b signedWordAt:1
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1090
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1091
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1092
    "Modified: / 01-07-1996 / 21:14:38 / cg"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1093
    "Modified (comment): / 04-08-2017 / 11:17:02 / cg"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1094
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1095
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1096
signedWordAt:index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1097
    "return the 2-bytes starting at index as a signed Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1098
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1099
     The value is retrieved MSB-first if the msb-arg is true,
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1100
     LSB-first otherwise.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1101
     This may be worth a primitive."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1102
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1103
    ^ (self unsignedInt16At:index MSB:msb) signExtendedShortValue
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1104
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1105
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1106
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1107
     b := ByteArray new:2.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1108
     b wordAt:1 put:16r0080.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1109
     b signedWordAt:1 MSB:true.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1110
     b signedWordAt:1 MSB:false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1111
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1112
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1113
    "Modified: 1.7.1996 / 21:15:57 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1114
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1115
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1116
signedWordAt:byteIndex put:anInteger
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1117
    "set the 2-bytes starting at index from the signed Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1118
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1119
     The stored value must be in the range -32768 .. +32676.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1120
     The value is stored in the machine's natural byteorder."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1121
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1122
    ^ self signedInt16At:byteIndex put:anInteger MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1123
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1124
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1125
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1126
     b := ByteArray new:6.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1127
     b shortAt:1 put:-1.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1128
     b shortAt:3 put:-2.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1129
     b shortAt:5 put:0.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1130
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1131
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1132
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1133
    "Modified: / 1.7.1996 / 21:12:07 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1134
    "Modified: / 5.3.1998 / 11:01:30 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1135
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1136
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1137
signedWordAt:byteIndex put:anInteger MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1138
    "set the 2-bytes starting at index from the signed Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1139
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1140
     The stored value must be in the range -32768 .. +32676.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1141
     The value is stored MSB-first, if the msb-arg is true;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1142
     LSB-first otherwise."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1143
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1144
    ^ self signedInt16At:byteIndex put:anInteger MSB:msb
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1145
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1146
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1147
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1148
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1149
     b signedWordAt:1 put:-1.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1150
     b signedWordAt:3 put:-2.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1151
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1152
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1153
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1154
    "Modified: 1.7.1996 / 21:12:13 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1155
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1156
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1157
unsignedLongAt:index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1158
    "return the 4-bytes starting at index as an (unsigned) Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1159
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1160
     The value is retrieved in the machine's natural byte order.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1161
     Subclasses may redefine this for better performance.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1162
     Same as doubleWordAt: for protocol completeness"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1163
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1164
    ^ self unsignedInt32At:index MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1165
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1166
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1167
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1168
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1169
     b := ByteArray withAll:#(1 2 3 4).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1170
     (b unsignedLongAt:1) printStringRadix:16
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1171
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1172
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1173
    "Created: / 5.3.1998 / 11:56:53 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1174
    "Modified: / 5.3.1998 / 14:58:48 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1175
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1176
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1177
unsignedLongAt:index bigEndian:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1178
    "return the 4-bytes starting at index as an (unsigned) Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1179
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1180
     The value is retrieved MSB-first, if the msb-arg is true;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1181
     LSB-first otherwise.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1182
     Subclasses may redefine this for better performance.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1183
     Same as doubleWordAt:MSB: for protocol completeness"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1184
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1185
    ^ self unsignedInt32At:index MSB:msb
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
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1189
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1190
     b := ByteArray withAll:#(1 2 3 4).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1191
     (b unsignedLongAt:1 bigEndian:true) printStringRadix:16.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1192
     (b unsignedLongAt:1 bigEndian:false) printStringRadix:16
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1193
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1194
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1195
    "Modified: / 21.1.1998 / 17:42:30 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1196
    "Created: / 5.3.1998 / 11:46:05 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1197
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1198
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1199
unsignedLongAt:index put:value
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1200
    "set the 4-bytes starting at index from the (unsigned) Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1201
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1202
     The value should be in the range 0 to 16rFFFFFFFF
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1203
     (for negative values, the stored value is not defined).
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1204
     The value is stored in the machine's natural byte order.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1205
     Subclasses may redefine this for better performance.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1206
     Same as doubleWordAt:put: for protocol completeness"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1207
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1208
    ^ self unsignedInt32At:index put:value MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1209
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1210
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1211
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1212
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1213
     b unsignedLongAt:1 put:16r04030201.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1214
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1215
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1216
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1217
    "Created: / 05-03-1998 / 11:57:44 / stefan"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1218
    "Modified: / 05-03-1998 / 14:58:59 / stefan"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1219
    "Modified (comment): / 04-08-2017 / 11:17:11 / cg"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1220
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1221
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1222
unsignedLongAt:index put:aNumber bigEndian:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1223
    "set the 4-bytes starting at index from the (unsigned) Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1224
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1225
     The value must be in the range 0 to 16rFFFFFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1226
     The value is stored MSB-first if msb is true; LSB-first otherwise.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1227
     Subclasses may redefine this for better performance.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1228
     Same as doubleWordAt:put:MSB: for protocol completeness"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1229
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1230
    ^ self unsignedInt32At:index put:aNumber MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1231
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1232
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1233
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1234
     b := ByteArray new:8.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1235
     b unsignedLongAt:1 put:16r04030201 bigEndian:true.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1236
     (b unsignedLongAt:1 bigEndian:false) printStringRadix:16
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1237
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1238
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1239
    "Modified: / 21.1.1998 / 17:43:34 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1240
    "Created: / 5.3.1998 / 11:43:53 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1241
    "Modified: / 5.3.1998 / 11:47:30 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1242
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1243
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1244
unsignedLongLongAt:index bigEndian:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1245
    "return the 8-bytes starting at index as an (unsigned) Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1246
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1247
     Depending on msb, the value is retrieved MSB or LSB-first."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1248
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1249
    ^ self unsignedInt64At:index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1250
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1251
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1252
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1253
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1254
     b := ByteArray withAll:#(1 2 3 4 5 6 7 8).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1255
     (b unsignedLongLongAt:1 bigEndian:false) printStringRadix:16
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1256
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1257
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1258
    "Modified: / 5.11.1996 / 14:06:21 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1259
    "Modified: / 5.3.1998 / 14:04:44 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1260
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1261
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1262
unsignedLongLongAt:index put:anInteger
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1263
    "set the 8-bytes starting at index from the (unsigned) Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1264
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1265
     The value must be in the range 0 to 16rFFFFFFFFFFFFFFFF.
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1266
     The value is stored in the machine's natural byte order."
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1267
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1268
    ^ self unsignedInt64At:index put:anInteger MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1269
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1270
    "Created: / 05-03-1998 / 14:44:00 / stefan"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1271
    "Modified (comment): / 04-08-2017 / 11:17:23 / cg"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1272
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1273
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1274
unsignedLongLongAt:index put:anInteger bigEndian:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1275
    "set the 8-bytes starting at index from the (unsigned) Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1276
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1277
     The value must be in the range 0 to 16rFFFFFFFFFFFFFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1278
     Depending on msb, the value is stored MSB-first or LSB-first."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1279
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1280
    ^ self unsignedInt64At:index put:anInteger MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1281
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1282
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1283
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1284
     b := ByteArray new:8.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1285
     b unsignedLongLongAt:1 put:16r0807060504030201 bigEndian:false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1286
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1287
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1288
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1289
    "Created: / 5.3.1998 / 14:06:02 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1290
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1291
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1292
unsignedShortAt:index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1293
    "return the 2-bytes starting at index as an (unsigned) Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1294
     The index is a smalltalk index (i.e. 1-based).
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1295
     The value is retrieved in the machine's natural byte order
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1296
     Subclasses may redefine this for better performance.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1297
     This is the ST80 equivalent of #wordAt:"
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
    ^ self unsignedInt16At:index MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1301
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1302
    "Created: / 05-03-1998 / 11:38:25 / stefan"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1303
    "Modified: / 05-03-1998 / 14:59:25 / stefan"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1304
    "Modified (comment): / 04-08-2017 / 11:17:28 / cg"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1305
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1306
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1307
unsignedShortAt:index bigEndian:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1308
    "return the 2-bytes starting at index as an (unsigned) Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1309
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1310
     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
  1311
     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
  1312
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1313
    ^ self unsignedInt16At:index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1314
21437
9503363c3f3f #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 21380
diff changeset
  1315
    "Modified: / 21-01-1998 / 17:46:07 / cg"
9503363c3f3f #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 21380
diff changeset
  1316
    "Created: / 05-03-1998 / 11:49:29 / stefan"
9503363c3f3f #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 21380
diff changeset
  1317
    "Modified (comment): / 13-02-2017 / 20:34:05 / cg"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1318
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1319
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1320
unsignedShortAt:index put:value
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1321
    "set the 2-bytes starting at index from the (unsigned) Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1322
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1323
     The stored value must be in the range 0 .. 16rFFFF.
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1324
     The value is stored in the machine's natural byteorder."
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1325
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1326
    ^ self unsignedInt16At:index put:value
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1327
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1328
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1329
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1330
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1331
     b unsignedShortAt:1 put:16r0102.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1332
     b unsignedShortAt:3 put:16r0304.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1333
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1334
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1335
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1336
    "Created: / 05-03-1998 / 11:54:52 / stefan"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1337
    "Modified: / 05-03-1998 / 14:59:38 / stefan"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1338
    "Modified (comment): / 04-08-2017 / 11:17:31 / cg"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1339
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1340
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1341
unsignedShortAt:index put:value bigEndian:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1342
    "set the 2-bytes starting at index from the (unsigned) Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1343
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1344
     The stored value must be in the range 0 .. 16rFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1345
     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
  1346
     lower index) if msb is false, MSB-first otherwise"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1347
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1348
    ^ self unsignedInt16At:index put:value MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1350
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1351
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1352
     b := ByteArray new:8.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1353
     b unsignedShortAt:1 put:16r0102 bigEndian:false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1354
     b unsignedShortAt:3 put:16r0304 bigEndian:false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1355
     b unsignedShortAt:5 put:16r0102 bigEndian:true.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1356
     b unsignedShortAt:7 put:16r0304 bigEndian:true.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1357
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1358
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1359
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1360
    "Modified: / 21.1.1998 / 17:48:15 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1361
    "Modified: / 5.3.1998 / 11:52:28 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1362
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1363
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1364
wordAt:index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1365
    "return the 2-bytes starting at index as an (unsigned) Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1366
     The index is a smalltalk index (i.e. 1-based).
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1367
     The value is retrieved in the machine's natural byte order
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1368
     Subclasses may redefine this for better performance."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1369
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1370
    ^ self unsignedInt16At:index MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1371
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1372
    "Modified: / 05-03-1998 / 14:59:51 / stefan"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1373
    "Modified (comment): / 04-08-2017 / 11:17:35 / cg"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1374
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1375
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1376
wordAt:index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1377
    "return the 2-bytes starting at index as an (unsigned) Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1378
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1379
     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
  1380
     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
  1381
     Notice:
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1382
	the index is a byte index; thus, this allows for unaligned access to
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1383
	words on any boundary.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1384
     Question: should it be retrieve signed values ? (see ByteArray>>signedWordAt:)"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1385
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1386
    ^ self unsignedInt16At:index MSB:msb
21437
9503363c3f3f #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 21380
diff changeset
  1387
9503363c3f3f #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 21380
diff changeset
  1388
    "Modified (comment): / 13-02-2017 / 20:34:09 / cg"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1389
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1390
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1391
wordAt:index put:value
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1392
    "set the 2-bytes starting at index from the (unsigned) Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1393
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1394
     The stored value must be in the range 0 .. 16rFFFF.
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1395
     The value is stored in the machine's natural byteorder.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1396
     Question: should it accept signed values ? (see ByteArray>>signedWordAt:put:)"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1397
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1398
    ^ self unsignedInt16At:index put:value MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1399
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1400
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1401
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1402
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1403
     b wordAt:1 put:16r0102.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1404
     b wordAt:3 put:16r0304.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1405
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1406
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1407
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1408
    "Modified: / 05-03-1998 / 15:00:03 / stefan"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1409
    "Modified (comment): / 04-08-2017 / 11:17:39 / cg"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1410
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1411
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1412
wordAt:index put:value MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1413
    "set the 2-bytes starting at index from the (unsigned) Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1414
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1415
     The stored value must be in the range 0 .. 16rFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1416
     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
  1417
     lower index) if msb is false, MSB-first otherwise.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1418
     Question: should it accept signed values ? (see ByteArray>>signedWordAt:put:)"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1419
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1420
    ^ self unsignedInt16At:index put:value MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1421
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1422
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1423
     b := ByteArray new:8.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1424
     b wordAt:1 put:16r0102 MSB:false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1425
     b wordAt:3 put:16r0304 MSB:false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1426
     b wordAt:5 put:16r0102 MSB:true.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1427
     b wordAt:7 put:16r0304 MSB:true.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1428
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1429
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1430
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1431
    "Modified: / 21.1.1998 / 17:48:15 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1432
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1433
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1434
wordAtWordIndex:int16Index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1435
    "return the unsigned short (uint16) at index, anInteger.
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1436
     Fetching in the machine's natural byte order.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1437
     Indices are 1-based and scaled as appropriate to allow
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1438
     accessing the memory as an array of word entries.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1439
     (i.e. indices are 1, 2, ...)"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1440
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1441
    ^ self unsignedInt16At:int16Index MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1442
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1443
    "Created: / 21-01-1998 / 17:48:26 / cg"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1444
    "Modified: / 05-03-1998 / 15:00:16 / stefan"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1445
    "Modified (comment): / 04-08-2017 / 11:17:43 / cg"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1446
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1447
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1448
wordAtWordIndex:int16Index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1449
    "return the unsigned short (uint16) at index, anInteger.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1450
     Fetching is MSB if msb is true, LSB otherwise.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1451
     Indices are 1-based and scaled as appropriate to allow
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1452
     accessing the memory as an array of word entries.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1453
     (i.e. indices are 1, 2, ...)"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1454
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1455
    ^ self unsignedInt16At:((int16Index - 1) * 2 + 1) MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1456
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1457
    "Created: / 21.1.1998 / 17:48:30 / 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 put:anInteger
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1461
    "set the unsigned short (uint16) at index, anInteger.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1462
     Storing in the machine's natural byte order.
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 put:anInteger MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1468
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1469
    "Created: / 21.1.1998 / 17:48:34 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1470
    "Modified: / 5.3.1998 / 15:00:27 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1471
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1472
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1473
wordAtWordIndex:int16Index put:anInteger MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1474
    "set the short at index, anInteger.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1475
     Storing is MSB if msb is true, LSB otherwise.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1476
     Indices are 1-based and scaled as appropriate to allow
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1477
     accessing the memory as an array of word entries.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1478
     (i.e. indices are 1, 2, ...)"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1479
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1480
    ^ self unsignedInt16At:((int16Index - 1) * 2 + 1) put:anInteger MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1481
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1482
    "Created: / 21.1.1998 / 17:48:38 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1483
! !
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1484
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1485
!UninterpretedBytes methodsFor:'Compatibility-Squeak'!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1486
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1487
copyFromByteArray:aByteArray
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1488
    "copy as much as possible from aByteArray"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1489
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1490
    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
  1491
! !
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  1492
9185
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1493
!UninterpretedBytes methodsFor:'Compatibility-V''Age'!
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1494
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1495
uint32At:zeroBasedIndex
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1496
    "return the 4-bytes starting at index as (unsigned) Integer.
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1497
     WARNING: The index is a C index (i.e. 0-based).
19301
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1498
     The value is retrieved in the machine's natural byte order.
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1499
     Similar to unsignedInt32At:, except for the index base"
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1500
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1501
    ^ self unsignedInt32At:zeroBasedIndex+1
9185
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1502
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1503
    "
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1504
     |b|
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1505
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1506
     b := ByteArray withAll:#(0 0 0 0).
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1507
     b uint32At:0 put:16r12345678.
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1508
     b uint32At:0.
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1509
     b
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1510
    "
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1511
!
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1512
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1513
uint32At:zeroBasedIndex put:anInteger
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1514
    "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
  1515
     WARNING: The index is a C index (i.e. 0-based).
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1516
     The value is stored in the machine's natural byte order.
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1517
     Similar to unsignedInt32At:put:, except for the index base"
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1518
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1519
    ^ self unsignedInt32At:zeroBasedIndex+1 put:anInteger
9185
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
    "
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1522
     |b|
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1523
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1524
     b := ByteArray withAll:#(0 0 0 0).
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1525
     b uint32At:0 put:16r12345678.
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1526
     b
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1527
    "
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1528
! !
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1529
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1530
!UninterpretedBytes methodsFor:'accessing-128bit ints'!
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1531
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1532
signedInt128At:index MSB:msb
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1533
    "return the 16-bytes starting at index as a signed Integer.
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1534
     The index is a smalltalk index (i.e. 1-based).
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1535
     The value is retrieved in the given byte order.
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1536
     This may be worth a primitive."
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1537
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1538
    |w|
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1539
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1540
    w := self unsignedInt128At:index MSB:msb.
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1541
    (w > (16r7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF)) ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1542
	^ w - (16r100000000000000000000000000000000)
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1543
    ].
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1544
    ^ w
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1545
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1546
    "
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1547
     |b|
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1548
     b := ByteArray new:16.
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1549
     b unsignedInt128At:1 put:16rFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MSB:true.
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1550
     (b signedInt128At:1 MSB:true)
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1551
    "
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1552
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1553
    "Created: / 04-08-2017 / 11:27:31 / cg"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1554
!
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1555
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1556
signedInt128At:byteIndex put:anInteger MSB:msb
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1557
    "store a signed 128bit integer.
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1558
     The index is a smalltalk index (i.e. 1-based)."
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1559
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1560
    |v|
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1561
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1562
    v := anInteger.
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1563
    anInteger < 0 ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1564
	v := v + 16r100000000000000000000000000000000
22161
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
    self unsignedInt128At:byteIndex put:v MSB:msb.
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1567
    ^ anInteger
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1568
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1569
    "
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1570
     |b|
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1571
     b := ByteArray new:16.
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1572
     b signedInt128At:1 put:-1 MSB:true.
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1573
     (b unsignedInt128At:1 MSB:true)
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1574
    "
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1575
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1576
    "Created: / 04-08-2017 / 11:08:59 / cg"
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
unsignedInt128At:byteIndex MSB:msb
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1580
    "return the 16-bytes starting at index as an unsigned integer.
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1581
     The index is a smalltalk index (i.e. 1-based).
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1582
     Depending on msb, the value is retrieved MSB or LSB-first."
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1583
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1584
    |l
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1585
     bIdx  "{ Class: SmallInteger }"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1586
     delta "{ Class: SmallInteger }"|
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
    l := LargeInteger basicNew numberOfDigits:16.
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1589
    msb ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1590
	bIdx := byteIndex + 15.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1591
	delta := -1
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1592
    ] ifFalse:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1593
	bIdx := byteIndex.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1594
	delta := 1
22161
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
    1 to:16 do:[:i |
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1597
	l digitAt:i put:(self byteAt:bIdx).
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1598
	bIdx := bIdx + delta
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1599
    ].
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1600
    ^ l compressed
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
    "
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1603
     |b|
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
     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
  1606
     (b unsignedInt128At:1 MSB:false) printStringRadix:16
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1607
    "
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1608
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1609
    "Created: / 04-08-2017 / 11:12:22 / cg"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1610
!
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1611
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1612
unsignedInt128At:byteIndex put:anInteger MSB:msb
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1613
    "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
  1614
     The index is a smalltalk index (i.e. 1-based).
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1615
     The value must be in the range 0 to 16rFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF.
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1616
     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
  1617
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1618
    |bIdx  "{ Class: SmallInteger }"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1619
     delta "{ Class: SmallInteger }"|
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1620
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1621
    ((anInteger < 0)
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1622
     or:[anInteger > 16rFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF]) ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1623
	^ self elementBoundsError:anInteger
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1624
    ].
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1625
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1626
    msb ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1627
	bIdx := byteIndex + 15.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1628
	delta := -1
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1629
    ] ifFalse:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1630
	bIdx := byteIndex.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1631
	delta := 1
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1632
    ].
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1633
    1 to:16 do:[:i |
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1634
	self byteAt:bIdx put:(anInteger digitAt:i).
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1635
	bIdx := bIdx + delta.
22161
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
    ^ anInteger
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1638
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1639
    "
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1640
     |b|
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1641
     b := ByteArray new:16.
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1642
     b unsignedInt128At:1 put:16r100F0E0D0C0B0A090807060504030201 MSB:false.
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1643
     b inspect
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1644
    "
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1645
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1646
    "Created: / 04-08-2017 / 11:11:02 / cg"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1647
! !
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1648
16796
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1649
!UninterpretedBytes methodsFor:'accessing-arbitrary-long ints'!
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1650
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1651
nativeIntAt:index
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1652
    "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
  1653
     starting at index as a signed Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1654
     The index is a smalltalk index (i.e. 1-based).
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1655
     The value is retrieved in the machine's natural byte order,
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1656
     therefore, this should only be used for byte-data which is
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1657
     only used inside this machine."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1658
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1659
    |w|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1660
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1661
%{
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1662
    /*
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1663
     * handle the most common cases fast ...
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1664
     */
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1665
    if (__isSmallInteger(index)) {
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1666
	unsigned char *cp;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1667
	INT sz;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1668
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1669
	__fetchBytePointerAndSize__(self, &cp, &sz);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1670
	if (cp) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1671
	    unsigned INT idx = ((unsigned INT)__intVal(index)) - 1;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1672
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1673
	    if ((idx+(sizeof(INT)-1)) < sz) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1674
		cp += idx;
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1675
#if defined(__i386__)
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1676
		/*
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1677
		 * aligned or not, we don't care (i386 can do both)
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1678
		 */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1679
		{
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1680
		    INT iVal = ((INT *)cp)[0];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1681
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1682
		    RETURN (__MKINT(iVal));
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1683
		}
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1684
#else
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1685
		/*
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1686
		 * aligned
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1687
		 */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1688
		if (((INT)cp & (sizeof(INT)-1)) == 0) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1689
		    INT iVal = ((INT *)cp)[0];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1690
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1691
		    RETURN (__MKINT(iVal));
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1692
		}
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1693
#endif
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1694
	    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1695
	}
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1696
    }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1697
%}.
19402
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1698
    SmallInteger maxBytes == 8 ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1699
	^ self signedInt64At:index
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1700
    ].
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1701
    ^ self signedInt32At:index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1702
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1703
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1704
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1705
     b := ByteArray new:8.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1706
     b nativeIntAt:1 put:SmallInteger maxVal.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1707
     b nativeIntAt:1
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1708
    "
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1709
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1710
    "Modified (comment): / 04-08-2017 / 11:18:01 / cg"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1711
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1712
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1713
nativeIntAt:index put:value
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1714
    "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
  1715
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1716
     The value is stored in the machine's natural byte order."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1717
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1718
%{  /* NOCONTEXT */
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1719
    /*
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1720
     * handle the most common cases fast ...
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1721
     */
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1722
    if (__isSmallInteger(index)) {
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1723
	unsigned char *cp;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1724
	INT sz;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1725
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1726
	__fetchBytePointerAndSize__(self, &cp, &sz);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1727
	if (cp) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1728
	    unsigned INT idx = ((unsigned INT)__intVal(index)) - 1;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1729
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1730
	    if ((idx+(sizeof(INT)-1)) < sz) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1731
		cp += idx;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1732
		/*
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1733
		 * aligned
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1734
		 */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1735
		if (((INT)cp & (sizeof(INT)-1)) == 0) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1736
		    INT __v;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1737
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1738
		    if (__isSmallInteger(value)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1739
			// how about a range check?
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1740
			((INT *)cp)[0] = (INT)(__intVal(value));
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1741
			RETURN (value);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1742
		    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1743
		    if ((__v = __signedLongIntVal(value)) != 0) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1744
			// how about a range check?
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1745
			((INT *)cp)[0] = (INT)(__v);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1746
			RETURN (value);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1747
		    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1748
		}
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1749
	    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1750
	}
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1751
    }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1752
%}.
19402
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1753
    SmallInteger maxBytes == 8 ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1754
	^ self signedInt64At:index put:value MSB:IsBigEndian
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1755
    ].
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1756
    ^ self signedInt32At:index put:value MSB:IsBigEndian
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1757
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1758
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1759
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1760
     b := ByteArray new:8.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1761
     b nativeIntAt:1 put:SmallInteger maxVal.
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1762
     (b nativeIntAt:1)
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1763
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1764
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1765
19402
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1766
signedIntegerAt:index length:len bigEndian:bigEndian
19197
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1767
    "return the n-byte signed integer starting at index.
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1768
     With n=1, this returns the single signed byte's value,
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1769
     n=2, a signed short, n=4 a signed int etc.
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1770
     Useful to extract arbitrary long integers"
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1771
19402
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1772
    |val highByte
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1773
     iIndex "{ Class:SmallInteger }"
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1774
     last "{ Class:SmallInteger }"|
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1775
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1776
    iIndex := index.
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1777
    last := iIndex + len - 1.
19197
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1778
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1779
    val := 0.
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1780
    bigEndian ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1781
	highByte := self at:iIndex.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1782
	iIndex to:last do:[:i |
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1783
	    val := (val<<8) + (self byteAt:i)
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1784
	]
19197
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1785
    ] ifFalse:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1786
	highByte := self at:last.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1787
	last to:iIndex by:-1 do:[:i |
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1788
	    val := (val<<8) + (self byteAt:i)
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1789
	]
19197
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1790
    ].
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1791
    (highByte bitTest:16r80) ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1792
	^ val - (1 bitShift:(len*8))
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1793
    ].
19197
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1794
    ^ val
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1795
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1796
    "
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1797
     |b|
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1798
     b := #[ 16r01 16rFF 16r00 16r04 16r05 ].
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1799
     (b signedIntegerAt:2 length:2 bigEndian:false). ' -> 255 (00FF) '.
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1800
     (b signedIntegerAt:2 length:2 bigEndian:true).  ' -> -256 (FF00) '.
19197
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1801
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1802
     b := #[ 16r01 16r00 16rFF 16r04 16r05 ].
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1803
     (b signedIntegerAt:2 length:2 bigEndian:false). ' -> -256 (FF00) '.
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1804
     (b signedIntegerAt:2 length:2 bigEndian:true).  ' -> 255 (00FF) '.
19197
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1805
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1806
     b := #[ 16r01 16r7F 16r00 16r04 16r05 ].
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1807
     (b signedIntegerAt:2 length:2 bigEndian:false). ' -> 127 (007F) '.
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1808
     (b signedIntegerAt:2 length:2 bigEndian:true).  ' -> 32512 (7F00) '.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1809
    "
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1810
19197
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1811
    "
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1812
     |b|
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1813
     b := #[ 16r01 16r02 16r03 16r04 16r05 ].
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1814
     (b signedIntegerAt:2 length:4 bigEndian:false).
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1815
     (b signedIntegerAt:2 length:4 bigEndian:true).
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1816
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1817
     b := #[ 16r01 16r82 16r03 16r04 16r05 ].
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1818
     (b signedIntegerAt:2 length:4 bigEndian:false).
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1819
     (b signedIntegerAt:2 length:4 bigEndian:true).
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1820
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1821
     b := #[ 16r01 16r82 16r03 16r04 16r85 ].
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1822
     (b signedIntegerAt:2 length:4 bigEndian:false).
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1823
     (b signedIntegerAt:2 length:4 bigEndian:true).
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1824
    "
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1825
!
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1826
19402
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1827
unsignedIntegerAt:index length:len bigEndian:bigEndian
16796
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1828
    "return the n-byte unsigned integer starting at index.
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1829
     With n=1, this returns the single byte's value,
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1830
     n=2, an unsigned short, n=4 an unsigned int32 etc.
16796
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1831
     Useful to extract arbitrary long integers"
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1832
19402
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1833
    |val
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1834
     iIndex "{ Class:SmallInteger }"
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1835
     last "{ Class:SmallInteger }"|
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1836
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1837
    iIndex := index.
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1838
    last := iIndex + len - 1.
16796
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1839
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1840
    val := 0.
18346
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
  1841
    bigEndian ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1842
	iIndex to:last do:[:i |
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1843
	    val := (val<<8) + (self byteAt:i)
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1844
	]
18346
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
  1845
    ] ifFalse:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1846
	last to:iIndex by:-1 do:[:i |
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1847
	    val := (val<<8) + (self byteAt:i)
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1848
	]
16796
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1849
    ].
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1850
    ^ val
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1851
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1852
    "
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1853
     |b|
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1854
     b := #[ 16r01 16r02 16r03 16r04 16r05 ].
18346
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
  1855
     (b unsignedIntegerAt:2 length:4 bigEndian:false).
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
  1856
     (b unsignedIntegerAt:2 length:4 bigEndian:true).
16796
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1857
    "
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1858
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1859
    "Modified (comment): / 04-08-2017 / 11:14:21 / cg"
19301
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1860
!
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1861
19402
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1862
unsignedIntegerAt:index put:newValue length:len bigEndian:bigEndian
19301
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1863
    "store the n-byte unsigned integer starting at index.
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1864
     With n=1, this stores a single byte's value,
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1865
     n=2, an unsigned short, n=4 an unsigned int32 etc.
19301
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1866
     Useful to replace arbitrary long integers"
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1867
19402
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1868
    |val
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1869
     iIndex "{ Class:SmallInteger }"
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1870
     last "{ Class:SmallInteger }"|
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1871
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1872
    iIndex := index.
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1873
    last := iIndex + len - 1.
19301
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1874
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1875
    val := newValue.
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1876
    bigEndian ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1877
	iIndex to:last do:[:i |
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1878
	    self byteAt:i put:(val bitAnd:16rFF).
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1879
	    val := val bitShift:-8.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1880
	]
19301
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1881
    ] ifFalse:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1882
	last to:iIndex by:-1 do:[:i |
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1883
	    self byteAt:i put:(val bitAnd:16rFF).
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1884
	    val := val bitShift:-8.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1885
	]
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
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1888
    "
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1889
     |b|
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1890
     b := #[ 16r01 16r02 16r03 16r04 16r05 ] copy.
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1891
     (b unsignedIntegerAt:2 put:16r11223344 length:3 bigEndian:false). b.
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1892
     (b unsignedIntegerAt:2 put:16r11223344 length:3 bigEndian:true). b.
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1893
    "
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1894
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  1895
    "Modified (comment): / 04-08-2017 / 11:14:32 / cg"
16796
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1896
! !
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1897
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1898
!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
  1899
4422
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1900
bcdByteAt:index
13724
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  1901
    "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
  1902
     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
  1903
     (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
  1904
4425
a10011c1b6eb bcd support - again.
Claus Gittinger <cg@exept.de>
parents: 4422
diff changeset
  1905
    ^ (self byteAt:index) decodeFromBCD
4422
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1906
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1907
    "
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1908
     #[ 16r55 ] bcdByteAt:1
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1909
     #[ 16r99 ] bcdByteAt:1
19352
3c5b0c74be2e #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19351
diff changeset
  1910
     #[ 16rAA ] bcdByteAt:1
4422
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1911
    "
13724
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  1912
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  1913
    "Modified (comment): / 26-09-2011 / 11:57:33 / cg"
4422
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1914
!
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1915
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1916
bcdByteAt:index put:aNumber
13724
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  1917
    "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
  1918
     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
  1919
     (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
  1920
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1921
    (aNumber between:0 and:99) ifFalse:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1922
	self elementBoundsError:aNumber.
4422
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1923
    ].
4425
a10011c1b6eb bcd support - again.
Claus Gittinger <cg@exept.de>
parents: 4422
diff changeset
  1924
    ^ self byteAt:index put:aNumber encodeAsBCD
4422
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1925
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1926
    "
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1927
     (((ByteArray new:1) bcdByteAt:1 put:55; yourself) at:1) hexPrintString
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1928
     (((ByteArray new:1) bcdByteAt:1 put:99; yourself) at:1) hexPrintString
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1929
     (((ByteArray new:1) bcdByteAt:1 put:100; yourself) at:1) hexPrintString
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1930
     (((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
  1931
    "
13724
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  1932
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  1933
    "Modified (comment): / 26-09-2011 / 11:57:36 / cg"
21377
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  1934
    "Modified: / 07-02-2017 / 20:12:04 / stefan"
4422
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1935
!
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1936
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1937
byteAt:byteIndex
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1938
    "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
  1939
     The index is a smalltalk index (i.e. 1-based)."
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1940
21377
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  1941
%{ /* NOCONTEXT */
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1942
    if (__isSmallInteger(byteIndex)) {
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1943
	unsigned char *cp;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1944
	INT sz;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1945
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1946
	__fetchBytePointerAndSize__(self, &cp, &sz);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1947
	if (cp) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1948
	    unsigned INT idx = ((unsigned INT)__intVal(byteIndex)) - 1;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1949
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1950
	    if (idx < sz) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1951
		unsigned char ch = cp[idx] & 0xFF;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1952
		RETURN (__mkSmallInteger( ch ));
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1953
	    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1954
	}
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1955
    }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1956
%}.
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1957
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1958
    ^ self at:byteIndex
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1959
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1960
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1961
     |b|
21377
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  1962
     b := String new:3.
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  1963
     b byteAt:1 put:16rFF.
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  1964
     b byteAt:2 put:16r7F.
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  1965
     b byteAt:3 put:16r80.
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1966
     b byteAt:1.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1967
     b byteAt:2.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1968
     b byteAt:3.
21377
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  1969
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  1970
     |b|
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  1971
     b := ExternalBytes new:3.
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  1972
     b byteAt:1 put:16rFF.
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  1973
     b byteAt:2 put:16r7F.
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  1974
     b byteAt:3 put:16r80.
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1975
     b byteAt:1.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1976
     b byteAt:2.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1977
     b byteAt:3.
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1978
    "
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1979
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1980
    "Modified: / 01-07-1996 / 21:13:53 / cg"
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1981
    "Modified (comment): / 26-09-2011 / 11:57:14 / cg"
21377
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  1982
    "Modified (comment): / 07-02-2017 / 19:49:13 / stefan"
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1983
!
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1984
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1985
byteAt:byteIndex put:anInteger
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1986
    "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
  1987
     The index is a smalltalk index (i.e. 1-based)."
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1988
21377
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  1989
%{ /* NOCONTEXT */
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1990
    if (__isSmallInteger(byteIndex) && __isSmallInteger(anInteger)) {
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1991
	unsigned char *cp;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1992
	INT sz;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1993
	INT val = __intVal(anInteger);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1994
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1995
	if ( ((unsigned INT)val) <= 0xFF ) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1996
	    __fetchBytePointerAndSize__(self, &cp, &sz);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1997
	    if (cp) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1998
		unsigned INT idx = ((unsigned INT)__intVal(byteIndex)) - 1;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  1999
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2000
		if (idx < sz) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2001
		    cp[idx] = val & 0xFF;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2002
		    RETURN (anInteger);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2003
		}
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2004
	    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2005
	}
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2006
    }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2007
%}.
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2008
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2009
    ^ self at:byteIndex put:anInteger
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
     |b|
21377
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  2013
     b := String new:3.
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2014
     b byteAt:1 put:16rFF.
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2015
     b byteAt:2 put:16r7F.
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2016
     b byteAt:3 put:16r80.
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2017
     b byteAt:1.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2018
     b byteAt:2.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2019
     b byteAt:3.
21377
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  2020
    "
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  2021
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  2022
    "Modified (comment): / 07-02-2017 / 19:32:26 / stefan"
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2023
!
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2024
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2025
signedByteAt:byteIndex
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2026
    "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
  2027
     The index is a smalltalk index (i.e. 1-based).
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2028
     This may be worth a primitive."
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2029
21377
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  2030
%{ /* NOCONTEXT */
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2031
    /*
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2032
     * handle the most common cases fast ...
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2033
     */
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2034
    if (__isSmallInteger(byteIndex)) {
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2035
	unsigned char *cp;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2036
	INT sz;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2037
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2038
	__fetchBytePointerAndSize__(self, &cp, &sz);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2039
	if (cp) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2040
	    unsigned INT idx = ((unsigned INT)__intVal(byteIndex)) - 1;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2041
	    char ch;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2042
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2043
	    if (idx < sz) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2044
		cp += idx;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2045
		ch = cp[0];
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2046
# ifndef HAS_SIGNED_CHAR
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2047
		if ( (unsigned int)ch >= 0x80 ) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2048
		    ch = ch - 0x100;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2049
		}
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2050
#endif
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2051
		RETURN (__mkSmallInteger( ch ));
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2052
	    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2053
	}
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2054
    }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2055
%}.
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2056
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2057
    ^ (self byteAt:byteIndex) signExtendedByteValue
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2058
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2059
    "
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2060
     |b|
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2061
     b := ByteArray new:3.
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2062
     b at:1 put:16rFF.
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2063
     b at:2 put:16r7F.
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2064
     b at:3 put:16r80.
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2065
     b signedByteAt:1.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2066
     b signedByteAt:2.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2067
     b signedByteAt:3.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2068
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2069
13724
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  2070
    "Modified: / 01-07-1996 / 21:13:53 / cg"
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  2071
    "Modified (comment): / 26-09-2011 / 11:57:14 / cg"
21377
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  2072
    "Modified: / 07-02-2017 / 19:25:03 / stefan"
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2073
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2074
21377
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  2075
signedByteAt:byteIndex put:aSignedByteValue
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  2076
    "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
  2077
     The index is a smalltalk index (i.e. 1-based).
21377
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  2078
     Return the signedByteValue argument."
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  2079
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  2080
    |b|
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  2081
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  2082
    b := aSignedByteValue.
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  2083
    b < 0 ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2084
	b := 16r100 + b
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2085
    ].
21377
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  2086
    self byteAt:byteIndex put:b.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2087
    ^ aSignedByteValue
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2088
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2089
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2090
     |b|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2091
     b := ByteArray new:2.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2092
     b signedByteAt:1 put:-1.
21377
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  2093
     b at:1.
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  2094
     b signedByteAt:1.
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  2095
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  2096
     |b|
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  2097
     b := ByteArray new:2.
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  2098
     b signedByteAt:1 put:-1.0.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2099
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2100
13724
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  2101
    "Modified: / 01-07-1996 / 21:12:37 / cg"
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  2102
    "Modified (comment): / 26-09-2011 / 11:57:18 / cg"
21377
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  2103
    "Modified (comment): / 07-02-2017 / 20:03:46 / stefan"
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2104
! !
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2105
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2106
!UninterpretedBytes methodsFor:'accessing-floats & doubles'!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2107
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2108
doubleAt:index
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2109
    "return the 8-bytes starting at index as a Float.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2110
     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
  2111
     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
  2112
     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
  2113
     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
  2114
     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
  2115
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2116
    |newFloat|
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2117
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2118
%{
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2119
    /*
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2120
     * handle the most common cases fast ...
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2121
     */
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2122
    if (__isSmallInteger(index)) {
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2123
	unsigned char *cp;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2124
	INT sz;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2125
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2126
	__fetchBytePointerAndSize__(self, &cp, &sz);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2127
	if (cp) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2128
	    INT idx = __intVal(index) - 1;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2129
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2130
	    if ((idx >= 0) && ((idx+(sizeof(double)-1)) < sz)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2131
		cp += idx;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2132
		/*
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2133
		 * aligned
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2134
		 */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2135
		if (((INT)cp & (sizeof(double)-1)) == 0) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2136
		    double dVal = ((double *)cp)[0];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2137
		    OBJ f;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2138
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2139
		    __qMKFLOAT(f, dVal);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2140
		    RETURN (f);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2141
		}
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2142
	    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2143
	}
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2144
    }
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2145
%}.
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2146
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2147
    newFloat := Float basicNew.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2148
    1 to:8 do:[:destIndex|
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2149
	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
  2150
    ].
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2151
    ^ newFloat.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2152
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2153
    "
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2154
     |b|
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2155
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2156
     b := ByteArray new:20.
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2157
     b doubleAt:1 put:(Float pi).
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2158
     Transcript showCR:b.
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2159
     Transcript showCR:(b doubleAt:1)
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2160
    "
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2161
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2162
3446
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2163
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
  2164
    "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
  2165
     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
  2166
     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
  2167
     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
  2168
     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
  2169
     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
  2170
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2171
    |newFloat|
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2172
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
  2173
    msb == IsBigEndian ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2174
	^ 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
  2175
    ].
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2176
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2177
    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
  2178
    1 to:8 do:[:destIndex|
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2179
	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
  2180
    ].
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2181
    ^ newFloat.
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2182
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2183
    "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
  2184
!
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2185
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2186
doubleAt:index put:aFloat
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2187
    "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
  2188
     starting at index.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2189
     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
  2190
     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
  2191
     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
  2192
     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
  2193
     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
  2194
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2195
    |flt|
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2196
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2197
%{
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2198
    /*
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2199
     * handle the most common cases fast ...
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2200
     */
16320
dcb66fff0a89 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15836
diff changeset
  2201
    if (__isSmallInteger(index)) {
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2202
	unsigned char *cp;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2203
	INT sz;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2204
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2205
	__fetchBytePointerAndSize__(self, &cp, &sz);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2206
	if (cp) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2207
	    INT idx = __intVal(index) - 1;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2208
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2209
	    if ((idx >= 0) && ((idx+(sizeof(double)-1)) < sz)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2210
		cp += idx;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2211
		/*
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2212
		 * aligned
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2213
		 */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2214
		if (((INT)cp & (sizeof(double)-1)) == 0) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2215
		    if (__isFloat(aFloat)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2216
			((double *)cp)[0] = __floatVal(aFloat);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2217
			RETURN (aFloat);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2218
		    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2219
		    if (__isShortFloat(aFloat)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2220
			((double *)cp)[0] = (double)(__shortFloatVal(aFloat));
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2221
			RETURN (aFloat);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2222
		    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2223
		    if (__isSmallInteger(aFloat)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2224
			((double *)cp)[0] = (double)(__intVal(aFloat));
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2225
			RETURN (aFloat);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2226
		    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2227
		}
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2228
	    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2229
	}
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2230
    }
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2231
%}.
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2232
16320
dcb66fff0a89 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15836
diff changeset
  2233
    flt := aFloat asFloat.
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2234
    1 to:8 do:[:srcIndex|
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2235
	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
  2236
    ].
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2237
    ^ aFloat
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2238
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2239
3446
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2240
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
  2241
    "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
  2242
     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
  2243
     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
  2244
     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
  2245
     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
  2246
     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
  2247
     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
  2248
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2249
    |flt|
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2250
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
  2251
    msb == IsBigEndian ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2252
	^ 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
  2253
    ].
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2254
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2255
    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
  2256
    1 to:8 do:[:srcIndex|
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2257
	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
  2258
    ].
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2259
    ^ aFloat
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2260
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2261
    "Created: / 15.5.1998 / 17:22:27 / cg"
3447
Claus Gittinger <cg@exept.de>
parents: 3446
diff changeset
  2262
    "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
  2263
!
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2264
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2265
floatAt:index
3434
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2266
    "return the 4-bytes starting at index as a ShortFloat.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2267
     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
  2268
     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
  2269
     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
  2270
     a float object which keeps an 8-byte double internally.
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2271
     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
  2272
     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
  2273
     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
  2274
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2275
    |newFloat|
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2276
3434
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2277
%{
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2278
    /*
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2279
     * handle the most common cases fast ...
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2280
     */
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2281
    if (__isSmallInteger(index)) {
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2282
	unsigned char *cp;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2283
	INT sz;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2284
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2285
	__fetchBytePointerAndSize__(self, &cp, &sz);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2286
	if (cp) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2287
	    INT idx = __intVal(index) - 1;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2288
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2289
	    if ((idx >= 0) && ((idx+(sizeof(float)-1)) < sz)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2290
		cp += idx;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2291
		/*
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2292
		 * aligned
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2293
		 */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2294
		if (((INT)cp & (sizeof(float)-1)) == 0) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2295
		    float fVal = ((float *)cp)[0];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2296
		    OBJ f;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2297
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2298
		    __qMKSFLOAT(f, fVal);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2299
		    RETURN (f);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2300
		}
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2301
	    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2302
	}
3434
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2303
    }
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2304
%}.
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2305
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2306
    newFloat := ShortFloat basicNew.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2307
    1 to:4 do:[:destIndex|
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2308
	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
  2309
    ].
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2310
    ^ newFloat.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2311
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2312
3446
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2313
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
  2314
    "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
  2315
     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
  2316
     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
  2317
     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
  2318
     a float object which keeps an 8-byte double internally.
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2319
     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
  2320
     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
  2321
     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
  2322
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2323
    |newFloat|
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2324
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
  2325
    msb == IsBigEndian ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2326
	^ 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
  2327
    ].
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2328
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2329
    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
  2330
    1 to:4 do:[:destIndex|
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2331
	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
  2332
    ].
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2333
    ^ newFloat.
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2334
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2335
    "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
  2336
    "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
  2337
!
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2338
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2339
floatAt:index put:aFloat
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2340
    "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
  2341
     starting at index.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2342
     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
  2343
     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
  2344
     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
  2345
     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
  2346
     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
  2347
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2348
    |sflt|
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2349
3434
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2350
%{
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2351
    /*
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2352
     * handle the most common cases fast ...
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2353
     */
16320
dcb66fff0a89 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15836
diff changeset
  2354
    if (__isSmallInteger(index)) {
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2355
	unsigned char *cp;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2356
	INT sz;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2357
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2358
	__fetchBytePointerAndSize__(self, &cp, &sz);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2359
	if (cp) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2360
	    INT idx = __intVal(index) - 1;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2361
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2362
	    if ((idx >= 0) && ((idx+(sizeof(float)-1)) < sz)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2363
		cp += idx;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2364
		/*
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2365
		 * aligned
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2366
		 */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2367
		if (((INT)cp & (sizeof(float)-1)) == 0) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2368
		    if (__isShortFloat(aFloat)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2369
			((float *)cp)[0] = __shortFloatVal(aFloat);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2370
			RETURN (self);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2371
		    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2372
		    if (__isFloat(aFloat)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2373
			((float *)cp)[0] = (float)__floatVal(aFloat);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2374
			RETURN (self);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2375
		    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2376
		    if (__isSmallInteger(aFloat)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2377
			((float *)cp)[0] = (float)__intVal(aFloat);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2378
			RETURN (self);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2379
		    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2380
		    // bail out to smalltalk code
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2381
		}
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2382
	    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2383
	}
3434
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2384
    }
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2385
%}.
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2386
16320
dcb66fff0a89 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15836
diff changeset
  2387
    sflt := aFloat asShortFloat.
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2388
    1 to:4 do:[:srcIndex|
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2389
	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
  2390
    ].
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2391
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2392
3446
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2393
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
  2394
    "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
  2395
     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
  2396
     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
  2397
     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
  2398
     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
  2399
     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
  2400
     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
  2401
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2402
    |sflt|
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2403
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
  2404
    msb == IsBigEndian ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2405
	self floatAt:index put:aFloat.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2406
	^ self.
3446
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2407
    ].
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2408
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2409
    sflt := aFloat asShortFloat.
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2410
    1 to:4 do:[:srcIndex|
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2411
	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
  2412
    ].
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2413
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2414
    "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
  2415
!
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2416
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2417
ieeeDoubleAt:index
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2418
    "retrieve the 8 bytes starting at index as a float.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2419
     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
  2420
     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
  2421
     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
  2422
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2423
    "
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2424
     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
  2425
     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
  2426
     to an IBM 370 or old VAX etc.
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2427
     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
  2428
     no problem.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2429
    "
9258
83c940f349ea isIEEEFormat
Claus Gittinger <cg@exept.de>
parents: 9185
diff changeset
  2430
    Float isIEEEFormat ifFalse:[self error:'unsupported operation'].
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2431
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2432
    ^ self doubleAt:index
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2433
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2434
    "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
  2435
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2436
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2437
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
  2438
    "store the value of the argument, aFloat into the receiver
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2439
     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
  2440
     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
  2441
     (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
  2442
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2443
    "
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2444
     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
  2445
     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
  2446
     to an IBM 370 or old VAX etc.
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2447
     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
  2448
     no problem.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2449
    "
9258
83c940f349ea isIEEEFormat
Claus Gittinger <cg@exept.de>
parents: 9185
diff changeset
  2450
    Float isIEEEFormat ifFalse:[self error:'unsupported operation'].
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2451
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2452
    ^ self doubleAt:index put:aFloat
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2453
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2454
    "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
  2455
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2456
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2457
ieeeFloatAt:index
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2458
    "retrieve the 4 bytes starting at index as a float.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2459
     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
  2460
     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
  2461
     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
  2462
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2463
    "
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2464
     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
  2465
     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
  2466
     to an IBM 370 or old VAX etc.
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2467
     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
  2468
     no problem.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2469
    "
9258
83c940f349ea isIEEEFormat
Claus Gittinger <cg@exept.de>
parents: 9185
diff changeset
  2470
    ShortFloat isIEEEFormat ifFalse:[self error:'unsupported operation'].
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2471
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2472
    ^ self floatAt:index
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2473
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2474
    "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
  2475
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2476
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2477
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
  2478
    "store the value of the argument, aFloat into the receiver
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2479
     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
  2480
     Storage is in IEEE floating point single precision format.
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2481
     (i.e. 4 bytes are stored in the native byte order).
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2482
     Since ST/X floats are really doubles,
19629
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2483
     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
  2484
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2485
    "
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2486
     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
  2487
     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
  2488
     to an IBM 370 or old VAX etc.
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2489
     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
  2490
     no problem.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2491
    "
9258
83c940f349ea isIEEEFormat
Claus Gittinger <cg@exept.de>
parents: 9185
diff changeset
  2492
    ShortFloat isIEEEFormat ifFalse:[self error:'unsupported operation'].
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2493
16320
dcb66fff0a89 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15836
diff changeset
  2494
    self floatAt:index put:aFloat
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2495
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2496
    "Created: / 5.3.1998 / 10:51:11 / stefan"
22055
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2497
!
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2498
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2499
longDoubleAt:index
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2500
    "return the 16-bytes starting at index as a LongDouble.
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2501
     The index is a smalltalk index (i.e. 1-based).
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2502
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2503
     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
  2504
     machines and may only use part of the 16 bytes;
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2505
     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
  2506
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2507
     Notice also, that the bytes are expected to be in this machine's
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2508
     long double representation and byte order
22055
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2509
     - if the bytearray originated from another
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2510
     machine, some conversion is usually needed."
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2511
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2512
    |newFloat|
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2513
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2514
    newFloat := LongFloat basicNew.
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2515
    1 to:16 do:[:destIndex|
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2516
	newFloat basicAt:destIndex put:(self byteAt:(index - 1 + destIndex))
22055
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2517
    ].
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2518
    ^ newFloat.
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2519
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2520
    "
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2521
     |b|
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2522
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2523
     b := ByteArray new:20.
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2524
     b longDoubleAt:1 put:(LongFloat pi).
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2525
     Transcript showCR:b.
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2526
     Transcript showCR:(b longDoubleAt:1)
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2527
    "
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2528
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2529
    "Created: / 18-07-2017 / 11:31:27 / cg"
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
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2532
longDoubleAt:index MSB:msb
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2533
    "return the 16-bytes starting at index as a LongDouble.
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2534
     The index is a smalltalk index (i.e. 1-based).
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2535
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2536
     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
  2537
     machines and may only use part of the 16 bytes;
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2538
     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
  2539
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2540
     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
  2541
     long double representation - if the bytearray originated from another
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2542
     machine, some conversion is usually needed."
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2543
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2544
    |newFloat|
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
    msb == IsBigEndian ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2547
	^ self longDoubleAt:index.
22055
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
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2550
    newFloat := LongFloat basicNew.
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2551
    1 to:16 do:[:destIndex|
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2552
	newFloat basicAt:(17-destIndex) put:(self byteAt:(index - 1 + destIndex))
22055
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2553
    ].
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2554
    ^ newFloat.
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
    "Created: / 18-07-2017 / 11:30:42 / cg"
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2557
!
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
longDoubleAt:index put:aLongFloat
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2560
    "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
  2561
     starting at index.
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
     LongFloats are the machine's long double numbers.
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2564
22055
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2565
     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
  2566
     float representation and byte order - if the bytearray originated from another
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2567
     machine, some conversion is usually needed."
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2568
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2569
    |flt|
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2570
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2571
    flt := aLongFloat asLongFloat.
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2572
    1 to:16 do:[:srcIndex|
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2573
	self byteAt:(index - 1 + srcIndex) put:(flt basicAt:srcIndex)
22055
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2574
    ].
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2575
    ^ aLongFloat
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
    "Created: / 18-07-2017 / 11:33:17 / cg"
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2578
!
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2579
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2580
longDoubleAt:index put:aLongFloat MSB:msb
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2581
    "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
  2582
     starting at index.
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2583
     The index is a smalltalk index (i.e. 1-based).
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2584
     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
  2585
     float representation - if the bytearray originated from another
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2586
     machine, some conversion is usually needed."
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2587
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2588
    |flt|
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2589
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2590
    msb == IsBigEndian ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2591
	^ self longDoubleAt:index put:aLongFloat.
22055
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2592
    ].
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2593
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2594
    flt := aLongFloat asLongFloat.
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2595
    1 to:16 do:[:srcIndex|
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2596
	self byteAt:(index - 1 + srcIndex) put:(flt basicAt:(17-srcIndex))
22055
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2597
    ].
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2598
    ^ aLongFloat
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2599
221af6bb04d4 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21830
diff changeset
  2600
    "Created: / 18-07-2017 / 11:33:59 / cg"
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2601
! !
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2602
13724
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  2603
!UninterpretedBytes methodsFor:'accessing-longlongs (64bit)'!
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2604
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2605
signedInt64At:index
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2606
    "return the 8-bytes starting at index as a signed Integer.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2607
     The index is a smalltalk index (i.e. 1-based).
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2608
     The value is retrieved in the machine's natural byte order.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2609
     This may be worth a primitive."
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2610
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2611
    |w|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2612
19629
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2613
    w := self unsignedInt64At:index MSB:(UninterpretedBytes isBigEndian).
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2614
    (w > (16r7FFFFFFFFFFFFFFF)) ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2615
	^ w - (16r10000000000000000)
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2616
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2617
    ^ w
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2618
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2619
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2620
     |b|
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2621
     b := ByteArray new:8.
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2622
     b unsignedInt64At:1 put:16rFFFFFFFFFFFFFFFF MSB:true.
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2623
     (b signedInt64At:1 MSB:true)
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2624
    "
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2625
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2626
    "Modified: / 01-07-1996 / 21:11:28 / cg"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2627
    "Created: / 05-03-1998 / 14:40:05 / stefan"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2628
    "Modified (comment): / 04-08-2017 / 11:29:37 / 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
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2631
signedInt64At:index MSB:msb
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2632
    "return the 8-bytes starting at index as a signed Integer.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2633
     The index is a smalltalk index (i.e. 1-based).
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2634
     The value is retrieved in the given byte order.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2635
     This may be worth a primitive."
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2636
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2637
    |w|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2638
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2639
    w := self unsignedInt64At:index MSB:msb.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2640
    (w > (16r7FFFFFFFFFFFFFFF)) ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2641
	^ w - (16r10000000000000000)
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2642
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2643
    ^ w
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
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2646
     |b|
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2647
     b := ByteArray new:8.
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2648
     b unsignedInt64At:1 put:16rFFFFFFFFFFFFFFFF MSB:true.
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2649
     (b signedInt64At:1 MSB:true)
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2650
    "
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2651
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2652
    "Modified: / 05-03-1998 / 12:06:28 / stefan"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2653
    "Created: / 05-03-1998 / 14:40:54 / stefan"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2654
    "Modified: / 09-05-1998 / 01:10:59 / cg"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2655
    "Modified (comment): / 04-08-2017 / 11:29:59 / cg"
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2656
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2657
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2658
signedInt64At:byteIndex put:anInteger
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2659
    "store a signed longLong (64bit) integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2660
     The index is a smalltalk index (i.e. 1-based).
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2661
     The value is stored in the machine's natural byte order.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2662
     Same as #signedQuadWordAt:put: - for ST80 compatibility."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2663
19629
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2664
    ^ self signedInt64At:byteIndex put:anInteger MSB:(UninterpretedBytes isBigEndian)
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2665
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2666
    "Modified (comment): / 04-08-2017 / 11:19:09 / cg"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2667
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2668
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2669
signedInt64At:byteIndex put:anInteger MSB:msb
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2670
    "store a signed longLong (64bit) integer.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2671
     The index is a smalltalk index (i.e. 1-based).
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2672
     Same as #signedQuadWordAt:put: - for ST80 compatibility."
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2673
7813
3cc0b75d1684 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7812
diff changeset
  2674
    |v|
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2675
7813
3cc0b75d1684 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7812
diff changeset
  2676
    v := anInteger.
3cc0b75d1684 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7812
diff changeset
  2677
    anInteger < 0 ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2678
	v := v + 16r10000000000000000
7813
3cc0b75d1684 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7812
diff changeset
  2679
    ].
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2680
    self unsignedInt64At:byteIndex put:v MSB:msb.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2681
    ^ anInteger
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2682
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2683
    "Created: / 9.5.1998 / 01:10:24 / cg"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2684
    "Modified: / 9.5.1998 / 01:13:34 / cg"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2685
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2686
19629
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2687
signedInt64AtLSB:byteIndex
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2688
    "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
  2689
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2690
     The value is retrieved with least significant byte first"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2691
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2692
    ^ self signedInt64At:byteIndex MSB:false
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2693
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2694
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2695
signedInt64AtLSB:byteIndex put:anInteger
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2696
    "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
  2697
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2698
     The integer is stored with least significant byte first."
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2699
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2700
    ^ self signedInt64At:byteIndex put:anInteger MSB:false
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2701
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2702
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2703
signedInt64AtMSB:byteIndex
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2704
    "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
  2705
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2706
     The value is retrieved with most significant byte first"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2707
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2708
    ^ self signedInt64At:byteIndex MSB:true
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2709
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2710
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2711
signedInt64AtMSB:byteIndex put:anInteger
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2712
    "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
  2713
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2714
     The integer is stored with least significant byte first."
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2715
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2716
    ^ self signedInt64At:byteIndex put:anInteger MSB:true
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2717
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2718
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2719
unsignedInt64At:byteIndex
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2720
    "return the 8-bytes starting at index in the machine's native
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2721
     byteorder as an unsigned integer.
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2722
     The value is retrieved in the machine's natural byte order.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2723
     The index is a smalltalk index (i.e. 1-based)"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2724
19629
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2725
   ^ self unsignedInt64At:byteIndex MSB:(UninterpretedBytes isBigEndian)
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2726
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2727
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2728
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2729
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2730
     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
  2731
     (b unsignedInt64At:1) printStringRadix:16
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2732
    "
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2733
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2734
    "Modified: / 05-11-1996 / 14:06:21 / cg"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2735
    "Modified: / 05-03-1998 / 14:04:44 / stefan"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2736
    "Modified (comment): / 04-08-2017 / 11:19:21 / cg"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2737
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2738
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2739
unsignedInt64At:byteIndex MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2740
    "return the 8-bytes starting at index as an unsigned integer.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2741
     The index is a smalltalk index (i.e. 1-based).
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2742
     Depending on msb, the value is retrieved MSB or LSB-first."
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2743
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2744
    |l
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2745
     bIdx  "{ Class: SmallInteger }"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2746
     delta "{ Class: SmallInteger }"|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2747
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2748
    l := LargeInteger basicNew numberOfDigits:8.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2749
    msb ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2750
	bIdx := byteIndex + 7.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2751
	delta := -1
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2752
    ] ifFalse:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2753
	bIdx := byteIndex.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2754
	delta := 1
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2755
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2756
    1 to:8 do:[:i |
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2757
	l digitAt:i put:(self byteAt:bIdx).
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2758
	bIdx := bIdx + delta
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2759
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2760
    ^ l compressed
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2761
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2762
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2763
     |b|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2764
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2765
     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
  2766
     (b unsignedInt64At:1 MSB:false) printStringRadix:16
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2767
    "
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2768
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2769
    "
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2770
     |b|
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2771
     b := ByteArray new:8.
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2772
     b signedInt64At:1 put:-1 MSB:true.
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2773
     (b unsignedInt64At:1 MSB:true)
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2774
    "
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2775
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2776
    "Modified: / 05-11-1996 / 14:06:21 / cg"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2777
    "Modified: / 05-03-1998 / 14:04:44 / stefan"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2778
    "Modified (comment): / 04-08-2017 / 11:30:34 / cg"
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2779
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2780
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2781
unsignedInt64At:byteIndex put:anInteger
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2782
    "set the 8-bytes starting at index from the (unsigned) Integer value.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2783
     The index is a smalltalk index (i.e. 1-based).
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2784
     The value must be in the range 0 to 16rFFFFFFFFFFFFFFFF.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2785
     The value is stored in the machine's natural byteorder."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2786
19629
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2787
    ^ self unsignedInt64At:byteIndex put:anInteger MSB:(UninterpretedBytes isBigEndian)
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2788
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2789
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2790
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2791
     b := ByteArray new:10.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2792
     b unsignedInt64At:1 put:16r0807060504030201 MSB:false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2793
     b unsignedInt64At:1 put:16r0807060504030201 MSB:true.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2794
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2795
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2796
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2797
    "Created: / 5.3.1998 / 14:06:02 / stefan"
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2798
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2799
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2800
unsignedInt64At:byteIndex put:anInteger MSB:msb
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2801
    "set the 8-bytes starting at index from the (unsigned) Integer value.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2802
     The index is a smalltalk index (i.e. 1-based).
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2803
     The value must be in the range 0 to 16rFFFFFFFFFFFFFFFF.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2804
     Depending on msb, the value is stored MSB-first or LSB-first."
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2805
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2806
    |bIdx  "{ Class: SmallInteger }"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2807
     delta "{ Class: SmallInteger }"|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2808
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2809
    ((anInteger < 0)
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2810
     or:[anInteger class ~~ SmallInteger
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2811
	 and:[anInteger > 16rFFFFFFFFFFFFFFFF]]) ifTrue:[
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2812
	^ self elementBoundsError:anInteger
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2813
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2814
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2815
    msb ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2816
	bIdx := byteIndex + 7.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2817
	delta := -1
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2818
    ] ifFalse:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2819
	bIdx := byteIndex.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2820
	delta := 1
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2821
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2822
    1 to:8 do:[:i |
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2823
	self byteAt:bIdx put:(anInteger digitAt:i).
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2824
	bIdx := bIdx + delta.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2825
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2826
    ^ anInteger
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2827
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2828
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2829
     |b|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2830
     b := ByteArray new:8.
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2831
     b unsignedInt64At:1 put:16r0807060504030201 MSB:false.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2832
     b inspect
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
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2835
    "Created: / 05-03-1998 / 14:06:02 / stefan"
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  2836
    "Modified (comment): / 04-08-2017 / 11:13:59 / cg"
19629
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2837
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2838
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2839
unsignedInt64AtLSB:byteIndex
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2840
    "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
  2841
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2842
     The value is retrieved with most significant byte first"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2843
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2844
    ^ self unsignedInt64At:byteIndex MSB:false
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2845
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2846
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2847
unsignedInt64AtLSB:byteIndex put:anInteger
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2848
    "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
  2849
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2850
     The integer is stored with least significant byte first."
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2851
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2852
    ^ self unsignedInt64At:byteIndex put:anInteger MSB:false
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2853
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2854
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2855
unsignedInt64AtMSB:byteIndex
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2856
    "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
  2857
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2858
     The value is retrieved with most significant byte first"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2859
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2860
    ^ self unsignedInt64At:byteIndex MSB:true
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2861
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2862
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2863
unsignedInt64AtMSB:byteIndex put:anInteger
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2864
    "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
  2865
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2866
     The integer is stored with least significant byte first."
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2867
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2868
    ^ self unsignedInt64At:byteIndex put:anInteger MSB:true
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2869
! !
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2870
13724
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  2871
!UninterpretedBytes methodsFor:'accessing-longs (32bit)'!
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2872
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2873
signedInt32At:byteIndex
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2874
    "return the 4-bytes starting at byteIndex as a signed Integer.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2875
     The index is a smalltalk index (i.e. 1-based).
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2876
     The value is retrieved in the machine's natural byte order,
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2877
     therefore, this should only be used for byte-data which is
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2878
     only used inside this machine.
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2879
     To setup binary data packets which are to be sent to other machines,
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2880
     or stored into a file, always use the corresponding xxx:MSB: method
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2881
     and specify a definite byteOrder."
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2882
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2883
    |w|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2884
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2885
%{
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2886
    /*
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2887
     * handle the most common cases fast ...
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2888
     */
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2889
    if (__isSmallInteger(byteIndex)) {
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2890
	unsigned char *cp;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2891
	INT sz;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2892
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2893
	__fetchBytePointerAndSize__(self, &cp, &sz);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2894
	if (cp) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2895
	    INT idx = __intVal(byteIndex) - 1;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2896
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2897
	    if ((idx >= 0) && ((idx+(4-1)) < sz)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2898
		int iVal;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2899
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2900
		cp += idx;
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2901
#if defined(__i386__)
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2902
		/*
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2903
		 * aligned or not, we don't care (i386 can do both)
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2904
		 */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2905
		{
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2906
		    iVal = ((int *)cp)[0];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2907
		    RETURN (__MKINT(iVal));
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2908
		}
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2909
#else
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2910
# if defined(__x86_64__)
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2911
		/*
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2912
		 * aligned or not, we don't care (i386 can do both)
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2913
		 */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2914
		{
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2915
		    iVal = ((int *)cp)[0];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2916
		    RETURN (__mkSmallInteger(iVal));
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2917
		}
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2918
# else
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2919
		/*
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2920
		 * aligned ?
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2921
		 */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2922
		if (((INT)cp & (sizeof(int)-1)) == 0) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2923
		    iVal = ((int *)cp)[0];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2924
		} else {
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2925
#  ifdef __LSBFIRST__
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2926
		    iVal = cp[0] & 0xFF;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2927
		    iVal += (cp[1] & 0xFF)<<8;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2928
		    iVal += (cp[2] & 0xFF)<<16;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2929
		    iVal += (cp[3] & 0xFF)<<24;
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2930
#  else
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2931
#   ifdef __MSBFIRST__
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2932
		    iVal = cp[0] & 0xFF;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2933
		    iVal = (iVal<<8)+(cp[1] & 0xFF);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2934
		    iVal = (iVal<<8)+(cp[2] & 0xFF);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2935
		    iVal = (iVal<<8)+(cp[3] & 0xFF);
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2936
#   else
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2937
		    {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2938
			union {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2939
			    int i;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2940
			    char c[4];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2941
			} u;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2942
			u.c[0] = cp[0];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2943
			u.c[1] = cp[1];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2944
			u.c[2] = cp[2];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2945
			u.c[3] = cp[3];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2946
			iVal = u.i;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2947
		    }
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2948
#   endif
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2949
#  endif
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2950
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2951
#  if __POINTER_SIZE__ == 8
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2952
		    RETURN (__mkSmallInteger(iVal));
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2953
#  else
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2954
		    RETURN (__MKINT(iVal));
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2955
#  endif
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2956
		}
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2957
# endif
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2958
#endif
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2959
	    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2960
	}
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2961
    }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2962
%}.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2963
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2964
    ^ 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
  2965
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2966
    "
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2967
     |b|
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2968
     b := ByteArray new:4.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2969
     b unsignedLongAt:1 put:16rFFFFFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2970
     (b longAt:1)
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2971
    "
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2972
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2973
    "Modified: / 1.7.1996 / 21:11:28 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2974
    "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
  2975
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2976
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2977
signedInt32At:byteIndex MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2978
    "return the 4-bytes starting at byteIndex as a (signed) Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2979
     The byteIndex is a smalltalk index (i.e. 1-based).
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2980
     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
  2981
     LSB-first otherwise."
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2982
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2983
    |val
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2984
     ival "{ Class: SmallInteger }"
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2985
     i    "{ Class: SmallInteger }"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2986
     bHH  "{ Class: SmallInteger }"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2987
     bHL  "{ Class: SmallInteger }"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2988
     bLH  "{ Class: SmallInteger }"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2989
     bLL  "{ Class: SmallInteger }"|
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2990
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2991
%{
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2992
    /*
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2993
     * handle the most common cases fast ...
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2994
     */
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2995
    if (__isSmallInteger(byteIndex)) {
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2996
	unsigned char *cp;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2997
	INT sz;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2998
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  2999
	__fetchBytePointerAndSize__(self, &cp, &sz);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3000
	if (cp) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3001
	    INT idx = __intVal(byteIndex) - 1;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3002
	    int iVal;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3003
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3004
	    cp += idx;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3005
	    if ((idx >= 0) && ((idx+(sizeof(int)-1)) < sz)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3006
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3007
		if (msb == true) {
8901
824a89d0b5c7 alpha64 vs. POINTER_SIZE cleanup
Claus Gittinger <cg@exept.de>
parents: 8893
diff changeset
  3008
#if defined(__MSBFIRST__)
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3009
		    if (((INT)cp & (sizeof(int)-1))== 0) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3010
			/*
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3011
			 * aligned
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3012
			 */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3013
			iVal = ((int *)cp)[0];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3014
		    } else
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  3015
#endif
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3016
		    {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3017
			iVal = cp[0];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3018
			iVal = (iVal << 8) | cp[1];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3019
			iVal = (iVal << 8) | cp[2];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3020
			iVal = (iVal << 8) | cp[3];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3021
		    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3022
		} else {
8901
824a89d0b5c7 alpha64 vs. POINTER_SIZE cleanup
Claus Gittinger <cg@exept.de>
parents: 8893
diff changeset
  3023
#if defined(__i386__) || (defined(UNALIGNED_FETCH_OK) && defined(__LSBFIRST__))
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3024
		    /*
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3025
		     * aligned or not - we don't care
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3026
		     * (i386 can fetch unaligned)
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3027
		     */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3028
		    iVal = ((int *)cp)[0];
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  3029
#else
8901
824a89d0b5c7 alpha64 vs. POINTER_SIZE cleanup
Claus Gittinger <cg@exept.de>
parents: 8893
diff changeset
  3030
# if defined(__LSBFIRST__)
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3031
		    if (((INT)cp & (sizeof(int)-1))== 0) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3032
			/*
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3033
			 * aligned
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3034
			 */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3035
			iVal = ((int *)cp)[0];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3036
		    } else
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  3037
# endif
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3038
		    {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3039
			iVal = cp[3];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3040
			iVal = (iVal << 8) | cp[2];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3041
			iVal = (iVal << 8) | cp[1];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3042
			iVal = (iVal << 8) | cp[0];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3043
		    }
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  3044
#endif
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3045
		}
8901
824a89d0b5c7 alpha64 vs. POINTER_SIZE cleanup
Claus Gittinger <cg@exept.de>
parents: 8893
diff changeset
  3046
#if __POINTER_SIZE__ == 8
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3047
		RETURN (__mkSmallInteger(iVal));
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  3048
#else
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3049
		RETURN (__MKINT(iVal));
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  3050
#endif
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3051
	    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3052
	}
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  3053
    }
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  3054
%}.
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3055
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3056
    val := self unsignedInt32At:byteIndex MSB:msb.
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  3057
    (val > (16r7FFFFFFF)) ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3058
	^ val - (16r100000000)
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  3059
    ].
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  3060
    ^ val
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3061
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3062
    "
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3063
     |b|
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  3064
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  3065
     b := ByteArray withAll:#(1 2 3 4).
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3066
     (b signedInt32At:1 MSB:true) printStringRadix:16.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3067
     (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
  3068
    "
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3069
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3070
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3071
signedInt32At:byteIndex put:anInteger
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3072
    "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
  3073
     The index is a smalltalk index (i.e. 1-based).
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3074
     The integer is stored in the machine's natural byte order."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3075
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3076
    ^ 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
  3077
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3078
    "
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3079
     |b|
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3080
     b := ByteArray new:4.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3081
     b longAt:1 put:-1.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3082
     (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
  3083
    "
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3084
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3085
    "Modified: / 1.7.1996 / 21:11:39 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3086
    "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
  3087
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3088
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3089
signedInt32At:byteIndex put:anInteger MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3090
    "set the 4-bytes starting at byteIndex from the signed Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3091
     The byteIndex is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3092
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3093
     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
  3094
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3095
    |v|
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3096
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3097
%{
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3098
    /*
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3099
     * handle the most common case fast ...
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3100
     */
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3101
    if (__isSmallInteger(byteIndex)) {
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3102
	unsigned char *cp;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3103
	INT sz;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3104
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3105
	__fetchBytePointerAndSize__(self, &cp, &sz);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3106
	if (cp) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3107
	    INT idx = __intVal(byteIndex) - 1;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3108
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3109
	    if ((idx >= 0) && ((idx+3) < sz)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3110
		cp += idx;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3111
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3112
		if (__isSmallInteger(anInteger)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3113
		    INT __v = __intVal(anInteger);
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3114
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3115
# if __POINTER_SIZE__ == 8
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3116
		    if ((__v < -0x80000000L) || (__v > 0x7FFFFFFF)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3117
			goto badArg;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3118
		    }
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3119
# endif
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3120
		    if (((INT)cp & 3) == 0) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3121
			/*
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3122
			 * aligned
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3123
			 */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3124
			if (
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3125
# ifdef __LSBFIRST__
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3126
			    (msb == false)
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3127
# else
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3128
#  ifdef __MSBFIRST__
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3129
			    (msb == true)
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3130
#  else
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3131
			    (0)
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3132
#  endif
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3133
# endif
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3134
			) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3135
			    ((int *)cp)[0] = (int)__v;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3136
			    RETURN (anInteger);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3137
			}
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3138
		    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3139
		    if (msb == false) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3140
			cp[0] = __v & 0xFF;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3141
			cp[1] = (__v>>8) & 0xFF;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3142
			cp[2] = (__v>>16) & 0xFF;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3143
			cp[3] = (__v>>24) & 0xFF;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3144
		    } else {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3145
			cp[0] = (__v>>24) & 0xFF;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3146
			cp[1] = (__v>>16) & 0xFF;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3147
			cp[2] = (__v>>8) & 0xFF;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3148
			cp[3] = __v & 0xFF;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3149
		    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3150
		    RETURN (anInteger);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3151
		}
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3152
	    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3153
	}
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3154
    }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3155
  badArg: ;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3156
%}.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3157
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3158
    anInteger >= 0 ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3159
	v := anInteger
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3160
    ] ifFalse:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3161
	v := anInteger + 16r100000000
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3162
    ].
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3163
    self unsignedInt32At:byteIndex put:v MSB:msb.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3164
    ^ anInteger
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3165
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3166
    "
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3167
     |b|
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3168
     b := ByteArray new:4.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3169
     b longAt:1 put:-1.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3170
     (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
  3171
    "
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3172
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3173
    "Modified: / 1.7.1996 / 21:11:39 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3174
    "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
  3175
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3176
19629
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3177
signedInt32AtLSB:byteIndex
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3178
    "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
  3179
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3180
     The value is retrieved with least significant byte first"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3181
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3182
    ^ self signedInt32At:byteIndex MSB:false
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3183
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3184
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3185
signedInt32AtLSB:byteIndex put:anInteger
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3186
    "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
  3187
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3188
     The integer is stored with least significant byte first."
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3189
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3190
    ^ self signedInt32At:byteIndex put:anInteger MSB:false
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3191
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3192
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3193
signedInt32AtMSB:byteIndex
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3194
    "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
  3195
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3196
     The value is retrieved with most significant byte first"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3197
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3198
    ^ self signedInt32At:byteIndex MSB:true
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3199
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3200
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3201
signedInt32AtMSB:byteIndex put:anInteger
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3202
    "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
  3203
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3204
     The integer is stored with most significant byte first."
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3205
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3206
    ^ self signedInt32At:byteIndex put:anInteger MSB:true
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3207
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3208
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3209
unsignedInt32At:byteIndex
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3210
    "return the 4-bytes starting at index as an (unsigned) Integer.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  3211
     The index is a smalltalk index (i.e. 1-based).
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3212
     The value is retrieved in the machine's natural byte order."
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3213
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3214
    ^ self unsignedInt32At:byteIndex MSB:IsBigEndian
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3215
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3216
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3217
     |b|
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3218
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3219
     b := ByteArray withAll:#(1 2 3 4).
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3220
     (b unsignedInt32At:1) printStringRadix:16
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3221
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3222
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3223
    "Modified: / 5.3.1998 / 14:57:35 / stefan"
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3224
!
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3225
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3226
unsignedInt32At:byteIndex MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3227
    "return the 4-bytes starting at index as an (unsigned) Integer.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  3228
     The index is a smalltalk index (i.e. 1-based).
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3229
     The value is retrieved MSB-first, if the msb-arg is true;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3230
     LSB-first otherwise."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3231
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3232
    |val
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3233
     ival "{ Class: SmallInteger }"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3234
     i    "{ Class: SmallInteger }"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3235
     bHH  "{ Class: SmallInteger }"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3236
     bHL  "{ Class: SmallInteger }"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3237
     bLH  "{ Class: SmallInteger }"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3238
     bLL  "{ Class: SmallInteger }"|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3239
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3240
%{
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3241
    /*
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3242
     * handle the most common cases fast ...
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3243
     */
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3244
    if (__isSmallInteger(byteIndex)) {
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3245
	unsigned char *cp;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3246
	INT sz;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3247
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3248
	__fetchBytePointerAndSize__(self, &cp, &sz);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3249
	if (cp) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3250
	    INT idx = __intVal(byteIndex) - 1;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3251
	    unsigned int iVal;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3252
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3253
	    if ((idx >= 0) && ((idx+(sizeof(int)-1)) < sz)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3254
		cp += idx;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3255
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3256
		if (msb == true) {
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3257
#if defined(__MSBFIRST__)
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3258
		    if (((INT)cp & (sizeof(int)-1))== 0) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3259
			/*
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3260
			 * aligned
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3261
			 */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3262
			iVal = ((unsigned int *)cp)[0];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3263
		    } else
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3264
#endif
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3265
		    {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3266
			iVal = cp[0];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3267
			iVal = (iVal << 8) | cp[1];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3268
			iVal = (iVal << 8) | cp[2];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3269
			iVal = (iVal << 8) | cp[3];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3270
		    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3271
		} else {
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3272
#if defined(__i386__) || (defined(UNALIGNED_FETCH_OK) && defined(__LSBFIRST__))
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3273
		    /*
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3274
		     * aligned or not - we don't care
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3275
		     * (i386 can fetch unaligned)
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3276
		     */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3277
		    iVal = ((unsigned int *)cp)[0];
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3278
#else
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3279
# if defined(__LSBFIRST__)
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3280
		    if (((INT)cp & (sizeof(int)-1))== 0) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3281
			/*
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3282
			 * aligned
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3283
			 */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3284
			iVal = ((unsigned int *)cp)[0];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3285
		    } else
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3286
# endif
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3287
		    {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3288
			iVal = cp[3];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3289
			iVal = (iVal << 8) | cp[2];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3290
			iVal = (iVal << 8) | cp[1];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3291
			iVal = (iVal << 8) | cp[0];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3292
		    }
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3293
#endif
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3294
		}
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3295
#if __POINTER_SIZE__ == 8
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3296
		RETURN (__mkSmallInteger(iVal));
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3297
#else
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3298
		RETURN (__MKUINT(iVal));
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3299
#endif
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3300
	    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3301
	}
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3302
    }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3303
%}.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3304
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3305
    "/ fallBack code - non ByteArray-like receiver
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3306
    "/ or funny byteIndex
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3307
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3308
    i := byteIndex.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3309
    msb ifFalse:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3310
	bLL := self byteAt:i.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3311
	bLH := self byteAt:(i+1).
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3312
	bHL := self byteAt:(i+2).
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3313
	bHH := self byteAt:(i+3).
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3314
    ] ifTrue:[
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3315
	bHH := self byteAt:i.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3316
	bHL := self byteAt:(i+1).
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3317
	bLH := self byteAt:(i+2).
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3318
	bLL := self byteAt:(i+3).
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3319
    ].
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3320
    ival := (bHH bitShift:8) + bHL.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3321
    ival := (ival bitShift:8) + bLH.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3322
    val := (ival bitShift:8) + bLL.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3323
    ^ val
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3324
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3325
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3326
     |b|
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3327
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3328
     b := ByteArray withAll:#(1 2 3 4).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3329
     (b unsignedInt32At:1 MSB:true) printStringRadix:16.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3330
     (b unsignedInt32At:1 MSB:false) printStringRadix:16
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3331
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3332
!
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3333
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3334
unsignedInt32At:byteIndex put:anInteger
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3335
    "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
  3336
     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
  3337
     The value must be in the range 0 to 16rFFFFFFFF.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3338
     The value is stored in the machine's native byte order"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3339
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3340
    ^ self unsignedInt32At:byteIndex put:anInteger MSB:IsBigEndian
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3341
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3342
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3343
     |b|
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3344
     b := ByteArray new:8.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3345
     b doubleWordAt:1 put:16r04030201 MSB:true.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3346
     b doubleWordAt:5 put:16r04030201 MSB:false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3347
     b inspect
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3348
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3349
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3350
    "Modified: / 21.1.1998 / 17:43:34 / cg"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3351
    "Modified: / 5.3.1998 / 11:42:17 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3352
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3353
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3354
unsignedInt32At:byteIndex put:anInteger MSB:msb
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3355
    "set the 4-bytes starting at byteIndex from the unsigned Integer value.
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3356
     The byteIndex is a smalltalk index (i.e. 1-based).
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3357
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3358
     This is the ST80 version of #doubleWordAt:put:"
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3359
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3360
    |v i b1 b2 b3 b4|
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3361
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3362
%{
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3363
    /*
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3364
     * handle the most common case fast ...
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3365
     */
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3366
    if (__isSmallInteger(byteIndex)) {
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3367
	unsigned char *cp;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3368
	INT sz;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3369
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3370
	__fetchBytePointerAndSize__(self, &cp, &sz);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3371
	if (cp) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3372
	    INT idx = __intVal(byteIndex) - 1;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3373
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3374
	    if ((idx >= 0) && ((idx+3) < sz)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3375
		cp += idx;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3376
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3377
		if (__isSmallInteger(anInteger)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3378
		    INT __v = __intVal(anInteger);
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3379
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3380
# if __POINTER_SIZE__ == 8
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3381
		    if ((__v < 0) || (__v > 0xFFFFFFFF)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3382
			goto badArg;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3383
		    }
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3384
# endif
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3385
		    if (((INT)cp & 3) == 0) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3386
			/*
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3387
			 * aligned
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3388
			 */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3389
			if (
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3390
# ifdef __LSBFIRST__
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3391
			    (msb == false)
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3392
# else
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3393
#  ifdef __MSBFIRST__
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3394
			    (msb == true)
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3395
#  else
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3396
			    (0)
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3397
#  endif
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3398
# endif
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3399
			) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3400
			    ((int *)cp)[0] = (int)__v;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3401
			    RETURN (anInteger);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3402
			}
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3403
		    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3404
		    if (msb == false) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3405
			cp[0] = __v & 0xFF;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3406
			cp[1] = (__v>>8) & 0xFF;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3407
			cp[2] = (__v>>16) & 0xFF;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3408
			cp[3] = (__v>>24) & 0xFF;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3409
		    } else {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3410
			cp[0] = (__v>>24) & 0xFF;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3411
			cp[1] = (__v>>16) & 0xFF;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3412
			cp[2] = (__v>>8) & 0xFF;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3413
			cp[3] = __v & 0xFF;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3414
		    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3415
		    RETURN (anInteger);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3416
		}
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3417
	    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3418
	}
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3419
    }
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3420
  badArg: ;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3421
%}.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3422
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3423
    ((anInteger < 0) or:[anInteger > 16rFFFFFFFF]) ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3424
	^ self elementBoundsError:anInteger
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3425
    ].
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3426
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3427
    i := byteIndex.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3428
    msb ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3429
	b1 := (anInteger digitAt:4).
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3430
	b2 := (anInteger digitAt:3).
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3431
	b3 := (anInteger digitAt:2).
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3432
	b4 := (anInteger digitAt:1).
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3433
    ] ifFalse:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3434
	b1 := (anInteger digitAt:1).
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3435
	b2 := (anInteger digitAt:2).
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3436
	b3 := (anInteger digitAt:3).
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3437
	b4 := (anInteger digitAt:4).
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3438
    ].
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3439
    self byteAt:i     put:b1.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3440
    self byteAt:(i+1) put:b2.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3441
    self byteAt:(i+2) put:b3.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3442
    self byteAt:(i+3) put:b3.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3443
    ^ anInteger
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3444
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3445
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3446
     |b|
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3447
     b := ByteArray new:4.
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3448
     b signedInt32At:1 put:-1.
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3449
     (b unsignedInt32At:1) printStringRadix:16
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3450
    "
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3451
    "
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3452
     |b|
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3453
     b := ByteArray new:4.
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3454
     b unsignedInt32At:1 put:16rFFFFFFFF.
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3455
     (b signedInt32At:1)
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3456
    "
19629
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3457
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3458
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3459
unsignedInt32AtLSB:byteIndex
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3460
    "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
  3461
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3462
     The value is retrieved with least significant byte first"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3463
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3464
    ^ self unsignedInt32At:byteIndex MSB:false
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3465
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3466
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3467
unsignedInt32AtLSB:byteIndex put:anInteger
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3468
    "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
  3469
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3470
     The integer is stored with least significant byte first."
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3471
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3472
    ^ self unsignedInt32At:byteIndex put:anInteger MSB:false
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3473
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3474
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3475
unsignedInt32AtMSB:byteIndex
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3476
    "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
  3477
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3478
     The value is retrieved with most significant byte first"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3479
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3480
    ^ self unsignedInt32At:byteIndex MSB:true
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3481
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3482
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3483
unsignedInt32AtMSB:byteIndex put:anInteger
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3484
    "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
  3485
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3486
     The integer is stored with most significant byte first."
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3487
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3488
    ^ self unsignedInt32At:byteIndex put:anInteger MSB:true
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3489
! !
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3490
20961
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3491
!UninterpretedBytes methodsFor:'accessing-pointers'!
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3492
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3493
pointerAt:byteIndex
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3494
    "get a pointer starting at byteIndex as ExternalAddress.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3495
     The byteIndex is a smalltalk index (i.e. 1-based).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3496
     Only aligned accesses are allowed.
22883
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3497
     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
  3498
     This returns an external adress."
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3499
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3500
    |failReason|
20961
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3501
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3502
%{
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3503
    if (__isSmallInteger(byteIndex)) {
22883
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3504
        unsigned char *cp;
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3505
        INT sz;
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3506
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3507
        __fetchBytePointerAndSize__(self, &cp, &sz);
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3508
        if (cp) {
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3509
            INT idx = __smallIntegerVal(byteIndex) - 1;
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3510
            char *pointer;
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3511
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3512
            if ((idx >= 0) && ((idx+(sizeof(pointer)-1)) < sz)) {
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3513
                cp += idx;
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3514
                /*
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3515
                 * aligned
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3516
                 */
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3517
                if (((INT)cp & (sizeof(pointer)-1)) == 0) {
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3518
                    pointer = ((char **)cp)[0];
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3519
                    RETURN (__MKEXTERNALADDRESS(pointer));
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3520
                }
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3521
                // fprintf(stderr, "cp UNALIGNED (%"_lx_")\n", (INT)cp);
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3522
                failReason = @symbol(unaligned);
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3523
            } else {
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3524
                // fprintf(stderr, "idx(%"_ld_")+(sizeof(pointer)-1) (%d) >= sz (%"_ld_")\n",
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3525
                //        idx, (int)(sizeof(pointer)-1), sz);
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3526
                failReason = @symbol(invalidIndex);
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
        } else {
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3529
            // fprintf(stderr, "cp is NULL\n");
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3530
            failReason = @symbol(nullPointer);
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3531
        }
20961
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3532
    } else {
22883
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3533
        // fprintf(stderr, "non integer index\n");
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3534
        failReason = @symbol(invalidIndex);
20961
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3535
    }
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3536
bad:;
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3537
%}.
22883
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3538
    ^ self reportError:failReason with:byteIndex
20961
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3539
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3540
    "
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3541
     |b|
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3542
     b := ByteArray new:(ExternalAddress pointerSize).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3543
     b pointerAt:1 put:(ExternalAddress newAddress:16r12345678).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3544
     Transcript showCR:((b unsignedInt32At:1) printStringRadix:16).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3545
     Transcript showCR:((b pointerAt:1)).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3546
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3547
     |b|
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3548
     b := ByteArray new:(ExternalAddress pointerSize).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3549
     b pointerAt:1 put:(ExternalAddress newAddress:16r12345678abcdef).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3550
     Transcript showCR:((b unsignedInt64At:1) printStringRadix:16).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3551
     Transcript showCR:((b pointerAt:1)).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3552
    "
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3553
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3554
    "Modified (comment): / 14-11-2016 / 17:32:23 / cg"
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3555
!
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3556
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3557
pointerAt:byteIndex put:value
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3558
    "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
  3559
     The byteIndex is a smalltalk index (i.e. 1-based).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3560
     Only aligned accesses are allowed.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3561
     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
  3562
     The value may be either an ExternalAddress, ExternalBytes or an Integer"
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3563
22883
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3564
    |failReason|
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3565
20961
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3566
%{
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3567
    OBJ *pointer;
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
    if (__isExternalAddressLike(value)) {
22883
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3570
        pointer = __externalAddressVal(value);
20961
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3571
    } else if (__isExternalBytesLike(value)) {
22883
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3572
        pointer = __externalBytesVal(value);
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3573
        if (pointer == (OBJ *)0)
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3574
            pointer = 0;
20961
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3575
    } else if (value == nil) {
22883
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3576
        pointer = 0;
20961
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3577
    } else if (__isSmallInteger(value)) {
22883
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3578
        pointer = (OBJ *)__intVal(value);
20961
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3579
    } else {
22883
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3580
        if ((pointer = (OBJ *)__unsignedLongIntVal(value)) == 0) {
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3581
            // fprintf(stderr, "not a largeInt\n");
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3582
            failReason = @symbol(badValue);
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3583
            goto bad;
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3584
        }
20961
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3585
    }
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3586
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3587
    if (__isSmallInteger(byteIndex)) {
22883
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3588
        unsigned char *cp;
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3589
        INT sz;
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3590
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3591
        __fetchBytePointerAndSize__(self, &cp, &sz);
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3592
        if (cp) {
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3593
            INT idx = __smallIntegerVal(byteIndex) - 1;
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3594
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3595
            if ((idx >= 0) && ((idx+(sizeof(pointer)-1)) < sz)) {
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3596
                cp += idx;
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3597
                /*
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3598
                 * aligned
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3599
                 */
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3600
                if (((INT)cp & (sizeof(pointer)-1)) == 0) {
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3601
                    ((char **)cp)[0] = (char *) pointer;
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3602
                    RETURN (value);
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3603
                }
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3604
                // fprintf(stderr, "cp unaligned\n");
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3605
                failReason = @symbol(unaligned);
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3606
            } else {
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3607
                // fprintf(stderr, "idx out of bounds\n");
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3608
                failReason = @symbol(invalidIndex);
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3609
            }
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3610
        } else {
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3611
            // fprintf(stderr, "cp is null\n");
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3612
            failReason = @symbol(nullPointer);
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3613
        }
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3614
    } else {
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3615
        // fprintf(stderr, "byteIndex not a smallInt\n");
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3616
        failReason = @symbol(invalidIndex);
20961
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3617
    }
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3618
bad:;
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3619
%}.
22883
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3620
    ^ self reportError:failReason with:byteIndex
20961
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3621
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3622
    "
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3623
     |b|
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3624
     b := ByteArray new:ExternalAddress pointerSize.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3625
     b pointerAt:1 put:(ExternalAddress newAddress:16r12345678).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3626
     (b unsignedLongAt:1) printStringRadix:16
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3627
    "
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3628
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3629
    "Created: / 05-03-1998 / 10:57:18 / stefan"
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3630
    "Modified (comment): / 14-11-2016 / 17:28:27 / cg"
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3631
!
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3632
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3633
pointerValueAt:byteIndex
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3634
    "get a pointer value starting at byteIndex as unsigned integer.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3635
     The byteIndex is a smalltalk index (i.e. 1-based).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3636
     Only aligned accesses are allowed.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3637
     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
  3638
     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
  3639
22883
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3640
    |failReason|
20961
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3641
%{
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3642
    if (__isSmallInteger(byteIndex)) {
22883
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3643
        unsigned char *cp;
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3644
        INT sz;
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3645
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3646
        __fetchBytePointerAndSize__(self, &cp, &sz);
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3647
        if (cp) {
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3648
            INT idx = __smallIntegerVal(byteIndex) - 1;
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3649
            char *pointer;
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3650
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3651
            if ((idx >= 0) && ((idx+(sizeof(pointer)-1)) < sz)) {
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3652
                cp += idx;
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3653
                /*
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3654
                 * aligned
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3655
                 */
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3656
                if (((INT)cp & (sizeof(pointer)-1)) == 0) {
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3657
                    pointer = ((char **)cp)[0];
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3658
                    RETURN (__MKUINT((INT)(pointer)));
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3659
                }
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3660
                // printf("cp UNALIGNED (%"_lx_")\n", (INT)cp);
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3661
                failReason = @symbol(unaligned);
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3662
            } else {
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3663
                // printf("idx(%"_ld_")+(sizeof(pointer)-1) (%d) >= sz (%"_ld_")\n",
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3664
                //        idx, (int)(sizeof(pointer)-1), sz);
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3665
                failReason = @symbol(invalidIndex);
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3666
            }
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3667
        } else {
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3668
            // fprintf(stderr, "cp is NULL\n");
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3669
            failReason = @symbol(nullPointer);
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3670
        }
20961
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3671
    } else {
22883
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3672
        // fprintf(stderr, "non integer index\n");
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3673
        failReason = @symbol(invalidIndex);
20961
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3674
    }
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3675
bad:;
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3676
%}.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3677
22883
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  3678
    ^ self reportError:failReason with:byteIndex
20961
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3679
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3680
    "
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3681
     |b|
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3682
     b := ByteArray new:(ExternalAddress pointerSize).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3683
     b pointerAt:1 put:(ExternalAddress newAddress:16r12345678).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3684
     Transcript showCR:((b unsignedLongAt:1) printStringRadix:16).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3685
     Transcript showCR:((b pointerAt:1)).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3686
     Transcript showCR:((b pointerValueAt:1)).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3687
    "
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3688
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3689
    "Modified (comment): / 14-11-2016 / 17:28:33 / cg"
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3690
! !
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3691
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3692
!UninterpretedBytes methodsFor:'accessing-shorts (16bit)'!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3693
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3694
signedInt16At:byteIndex
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3695
    "return the 2-bytes starting at index as a signed Integer.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3696
     The index is a smalltalk index (i.e. 1-based).
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3697
     The value is retrieved in the machine's natural byte order."
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3698
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3699
    ^ (self unsignedInt16At:byteIndex) signExtendedShortValue
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3700
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3701
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3702
     |b|
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3703
     b := ByteArray new:2.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3704
     b wordAt:1 put:16rFFFF.
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3705
     b signedWordAt:1
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3706
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3707
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3708
    "Modified: 1.7.1996 / 21:14:38 / cg"
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3709
!
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3710
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3711
signedInt16At:byteIndex MSB:msb
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3712
    "return the 2-bytes starting at index as a signed Integer.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  3713
     The index is a smalltalk index (i.e. 1-based).
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3714
     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
  3715
     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
  3716
     Notice:
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3717
	the index is a byte index; thus, this allows for unaligned access to
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3718
	words on any boundary."
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3719
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3720
    |b1 "{ Class: SmallInteger }"
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3721
     b2 "{ Class: SmallInteger }"|
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3722
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3723
%{
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3724
    /*
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3725
     * handle the most common cases fast ...
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3726
     */
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3727
    if (__isSmallInteger(byteIndex)) {
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3728
	unsigned char *cp;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3729
	INT sz;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3730
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3731
	__fetchBytePointerAndSize__(self, &cp, &sz);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3732
	if (cp) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3733
	    INT idx = __intVal(byteIndex) - 1;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3734
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3735
	    if ((idx >= 0) && ((idx+(2-1)) < sz)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3736
		short sVal;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3737
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3738
		cp += idx;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3739
		if (msb == false) {
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3740
#if defined(__i386__) || (defined(__LSBFIRST__) && defined(UNALIGNED_FETCH_OK))
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3741
		    /*
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3742
		     * aligned or not, we don't care (i386 can do both)
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3743
		     */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3744
		    sVal = ((short *)cp)[0];
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3745
#else
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3746
		    sVal = (cp[0] & 0xFF) | ((cp[1] & 0xFF) << 8);
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3747
#endif
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3748
		} else {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3749
		    sVal = ((cp[0] & 0xFF) << 8) | (cp[1] & 0xFF);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3750
		}
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3751
		RETURN (__mkSmallInteger(sVal));
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3752
	    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3753
	}
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3754
    }
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3755
%}.
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3756
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3757
    b1 := self byteAt:byteIndex.
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3758
    b2 := self byteAt:(byteIndex + 1).
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3759
    msb ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3760
	^ ((b1 bitShift:8) + b2) signExtendedShortValue
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3761
    ].
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3762
    ^ ((b2 bitShift:8) + b1) signExtendedShortValue
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3763
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3764
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3765
signedInt16At:index put:anInteger
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3766
    "set the 2-bytes starting at index from the signed Integer value.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3767
     The index is a smalltalk index (i.e. 1-based).
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3768
     The stored value must be in the range -32768 .. +32676.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3769
     The value is stored in the machine's natural byte order."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3770
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3771
    ^ self signedInt16At:index put:anInteger MSB:IsBigEndian
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3772
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3773
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3774
     |b|
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3775
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3776
     b signedInt16At:1 put:-2.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3777
     b signedInt16At:3 put:-3.
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3778
     b inspect
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3779
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3780
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3781
    "Modified: 1.7.1996 / 21:12:13 / cg"
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3782
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3783
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3784
signedInt16At:byteIndex put:anInteger MSB:msb
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3785
    "set the 2-bytes starting at byteIndex from the signed integer value.
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3786
     The byteIndex is a smalltalk index (i.e. 1-based).
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3787
     The stored value must be in the range -32768 .. +32676.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3788
     The value is stored MSB-first, if the msb-arg is true;
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3789
     LSB-first otherwise."
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3790
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3791
%{  /* NOCONTEXT */
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3792
    /*
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3793
     * handle the most common case fast ...
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3794
     */
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3795
    if (__isSmallInteger(byteIndex)) {
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3796
	unsigned char *cp;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3797
	INT sz;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3798
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3799
	__fetchBytePointerAndSize__(self, &cp, &sz);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3800
	if (cp) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3801
	    INT idx = __intVal(byteIndex) - 1;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3802
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3803
	    if ((idx >= 0) && ((idx+1) < sz)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3804
		cp += idx;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3805
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3806
		if (__isSmallInteger(anInteger)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3807
		    INT __v = __intVal(anInteger);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3808
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3809
		    if ((__v < -0x8000L) || (__v > 0x7FFF)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3810
			goto badArg;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3811
		    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3812
		    if (msb == false) {
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3813
#if defined(__i386__) || (defined(__LSBFIRST__) && defined(UNALIGNED_FETCH_OK))
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3814
			((short *)cp)[0] = (short)__v;
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3815
#else
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3816
			cp[0] = __v & 0xFF;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3817
			cp[1] = (__v >> 8) & 0xFF;
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3818
#endif
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3819
		    } else {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3820
			cp[0] = (__v >> 8) & 0xFF;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3821
			cp[1] = __v & 0xFF;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3822
		    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3823
		    RETURN (anInteger);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3824
		}
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3825
	    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3826
	}
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3827
    }
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3828
  badArg: ;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3829
%}.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3830
    anInteger >= 0 ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3831
	self unsignedInt16At:byteIndex put:anInteger MSB:msb.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3832
    ] ifFalse:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3833
	self unsignedInt16At:byteIndex put:(16r10000 + anInteger) MSB:msb.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3834
    ].
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3835
    ^ anInteger
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3836
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3837
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3838
     |b|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3839
     b := ByteArray new:4.
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3840
     b signedInt16At:1 put:-1.
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3841
     b signedInt16At:3 put:-2.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3842
     b inspect
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3843
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3844
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3845
    "Modified: 1.7.1996 / 21:12:13 / cg"
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3846
!
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3847
19629
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3848
signedInt16AtLSB:byteIndex
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3849
    "return the 2-bytes starting at index as a signed Integer.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3850
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3851
     The value is retrieved with least significant byte first"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3852
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3853
    ^ self signedInt16At:byteIndex MSB:false
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3854
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3855
    "
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3856
     |b|
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3857
     b := ByteArray new:2.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3858
     b wordAt:1 put:16rFFFE.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3859
     b signedInt16AtLSB:1.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3860
     b signedInt16AtMSB:1.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3861
    "
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3862
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3863
    "Modified: 1.7.1996 / 21:14:38 / cg"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3864
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3865
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3866
signedInt16AtLSB:index put:anInteger
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3867
    "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
  3868
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3869
     The stored value must be in the range 0 .. 16rFFFF.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3870
     The value is stored with least significant byte first"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3871
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3872
    ^ self signedInt16At:index put:anInteger MSB:false
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3873
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3874
    "
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3875
     |b|
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3876
     b := ByteArray new:4.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3877
     b signedInt16At:1 put:16r0102.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3878
     b signedInt16At:3 put:16r0304.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3879
     b inspect
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3880
    "
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3881
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3882
    "Created: / 5.3.1998 / 11:54:52 / stefan"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3883
    "Modified: / 5.3.1998 / 14:59:38 / stefan"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3884
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3885
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3886
signedInt16AtMSB:byteIndex
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3887
    "return the 2-bytes starting at index as a signed Integer.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3888
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3889
     The value is retrieved with most significant byte first"
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
    ^ self signedInt16At:byteIndex MSB:true
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
     |b|
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3895
     b := ByteArray new:2.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3896
     b wordAt:1 put:16rFFFE.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3897
     b signedInt16AtLSB:1.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3898
     b signedInt16AtMSB:1.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3899
    "
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3900
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3901
    "Modified: 1.7.1996 / 21:14:38 / cg"
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
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3904
signedInt16AtMSB:index put:anInteger
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3905
    "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
  3906
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3907
     The stored value must be in the range 0 .. 16rFFFF.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3908
     The value is stored with most significant byte first"
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
    ^ self signedInt16At:index put:anInteger MSB:true
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3911
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
     |b|
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3914
     b := ByteArray new:4.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3915
     b signedInt16At:1 put:16r0102.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3916
     b signedInt16At:3 put:16r0304.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3917
     b inspect
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3918
    "
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3919
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3920
    "Created: / 5.3.1998 / 11:54:52 / stefan"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3921
    "Modified: / 5.3.1998 / 14:59:38 / stefan"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3922
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3923
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3924
unsignedInt16At:index
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3925
    "return the 2-bytes starting at index as an (unsigned) Integer.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  3926
     The index is a smalltalk index (i.e. 1-based).
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3927
     The value is retrieved in the machine's natural byte order"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3928
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3929
    ^ self unsignedInt16At:index MSB:IsBigEndian
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3930
!
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3931
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3932
unsignedInt16At:byteIndex MSB:msb
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3933
    "return the 2-bytes starting at index as an (unsigned) Integer.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  3934
     The index is a smalltalk index (i.e. 1-based).
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3935
     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
  3936
     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
  3937
     Notice:
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3938
	the index is a byte index; thus, this allows for unaligned access to
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3939
	words on any boundary."
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3940
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3941
    |b1 "{ Class: SmallInteger }"
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3942
     b2 "{ Class: SmallInteger }"|
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3943
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3944
%{
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3945
    /*
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3946
     * handle the most common cases fast ...
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3947
     */
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3948
    if (__isSmallInteger(byteIndex)) {
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3949
	unsigned char *cp;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3950
	INT sz;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3951
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3952
	__fetchBytePointerAndSize__(self, &cp, &sz);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3953
	if (cp) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3954
	    INT idx = __intVal(byteIndex) - 1;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3955
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3956
	    if ((idx >= 0) && ((idx+(2-1)) < sz)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3957
		int iVal;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3958
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3959
		cp += idx;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3960
		if (msb == false) {
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3961
#if defined(__i386__) || (defined(__LSBFIRST__) && defined(UNALIGNED_FETCH_OK))
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3962
		    /*
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3963
		     * aligned or not, we don't care (i386 can do both)
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3964
		     */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3965
		    iVal = ((unsigned short *)cp)[0];
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3966
#else
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3967
		    iVal = (cp[0] & 0xFF) | ((cp[1] & 0xFF) << 8);
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3968
#endif
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3969
		} else {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3970
		    iVal = ((cp[0] & 0xFF) << 8) | (cp[1] & 0xFF);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3971
		}
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3972
		RETURN (__mkSmallInteger(iVal));
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3973
	    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3974
	}
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3975
    }
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3976
%}.
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3977
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3978
    b1 := self byteAt:byteIndex.
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3979
    b2 := self byteAt:(byteIndex + 1).
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3980
    msb ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  3981
	^ (b1 bitShift:8) + b2
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3982
    ].
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3983
    ^ (b2 bitShift:8) + b1
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3984
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3985
    "
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3986
     #[ 16rFF 16r00 ] unsignedInt16At:1 MSB:true
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3987
     #[ 16rFF 16r00 ] unsignedInt16At:1 MSB:false
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3988
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3989
     #[ 16rFF 16r00 ] unsignedInt16At:2 MSB:true
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3990
     #[ 16rFF 16r00 ] unsignedInt16At:2 MSB:false
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3991
    "
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3992
!
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3993
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3994
unsignedInt16At:index put:anInteger
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3995
    "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
  3996
     The index is a smalltalk index (i.e. 1-based).
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3997
     The stored value must be in the range 0 .. 16rFFFF.
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3998
     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
  3999
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  4000
    ^ self unsignedInt16At:index put:anInteger MSB:IsBigEndian
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4001
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4002
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4003
     |b|
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4004
     b := ByteArray new:4.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  4005
     b unsignedInt16At:1 put:16r0102.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  4006
     b unsignedInt16At:3 put:16r0304.
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  4007
     b inspect
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4008
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4009
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4010
    "Created: / 5.3.1998 / 11:54:52 / stefan"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4011
    "Modified: / 5.3.1998 / 14:59:38 / stefan"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4012
!
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4013
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  4014
unsignedInt16At:byteIndex put:anInteger MSB:msb
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4015
    "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
  4016
     The index is a smalltalk index (i.e. 1-based).
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  4017
     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
  4018
     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
  4019
     lower index) if msb is false, MSB-first otherwise"
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
    |b1 b2
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4022
     iVal "{ Class: SmallInteger }"|
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4023
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  4024
%{  /* NOCONTEXT */
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  4025
    /*
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  4026
     * handle the most common case fast ...
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  4027
     */
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  4028
    if (__isSmallInteger(byteIndex)) {
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4029
	unsigned char *cp;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4030
	INT sz;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4031
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4032
	__fetchBytePointerAndSize__(self, &cp, &sz);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4033
	// printf("cp=%"_lx_"\n", (INT)cp);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4034
	if (cp) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4035
	    INT idx = __intVal(byteIndex) - 1;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4036
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4037
	    if ((idx >= 0) && ((idx+1) < sz)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4038
		cp += idx;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4039
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4040
		if (__isSmallInteger(anInteger)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4041
		    INT __v = __intVal(anInteger);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4042
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4043
		    if (((unsigned INT)__v) > 0xFFFF) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4044
			goto badArg;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4045
		    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4046
		    if (msb == false) {
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  4047
#if defined(__i386__) || (defined(__LSBFIRST__) && defined(UNALIGNED_FETCH_OK))
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4048
			((unsigned short *)cp)[0] = (unsigned short)__v;
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  4049
#else
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4050
			cp[0] = __v & 0xFF;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4051
			cp[1] = (__v >> 8) & 0xFF;
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  4052
#endif
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4053
		    } else {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4054
			cp[0] = (__v >> 8) & 0xFF;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4055
			cp[1] = __v & 0xFF;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4056
		    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4057
		    RETURN (anInteger);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4058
		}
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4059
	    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4060
	}
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  4061
    }
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  4062
  badArg: ;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  4063
%}.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  4064
    iVal := anInteger.
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4065
    ((iVal < 0) or:[iVal > 16rFFFF]) ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4066
	^ self elementBoundsError:iVal
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4067
    ].
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4068
    msb ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4069
	b1 := ((iVal bitShift:-8) bitAnd:16rFF).
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4070
	b2 := (iVal bitAnd:16rFF).
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4071
    ] ifFalse:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4072
	b1 := (iVal bitAnd:16rFF).
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4073
	b2 := ((iVal bitShift:-8) bitAnd:16rFF).
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4074
    ].
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  4075
    self byteAt:byteIndex   put:b1.
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  4076
    self byteAt:byteIndex+1 put:b2.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  4077
    ^ anInteger
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4078
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4079
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4080
     |b|
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4081
     b := ByteArray new:8.
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  4082
     b unsignedInt16At:1 put:16r0102 MSB:false.
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  4083
     b unsignedInt16At:3 put:16r0304 MSB:false.
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  4084
     b unsignedInt16At:5 put:16r0102 MSB:true.
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  4085
     b unsignedInt16At:7 put:16r0304 MSB:true.
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  4086
     b inspect
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4087
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4088
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4089
    "Modified: / 21.1.1998 / 17:48:15 / cg"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4090
    "Modified: / 5.3.1998 / 11:52:28 / stefan"
19629
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4091
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4092
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4093
unsignedInt16AtLSB:byteIndex
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4094
    "return the 2-bytes starting at index as an unsigned Integer.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4095
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4096
     The value is retrieved with least significant byte first"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4097
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4098
    ^ self unsignedInt16At:byteIndex MSB:false
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4099
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4100
    "
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4101
     |b|
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4102
     b := ByteArray new:2.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4103
     b wordAt:1 put:16rFFFE.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4104
     b unsignedInt16AtLSB:1.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4105
     b unsignedInt16AtMSB:1.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4106
    "
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4107
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4108
    "Modified: 1.7.1996 / 21:14:38 / cg"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4109
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4110
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4111
unsignedInt16AtLSB:index put:anInteger
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4112
    "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
  4113
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4114
     The stored value must be in the range 0 .. 16rFFFF.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4115
     The value is stored with least significant byte first"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4116
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4117
    ^ self unsignedInt16At:index put:anInteger MSB:false
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4118
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
     |b|
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4121
     b := ByteArray new:4.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4122
     b unsignedInt16At:1 put:16r0102.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4123
     b unsignedInt16At:3 put:16r0304.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4124
     b inspect
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4125
    "
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4126
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4127
    "Created: / 5.3.1998 / 11:54:52 / stefan"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4128
    "Modified: / 5.3.1998 / 14:59:38 / stefan"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4129
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4130
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4131
unsignedInt16AtMSB:byteIndex
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4132
    "return the 2-bytes starting at index as an unsigned Integer.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4133
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4134
     The value is retrieved with most significant byte first"
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
    ^ self unsignedInt16At:byteIndex MSB:true
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
     |b|
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4140
     b := ByteArray new:2.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4141
     b wordAt:1 put:16rFFFF.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4142
     b signedWordAt:1
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4143
    "
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
    "Modified: 1.7.1996 / 21:14:38 / cg"
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
unsignedInt16AtMSB:index put:anInteger
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4149
    "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
  4150
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4151
     The stored value must be in the range 0 .. 16rFFFF.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4152
     The value is stored with most significant byte first"
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
    ^ self unsignedInt16At:index put:anInteger MSB:true
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4155
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4156
    "
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4157
     |b|
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4158
     b := ByteArray new:4.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4159
     b unsignedInt16At:1 put:16r0102.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4160
     b unsignedInt16At:3 put:16r0304.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4161
     b inspect
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4162
    "
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4163
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4164
    "Created: / 5.3.1998 / 11:54:52 / stefan"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4165
    "Modified: / 5.3.1998 / 14:59:38 / stefan"
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4166
! !
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4167
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4168
!UninterpretedBytes methodsFor:'accessing-strings'!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4169
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4170
stringAt:index
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4171
    "return a string starting at index up to the 0-byte.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4172
     The index is a smalltalk index (i.e. 1-based)."
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4173
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4174
    |stream i "{ Class: SmallInteger }" c|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4175
10676
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4176
    stream := WriteStream on:(String new:40).
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4177
    i := index.
10676
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4178
    [(c := self byteAt:i) ~~ 0] whileTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4179
	stream nextPut:(Character value:c).
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4180
	i := i + 1.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4181
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4182
    ^ stream contents
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4183
10676
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4184
    "
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  4185
      #[71 72 73 74 75 76 77 0] stringAt:1
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  4186
      #[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
  4187
      '1234567890' stringAt:2
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4188
    "
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4189
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4190
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4191
stringAt:index put:aString
19196
1db38251aeb2 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19101
diff changeset
  4192
    "copy aString to the receiver, starting at index up to
7815
6bd3a60a6f0c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7814
diff changeset
  4193
     (and including) the 0-byte (which is always written).
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4194
     The index is a smalltalk index (i.e. 1-based)."
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
    |i "{ Class: SmallInteger }"|
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
    i := index.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4199
    aString do:[:aChar |
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4200
	self byteAt:i put:aChar codePoint.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4201
	i := i + 1.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4202
    ].
10676
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4203
    self byteAt:i put:0.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4204
    ^ aString
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4205
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4206
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4207
     |bytes|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4208
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4209
     bytes := ExternalBytes new:10.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4210
     bytes stringAt:1 put:'hello'.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4211
     1 to:bytes size do:[:i |
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4212
	Transcript showCR:(bytes at:i)
10676
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4213
     ].
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4214
    "
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4215
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4216
    "
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4217
     (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
  4218
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4219
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4220
    "Created: / 21.1.1998 / 17:45:02 / cg"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4221
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4222
7812
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4223
stringAt:index put:aString size:maxSize
19196
1db38251aeb2 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19101
diff changeset
  4224
    "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
  4225
     or (and including) the 0-byte, whichever is encountered first.
7815
6bd3a60a6f0c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7814
diff changeset
  4226
     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
  4227
     The index is a smalltalk index (i.e. 1-based)."
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4228
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4229
    |remaining "{ Class: SmallInteger }"
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4230
     i         "{ Class: SmallInteger }"|
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4231
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4232
    remaining := maxSize.
7816
827f1cf51862 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7815
diff changeset
  4233
    remaining <= 0 ifTrue:[^ aString].
7812
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4234
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4235
    i := index.
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4236
    aString do:[:aChar |
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4237
	self byteAt:i put:aChar codePoint.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4238
	i := i + 1.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4239
	remaining := remaining - 1.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4240
	remaining <= 0 ifTrue:[^ aString].
7812
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4241
    ].
10676
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4242
    self byteAt:i put:0.
7812
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4243
    ^ aString
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4244
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4245
    "
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4246
     |bytes|
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4247
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4248
     bytes := ExternalBytes new:10.
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4249
     bytes stringAt:1 put:'hello' size:3.
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4250
     1 to:bytes size do:[:i |
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4251
	Transcript showCR:(bytes at:i)
7812
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4252
     ]
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4253
    "
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4254
    "
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4255
     |bytes|
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
     bytes := ByteArray new:10 withAll:16rFF.
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4258
     bytes stringAt:1 put:'he' size:3.
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4259
     1 to:bytes size do:[:i |
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4260
	Transcript showCR:(bytes at:i)
7812
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4261
     ]
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4262
    "
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4263
10676
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4264
    "
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4265
     (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
  4266
    "
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4267
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4268
7812
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4269
    "Created: / 21.1.1998 / 17:45:02 / cg"
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4270
!
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4271
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4272
stringAt:index size:maxSize
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4273
    "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
  4274
     The index is a smalltalk index (i.e. 1-based)."
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4275
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  4276
    |stream c
10676
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4277
     max "{ Class: SmallInteger }"
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4278
     start "{ Class: SmallInteger }"|
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4279
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4280
    stream := WriteStream on:(String new:maxSize).
10676
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4281
    start := index.
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4282
    max := start + maxSize - 1.
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4283
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4284
    start to:max do:[:eachIndex|
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4285
	c := self byteAt:eachIndex.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4286
	c == 0 ifTrue:[
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4287
	    ^ stream contents
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4288
	].
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4289
	stream nextPut:(Character value:c).
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4290
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4291
    ^ stream contents
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4292
10676
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4293
    "
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4294
      #[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
  4295
      #[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
  4296
      '1234567890' stringAt:2 size:6
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4297
    "
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  4298
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  4299
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  4300
zeroByteStringAt:index maximumSize:count
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  4301
    "extract a zeroByte-delimited string, given initial index and
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  4302
     maximum number of characters (bytes).
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  4303
     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
  4304
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4305
    |bytes endIndex idx|
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4306
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4307
    endIndex := self indexOf:0 startingAt:index.
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4308
    endIndex == 0 ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4309
	endIndex := self size + 1
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4310
    ].
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4311
    endIndex := (endIndex min: (index + count)) - 1.
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4312
    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
  4313
    ^ bytes asString
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  4314
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4315
    "
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4316
     #[ 1 2 3 4 5 6 7 8 ] zeroByteStringAt:2 maximumSize:10
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4317
     #[ 1 2 3 4 5 0 6 7 8 ] zeroByteStringAt:2 maximumSize:10
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4318
     #[ 1 2 3 4 5 0 6 7 8 ] zeroByteStringAt:2 maximumSize:3
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4319
     #[ 1 2 3 4 5 0 6 7 8 ] zeroByteStringAt:2 maximumSize:4
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4320
    "
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  4321
! !
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  4322
12951
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  4323
!UninterpretedBytes methodsFor:'converting'!
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  4324
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  4325
asExternalBytes
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4326
    "in earlier times, this use to return protected memory
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  4327
     (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
  4328
     This was changed to now return garbage collected memory."
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  4329
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  4330
    ^ self asExternalBytesUnprotected.
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  4331
12951
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  4332
    "
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  4333
      #[1 2 3 4 5 6 7] asExternalBytes
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  4334
      'Hello World' asExternalBytes
14142
7a769e54130d changed:
Stefan Vogel <sv@exept.de>
parents: 14132
diff changeset
  4335
      'Hello World' asUnicodeString asExternalBytes
12951
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  4336
    "
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  4337
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  4338
    "Modified (comment): / 04-08-2017 / 11:25:00 / cg"
14132
debafd18f04b added: #asUUID
Stefan Vogel <sv@exept.de>
parents: 14131
diff changeset
  4339
!
debafd18f04b added: #asUUID
Stefan Vogel <sv@exept.de>
parents: 14131
diff changeset
  4340
14155
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4341
asExternalBytesUnprotected
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  4342
    "Like asExternalBytes, but does not protect the bytes from the collector,
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4343
     so the bytes are GARBAGE-COLLECTED
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  4344
     (i.e. free is called when the smalltalk object is no longer referenced)."
14155
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4345
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4346
    |bytes sz|
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4347
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4348
    sz := self byteSize.
15836
cdf0d7258f9e class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15717
diff changeset
  4349
    bytes := ExternalBytes unprotectedNew:sz.
14155
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4350
    bytes replaceFrom:1 to:sz with:self startingAt:1.
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4351
    ^ bytes
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4352
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4353
    "
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4354
     |x|
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4355
     x := 'fooBar' asExternalBytesUnprotected.
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4356
     ObjectMemory garbageCollect
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4357
    "
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4358
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4359
    "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
  4360
    "Modified: / 30-11-2013 / 11:42:21 / cg"
22161
d941d4d4246e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22102
diff changeset
  4361
    "Modified (comment): / 04-08-2017 / 11:22:58 / cg"
14155
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4362
!
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4363
18600
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  4364
asSingleByteString
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  4365
    "return the receiver converted to a 'normal' string.
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  4366
     Raises an error if unrepresentable characters are encountered.
21474
151c0f5bf617 #DOCUMENTATION by stefan
Stefan Vogel <sv@exept.de>
parents: 21437
diff changeset
  4367
     See also: #asSingleByteStringIfPossible and #asSingleByteStringReplaceInvalidWith:"
18600
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  4368
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  4369
    ^ String fromString:self
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  4370
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  4371
    "
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  4372
     #[60 61 62 63] asSingleByteString
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4373
     #[60 61 62 63] asExternalBytes  asSingleByteString
18969
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4374
     #[67 68 69 70] asIntegerArray asSingleByteString
21474
151c0f5bf617 #DOCUMENTATION by stefan
Stefan Vogel <sv@exept.de>
parents: 21437
diff changeset
  4375
     'abc' asText asSingleByteString
18600
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  4376
     (Unicode16String with:(Character value:16rFF)) asSingleByteString
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  4377
     (Unicode16String with:(Character value:16rFFFF)) asSingleByteString
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  4378
    "
21474
151c0f5bf617 #DOCUMENTATION by stefan
Stefan Vogel <sv@exept.de>
parents: 21437
diff changeset
  4379
151c0f5bf617 #DOCUMENTATION by stefan
Stefan Vogel <sv@exept.de>
parents: 21437
diff changeset
  4380
    "Modified (comment): / 16-02-2017 / 20:25:14 / stefan"
18600
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  4381
!
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  4382
18969
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4383
asSingleByteStringIfPossible
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4384
    "if possible, return the receiver converted to a 'normal' string.
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4385
     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
  4386
     If not possible, the (wideString) receiver is returned."
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4387
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4388
    self containsNon8BitElements ifTrue:[^ self asString].
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4389
    ^ self asSingleByteString.
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4390
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4391
    "
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4392
     #[67 68 69 70] asSingleByteStringIfPossible
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4393
     #[67 68 69 70] asIntegerArray asSingleByteStringIfPossible
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4394
     'hello' asUnicodeString asSingleByteStringIfPossible
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4395
    "
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4396
!
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4397
14132
debafd18f04b added: #asUUID
Stefan Vogel <sv@exept.de>
parents: 14131
diff changeset
  4398
asUUID
debafd18f04b added: #asUUID
Stefan Vogel <sv@exept.de>
parents: 14131
diff changeset
  4399
    ^ UUID fromBytes:self
12951
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  4400
! !
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  4401
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4402
!UninterpretedBytes methodsFor:'encoding & decoding'!
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4403
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4404
utf8Decoded
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4405
    "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
  4406
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4407
    ^ CharacterArray decodeFromUTF8:self.
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4408
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4409
    "
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4410
     #[16rC8 16rA0] utf8Decoded
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4411
     #[16rC8 16rA0] asString utf8Decoded
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4412
     #[16rC8 16rA0] asExternalBytes utf8Decoded
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4413
     (Character value:16r220) utf8Encoded utf8Decoded
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4414
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4415
     (Character value:16r800) utf8Encoded
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4416
     (Character value:16r220) utf8Encoded utf8Decoded
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4417
    "
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4418
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4419
    "test:
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4420
21377
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  4421
      1 to:16r10FFFF do:[:codepoint |
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4422
	|utf8Encoding original readBack|
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4423
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4424
	original := (Character value:codepoint) asString.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4425
	utf8Encoding := original utf8Encoded.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4426
	readBack := utf8Encoding utf8Decoded.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4427
	readBack ~= original ifTrue:[
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4428
	    self halt
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4429
	]
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4430
      ]
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4431
    "
21377
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  4432
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  4433
    "Modified (comment): / 07-02-2017 / 17:36:08 / stefan"
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4434
!
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4435
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4436
utf8DecodedWithTwoByteCharactersReplacedBy:replacementCharacter
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4437
    "Interpreting myself as an UTF-8 representation, decode and return
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4438
     the decoded string. Suppress all 2-byte (above 16rFF) characters,
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4439
     and replace them with replacementCharacter"
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4440
22405
e11520f05fef #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 22381
diff changeset
  4441
    |in out|
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4442
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4443
    self containsNon7BitAscii ifFalse:[
22405
e11520f05fef #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 22381
diff changeset
  4444
        ^ self asSingleByteString   "plain ASCII"
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4445
    ].
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4446
22405
e11520f05fef #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 22381
diff changeset
  4447
    out := WriteStream on:(String uninitializedNew:self utf8DecodedSize).
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4448
    in := self readStream.
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4449
    [in atEnd] whileFalse:[
22405
e11520f05fef #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 22381
diff changeset
  4450
        |c|
e11520f05fef #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 22381
diff changeset
  4451
e11520f05fef #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 22381
diff changeset
  4452
        c := Character utf8DecodeFrom:in.
e11520f05fef #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 22381
diff changeset
  4453
        c codePoint > 16rFF ifTrue:[
e11520f05fef #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 22381
diff changeset
  4454
            c := replacementCharacter
e11520f05fef #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 22381
diff changeset
  4455
        ].
e11520f05fef #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 22381
diff changeset
  4456
        out nextPut:c.
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4457
    ].
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4458
    ^ out contents
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
    "
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4461
     (Character value:16r220) utf8Encoded
22405
e11520f05fef #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 22381
diff changeset
  4462
        utf8DecodedWithTwoByteCharactersReplacedBy:(Character space)
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4463
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4464
     (Character value:16r220) utf8Encoded asExternalBytes copyButLast
22405
e11520f05fef #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 22381
diff changeset
  4465
        utf8DecodedWithTwoByteCharactersReplacedBy:(Character space)
e11520f05fef #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 22381
diff changeset
  4466
    "
e11520f05fef #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 22381
diff changeset
  4467
e11520f05fef #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 22381
diff changeset
  4468
    "Modified (comment): / 02-01-2018 / 18:54:18 / stefan"
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4469
! !
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4470
4782
04a2ea1ad3a5 added replaceBytes...
Claus Gittinger <cg@exept.de>
parents: 4530
diff changeset
  4471
!UninterpretedBytes methodsFor:'filling & replacing'!
04a2ea1ad3a5 added replaceBytes...
Claus Gittinger <cg@exept.de>
parents: 4530
diff changeset
  4472
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4473
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
  4474
    "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
  4475
     like collection.
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4476
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4477
     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
  4478
     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
  4479
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4480
%{  /* NOCONTEXT */
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4481
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4482
    int nIndex, repNIndex;
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4483
    int startIndex, stopIndex;
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4484
    REGISTER unsigned char *src;
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4485
    REGISTER int repStartIndex;
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4486
    int repStopIndex, count;
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4487
    REGISTER unsigned char *dst;
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4488
    OBJ cls;
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4489
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4490
#ifndef NO_PRIM_BYTEARR
14082
8ee1315d35eb Revert to 1.81
Stefan Vogel <sv@exept.de>
parents: 14081
diff changeset
  4491
    if ((__isBytes(aCollection) || __isExternalBytesLike(aCollection))
14142
7a769e54130d changed:
Stefan Vogel <sv@exept.de>
parents: 14132
diff changeset
  4492
     && (__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
  4493
     && __bothSmallInteger(start, stop)
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4494
     && __isSmallInteger(repStart)) {
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4495
	startIndex = __intVal(start) - 1;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4496
	if (startIndex >= 0) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4497
	    dst = (__ByteArrayInstPtr(self)->ba_element) + startIndex;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4498
	    nIndex = __byteArraySize(self);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4499
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4500
	    if ((cls = __qClass(self)) != @global(ByteArray)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4501
		int nInst;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4502
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4503
		nInst = __OBJS2BYTES__(__intVal(__ClassInstPtr(cls)->c_ninstvars));
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4504
		dst += nInst;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4505
		nIndex -= nInst;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4506
	    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4507
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4508
	    stopIndex = __intVal(stop) - 1;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4509
	    count = stopIndex - startIndex + 1;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4510
	    if (count == 0) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4511
		RETURN ( self );
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4512
	    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4513
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4514
	    if ((count > 0) && (stopIndex < nIndex)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4515
		repStartIndex = __intVal(repStart) - 1;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4516
		if (repStartIndex >= 0) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4517
		    if (__isExternalBytesLike(aCollection)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4518
			OBJ sz;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4519
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4520
			src = __externalAddressVal(aCollection);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4521
			if (src == 0) goto fallBack;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4522
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4523
			sz = __externalBytesSize(aCollection);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4524
			if (__isSmallInteger(sz)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4525
			    repNIndex = __smallIntegerVal(sz);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4526
			} else {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4527
			    repNIndex = repStopIndex+1; /* always enough */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4528
			}
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4529
			src = src + repStartIndex;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4530
		    } else {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4531
			if (__isStringLike(aCollection)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4532
			    repNIndex = __stringSize(aCollection);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4533
			} else {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4534
			    repNIndex = __qSize(aCollection) - OHDR_SIZE;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4535
			}
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4536
			src = (__ByteArrayInstPtr(aCollection)->ba_element) + repStartIndex;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4537
			if ((cls = __qClass(aCollection)) != @global(ByteArray)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4538
			    int nInst;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4539
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4540
			    nInst = __OBJS2BYTES__(__intVal(__ClassInstPtr(cls)->c_ninstvars));
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4541
			    src += nInst;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4542
			    repNIndex -= nInst;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4543
			}
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4544
		    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4545
		    repStopIndex = repStartIndex + (stopIndex - startIndex);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4546
		    if (repStopIndex < repNIndex) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4547
			if (aCollection == self) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4548
			    /* take care of overlapping copy */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4549
			    if (src < dst) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4550
				/* must do a reverse copy */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4551
				src += count;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4552
				dst += count;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4553
				while (count-- > 0) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4554
				    *--dst = *--src;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4555
				}
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4556
				RETURN ( self );
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4557
			    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4558
			}
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4559
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4560
# ifdef bcopy4
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4561
			if (((unsigned INT)src & 3) == ((unsigned INT)dst & 3)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4562
			    int nW;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4563
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4564
			    /* copy unaligned part */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4565
			    while (count && ((unsigned INT)src & 3)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4566
				*dst++ = *src++;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4567
				count--;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4568
			    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4569
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4570
			    if (count > 0) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4571
				/* copy aligned part */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4572
				nW = count >> 2;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4573
				bcopy4(src, dst, nW);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4574
				if ((count = count & 3) != 0) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4575
				    /* copy any remaining part */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4576
				    src += (nW<<2);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4577
				    dst += (nW<<2);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4578
				    while (count--) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4579
					*dst++ = *src++;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4580
				    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4581
				}
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4582
			    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4583
			    RETURN ( self );
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4584
			}
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4585
# else
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4586
#  if __POINTER_SIZE__ == 8
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4587
			if (((unsigned INT)src & 7) == ((unsigned INT)dst & 7)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4588
			    /* copy unaligned part */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4589
			    while (count && ((unsigned INT)src & 7)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4590
				*dst++ = *src++;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4591
				count--;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4592
			    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4593
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4594
			    /* copy aligned part */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4595
			    while (count >= 8) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4596
				((unsigned INT *)dst)[0] = ((unsigned INT *)src)[0];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4597
				dst += 8;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4598
				src += 8;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4599
				count -= 8;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4600
			    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4601
			    while (count--) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4602
				*dst++ = *src++;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4603
			    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4604
			    RETURN ( self );
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4605
			}
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4606
#  endif /* 64bit */
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4607
# endif /* bcopy4 */
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4608
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4609
# ifdef FAST_MEMCPY
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4610
			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
  4611
# else
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4612
#  ifdef __UNROLL_LOOPS__
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4613
			while (count >= 8) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4614
			    dst[0] = src[0]; dst[1] = src[1];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4615
			    dst[2] = src[2]; dst[3] = src[3];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4616
			    dst[4] = src[4]; dst[5] = src[5];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4617
			    dst[6] = src[6]; dst[7] = src[7];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4618
			    dst += 8; src += 8;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4619
			    count -= 8;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4620
			}
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4621
#  endif /* __UNROLL_LOOPS__ */
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4622
			while (count-- > 0) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4623
			    *dst++ = *src++;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4624
			}
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4625
# endif
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4626
			RETURN ( self );
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4627
		    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4628
		}
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4629
	    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4630
	}
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4631
    }
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4632
fallBack: ;
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4633
#endif
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4634
%}.
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4635
    "
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4636
     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
  4637
     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
  4638
    "
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4639
    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
  4640
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4641
    "
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4642
     #[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
  4643
	copy
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4644
	    replaceFrom:1 to:8
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4645
	    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
  4646
	    startingAt:1
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4647
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4648
     #[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
  4649
	copy
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4650
	    replaceFrom:3 to:10
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4651
	    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
  4652
	    startingAt:1
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4653
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4654
     #[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
  4655
	copy
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4656
	    replaceFrom:3 to:4
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4657
	    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
  4658
	    startingAt:1
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4659
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4660
     #[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
  4661
	copy
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4662
	    replaceFrom:0 to:9
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4663
	    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
  4664
	    startingAt:1
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4665
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4666
     #[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
  4667
	copy
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4668
	    replaceFrom:1 to:10
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4669
	    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
  4670
	    startingAt:0
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4671
    "
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4672
!
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4673
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4674
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
  4675
    "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
  4676
     byte-array-like.
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4677
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4678
     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
  4679
     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
  4680
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4681
    ^ self
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4682
	replaceBytesFrom:startIndex
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4683
	to:(startIndex + replacementCollection size - repStartIndex)
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4684
	with:replacementCollection
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4685
	startingAt:repStartIndex
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4686
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4687
    "
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4688
     args:    startIndex            : <integer>
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4689
	      replacementCollection : <collection of <bytes> >
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4690
	      repStartIndex         : <integer>
12769
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
     returns: self
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4693
    "
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4694
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4695
    "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
  4696
    "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
  4697
!
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4698
13902
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4699
replaceBytesWith:replacementCollection
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4700
    "replace elements from another collection, which must be byte-array-like.
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4701
     Replace stops at whichever collection is smaller.
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4702
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4703
     Notice: This operation modifies the receiver, NOT a copy;
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4704
     therefore the change may affect all others referencing the receiver."
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4705
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4706
    ^ self
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4707
	replaceBytesFrom:1
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4708
	to:(replacementCollection sizeInBytes min:self sizeInBytes)
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4709
	with:replacementCollection
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4710
	startingAt:1
13902
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4711
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4712
    "
15004
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  4713
     (ByteArray new:10) replaceBytesWith:'hello'
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  4714
     (ByteArray new:10) replaceBytesWith:'hello world bla bla bla'
13902
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4715
    "
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4716
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4717
    "Created: / 09-01-2012 / 16:18:10 / cg"
22215
10bdeb2e5021 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 22161
diff changeset
  4718
    "Modified: / 28-08-2017 / 02:17:23 / cg"
13902
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4719
!
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4720
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4721
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
  4722
    "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
  4723
     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
  4724
     Return the receiver.
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4725
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4726
     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
  4727
     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
  4728
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4729
    (self class isBytes
22229
74cd3c85fcd2 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 22217
diff changeset
  4730
     and:[aCollection class == self class or:[aCollection isSingleByteCollection]]
74cd3c85fcd2 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 22217
diff changeset
  4731
    ) ifTrue:[
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4732
	"can do it fast: just copy the plain bytes"
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4733
	^ 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
  4734
    ].
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4735
    ^ 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
  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
	      stopIndex             : <integer>
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4740
	      replacementCollection : <collection of <bytes> >
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4741
	      repStartIndex         : <integer>
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4742
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4743
     returns: self
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
14131
3b0cb7751a71 changed: #replaceFrom:to:with:startingAt:
Claus Gittinger <cg@exept.de>
parents: 14082
diff changeset
  4746
    "Modified: / 08-05-2012 / 13:23:27 / cg"
4782
04a2ea1ad3a5 added replaceBytes...
Claus Gittinger <cg@exept.de>
parents: 4530
diff changeset
  4747
! !
04a2ea1ad3a5 added replaceBytes...
Claus Gittinger <cg@exept.de>
parents: 4530
diff changeset
  4748
12757
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4749
!UninterpretedBytes methodsFor:'hashing'!
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4750
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4751
computeXorHashFrom:startIndex to:endIndex
20372
aa0461b19c97 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20177
diff changeset
  4752
    "compute and answer the 32bit SmallInteger-Hash of the bytes
12757
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4753
     from startIndex to endIndex.
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4754
     If endindex = 0 or endIndex > size, hash up the size.
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4755
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4756
     NOTE: startIndex and endIndex are only hints about what should be hashed.
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4757
	   In fact, more bytes could be involved in hashing.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4758
	   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
  4759
aa0461b19c97 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20177
diff changeset
  4760
    Also NOTE:
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4761
	used to return a 32bit hash on 32bit machines and a 64bit integer on 64bit cpus.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4762
	changed to return the same for all (in case hash values are used for other purposes)."
12757
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4763
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4764
    |w|
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4765
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4766
%{
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4767
    if (__bothSmallInteger(startIndex, endIndex)) {
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4768
	unsigned char *cp;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4769
	INT sz;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4770
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4771
	__fetchBytePointerAndSize__(self, &cp, &sz);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4772
	if (cp) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4773
	    INT sidx = ((unsigned INT)__smallIntegerVal(startIndex)) - 1;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4774
	    INT eidx = ((unsigned INT)__smallIntegerVal(endIndex)) - 1;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4775
// #           define H_INT INT
20372
aa0461b19c97 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20177
diff changeset
  4776
// #           define _MAX_H_INT _MAX_INT;
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4777
#           define H_INT int
20372
aa0461b19c97 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20177
diff changeset
  4778
#           define _MAX_H_INT 0x3FFFFFFF
aa0461b19c97 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20177
diff changeset
  4779
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4780
	    unsigned char *ep;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4781
	    unsigned H_INT hash = 0, hash2 = 0, carry;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4782
	    int i;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4783
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4784
	    if (eidx < 0 || eidx >= sz) eidx = sz - 1;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4785
	    if (sidx > eidx) sidx = eidx;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4786
	    if (sidx < 0) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4787
		RETURN(__mkSmallInteger(0));
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4788
	    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4789
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4790
	    ep = cp + eidx;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4791
	    cp += sidx;
12757
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4792
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4793
#if 0
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4794
	    /*
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4795
	     * On LSB-First (little endian) cpus,
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4796
	     * this code does not produce the same result
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4797
	     * if the same bytes are at different positions
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4798
	     */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4799
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4800
	    if ((H_INT)cp & (sizeof(H_INT)-1)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4801
		/* not aligned */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4802
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4803
		for (i=0; cp <= ep; cp++) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4804
		    hash2 = (hash2 << 8) | *cp;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4805
		    if (++i == sizeof(H_INT)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4806
			hash ^= hash2;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4807
			i = hash2 = 0;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4808
		    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4809
		}
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4810
	    } else {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4811
		/* aligned */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4812
		for (; cp+sizeof(H_INT) <= ep; cp += sizeof(H_INT)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4813
		    hash ^= *(unsigned H_INT *)cp;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4814
		}
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4815
		for (; cp <= ep; cp++) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4816
		    hash2 = (hash2 << 8) | *cp;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4817
		}
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4818
	    }
12757
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4819
#else
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4820
	    for (i=0; cp <= ep-sizeof(H_INT); cp += sizeof(H_INT)) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4821
		hash2 = cp[0];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4822
		hash2 = (hash2 << 8) | cp[1];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4823
		hash2 = (hash2 << 8) | cp[2];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4824
		hash2 = (hash2 << 8) | cp[3];
20373
bce89424b82a #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20372
diff changeset
  4825
# if 0
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4826
		if (sizeof(H_INT) == 8) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4827
		    hash2 = (hash2 << 8) | cp[4];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4828
		    hash2 = (hash2 << 8) | cp[5];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4829
		    hash2 = (hash2 << 8) | cp[6];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4830
		    hash2 = (hash2 << 8) | cp[7];
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4831
		}
20373
bce89424b82a #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20372
diff changeset
  4832
# endif
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4833
		/*
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4834
		 * multiply by large prime to scramble bits and
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4835
		 * to avoid a 0 result from
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4836
		 * #[1 2 3 4 1 2 3 4] computeXorHashFrom:1 to:8.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4837
		 */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4838
		hash ^= (hash * 31415821) ^ hash2;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4839
	    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4840
	    for (hash2 = 0; cp <= ep; cp++) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4841
		hash2 = (hash2 << 8) | *cp;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4842
	    }
12757
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4843
#endif
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4844
	    hash ^= (hash * 31415821) ^ hash2;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4845
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4846
	    /*
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4847
	     * fold the high bits not fitting into a H_INT
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4848
	     */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4849
	    carry = hash & ~_MAX_H_INT;
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4850
	    if (carry) {
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4851
		hash = (hash & _MAX_H_INT) ^ (carry >> 8);
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4852
	    }
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4853
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4854
	    RETURN(__mkSmallInteger(hash));
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4855
	}
12757
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4856
    }
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4857
%}.
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4858
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4859
    ^ self primitiveFailed
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4860
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4861
    "
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4862
     #[1 2 3 4] computeXorHashFrom:1 to:4.
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4863
     #[1 2 3 4] computeXorHashFrom:1 to:32.
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4864
     #[1 2 3 4] computeXorHashFrom:1 to:0.
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4865
     #[1 2 3 4 5] computeXorHashFrom:1 to:4.
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4866
     #[1 2 3 4 1 2 3 4] computeXorHashFrom:1 to:8.
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4867
     #[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
  4868
     #[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
  4869
     #[2 3 4 5 6 7 8] computeXorHashFrom:1 to:8.
91ec8f105783 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19507
diff changeset
  4870
    "
91ec8f105783 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19507
diff changeset
  4871
!
91ec8f105783 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19507
diff changeset
  4872
91ec8f105783 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19507
diff changeset
  4873
hash
91ec8f105783 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19507
diff changeset
  4874
    |sz|
91ec8f105783 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19507
diff changeset
  4875
91ec8f105783 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19507
diff changeset
  4876
    sz := self size.
91ec8f105783 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19507
diff changeset
  4877
    sz <= 32 ifTrue:[
22381
c4270f11aaca #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22264
diff changeset
  4878
        ^ self computeXorHashFrom:1 to:sz.
19554
91ec8f105783 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19507
diff changeset
  4879
    ].
22381
c4270f11aaca #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22264
diff changeset
  4880
    
c4270f11aaca #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22264
diff changeset
  4881
    "/ 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
  4882
    "/ and the last 16 bytes.
c4270f11aaca #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22264
diff changeset
  4883
    "/ 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
  4884
    "/ 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
  4885
    "/ its way into some dictionary (as key-index).
c4270f11aaca #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22264
diff changeset
  4886
    "/ It does not really hurt anyway, so there is no need to change it.
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4887
    ^ (sz bitXor:(self computeXorHashFrom:1 to:16)) bitXor:(self computeXorHashFrom:sz-16 to:sz)
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4888
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4889
    "
22381
c4270f11aaca #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22264
diff changeset
  4890
        #[1 2 3 4] hash
c4270f11aaca #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22264
diff changeset
  4891
        #[1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 ] hash
c4270f11aaca #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22264
diff changeset
  4892
        
c4270f11aaca #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22264
diff changeset
  4893
        #[1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4
c4270f11aaca #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22264
diff changeset
  4894
          1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 ] hash
c4270f11aaca #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22264
diff changeset
  4895
          
c4270f11aaca #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22264
diff changeset
  4896
        #[1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4
c4270f11aaca #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22264
diff changeset
  4897
          1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1] hash
c4270f11aaca #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22264
diff changeset
  4898
    "
c4270f11aaca #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22264
diff changeset
  4899
c4270f11aaca #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22264
diff changeset
  4900
    "Modified (format): / 28-11-2017 / 15:03:36 / cg"
12757
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4901
! !
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4902
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4903
!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
  4904
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4905
copyReverse
22102
a1ffa53d31c7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 22055
diff changeset
  4906
    <resource: #obsolete>
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4907
    "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
  4908
22102
a1ffa53d31c7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 22055
diff changeset
  4909
    self obsoleteMethodWarning:'use #reversed'.
a1ffa53d31c7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 22055
diff changeset
  4910
a1ffa53d31c7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 22055
diff changeset
  4911
    ^ self reversed
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4912
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4913
    "
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4914
     #[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
  4915
     #[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
  4916
    "
22102
a1ffa53d31c7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 22055
diff changeset
  4917
a1ffa53d31c7 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 22055
diff changeset
  4918
    "Modified: / 25-07-2017 / 17:10:02 / stefan"
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4919
!
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4920
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4921
swapBytes
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4922
    "swap bytes (of int16s) inplace -
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4923
     Expects that the receiver has an even number of bytes;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4924
     if not, only the pairs excluding the last byte are swapped"
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4925
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4926
    |b1 lastIndex "{ Class: SmallInteger }"|
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4927
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4928
    lastIndex := self size-1.
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4929
    1 to:lastIndex by:2 do:[:idx |
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4930
	b1 := self byteAt:idx.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4931
	self byteAt:idx put:(self byteAt:idx+1).
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4932
	self byteAt:idx+1 put:b1.
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4933
    ].
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4934
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4935
    "
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4936
     #[1 2 3 4 5] swapBytes
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4937
     #[1 2 3 4] swapBytes
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4938
    "
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4939
! !
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4940
14131
3b0cb7751a71 changed: #replaceFrom:to:with:startingAt:
Claus Gittinger <cg@exept.de>
parents: 14082
diff changeset
  4941
3363
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  4942
!UninterpretedBytes methodsFor:'misc'!
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  4943
22504
00b1dfdd05b4 #FEATURE by stefan
Stefan Vogel <sv@exept.de>
parents: 22420
diff changeset
  4944
copyToEndInto:aStream
00b1dfdd05b4 #FEATURE by stefan
Stefan Vogel <sv@exept.de>
parents: 22420
diff changeset
  4945
    "copy all of myself into aStream. Compatibility with Stream"
00b1dfdd05b4 #FEATURE by stefan
Stefan Vogel <sv@exept.de>
parents: 22420
diff changeset
  4946
00b1dfdd05b4 #FEATURE by stefan
Stefan Vogel <sv@exept.de>
parents: 22420
diff changeset
  4947
    aStream nextPutAll:self.
00b1dfdd05b4 #FEATURE by stefan
Stefan Vogel <sv@exept.de>
parents: 22420
diff changeset
  4948
00b1dfdd05b4 #FEATURE by stefan
Stefan Vogel <sv@exept.de>
parents: 22420
diff changeset
  4949
    "Created: / 23-01-2018 / 18:43:40 / stefan"
00b1dfdd05b4 #FEATURE by stefan
Stefan Vogel <sv@exept.de>
parents: 22420
diff changeset
  4950
!
00b1dfdd05b4 #FEATURE by stefan
Stefan Vogel <sv@exept.de>
parents: 22420
diff changeset
  4951
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  4952
swapLongAt:byteIndex
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  4953
    "swap the byteOrder of a long.
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  4954
     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
  4955
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  4956
    |t|
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  4957
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  4958
    t := self byteAt:byteIndex.
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  4959
    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
  4960
    self byteAt:(byteIndex + 3) put:t.
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  4961
    t := self byteAt:(byteIndex + 1).
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  4962
    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
  4963
    self byteAt:(byteIndex + 2) put:t
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  4964
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  4965
    "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
  4966
! !
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  4967
18664
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4968
!UninterpretedBytes methodsFor:'printing & storing'!
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4969
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4970
hexPrintOn:aStream
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4971
    "print as hex string, eg: 'FF0243'.
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4972
     This string can be used in #fromHexString: to recreate the byteArray"
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4973
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4974
    self hexPrintOn:aStream withSeparator:nil
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4975
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4976
    "
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4977
      #[1 2 3 4 10 17] hexPrintOn:Transcript
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4978
    "
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4979
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4980
    "
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4981
     |s|
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4982
     s := String streamContents:[:s | #[1 2 3 4 10 17] hexPrintOn:s].
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4983
     ByteArray fromHexString:s
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4984
    "
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4985
!
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4986
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4987
hexPrintOn:aStream withSeparator:aSeparatorStringOrCharacterOrNil
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4988
    "print as hex string with separators, eg: 'FF:02:43'"
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4989
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4990
    |first|
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4991
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4992
    first := true.
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4993
    1 to:self size do:[:idx |
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4994
	aSeparatorStringOrCharacterOrNil notNil ifTrue:[
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4995
	    first ifFalse:[
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4996
		aSeparatorStringOrCharacterOrNil printOn:aStream
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4997
	    ] ifTrue:[
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4998
		first := false.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  4999
	    ].
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5000
	].
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5001
	(self byteAt:idx) printOn:aStream base:16 size:2 fill:$0.
18664
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5002
    ].
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5003
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5004
    "
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5005
      #[1 2 3 4 10 17] hexPrintOn:Transcript withSeparator:$:
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5006
      #[1 2 3 4 10 17] hexPrintOn:Transcript withSeparator:(Character space)
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5007
      #[1 2 3 4 10 17] hexPrintOn:Transcript withSeparator:'-'
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5008
      #[1 2 3 4 10 17] hexPrintOn:Transcript withSeparator:nil
20177
0eaabd41cd8a #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20176
diff changeset
  5009
      'hello' hexPrintOn:Transcript withSeparator:'.'
18664
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5010
    "
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5011
!
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5012
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5013
hexPrintString
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5014
    "print as hex string, eg: 'FF0243'.
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5015
     This string can be used in #fromHexString: to recreate the byteArray"
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5016
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5017
    ^ self hexPrintStringWithSeparator:nil
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5018
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5019
    "
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5020
     #[1 2 3 4 10 17] hexPrintString
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5021
     ByteArray fromHexString:#[1 2 3 4 10 17] hexPrintString
20176
2e68059772c7 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20139
diff changeset
  5022
     'hello' hexPrintString
18664
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
    "Modified: / 03-07-2010 / 01:59:19 / cg"
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
hexPrintStringWithSeparator:aSeparatorStringOrCharacterOrNil
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5029
    "print as hex string, eg: 'FF:02:43'."
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5030
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5031
    ^ String
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5032
	streamContents:[:s |
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5033
	    self hexPrintOn:s withSeparator:aSeparatorStringOrCharacterOrNil.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5034
	]
18664
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5035
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5036
    "
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5037
      #[1 2 3 4 10 17] hexPrintStringWithSeparator:$:
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5038
      #[1 2 3 4 10 17] hexPrintStringWithSeparator:Character space
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5039
      #[1 2 3 4 10 17] hexPrintStringWithSeparator:' - '
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5040
      #[1 2 3 4 10 17] hexPrintStringWithSeparator:nil
20176
2e68059772c7 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20139
diff changeset
  5041
      'hello' hexPrintStringWithSeparator:'.'
18664
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5042
    "
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5043
! !
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  5044
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  5045
!UninterpretedBytes methodsFor:'private'!
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  5046
22883
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  5047
reportError:failReason with:parameter
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  5048
    "common helper"
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  5049
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  5050
    (failReason == #invalidIndex) ifTrue:[
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  5051
        ^ self indexNotIntegerOrOutOfBounds:parameter
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  5052
    ].
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  5053
    failReason == #nullPointer ifTrue:[
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  5054
        ^ self error:'free or unallocated object referenced'
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  5055
    ].
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  5056
    failReason == #unaligned ifTrue:[
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  5057
        ^ self error:'unaligned index'. 
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  5058
    ].
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  5059
    self primitiveFailed:failReason.
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  5060
!
711de6b11ff1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22504
diff changeset
  5061
18969
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  5062
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
  5063
    "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
  5064
18969
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  5065
    |srcIdx "{ Class:SmallInteger }"
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  5066
     start "{ Class:SmallInteger }"
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  5067
     stop "{ Class:SmallInteger }"|
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  5068
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  5069
    start := startArg.
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  5070
    stop := stopArg.
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  5071
    srcIdx := sourceIndex.
18969
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  5072
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  5073
    start to:stop do:[:dstIdx |
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5074
	self byteAt:dstIdx put:(sourceBytes byteAt:srcIdx).
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5075
	srcIdx := srcIdx + 1
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  5076
    ].
22216
db5b7da6d61e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 22215
diff changeset
  5077
db5b7da6d61e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 22215
diff changeset
  5078
    "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
  5079
! !
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  5080
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  5081
!UninterpretedBytes methodsFor:'queries'!
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  5082
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  5083
containsNon7BitAscii
18969
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  5084
    "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
  5085
     (i.e. if it is non-ascii)"
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  5086
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  5087
    |sz "{ Class:SmallInteger }"|
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  5088
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  5089
    sz := self size.
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  5090
    1 to:sz do:[:idx|
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5091
	(self at:idx) > 16r7F ifTrue:[
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5092
	    ^ true.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5093
	].
18969
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  5094
    ].
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  5095
    ^ false.
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  5096
!
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  5097
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  5098
containsNon8BitElements
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  5099
    "return true, if the underlying structure contains elements larger than a single byte"
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  5100
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  5101
    |sz "{ Class:SmallInteger }"|
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  5102
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  5103
    sz := self size.
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  5104
    1 to:sz do:[:idx|
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5105
	(self at:idx) > 16rFF ifTrue:[
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5106
	    ^ true.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5107
	].
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  5108
    ].
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  5109
    ^ false.
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  5110
!
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  5111
7218
b798be6d632f elementBoundsError -> elementBoundsError:
Claus Gittinger <cg@exept.de>
parents: 7197
diff changeset
  5112
defaultElement
b798be6d632f elementBoundsError -> elementBoundsError:
Claus Gittinger <cg@exept.de>
parents: 7197
diff changeset
  5113
    ^ 0
b798be6d632f elementBoundsError -> elementBoundsError:
Claus Gittinger <cg@exept.de>
parents: 7197
diff changeset
  5114
!
b798be6d632f elementBoundsError -> elementBoundsError:
Claus Gittinger <cg@exept.de>
parents: 7197
diff changeset
  5115
21320
8b0aaee195e6 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20961
diff changeset
  5116
isValidUTF8
21323
986051ecf7f2 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21320
diff changeset
  5117
    "returns true, if the receiver contains a valid UTF8 encoded string"
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5118
21323
986051ecf7f2 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21320
diff changeset
  5119
    |trailing  "{ Class: SmallInteger }"|
986051ecf7f2 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21320
diff changeset
  5120
21320
8b0aaee195e6 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20961
diff changeset
  5121
    trailing := 0.
8b0aaee195e6 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20961
diff changeset
  5122
8b0aaee195e6 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20961
diff changeset
  5123
    1 to:self size do:[:idx |
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5124
	|byte "{ Class: SmallInteger }" |
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5125
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5126
	byte := self byteAt:idx.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5127
	trailing ~~ 0 ifTrue:[
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5128
	    (byte bitAnd:2r11000000) == 2r10000000 ifFalse:[^ false].
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5129
	    trailing := trailing - 1.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5130
	] ifFalse:[
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5131
	    (byte bitAnd:16r80) == 0 ifTrue:[
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5132
		"/ continue
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5133
	    ] ifFalse:[
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5134
		(byte bitAnd:2r11100000) == 2r11000000 ifTrue:[
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5135
		    "/ strict: should not be encoded this way (could have used a shorter sequence)
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5136
		    (byte bitAnd:2r00011110) == 0 ifTrue:[
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5137
			^ false
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5138
		    ].
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5139
		    trailing := 1.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5140
		] ifFalse:[
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5141
		    (byte bitAnd:2r11110000) == 2r11100000 ifTrue:[
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5142
			trailing := 2.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5143
		    ] ifFalse:[
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5144
			(byte bitAnd:2r11111000) == 2r11110000 ifTrue:[
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5145
			    trailing := 3.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5146
			] ifFalse:[
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5147
			    (byte bitAnd:2r11111100) == 2r11111000 ifTrue:[
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5148
				trailing := 4.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5149
			    ] ifFalse:[
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5150
				(byte bitAnd:2r11111110) == 2r11111100 ifTrue:[
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5151
				    trailing := 5.
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5152
				] ifFalse:[
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5153
				    ^ false
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5154
				].
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5155
			    ].
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5156
			].
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5157
		    ].
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5158
		].
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5159
	    ].
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5160
	].
21320
8b0aaee195e6 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20961
diff changeset
  5161
    ].
8b0aaee195e6 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20961
diff changeset
  5162
    ^ trailing == 0
8b0aaee195e6 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20961
diff changeset
  5163
8b0aaee195e6 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20961
diff changeset
  5164
    "
8b0aaee195e6 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20961
diff changeset
  5165
     'abc' isValidUTF8
21377
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  5166
     'abcöäü' isValidUTF8
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  5167
     'abcöäü' utf8Encoded isValidUTF8
21323
986051ecf7f2 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21320
diff changeset
  5168
     (Character value:16r800) utf8Encoded isValidUTF8
986051ecf7f2 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21320
diff changeset
  5169
     (Character value:16r1000) utf8Encoded isValidUTF8
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5170
21320
8b0aaee195e6 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20961
diff changeset
  5171
     1 to:255 do:[:c1 |
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5172
	 1 to:255 do:[:c2 |
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5173
	     1 to:255 do:[:c3 |
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5174
		 self assert:(c1 asCharacter , c2 asCharacter , c3 asCharacter) utf8Encoded isValidUTF8
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5175
	     ]
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5176
	 ]
21323
986051ecf7f2 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21320
diff changeset
  5177
     ]
986051ecf7f2 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21320
diff changeset
  5178
986051ecf7f2 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21320
diff changeset
  5179
     |s|
986051ecf7f2 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21320
diff changeset
  5180
     1 to:10000 do:[:c1 |
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5181
	 1 to:255 do:[:c2 |
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5182
	     s := (c1 asCharacter , c2 asCharacter).
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5183
	     self assert:s utf8Encoded isValidUTF8
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5184
	 ]
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5185
     ]
21320
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
!
8b0aaee195e6 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20961
diff changeset
  5188
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  5189
referencesAny:aCollection
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  5190
    "redefined to speed up searching when many of my instances are present"
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  5191
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  5192
%{ /* NOCONTEXT */
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  5193
    if (__mkSmallInteger(0) == __ClassInstPtr(__qClass(self))->c_ninstvars) {
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5194
	/* I am only bytes */
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5195
	RETURN(false)
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  5196
    }
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  5197
%}.
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  5198
    ^ super referencesAny:aCollection
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  5199
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  5200
    "
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5201
	'abc' referencesAny:#()
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  5202
    "
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  5203
!
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  5204
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  5205
sizeInBytes
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  5206
    "return the number of 8-bit bytes in the receiver.
22217
0819f3572300 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 22216
diff changeset
  5207
     This is needed since subclasses may redefine #size (TwoByteString)"
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  5208
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  5209
    ^ super size
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  5210
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  5211
    "Created: / 5.3.1998 / 10:41:13 / stefan"
21377
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  5212
!
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  5213
22217
0819f3572300 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 22216
diff changeset
  5214
utf8DecodedSize
22420
7b32109bff47 #DOCUMENTATION by mawalch
mawalch
parents: 22405
diff changeset
  5215
    "return the number of characters needed when this string is
22405
e11520f05fef #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 22381
diff changeset
  5216
     decoded from UTF-8"
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5217
22217
0819f3572300 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 22216
diff changeset
  5218
    |sz "{ Class:SmallInteger }"
0819f3572300 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 22216
diff changeset
  5219
     cnt "{ Class:SmallInteger }"|
21377
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  5220
22261
aed33b3ee44e *** empty log message ***
sr
parents: 22229
diff changeset
  5221
    sz := self size.
21377
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  5222
    cnt := 0.
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  5223
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  5224
    1 to:sz do:[:idx|
22405
e11520f05fef #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 22381
diff changeset
  5225
        "/ count the number of UTF-8 start bytes
e11520f05fef #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 22381
diff changeset
  5226
        ((self byteAt:idx) bitAnd:16rC0) ~~ 16r80 ifTrue:[
e11520f05fef #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 22381
diff changeset
  5227
            cnt := cnt+1.
e11520f05fef #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 22381
diff changeset
  5228
        ].
21377
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  5229
    ].
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  5230
    ^ cnt.
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  5231
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  5232
    "
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  5233
     'hello world' asByteArray utf8DecodedSize
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  5234
     'ä' utf8Encoded asByteArray utf8DecodedSize
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  5235
     'äΣΔΨӕἤῴ' utf8Encoded asByteArray utf8DecodedSize
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  5236
    "
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  5237
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  5238
    "Created: / 07-02-2017 / 15:03:07 / stefan"
a808dd6d6b4b #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 21323
diff changeset
  5239
    "Modified: / 07-02-2017 / 19:14:06 / stefan"
22405
e11520f05fef #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 22381
diff changeset
  5240
    "Modified (comment): / 02-01-2018 / 18:30:27 / stefan"
22420
7b32109bff47 #DOCUMENTATION by mawalch
mawalch
parents: 22405
diff changeset
  5241
    "Modified (comment): / 15-01-2018 / 08:29:10 / mawalch"
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  5242
! !
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  5243
8986
c2962d45eca0 new: #isByteCollection
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
  5244
!UninterpretedBytes methodsFor:'testing'!
c2962d45eca0 new: #isByteCollection
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
  5245
c2962d45eca0 new: #isByteCollection
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
  5246
isByteCollection
c2962d45eca0 new: #isByteCollection
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
  5247
    "return true, if the receiver has access methods for bytes;
22229
74cd3c85fcd2 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 22217
diff changeset
  5248
     This is different from 'self class isBytes',
8986
c2962d45eca0 new: #isByteCollection
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
  5249
     true is returned here - the method is redefined from Object."
c2962d45eca0 new: #isByteCollection
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
  5250
c2962d45eca0 new: #isByteCollection
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
  5251
    ^ true
9005
b82aa6bdc487 #isNonByteCollection
Stefan Vogel <sv@exept.de>
parents: 8995
diff changeset
  5252
!
b82aa6bdc487 #isNonByteCollection
Stefan Vogel <sv@exept.de>
parents: 8995
diff changeset
  5253
b82aa6bdc487 #isNonByteCollection
Stefan Vogel <sv@exept.de>
parents: 8995
diff changeset
  5254
isNonByteCollection
b82aa6bdc487 #isNonByteCollection
Stefan Vogel <sv@exept.de>
parents: 8995
diff changeset
  5255
    "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
  5256
     false is returned here - the method is redefined from Collection."
b82aa6bdc487 #isNonByteCollection
Stefan Vogel <sv@exept.de>
parents: 8995
diff changeset
  5257
b82aa6bdc487 #isNonByteCollection
Stefan Vogel <sv@exept.de>
parents: 8995
diff changeset
  5258
    ^ false
22229
74cd3c85fcd2 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 22217
diff changeset
  5259
!
74cd3c85fcd2 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 22217
diff changeset
  5260
74cd3c85fcd2 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 22217
diff changeset
  5261
isSingleByteCollection
74cd3c85fcd2 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 22217
diff changeset
  5262
    "return true, if the receiver has access methods for bytes;
74cd3c85fcd2 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 22217
diff changeset
  5263
     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
  5264
     and #replaceFrom:to: is equivalent to #replaceBytesFrom:to:.
22229
74cd3c85fcd2 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 22217
diff changeset
  5265
     This is different from 'self class isBytes',
74cd3c85fcd2 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 22217
diff changeset
  5266
     true is returned here - the method is redefined from Object."
74cd3c85fcd2 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 22217
diff changeset
  5267
74cd3c85fcd2 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 22217
diff changeset
  5268
    ^ true
8986
c2962d45eca0 new: #isByteCollection
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
  5269
! !
c2962d45eca0 new: #isByteCollection
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
  5270
11009
fb66915c5bb5 changed #acceptVisitor:with: - moved to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 10676
diff changeset
  5271
!UninterpretedBytes methodsFor:'visiting'!
fb66915c5bb5 changed #acceptVisitor:with: - moved to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 10676
diff changeset
  5272
fb66915c5bb5 changed #acceptVisitor:with: - moved to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 10676
diff changeset
  5273
acceptVisitor:aVisitor with:aParameter
16719
19b7ae0bbb49 comment/format only
Claus Gittinger <cg@exept.de>
parents: 16320
diff changeset
  5274
    "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
  5275
fb66915c5bb5 changed #acceptVisitor:with: - moved to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 10676
diff changeset
  5276
    ^ aVisitor visitByteArray:self with:aParameter
fb66915c5bb5 changed #acceptVisitor:with: - moved to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 10676
diff changeset
  5277
! !
fb66915c5bb5 changed #acceptVisitor:with: - moved to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 10676
diff changeset
  5278
695
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
  5279
!UninterpretedBytes class methodsFor:'documentation'!
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
  5280
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
  5281
version
18600
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  5282
    ^ '$Header$'
12253
c933c6fcdeef changed: #fromHexStringWithSeparators:
Claus Gittinger <cg@exept.de>
parents: 11973
diff changeset
  5283
!
c933c6fcdeef changed: #fromHexStringWithSeparators:
Claus Gittinger <cg@exept.de>
parents: 11973
diff changeset
  5284
c933c6fcdeef changed: #fromHexStringWithSeparators:
Claus Gittinger <cg@exept.de>
parents: 11973
diff changeset
  5285
version_CVS
18600
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  5286
    ^ '$Header$'
695
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
  5287
! !
15087
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  5288
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
  5289
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
  5290
UninterpretedBytes initialize!