UninterpretedBytes.st
author Claus Gittinger <cg@exept.de>
Tue, 06 Sep 2011 08:36:30 +0200
changeset 13635 b07e00f94949
parent 13576 7fae51fa160c
child 13724 69a4c9dc2f22
permissions -rw-r--r--
searchForPreRequisites:withSubProjects: duplicate code from jv refactored; fix: extended classes are also prerequisites
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
     1
"
a27a279701f8 Initial revision
claus
parents:
diff changeset
     2
 COPYRIGHT (c) 1993 by Claus Gittinger
300
fe1f742a9224 *** empty log message ***
claus
parents: 95
diff changeset
     3
	      All Rights Reserved
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
     4
a27a279701f8 Initial revision
claus
parents:
diff changeset
     5
 This software is furnished under a license and may be used
a27a279701f8 Initial revision
claus
parents:
diff changeset
     6
 only in accordance with the terms of that license and with the
a27a279701f8 Initial revision
claus
parents:
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
a27a279701f8 Initial revision
claus
parents:
diff changeset
     8
 be provided or otherwise made available to, or used by, any
a27a279701f8 Initial revision
claus
parents:
diff changeset
     9
 other person.  No title to or ownership of the software is
a27a279701f8 Initial revision
claus
parents:
diff changeset
    10
 hereby transferred.
a27a279701f8 Initial revision
claus
parents:
diff changeset
    11
"
6492
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
    12
"{ Package: 'stx:libbasic' }"
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
    13
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
    14
ArrayedCollection subclass:#UninterpretedBytes
1266
cef9b3cd49df commentary
Claus Gittinger <cg@exept.de>
parents: 695
diff changeset
    15
	instanceVariableNames:''
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
    16
	classVariableNames:'IsBigEndian'
1266
cef9b3cd49df commentary
Claus Gittinger <cg@exept.de>
parents: 695
diff changeset
    17
	poolDictionaries:''
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
    18
	category:'Collections-Abstract'
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    19
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    20
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    21
!UninterpretedBytes primitiveDefinitions!
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    22
%{
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    23
/*
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    24
 * Notice: I am abstract, and my subclasses may be anything.
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    25
 * Therefore, the code must always handle the fallback case
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    26
 * where the receiver is neither an ExternalBytes nor a ByteArray.
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    27
 * (which are, however, the most common)
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    28
 *
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    29
 * macro to fetch my byte address and size-in-bytes;
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    30
 * convenient for inline-C code.
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    31
 * (yes, C is bad ...)
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
#define __fetchBytePointerAndSize__(o, pPtr, pSize) \
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    34
    {\
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    35
      if (__isNonNilObject(o)) { \
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
    36
	if (__isByteArrayLike(o)) { \
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
    37
	  *(pPtr) = (unsigned char *)__ByteArrayInstPtr(o)->ba_element; \
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
    38
	  *(pSize) = __byteArraySize(o); \
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
    39
	} else if (__qClass(o) == ExternalBytes) { \
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
    40
	  OBJ __sz__ = __externalBytesSize(o); \
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
    41
	  if (__isSmallInteger(__sz__)) { \
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
    42
	    *(pSize) = __intVal(__sz__); \
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
    43
	    *(pPtr) = (unsigned char *)(__externalBytesAddress(o)); \
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
    44
	  } else { \
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
    45
	    *(pPtr) = (unsigned char *)0; \
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
    46
	  } \
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
    47
	} else { \
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
    48
	    *(pSize) /* nInstBytes */ = OHDR_SIZE + __OBJS2BYTES__(__intVal(__ClassInstPtr(__qClass(o))->c_ninstvars)); \
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
    49
	    *(pPtr) = (char *)(__InstPtr(self)) + *(pSize) /* nInstBytes */; \
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
    50
	    *(pSize) = __qSize(self) - *(pSize) /* nInstBytes */; \
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
    51
	} \
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    52
      } else { \
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
    53
	*(pPtr) = (unsigned char *)0; \
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    54
      } \
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    55
    }
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    56
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    57
%}
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    58
! !
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    59
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
    60
!UninterpretedBytes class methodsFor:'documentation'!
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    61
88
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    62
copyright
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    63
"
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    64
 COPYRIGHT (c) 1993 by Claus Gittinger
300
fe1f742a9224 *** empty log message ***
claus
parents: 95
diff changeset
    65
	      All Rights Reserved
88
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    66
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    67
 This software is furnished under a license and may be used
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    68
 only in accordance with the terms of that license and with the
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    69
 inclusion of the above copyright notice.   This software may not
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    70
 be provided or otherwise made available to, or used by, any
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    71
 other person.  No title to or ownership of the software is
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    72
 hereby transferred.
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    73
"
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    74
!
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    75
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
    76
documentation
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
    77
"
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
    78
    UninterpretedBytes provides the common protocol for byte-storage
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
    79
    containers; concrete subclasses are
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
    80
	ByteArray (which store the bytes within the
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
    81
		   Smalltalk object memory)
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
    82
    and
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
    83
	ExternalBytes (which store the bytes in the malloc-heap).
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
    84
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
    85
    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
    86
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
    87
    [See also:]
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
    88
	ByteArray String ExternalBytes
1294
e26bbb61f6b2 documentation
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
    89
e26bbb61f6b2 documentation
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
    90
    [author:]
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
    91
	Claus Gittinger
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    92
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    93
    [Notice:]
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    94
	Notice the confusion due to multiple methods with the same
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
    95
	functionality (i.e. 'xxxx:MSB:' vs. 'xxxx:bigEndian:').
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
    96
	The reason is that at the time this class was written,
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
    97
	ST80 sid not offer protocol to specify the byteOrder, and
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
    98
	ST/X provided methods ending in 'MSB:' for this.
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
    99
	In the meanwhile, VW added protocol ending in 'bigEndian:',
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   100
	which has been added here for compatibility.
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   101
	(certainly a point, where an ansi-standard will help)
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   102
"
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   103
! !
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   104
3363
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
   105
!UninterpretedBytes class methodsFor:'instance creation'!
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
   106
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   107
from:aByteArray
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   108
    "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
   109
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   110
    |len bytes|
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   111
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   112
    len := aByteArray size.
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   113
    bytes := self new:len.
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   114
    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
   115
    ^ bytes
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   116
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   117
    "
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   118
      String from:#[40 41 42]
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   119
      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
   120
    "
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   121
!
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   122
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   123
fromHexString:aString
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   124
    "Dolphin compatibility:
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   125
     decode a byteArray from a hex string (as generated by hexPrintOn:)"
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   126
12551
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   127
    | sz bytes s hi lo |
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   128
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   129
    sz := aString size.
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   130
    sz == 0 ifTrue:[^ self new].
11973
7cbce184be30 *** empty log message ***
sr
parents: 11874
diff changeset
   131
    sz odd ifTrue:[ ConversionError raiseErrorString:'invalid hex string (odd size)' ].
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   132
12551
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   133
    bytes := self new: sz // 2.
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   134
    s := aString readStream.
12551
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   135
    1 to: sz // 2 do: [ :idx |
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   136
	hi := s next digitValue.
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   137
	lo := s next digitValue.
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   138
	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
   139
    ].
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   140
    ^ bytes
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   141
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
     ByteArray fromHexString:'1234FEFF'
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   144
     ExternalBytes fromHexString:'1234FEFF'
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   145
    "
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   146
    "
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   147
     |s|
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   148
     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
   149
     ByteArray fromHexString:s
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   150
    "
12551
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   151
    "
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   152
     Time millisecondsToRun:[
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   153
	1000000 timesRepeat:[ ByteArray fromHexString:'1234FEFF1234FEFF1234FEFF1234FEFF' ]
12551
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   154
     ].
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   155
    "
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   156
!
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   157
11874
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   158
fromHexStringWithSeparators:aString
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   159
    "read a bytearray from a printed string representation, where
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   160
     individual bytes are encoded as two hex digits, optionally separated by whiteSpace.
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   161
     See also fromHexString:, which does something similar, but does not allow for spaces"
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   162
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   163
    ^ self streamContents:[:outStream |
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   164
	|inStream h|
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   165
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   166
	inStream := aString readStream.
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   167
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   168
	[
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   169
	    inStream skipSeparators.
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   170
	    inStream atEnd
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   171
	] whileFalse:[
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   172
	    h := inStream next:2.
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   173
	    outStream nextPut:(Integer readFrom:h base:16).
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   174
	].
11874
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   175
    ].
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   176
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   177
    "
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   178
     ByteArray fromHexString:'1234FEFF'
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   179
     ByteArray fromHexStringWithSeparators:'   12  34 FE FF'
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   180
    "
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   181
!
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   182
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   183
fromPackedString:aString
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   184
    "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
   185
     6bits are encoded per character. The argument, aString must be a multiple
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   186
     of 4 in size (since 24 is the lcm of 6 and 8). This is somewhat like
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   187
     the radix-encoding used in good old PDP11 times ;-)
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   188
     ST-80 uses this encoding for Images ...
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   189
     This is very similar (but not equal) to the algorithm used in RFC1421.
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   190
     PS: It took a while to figure that one out ... I dont like it ;-)"
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   191
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   192
    |index    "{ Class: SmallInteger }"
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   193
     dstIndex "{ Class: SmallInteger }"
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   194
     stop     "{ Class: SmallInteger }"
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   195
     sixBits  "{ Class: SmallInteger }"
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   196
     n        "{ Class: SmallInteger }"
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   197
     sz       "{ Class: SmallInteger }"
12551
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   198
     last bytes|
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   199
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   200
    sz := aString size.
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   201
    sz == 0 ifTrue:[^ self new].
12551
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   202
    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
   203
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   204
    stop := sz // 4 * 3.
12551
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   205
    "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
   206
     range 97 .. otherwise, its exact."
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   207
12551
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   208
    last := aString last codePoint.
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   209
    last > 96 ifTrue:[
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   210
	stop := stop - 3 + (last - 96)
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   211
    ].
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   212
    bytes := self new:stop.
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   213
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   214
    index := 1. dstIndex := 1.
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   215
    [dstIndex <= stop] whileTrue:[
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   216
	"/ take 4 characters ...
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   217
	"/ allow a line break before each group of 4
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   218
	sixBits := (aString at:index) codePoint.
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   219
	[sixBits < 32] whileTrue:[
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   220
	    index := index + 1.
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   221
	    sixBits := (aString at:index) codePoint.
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   222
	].
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   223
	sixBits := sixBits bitAnd:16r3F.
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   224
	n := sixBits.
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   225
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   226
	"/ self assert:(aString at:index+1) codePoint >= 32.
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   227
	sixBits := (aString at:index+1) codePoint bitAnd:16r3F.
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   228
	n := (n bitShift:6) + sixBits.
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   229
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   230
	"/ self assert:(aString at:index+2) codePoint >= 32.
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   231
	sixBits := (aString at:index+2) codePoint bitAnd:16r3F.
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   232
	n := (n bitShift:6) + sixBits.
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   233
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   234
	"/ self assert:(aString at:index+3) codePoint >= 32.
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   235
	sixBits := (aString at:index+3) codePoint bitAnd:16r3F.
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   236
	n := (n bitShift:6) + sixBits.
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   237
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   238
	index := index + 4.
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   239
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   240
	"/ now have 24 bits in n
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   241
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   242
	bytes at:dstIndex put:(n bitShift:-16).
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   243
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   244
	dstIndex < stop ifTrue:[
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   245
	    bytes at:dstIndex+1 put:((n bitShift:-8) bitAnd:16rFF).
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   246
	    dstIndex+2 <= stop ifTrue:[
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   247
		bytes at:dstIndex+2 put:(n bitAnd:16rFF).
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   248
	    ]
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   249
	].
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   250
	dstIndex := dstIndex + 3.
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   251
    ].
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   252
    ^ bytes
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   253
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   254
    "
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   255
     ByteArray fromPackedString:(#[1 1 1 1] asPackedString)
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   256
     ByteArray fromPackedString:(#[1 1 1 1 1] asPackedString)
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   257
     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
   258
     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
   259
     ByteArray fromPackedString:(#[1 1 1 1 1 1 1 1] asPackedString)
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   260
    "
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   261
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   262
    "Modified: / 6.3.1997 / 15:28:52 / cg"
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   263
    "Modified: / 18.12.1997 / 17:17:11 / stefan"
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   264
!
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   265
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   266
with:aByteArray from:start to:stop
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   267
    "return new instance with a copy of aByteArray
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   268
     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
   269
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   270
    |len bytes|
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   271
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   272
    len := stop-start+1.
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   273
    bytes := self new:len.
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   274
    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
   275
    ^ bytes
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   276
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   277
    "
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   278
      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
   279
    "
3363
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
   280
! !
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
   281
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   282
!UninterpretedBytes class methodsFor:'queries'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   283
8893
99996b25482e +isAbstract
Claus Gittinger <cg@exept.de>
parents: 8092
diff changeset
   284
isAbstract
11220
1ed300ff0d21 comment
Claus Gittinger <cg@exept.de>
parents: 11009
diff changeset
   285
    "Return if this class is an abstract class.
1ed300ff0d21 comment
Claus Gittinger <cg@exept.de>
parents: 11009
diff changeset
   286
     True is returned for UninterpretedBytes here; false for subclasses.
1ed300ff0d21 comment
Claus Gittinger <cg@exept.de>
parents: 11009
diff changeset
   287
     Abstract subclasses must redefine again."
1ed300ff0d21 comment
Claus Gittinger <cg@exept.de>
parents: 11009
diff changeset
   288
8893
99996b25482e +isAbstract
Claus Gittinger <cg@exept.de>
parents: 8092
diff changeset
   289
    ^ self == UninterpretedBytes
99996b25482e +isAbstract
Claus Gittinger <cg@exept.de>
parents: 8092
diff changeset
   290
!
99996b25482e +isAbstract
Claus Gittinger <cg@exept.de>
parents: 8092
diff changeset
   291
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   292
isBigEndian
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   293
    "return true, if words/shorts store the most-significant
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   294
     byte first (MSB), false if least-sign.-first (LSB).
4019
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
   295
     I.e. false for vax, intel; true for m68k, sun.
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
   296
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
   297
     Notice: UninterpretedBytes isBigEndian
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   298
	     this is inlined both by stc and the jit compiler"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   299
a27a279701f8 Initial revision
claus
parents:
diff changeset
   300
%{  /* NOCONTEXT */
a27a279701f8 Initial revision
claus
parents:
diff changeset
   301
8901
824a89d0b5c7 alpha64 vs. POINTER_SIZE cleanup
Claus Gittinger <cg@exept.de>
parents: 8893
diff changeset
   302
#if defined(__MSBFIRST__)
3936
dd8cd28d4a9b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3459
diff changeset
   303
    RETURN (true);
dd8cd28d4a9b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3459
diff changeset
   304
#else
8901
824a89d0b5c7 alpha64 vs. POINTER_SIZE cleanup
Claus Gittinger <cg@exept.de>
parents: 8893
diff changeset
   305
# if defined(__LSBFIRST__)
4275
9fc4a735a1d3 BFIRST stuff
Claus Gittinger <cg@exept.de>
parents: 4019
diff changeset
   306
    RETURN (false);
9fc4a735a1d3 BFIRST stuff
Claus Gittinger <cg@exept.de>
parents: 4019
diff changeset
   307
# else
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   308
    /*
a27a279701f8 Initial revision
claus
parents:
diff changeset
   309
     * I dont like ifdefs - you always forget some ...
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   310
     * therefore we look into a structure at run-time.
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   311
     * (also, there are CPUs around [mips], where the byteorder
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   312
     *  is programmable, and which come in different flavours)
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   313
     *
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   314
     * NOTICE:
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   315
     *    both the JIT and stc may inline this to a
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   316
     *    constant for systems where this is known.
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   317
     */
a27a279701f8 Initial revision
claus
parents:
diff changeset
   318
    union {
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   319
	unsigned int   u_l;
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   320
	char           u_c[sizeof(int)];
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   321
    } u;
a27a279701f8 Initial revision
claus
parents:
diff changeset
   322
a27a279701f8 Initial revision
claus
parents:
diff changeset
   323
    u.u_l = 0x87654321;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   324
    if (u.u_c[0] == 0x21) RETURN (false);
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   325
    RETURN (true);
4275
9fc4a735a1d3 BFIRST stuff
Claus Gittinger <cg@exept.de>
parents: 4019
diff changeset
   326
# endif
3936
dd8cd28d4a9b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3459
diff changeset
   327
#endif
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   328
%}
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   329
    "
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   330
     UninterpretedBytes isBigEndian
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   331
    "
3209
eff7ad7f0825 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3207
diff changeset
   332
!
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   333
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   334
isBuiltInClass
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   335
    "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
   336
     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
   337
     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
   338
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   339
    ^ self == UninterpretedBytes
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   340
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
   341
    "Modified: / 23.4.1996 / 15:56:25 / cg"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
   342
    "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
   343
! !
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   344
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
   345
!UninterpretedBytes methodsFor:'Compatibility-Squeak'!
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
   346
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
   347
copyFromByteArray:aByteArray
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
   348
    "copy as much as possible from aByteArray"
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
   349
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
   350
    self replaceBytesFrom:1 to:(self size min:aByteArray size) with:aByteArray startingAt:1
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
   351
! !
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
   352
9185
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
   353
!UninterpretedBytes methodsFor:'Compatibility-V''Age'!
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
   354
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
   355
uint32At:zeroBasedIndex
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
   356
    "return the 4-bytes starting at index as (unsigned) Integer.
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
   357
     The index is a C index (i.e. 0-based).
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
   358
     The value is retrieved in the machines natural byte order.
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
   359
     Similar to unsignedLongAt:, except for the index base"
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
   360
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
   361
    ^ self unsignedLongAt:zeroBasedIndex+1
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
   362
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
   363
    "
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
   364
     |b|
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
   365
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
   366
     b := ByteArray withAll:#(0 0 0 0).
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
   367
     b uint32At:0 put:16r12345678.
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
   368
     b uint32At:0.
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
   369
     b
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
   370
    "
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
   371
!
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
   372
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
   373
uint32At:zeroBasedIndex put:anInteger
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
   374
    "set the 4-bytes starting at index to the value given by (unsigned) Integer.
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
   375
     The index is a C index (i.e. 0-based).
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
   376
     The value is stored in the machines natural byte order.
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
   377
     Similar to unsignedLongAt:put:, except for the index base"
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
   378
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
   379
    ^ self unsignedLongAt:zeroBasedIndex+1 put:anInteger
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
   380
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
   381
    "
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
   382
     |b|
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
   383
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
   384
     b := ByteArray withAll:#(0 0 0 0).
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
   385
     b uint32At:0 put:16r12345678.
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
   386
     b
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
   387
    "
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
   388
! !
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
   389
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   390
!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
   391
4422
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
   392
bcdByteAt:index
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
   393
    "return the bcd-value for a byte at index."
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
   394
4425
a10011c1b6eb bcd support - again.
Claus Gittinger <cg@exept.de>
parents: 4422
diff changeset
   395
    ^ (self byteAt:index) decodeFromBCD
4422
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
   396
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
   397
    "
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   398
     #[ 16r55 ] bcdByteAt:1
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   399
     #[ 16r99] bcdByteAt:1
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   400
     #[ 16rAA] bcdByteAt:1
4422
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
   401
    "
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
   402
!
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
   403
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
   404
bcdByteAt:index put:aNumber
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
   405
    "set the byte at index as bcd-value."
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
   406
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
   407
    (aNumber between:0 and:99) ifFalse:[
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   408
	self error:'invalid value for BCD encoding'
4422
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
   409
    ].
4425
a10011c1b6eb bcd support - again.
Claus Gittinger <cg@exept.de>
parents: 4422
diff changeset
   410
    ^ self byteAt:index put:aNumber encodeAsBCD
4422
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
   411
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
   412
    "
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   413
     (((ByteArray new:1) bcdByteAt:1 put:55; yourself) at:1) hexPrintString
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   414
     (((ByteArray new:1) bcdByteAt:1 put:99; yourself) at:1) hexPrintString
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   415
     (((ByteArray new:1) bcdByteAt:1 put:100; yourself) at:1) hexPrintString
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   416
     (((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
   417
    "
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
   418
!
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
   419
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   420
signedByteAt:index
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   421
    "return the byte at index as a signed 8 bit value.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   422
     The index is a smalltalk index (i.e. 1-based).
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   423
     This may be worth a primitive."
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   424
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   425
    ^ (self at:index) signExtendedByteValue
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   426
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   427
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   428
     |b|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   429
     b := ByteArray new:2.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   430
     b at:1 put:16rFF.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   431
     b at:2 put:16r7F.
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   432
     b signedByteAt:1
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   433
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   434
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   435
    "Modified: 1.7.1996 / 21:13:53 / cg"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   436
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   437
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   438
signedByteAt:index put:aSignedByteValue
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   439
    "return the byte at index as a signed 8 bit value.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   440
     The index is a smalltalk index (i.e. 1-based).
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   441
     Return the signedByteValue argument.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   442
     This may be worth a primitive."
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   443
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   444
    |b "{ Class: SmallInteger }"|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   445
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   446
    aSignedByteValue >= 0 ifTrue:[
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   447
	b := aSignedByteValue
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   448
    ] ifFalse:[
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   449
	b := 16r100 + aSignedByteValue
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   450
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   451
    self at:index put:b.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   452
    ^ aSignedByteValue
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   453
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   454
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   455
     |b|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   456
     b := ByteArray new:2.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   457
     b signedByteAt:1 put:-1.
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   458
     b at:1
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   459
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   460
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   461
    "Modified: 1.7.1996 / 21:12:37 / cg"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   462
! !
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   463
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   464
!UninterpretedBytes methodsFor:'accessing-floats & doubles'!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   465
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   466
doubleAt:index
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   467
    "return the 8-bytes starting at index as a Float.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   468
     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
   469
     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
   470
     Notice also, that the bytes are expected to be in this machines
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   471
     float representation - if the bytearray originated from another
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   472
     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
   473
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   474
    |newFloat|
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   475
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   476
%{
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   477
    /*
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   478
     * handle the most common cases fast ...
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   479
     */
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   480
    if (__isSmallInteger(index)) {
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   481
	unsigned char *cp;
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   482
	int sz;
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   483
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   484
	__fetchBytePointerAndSize__(self, &cp, &sz);
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   485
	if (cp) {
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   486
	    unsigned INT idx = ((unsigned INT)__intVal(index)) - 1;
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   487
3434
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
   488
	    if ((idx+(sizeof(double)-1)) < sz) {
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   489
		cp += idx;
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   490
		/*
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   491
		 * aligned
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   492
		 */
3434
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
   493
		if (((INT)cp & (sizeof(double)-1)) == 0) {
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   494
		    double dVal = ((double *)cp)[0];
3434
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
   495
		    OBJ f;
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
   496
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
   497
		    __qMKFLOAT(f, dVal);
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   498
		    RETURN (f);
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   499
		}
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   500
	    }
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   501
	}
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   502
    }
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   503
%}.
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   504
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   505
    newFloat := Float basicNew.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   506
    1 to:8 do:[:destIndex|
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   507
	newFloat basicAt:destIndex put:(self at:index - 1 + destIndex)
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   508
    ].
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   509
    ^ newFloat.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   510
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   511
    "
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   512
     |b|
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   513
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   514
     b := ByteArray new:20.
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   515
     b doubleAt:1 put:(Float pi).
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   516
     Transcript showCR:b.
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   517
     Transcript showCR:(b doubleAt:1)
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   518
    "
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   519
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   520
3446
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
   521
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
   522
    "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
   523
     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
   524
     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
   525
     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
   526
     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
   527
     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
   528
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
   529
    |newFloat|
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
   530
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
   531
    msb == UninterpretedBytes isBigEndian ifTrue:[
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   532
	^ 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
   533
    ].
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
   534
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
   535
    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
   536
    1 to:8 do:[:destIndex|
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   537
	newFloat basicAt:(9-destIndex) put:(self at: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
   538
    ].
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
   539
    ^ newFloat.
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
   540
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
   541
    "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
   542
!
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
   543
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   544
doubleAt:index put:aFloat
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   545
    "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
   546
     starting at index.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   547
     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
   548
     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
   549
     Notice also, that the bytes are expected to be in this machines
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   550
     float representation - if the bytearray originated from another
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   551
     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
   552
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   553
    |flt|
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   554
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   555
    flt := aFloat asFloat.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   556
%{
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   557
    /*
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   558
     * handle the most common cases fast ...
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   559
     */
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   560
    if (__isSmallInteger(index) && __isFloat(flt)) {
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   561
	unsigned char *cp;
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   562
	int sz;
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   563
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   564
	__fetchBytePointerAndSize__(self, &cp, &sz);
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   565
	if (cp) {
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   566
	    unsigned INT idx = ((unsigned INT)__intVal(index)) - 1;
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   567
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   568
	    if ((idx+(sizeof(double)-1)) < sz) {
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   569
		cp += idx;
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   570
		/*
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   571
		 * aligned
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   572
		 */
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   573
		if (((INT)cp & (sizeof(double)-1)) == 0) {
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   574
		    ((double *)cp)[0] = __floatVal(flt);
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   575
		    RETURN (aFloat);
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   576
		}
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   577
	    }
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   578
	}
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   579
    }
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   580
%}.
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   581
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   582
    1 to:8 do:[:srcIndex|
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   583
	self at: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
   584
    ].
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   585
    ^ aFloat
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   586
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   587
3446
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
   588
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
   589
    "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
   590
     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
   591
     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
   592
     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
   593
     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
   594
     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
   595
     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
   596
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
   597
    |flt|
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
   598
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
   599
    msb == UninterpretedBytes isBigEndian ifTrue:[
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   600
	^ 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
   601
    ].
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
   602
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
   603
    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
   604
    1 to:8 do:[:srcIndex|
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   605
	self at: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
   606
    ].
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
   607
    ^ aFloat
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
   608
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
   609
    "Created: / 15.5.1998 / 17:22:27 / cg"
3447
Claus Gittinger <cg@exept.de>
parents: 3446
diff changeset
   610
    "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
   611
!
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
   612
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   613
floatAt:index
3434
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
   614
    "return the 4-bytes starting at index as a ShortFloat.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   615
     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
   616
     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
   617
     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
   618
     a float object which keeps an 8-byte double internally.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   619
     Notice also, that the bytes are expected to be in this machines
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   620
     float representation and order - if the bytearray originated from another
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   621
     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
   622
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   623
    |newFloat|
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   624
3434
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
   625
%{
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
   626
    /*
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
   627
     * handle the most common cases fast ...
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
   628
     */
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
   629
    if (__isSmallInteger(index)) {
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   630
	unsigned char *cp;
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   631
	int sz;
3434
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
   632
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   633
	__fetchBytePointerAndSize__(self, &cp, &sz);
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   634
	if (cp) {
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   635
	    unsigned INT idx = ((unsigned INT)__intVal(index)) - 1;
3434
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
   636
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   637
	    if ((idx+(sizeof(float)-1)) < sz) {
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   638
		cp += idx;
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   639
		/*
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   640
		 * aligned
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   641
		 */
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   642
		if (((INT)cp & (sizeof(float)-1)) == 0) {
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   643
		    float fVal = ((float *)cp)[0];
3434
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
   644
		    OBJ f;
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
   645
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
   646
		    __qMKSFLOAT(f, fVal);
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   647
		    RETURN (f);
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   648
		}
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   649
	    }
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   650
	}
3434
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
   651
    }
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
   652
%}.
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
   653
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   654
    newFloat := ShortFloat basicNew.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   655
    1 to:4 do:[:destIndex|
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   656
	newFloat basicAt:destIndex put:(self at:index - 1 + destIndex)
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   657
    ].
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   658
    ^ newFloat.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   659
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   660
3446
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
   661
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
   662
    "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
   663
     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
   664
     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
   665
     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
   666
     a float object which keeps an 8-byte double internally.
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
   667
     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
   668
     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
   669
     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
   670
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
   671
    |newFloat|
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
   672
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
   673
    msb == UninterpretedBytes isBigEndian ifTrue:[
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   674
	^ 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
   675
    ].
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
   676
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
   677
    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
   678
    1 to:4 do:[:destIndex|
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   679
	newFloat basicAt:(5-destIndex) put:(self at: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
   680
    ].
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
   681
    ^ newFloat.
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
   682
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
   683
    "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
   684
    "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
   685
!
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
   686
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   687
floatAt:index put:aFloat
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   688
    "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
   689
     starting at index.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   690
     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
   691
     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
   692
     Notice also, that the bytes are expected to be in this machines
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   693
     float representation - if the bytearray originated from another
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   694
     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
   695
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   696
    |sflt|
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   697
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   698
    sflt := aFloat asShortFloat.
3434
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
   699
%{
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
   700
    /*
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
   701
     * handle the most common cases fast ...
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
   702
     */
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
   703
    if (__isSmallInteger(index) && __isShortFloat(sflt)) {
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   704
	unsigned char *cp;
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   705
	int sz;
3434
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
   706
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   707
	__fetchBytePointerAndSize__(self, &cp, &sz);
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   708
	if (cp) {
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   709
	    unsigned INT idx = ((unsigned INT)__intVal(index)) - 1;
3434
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
   710
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   711
	    if ((idx+(sizeof(float)-1)) < sz) {
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   712
		cp += idx;
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   713
		/*
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   714
		 * aligned
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   715
		 */
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   716
		if (((INT)cp & (sizeof(float)-1)) == 0) {
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   717
		    ((float *)cp)[0] = __shortFloatVal(sflt);
3434
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
   718
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   719
		    RETURN (aFloat);
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   720
		}
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   721
	    }
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   722
	}
3434
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
   723
    }
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
   724
%}.
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
   725
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   726
    1 to:4 do:[:srcIndex|
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   727
	self at: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
   728
    ].
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   729
    ^ aFloat
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   730
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   731
3446
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
   732
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
   733
    "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
   734
     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
   735
     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
   736
     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
   737
     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
   738
     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
   739
     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
   740
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
   741
    |sflt|
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
   742
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
   743
    msb == UninterpretedBytes isBigEndian ifTrue:[
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   744
	^ self floatAt: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
   745
    ].
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
   746
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
   747
    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
   748
    1 to:4 do:[:srcIndex|
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   749
	self at: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
   750
    ].
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
   751
    ^ aFloat
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
   752
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
   753
    "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
   754
!
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
   755
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
   756
ieeeDoubleAt:index
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   757
    "retrieve the 8 bytes starting at index as a float.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   758
     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
   759
     The 8 bytes are assumed to be in IEEE floating point single precision
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   760
     number format."
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   761
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   762
    "
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   763
     currently, we assume that the machines native number format is already
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
   764
     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
   765
     to an IBM 370 or old VAX etc.
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
   766
     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
   767
     no problem.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   768
    "
9258
83c940f349ea isIEEEFormat
Claus Gittinger <cg@exept.de>
parents: 9185
diff changeset
   769
    Float isIEEEFormat ifFalse:[self error:'unsupported operation'].
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   770
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   771
    ^ self doubleAt:index
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
   772
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
   773
    "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
   774
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   775
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
   776
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
   777
    "store the value of the argument, aFloat into the receiver
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   778
     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
   779
     starting at index. Storage is in IEEE floating point double precision format.
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   780
     (i.e. 8 bytes are stored)."
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   781
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   782
    "
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   783
     currently, we assume that the machines native number format is already
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
   784
     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
   785
     to an IBM 370 or old VAX etc.
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
   786
     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
   787
     no problem.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   788
    "
9258
83c940f349ea isIEEEFormat
Claus Gittinger <cg@exept.de>
parents: 9185
diff changeset
   789
    Float isIEEEFormat ifFalse:[self error:'unsupported operation'].
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   790
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   791
    ^ self doubleAt:index put:aFloat
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
   792
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
   793
    "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
   794
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   795
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
   796
ieeeFloatAt:index
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   797
    "retrieve the 4 bytes starting at index as a float.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   798
     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
   799
     The 4 bytes are assumed to be in IEEE floating point single precision
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   800
     number format."
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   801
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   802
    "
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   803
     currently, we assume that the machines native number format is already
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
   804
     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
   805
     to an IBM 370 or old VAX etc.
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
   806
     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
   807
     no problem.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   808
    "
9258
83c940f349ea isIEEEFormat
Claus Gittinger <cg@exept.de>
parents: 9185
diff changeset
   809
    ShortFloat isIEEEFormat ifFalse:[self error:'unsupported operation'].
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   810
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   811
    ^ self floatAt:index
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
   812
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
   813
    "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
   814
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   815
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
   816
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
   817
    "store the value of the argument, aFloat into the receiver
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   818
     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
   819
     Storage is in IEEE floating point single precision format.
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   820
     (i.e. 4 bytes are stored). Since ST/X floats are really doubles, the low-
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   821
     order 4 bytes of the precision is lost."
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   822
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   823
    "
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   824
     currently, we assume that the machines native number format is already
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
   825
     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
   826
     to an IBM 370 or old VAX etc.
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
   827
     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
   828
     no problem.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   829
    "
9258
83c940f349ea isIEEEFormat
Claus Gittinger <cg@exept.de>
parents: 9185
diff changeset
   830
    ShortFloat isIEEEFormat ifFalse:[self error:'unsupported operation'].
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   831
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   832
    ^ self floatAt:index put:aFloat
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
   833
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
   834
    "Created: / 5.3.1998 / 10:51:11 / stefan"
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   835
! !
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   836
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   837
!UninterpretedBytes methodsFor:'accessing-longlongs'!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   838
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   839
longLongAt:index
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   840
    "return the 8-bytes starting at index as a signed Integer.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   841
     The index is a smalltalk index (i.e. 1-based).
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   842
     The value is retrieved in the machines natural byte order.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   843
     This may be worth a primitive."
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   844
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   845
    |w|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   846
4019
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
   847
    w := self unsignedLongLongAt:index bigEndian:(UninterpretedBytes isBigEndian).
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   848
    (w > (16r7FFFFFFFFFFFFFFF)) ifTrue:[
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   849
	^ w - (16r10000000000000000)
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   850
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   851
    ^ w
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   852
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   853
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   854
     |b|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   855
     b := ByteArray new:4.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   856
     b unsignedLongLongAt:1 put:16rFFFFFFFFFFFFFFFF.
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   857
     (b longLongAt:1)
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   858
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   859
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   860
    "Modified: / 1.7.1996 / 21:11:28 / cg"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   861
    "Created: / 5.3.1998 / 14:40:05 / stefan"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   862
    "Modified: / 5.3.1998 / 14:58:32 / stefan"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   863
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   864
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   865
longLongAt:index bigEndian:msb
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   866
    "return the 8-bytes starting at index as a signed Integer.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   867
     The index is a smalltalk index (i.e. 1-based).
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   868
     The value is retrieved in the given byte order.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   869
     This may be worth a primitive."
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   870
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   871
    |w|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   872
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   873
    w := self unsignedLongLongAt:index bigEndian:msb.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   874
    (w > (16r7FFFFFFFFFFFFFFF)) ifTrue:[
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   875
	^ w - (16r10000000000000000)
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   876
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   877
    ^ w
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   878
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   879
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   880
     |b|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   881
     b := ByteArray new:4.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   882
     b unsignedLongLongAt:1 put:16rFFFFFFFFFFFFFFFF.
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   883
     (b longLongAt:1 msb:true)
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   884
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   885
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   886
    "Modified: / 5.3.1998 / 12:06:28 / stefan"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   887
    "Created: / 5.3.1998 / 14:40:54 / stefan"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   888
    "Modified: / 9.5.1998 / 01:10:59 / cg"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   889
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   890
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   891
longLongAt:byteIndex put:anInteger
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   892
    "store a signed longLong (64bit) integer.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   893
     The index is a smalltalk index (i.e. 1-based).
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   894
     Same as #signedQuadWordAt:put: - for ST80 compatibility."
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   895
7813
3cc0b75d1684 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7812
diff changeset
   896
    |v|
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   897
7813
3cc0b75d1684 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7812
diff changeset
   898
    v := anInteger.
3cc0b75d1684 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7812
diff changeset
   899
    anInteger < 0 ifTrue:[
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   900
	v := v + 16r10000000000000000
7813
3cc0b75d1684 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7812
diff changeset
   901
    ].
3cc0b75d1684 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7812
diff changeset
   902
    ^ self unsignedLongLongAt:byteIndex put:v
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   903
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   904
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   905
longLongAt:byteIndex put:anInteger bigEndian:msb
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   906
    "store a signed longLong (64bit) integer.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   907
     The index is a smalltalk index (i.e. 1-based).
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   908
     Same as #signedQuadWordAt:put: - for ST80 compatibility."
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   909
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   910
    |v|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   911
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   912
    v := anInteger.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   913
    anInteger < 0 ifTrue:[
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   914
	v := v + 16r10000000000000000
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   915
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   916
    ^ self unsignedLongLongAt:byteIndex put:v bigEndian:msb
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   917
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   918
    "Created: / 9.5.1998 / 01:10:24 / cg"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   919
    "Modified: / 9.5.1998 / 01:13:34 / cg"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   920
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   921
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   922
quadWordAt:index MSB:msb
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   923
    "return the 8-bytes starting at index as an (unsigned) Integer.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   924
     The index is a smalltalk index (i.e. 1-based).
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   925
     Depending on msb, the value is retrieved MSB or LSB-first."
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   926
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   927
    |l
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   928
     bIdx  "{ Class: SmallInteger }"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   929
     delta "{ Class: SmallInteger }"|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   930
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   931
    l := LargeInteger basicNew numberOfDigits:8.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   932
    msb ifTrue:[
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   933
	bIdx := index + 7.
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   934
	delta := -1
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   935
    ] ifFalse:[
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   936
	bIdx := index.
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   937
	delta := 1
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   938
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   939
    1 to:8 do:[:i |
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   940
	l digitAt:i put:(self basicAt:bIdx).
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   941
	bIdx := bIdx + delta
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   942
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   943
    ^ l compressed
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   944
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   945
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   946
     |b|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   947
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   948
     b := ByteArray withAll:#(1 2 3 4 5 6 7 8).
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   949
     (b quadWordAt:1 MSB:false) printStringRadix:16
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   950
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   951
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   952
    "Modified: 5.11.1996 / 14:06:21 / cg"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   953
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   954
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   955
quadWordAt:index put:anInteger MSB:msb
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   956
    "set the 8-bytes starting at index from the (unsigned) Integer value.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   957
     The index is a smalltalk index (i.e. 1-based).
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   958
     The value must be in the range 0 to 16rFFFFFFFFFFFFFFFF.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   959
     Depending on msb, the value is stored MSB-first or LSB-first."
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   960
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   961
    |bIdx  "{ Class: SmallInteger }"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   962
     delta "{ Class: SmallInteger }"|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   963
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   964
    ((anInteger < 0) or:[anInteger > 16rFFFFFFFFFFFFFFFF]) ifTrue:[
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   965
	^ self elementBoundsError:anInteger
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   966
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   967
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   968
    msb ifTrue:[
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   969
	bIdx := index + 7.
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   970
	delta := -1
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   971
    ] ifFalse:[
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   972
	bIdx := index.
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   973
	delta := 1
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   974
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   975
    1 to:8 do:[:i |
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   976
	self basicAt:bIdx put:(anInteger digitAt:i).
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   977
	bIdx := bIdx + delta.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   978
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   979
    ^ anInteger
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   980
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   981
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   982
     |b|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   983
     b := ByteArray new:8.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   984
     b quadWordAtIndex:1 put:16r0807060504030201 MSB:false.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   985
     b inspect
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   986
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   987
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   988
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   989
unsignedLongLongAt:index bigEndian:msb
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   990
    "return the 8-bytes starting at index as an (unsigned) Integer.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   991
     The index is a smalltalk index (i.e. 1-based).
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   992
     Depending on msb, the value is retrieved MSB or LSB-first."
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   993
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   994
    |l
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   995
     bIdx  "{ Class: SmallInteger }"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   996
     delta "{ Class: SmallInteger }"|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   997
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   998
    l := LargeInteger basicNew numberOfDigits:8.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   999
    msb ifTrue:[
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1000
	bIdx := index + 7.
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1001
	delta := -1
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1002
    ] ifFalse:[
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1003
	bIdx := index.
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1004
	delta := 1
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1005
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1006
    1 to:8 do:[:i |
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1007
	l digitAt:i put:(self basicAt:bIdx).
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1008
	bIdx := bIdx + delta
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1009
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1010
    ^ l compressed
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1011
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1012
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1013
     |b|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1014
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1015
     b := ByteArray withAll:#(1 2 3 4 5 6 7 8).
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1016
     (b unsignedLongLongAt:1 bigEndian:false) printStringRadix:16
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1017
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1018
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1019
    "Modified: / 5.11.1996 / 14:06:21 / cg"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1020
    "Modified: / 5.3.1998 / 14:04:44 / stefan"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1021
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1022
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1023
unsignedLongLongAt:index put:anInteger
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1024
    "set the 8-bytes starting at index from the (unsigned) Integer value.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1025
     The index is a smalltalk index (i.e. 1-based).
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1026
     The value must be in the range 0 to 16rFFFFFFFFFFFFFFFF.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1027
     The value is stored in natural byte order."
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1028
4019
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
  1029
    ^ self unsignedLongLongAt:index put:anInteger bigEndian:(UninterpretedBytes isBigEndian)
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1030
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1031
    "Created: / 5.3.1998 / 14:44:00 / stefan"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1032
    "Modified: / 5.3.1998 / 15:02:32 / stefan"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1033
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1034
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1035
unsignedLongLongAt:index put:anInteger bigEndian:msb
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1036
    "set the 8-bytes starting at index from the (unsigned) Integer value.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1037
     The index is a smalltalk index (i.e. 1-based).
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1038
     The value must be in the range 0 to 16rFFFFFFFFFFFFFFFF.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1039
     Depending on msb, the value is stored MSB-first or LSB-first."
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1040
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1041
    |bIdx  "{ Class: SmallInteger }"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1042
     delta "{ Class: SmallInteger }"|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1043
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1044
    ((anInteger < 0) or:[anInteger > 16rFFFFFFFFFFFFFFFF]) ifTrue:[
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1045
	^ self elementBoundsError:anInteger
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1046
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1047
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1048
    msb ifTrue:[
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1049
	bIdx := index + 7.
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1050
	delta := -1
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1051
    ] ifFalse:[
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1052
	bIdx := index.
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1053
	delta := 1
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1054
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1055
    1 to:8 do:[:i |
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1056
	self basicAt:bIdx put:(anInteger digitAt:i).
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1057
	bIdx := bIdx + delta.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1058
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1059
    ^ anInteger
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1060
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1061
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1062
     |b|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1063
     b := ByteArray new:8.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1064
     b unsignedLongLongAt:1 put:16r0807060504030201 bigEndian:false.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1065
     b inspect
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1066
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1067
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1068
    "Created: / 5.3.1998 / 14:06:02 / stefan"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1069
! !
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1070
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1071
!UninterpretedBytes methodsFor:'accessing-longs'!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1072
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1073
doubleWordAt:index
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1074
    "return the 4-bytes starting at index as an (unsigned) Integer.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1075
     The index is a smalltalk index (i.e. 1-based).
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  1076
     The value is retrieved in the machines natural byte order."
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1077
4019
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
  1078
    ^ self doubleWordAt:index MSB:(UninterpretedBytes isBigEndian)
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1079
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1080
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1081
     |b|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1082
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1083
     b := ByteArray withAll:#(1 2 3 4).
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1084
     (b doubleWordAt:1) printStringRadix:16
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1085
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1086
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1087
    "Modified: / 5.3.1998 / 14:57:35 / stefan"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1088
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1089
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1090
doubleWordAt:index MSB:msb
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1091
    "return the 4-bytes starting at index as an (unsigned) Integer.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1092
     The index is a smalltalk index (i.e. 1-based).
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1093
     The value is retrieved MSB-first, if the msb-arg is true;
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  1094
     LSB-first otherwise."
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1095
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1096
    |val
4019
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
  1097
     ival "{ Class: SmallInteger }"
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
  1098
     t    "{ Class: SmallInteger }"
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1099
     i    "{ Class: SmallInteger }"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1100
     b1   "{ Class: SmallInteger }"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1101
     b2   "{ Class: SmallInteger }"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1102
     b3   "{ Class: SmallInteger }"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1103
     b4   "{ Class: SmallInteger }"|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1104
4019
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
  1105
%{
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
  1106
    /*
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
  1107
     * handle the most common cases fast ...
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
  1108
     */
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
  1109
    if (__isSmallInteger(index)) {
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1110
	unsigned char *cp;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1111
	int sz;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1112
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1113
	__fetchBytePointerAndSize__(self, &cp, &sz);
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1114
	if (cp) {
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1115
	    unsigned INT idx = ((unsigned INT)__intVal(index)) - 1;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1116
	    unsigned int iVal;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1117
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1118
	    if ((idx+(sizeof(int)-1)) < sz) {
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1119
		cp += idx;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1120
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1121
		if (msb == true) {
8901
824a89d0b5c7 alpha64 vs. POINTER_SIZE cleanup
Claus Gittinger <cg@exept.de>
parents: 8893
diff changeset
  1122
#if defined(__MSBFIRST__)
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1123
		    if (((INT)cp & (sizeof(int)-1))== 0) {
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1124
			/*
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1125
			 * aligned
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1126
			 */
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1127
			iVal = ((unsigned int *)cp)[0];
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1128
		    } else
4019
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
  1129
#endif
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1130
		    {
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1131
			iVal = cp[0];
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1132
			iVal = (iVal << 8) | cp[1];
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1133
			iVal = (iVal << 8) | cp[2];
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1134
			iVal = (iVal << 8) | cp[3];
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1135
		    }
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1136
		} else {
8901
824a89d0b5c7 alpha64 vs. POINTER_SIZE cleanup
Claus Gittinger <cg@exept.de>
parents: 8893
diff changeset
  1137
#if defined(__i386__) || (defined(UNALIGNED_FETCH_OK) && defined(__LSBFIRST__))
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1138
		    /*
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1139
		     * aligned or not - we dont care
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1140
		     * (i386 can fetch unaligned)
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1141
		     */
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1142
		    iVal = ((unsigned int *)cp)[0];
4019
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
  1143
#else
8901
824a89d0b5c7 alpha64 vs. POINTER_SIZE cleanup
Claus Gittinger <cg@exept.de>
parents: 8893
diff changeset
  1144
# if defined(__LSBFIRST__)
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1145
		    if (((INT)cp & (sizeof(int)-1))== 0) {
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1146
			/*
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1147
			 * aligned
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1148
			 */
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1149
			iVal = ((unsigned int *)cp)[0];
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1150
		    } else
4019
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
  1151
# endif
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1152
		    {
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1153
			iVal = cp[3];
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1154
			iVal = (iVal << 8) | cp[2];
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1155
			iVal = (iVal << 8) | cp[1];
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1156
			iVal = (iVal << 8) | cp[0];
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1157
		    }
4019
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
  1158
#endif
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1159
		}
8901
824a89d0b5c7 alpha64 vs. POINTER_SIZE cleanup
Claus Gittinger <cg@exept.de>
parents: 8893
diff changeset
  1160
#if __POINTER_SIZE__ == 8
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1161
		RETURN (__mkSmallInteger(iVal));
4312
63eb0ccfd909 no need to call MKINT / MKUINT for 4-byte ints on alpha64
Claus Gittinger <cg@exept.de>
parents: 4308
diff changeset
  1162
#else
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1163
		RETURN (__MKUINT(iVal));
4312
63eb0ccfd909 no need to call MKINT / MKUINT for 4-byte ints on alpha64
Claus Gittinger <cg@exept.de>
parents: 4308
diff changeset
  1164
#endif
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1165
	    }
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1166
	}
4019
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
  1167
    }
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
  1168
%}.
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
  1169
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
  1170
    "/ fallBack code - non ByteArray-like receiver
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
  1171
    "/ or funny index
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
  1172
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1173
    i := index.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1174
    b1 := self at:i.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1175
    b2 := self at:(i+1).
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1176
    b3 := self at:(i+2).
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1177
    b4 := self at:(i+3).
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1178
4019
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
  1179
    msb ifFalse:[
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1180
	t := b4. b4 := b1. b1 := t.
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1181
	t := b3. b3 := b2. b2 := t.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1182
    ].
4019
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
  1183
    ival := b1.
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
  1184
    ival := (ival bitShift:8) + b2.
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
  1185
    ival := (ival bitShift:8) + b3.
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
  1186
    val := (ival bitShift:8) + b4.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1187
    ^ val
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1188
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1189
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1190
     |b|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1191
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1192
     b := ByteArray withAll:#(1 2 3 4).
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1193
     (b doubleWordAt:1 MSB:true) printStringRadix:16.
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1194
     (b doubleWordAt:1 MSB:false) printStringRadix:16
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1195
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1196
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1197
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1198
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1199
doubleWordAt:index put:value
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1200
    "set the 4-bytes starting at index from the (unsigned) Integer value.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1201
     The index is a smalltalk index (i.e. 1-based).
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1202
     The value should be in the range 0 to 16rFFFFFFFF
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1203
     (for negative values, the stored value is not defined).
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  1204
     The value is stored in the machines natural byte order."
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1205
4019
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
  1206
    ^ self doubleWordAt:index put:value MSB:(UninterpretedBytes isBigEndian)
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1207
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1208
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1209
     |b|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1210
     b := ByteArray new:4.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1211
     b doubleWordAt:1 put:16r04030201.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1212
     b inspect
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1213
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1214
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1215
    "Modified: / 5.3.1998 / 14:57:48 / stefan"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1216
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1217
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1218
doubleWordAt:index put:aNumber MSB:msb
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1219
    "set the 4-bytes starting at index from the (unsigned) Integer value.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1220
     The index is a smalltalk index (i.e. 1-based).
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1221
     The value must be in the range 0 to 16rFFFFFFFF.
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  1222
     The value is stored MSB-first if msb is true; LSB-first otherwise."
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1223
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1224
    |i "{ Class: SmallInteger }" |
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1225
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1226
    ((aNumber < 0) or:[aNumber > 16rFFFFFFFF]) ifTrue:[
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1227
	^ self elementBoundsError:aNumber
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1228
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1229
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1230
    i := index.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1231
    msb ifTrue:[
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1232
	self at:i     put:(aNumber digitAt:4).
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1233
	self at:(i+1) put:(aNumber digitAt:3).
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1234
	self at:(i+2) put:(aNumber digitAt:2).
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1235
	self at:(i+3) put:(aNumber digitAt:1).
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1236
    ] ifFalse:[
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1237
	self at:i     put:(aNumber digitAt:1).
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1238
	self at:(i+1) put:(aNumber digitAt:2).
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1239
	self at:(i+2) put:(aNumber digitAt:3).
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1240
	self at:(i+3) put:(aNumber digitAt:4).
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1241
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1242
    ^ aNumber
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1243
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1244
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1245
     |b|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1246
     b := ByteArray new:8.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1247
     b doubleWordAt:1 put:16r04030201 MSB:true.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1248
     b doubleWordAt:5 put:16r04030201 MSB:false.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1249
     b inspect
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1250
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1251
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1252
    "Modified: / 21.1.1998 / 17:43:34 / cg"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1253
    "Modified: / 5.3.1998 / 11:42:17 / stefan"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1254
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1255
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1256
doubleWordAtDoubleWordIndex:index
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1257
    "return the unsigned long at index, anInteger.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1258
     Fetching in the machines natural byte order.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1259
     Indices are 1-based and scaled as appropriate to allow
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1260
     accessing the memory as an array of doubleWord entries.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1261
     (i.e. indices are 1, 2, ...)"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1262
4019
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
  1263
    ^ self doubleWordAtDoubleWordIndex:index MSB:(UninterpretedBytes isBigEndian)
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1264
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1265
    "Created: / 21.1.1998 / 17:43:53 / cg"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1266
    "Modified: / 5.3.1998 / 14:58:06 / stefan"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1267
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1268
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1269
doubleWordAtDoubleWordIndex:index MSB:msb
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1270
    "return the unsigned long at index, anInteger.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1271
     Fetching is MSB if msb is true, LSB otherwise.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1272
     Indices are 1-based and scaled as appropriate to allow
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1273
     accessing the memory as an array of doubleWord entries.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1274
     (i.e. indices are 1, 2, ...)"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1275
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1276
    ^ self doubleWordAt:(index - 1 * 4 + 1) MSB:msb
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1277
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1278
    "Created: / 21.1.1998 / 17:44:07 / cg"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1279
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1280
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1281
doubleWordAtDoubleWordIndex:index put:value
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1282
    "set the long at index, anInteger.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1283
     Storing in the machines natural byte order.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1284
     Indices are 1-based and scaled as appropriate to allow
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1285
     accessing the memory as an array of doubleWord entries.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1286
     (i.e. indices are 1, 2, ...)"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1287
4019
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
  1288
    ^ self doubleWordAtDoubleWordIndex:index put:value MSB:(UninterpretedBytes isBigEndian)
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1289
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1290
    "Created: / 21.1.1998 / 17:44:13 / cg"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1291
    "Modified: / 5.3.1998 / 14:58:19 / stefan"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1292
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1293
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1294
doubleWordAtDoubleWordIndex:index put:value MSB:msb
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1295
    "set the long at index, anInteger.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1296
     Storing is MSB if msb is true, LSB otherwise.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1297
     Indices are 1-based and scaled as appropriate to allow
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1298
     accessing the memory as an array of doubleWord entries.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1299
     (i.e. indices are 1, 2, ...)"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1300
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1301
    ^ self doubleWordAt:(index - 1 * 4 + 1) put:value MSB:msb
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1302
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1303
    "Created: / 21.1.1998 / 17:44:19 / cg"
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1304
!
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1305
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1306
longAt:index
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1307
    "return the 4-bytes starting at index as a signed Integer.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  1308
     The index is a smalltalk index (i.e. 1-based).
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1309
     The value is retrieved in the machines natural byte order,
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1310
     therefore, this should only be used for byte-data which is
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1311
     only used inside this machine.
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1312
     To setup data packets which are to be sent to other machines,
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1313
     or stored into a file, always use longAt:MSB: and specify
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1314
     a definite byteOrder."
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1315
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1316
    |w|
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1317
3434
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  1318
%{
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  1319
    /*
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  1320
     * handle the most common cases fast ...
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  1321
     */
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  1322
    if (__isSmallInteger(index)) {
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1323
	unsigned char *cp;
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1324
	int sz;
3434
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  1325
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1326
	__fetchBytePointerAndSize__(self, &cp, &sz);
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1327
	if (cp) {
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1328
	    unsigned INT idx = ((unsigned INT)__intVal(index)) - 1;
3434
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  1329
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1330
	    if ((idx+(sizeof(int)-1)) < sz) {
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1331
		cp += idx;
8901
824a89d0b5c7 alpha64 vs. POINTER_SIZE cleanup
Claus Gittinger <cg@exept.de>
parents: 8893
diff changeset
  1332
#if defined(__i386__)
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1333
		/*
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1334
		 * aligned or not, we dont care (i386 can do both)
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1335
		 */
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1336
		{
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1337
		    int iVal = ((int *)cp)[0];
3434
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  1338
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1339
		    RETURN (__MKINT(iVal));
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1340
		}
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1341
#else
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1342
		/*
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1343
		 * aligned
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1344
		 */
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1345
		if (((INT)cp & (sizeof(int)-1)) == 0) {
4312
63eb0ccfd909 no need to call MKINT / MKUINT for 4-byte ints on alpha64
Claus Gittinger <cg@exept.de>
parents: 4308
diff changeset
  1346
		    int iVal = ((int *)cp)[0];
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1347
8901
824a89d0b5c7 alpha64 vs. POINTER_SIZE cleanup
Claus Gittinger <cg@exept.de>
parents: 8893
diff changeset
  1348
# if __POINTER_SIZE__ == 8
8913
b9498d27a554 64bit; mkSmallInteger
Claus Gittinger <cg@exept.de>
parents: 8901
diff changeset
  1349
		    RETURN (__mkSmallInteger(iVal));
4312
63eb0ccfd909 no need to call MKINT / MKUINT for 4-byte ints on alpha64
Claus Gittinger <cg@exept.de>
parents: 4308
diff changeset
  1350
# else
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1351
		    RETURN (__MKINT(iVal));
4312
63eb0ccfd909 no need to call MKINT / MKUINT for 4-byte ints on alpha64
Claus Gittinger <cg@exept.de>
parents: 4308
diff changeset
  1352
# endif
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1353
		}
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1354
#endif
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1355
	    }
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1356
	}
3434
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  1357
    }
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  1358
%}.
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  1359
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1360
    w := self unsignedLongAt:index.
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1361
    (w > (16r7FFFFFFF)) ifTrue:[
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1362
	^ w - (16r100000000)
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1363
    ].
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1364
    ^ w
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1365
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1366
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1367
     |b|
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1368
     b := ByteArray new:4.
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1369
     b unsignedLongAt:1 put:16rFFFFFFFF.
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1370
     (b longAt:1)
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1371
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1372
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1373
    "Modified: / 1.7.1996 / 21:11:28 / cg"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1374
    "Modified: / 5.3.1998 / 12:06:28 / stefan"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1375
!
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1376
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1377
longAt:index bigEndian:msb
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1378
    "return the 4-bytes starting at index as a signed Integer.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  1379
     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
  1380
     Depending on msb, the value is retrieved MSB-first or LSB-first.
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1381
     This may be worth a primitive."
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1382
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1383
    |w|
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1384
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1385
    w := self unsignedLongAt:index bigEndian:msb.
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1386
    (w > (16r7FFFFFFF)) ifTrue:[
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1387
	^ w - (16r100000000)
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1388
    ].
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1389
    ^ w
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1390
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1391
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1392
     |b|
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1393
     b := ByteArray new:4.
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1394
     b unsignedLongAt:1 put:16rFFFFFFFF.
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1395
     (b longAt:1)
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1396
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1397
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1398
    "Modified: / 1.7.1996 / 21:11:33 / cg"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1399
    "Created: / 5.3.1998 / 14:02:03 / stefan"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1400
!
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1401
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1402
longAt:index put:value
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1403
    "set the 4-bytes starting at index from the signed Integer value.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  1404
     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
  1405
     The value is stored in the machines natural byte order.
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1406
     This may be worth a primitive.
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1407
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1408
     This is the ST80 version of #signedDoubleWordAt:put:"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1409
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1410
    |v|
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1411
3434
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  1412
%{
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  1413
    /*
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  1414
     * handle the most common cases fast ...
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  1415
     */
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  1416
    if (__isSmallInteger(index)) {
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1417
	unsigned char *cp;
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1418
	int sz;
3434
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  1419
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1420
	__fetchBytePointerAndSize__(self, &cp, &sz);
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1421
	if (cp) {
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1422
	    unsigned INT idx = ((unsigned INT)__intVal(index)) - 1;
3434
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  1423
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1424
	    if ((idx+(sizeof(int)-1)) < sz) {
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1425
		cp += idx;
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1426
		/*
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1427
		 * aligned
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1428
		 */
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1429
		if (((INT)cp & (sizeof(int)-1)) == 0) {
3434
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  1430
		    int __v;
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  1431
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1432
		    if (__isSmallInteger(value)) {
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1433
			((int *)cp)[0] = __intVal(value);
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1434
			RETURN (value);
3434
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  1435
		    }
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  1436
		    if (__v = __signedLongIntVal(value)) {
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  1437
			((int *)cp)[0] = __v;
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  1438
			RETURN (value);
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  1439
		    }
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1440
		}
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1441
	    }
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1442
	}
3434
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  1443
    }
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  1444
%}.
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  1445
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1446
    value >= 0 ifTrue:[
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1447
	v := value
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1448
    ] ifFalse:[
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1449
	v := value + 16r100000000
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1450
    ].
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1451
    self unsignedLongAt:index put:v.
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1452
    ^ value
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1453
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1454
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1455
     |b|
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1456
     b := ByteArray new:4.
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1457
     b longAt:1 put:-1.
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1458
     (b unsignedLongAt:1) printStringRadix:16
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1459
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1460
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1461
    "Modified: / 1.7.1996 / 21:11:39 / cg"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1462
    "Created: / 5.3.1998 / 10:57:18 / stefan"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1463
!
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1464
3444
09f811ddbb51 added #longAt:put:bigEndian:
ca
parents: 3439
diff changeset
  1465
longAt:byteIndex put:anInteger bigEndian:msb
09f811ddbb51 added #longAt:put:bigEndian:
ca
parents: 3439
diff changeset
  1466
    "store a signed long (32bit) integer.
09f811ddbb51 added #longAt:put:bigEndian:
ca
parents: 3439
diff changeset
  1467
     The index is a smalltalk index (i.e. 1-based).
09f811ddbb51 added #longAt:put:bigEndian:
ca
parents: 3439
diff changeset
  1468
     Same as #signedQuadWordAt:put: - for ST80 compatibility."
09f811ddbb51 added #longAt:put:bigEndian:
ca
parents: 3439
diff changeset
  1469
09f811ddbb51 added #longAt:put:bigEndian:
ca
parents: 3439
diff changeset
  1470
    |v|
09f811ddbb51 added #longAt:put:bigEndian:
ca
parents: 3439
diff changeset
  1471
09f811ddbb51 added #longAt:put:bigEndian:
ca
parents: 3439
diff changeset
  1472
    v := anInteger.
09f811ddbb51 added #longAt:put:bigEndian:
ca
parents: 3439
diff changeset
  1473
    anInteger < 0 ifTrue:[
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1474
	v := v + 16r100000000
3444
09f811ddbb51 added #longAt:put:bigEndian:
ca
parents: 3439
diff changeset
  1475
    ].
09f811ddbb51 added #longAt:put:bigEndian:
ca
parents: 3439
diff changeset
  1476
    ^ self unsignedLongAt:byteIndex put:v bigEndian:msb
09f811ddbb51 added #longAt:put:bigEndian:
ca
parents: 3439
diff changeset
  1477
09f811ddbb51 added #longAt:put:bigEndian:
ca
parents: 3439
diff changeset
  1478
    "Created: / 9.5.1998 / 01:10:24 / cg"
09f811ddbb51 added #longAt:put:bigEndian:
ca
parents: 3439
diff changeset
  1479
    "Modified: / 9.5.1998 / 01:13:34 / cg"
09f811ddbb51 added #longAt:put:bigEndian:
ca
parents: 3439
diff changeset
  1480
!
09f811ddbb51 added #longAt:put:bigEndian:
ca
parents: 3439
diff changeset
  1481
11850
ee84c01dc50d +pointerAt:
Claus Gittinger <cg@exept.de>
parents: 11756
diff changeset
  1482
pointerAt:index
ee84c01dc50d +pointerAt:
Claus Gittinger <cg@exept.de>
parents: 11756
diff changeset
  1483
    "get a pointer starting at index as ExternalAddress.
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1484
     The index is a smalltalk index (i.e. 1-based).
11850
ee84c01dc50d +pointerAt:
Claus Gittinger <cg@exept.de>
parents: 11756
diff changeset
  1485
     Only aligned accesses are allowed."
ee84c01dc50d +pointerAt:
Claus Gittinger <cg@exept.de>
parents: 11756
diff changeset
  1486
ee84c01dc50d +pointerAt:
Claus Gittinger <cg@exept.de>
parents: 11756
diff changeset
  1487
%{
ee84c01dc50d +pointerAt:
Claus Gittinger <cg@exept.de>
parents: 11756
diff changeset
  1488
    if (__isSmallInteger(index)) {
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1489
	unsigned char *cp;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1490
	int sz;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1491
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1492
	__fetchBytePointerAndSize__(self, &cp, &sz);
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1493
	if (cp) {
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1494
	    unsigned INT idx = ((unsigned INT)__smallIntegerVal(index)) - 1;
13576
7fae51fa160c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 13575
diff changeset
  1495
	    char *pointer;
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1496
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1497
	    if ((idx+(sizeof(pointer)-1)) < sz) {
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1498
		cp += idx;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1499
		/*
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1500
		 * aligned
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1501
		 */
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1502
		if (((INT)cp & (sizeof(pointer)-1)) == 0) {
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1503
		    pointer = ((char **)cp)[0];
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1504
		    RETURN (__MKEXTERNALADDRESS(pointer));
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1505
		}
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1506
	    }
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1507
	}
11850
ee84c01dc50d +pointerAt:
Claus Gittinger <cg@exept.de>
parents: 11756
diff changeset
  1508
    }
ee84c01dc50d +pointerAt:
Claus Gittinger <cg@exept.de>
parents: 11756
diff changeset
  1509
bad:;
ee84c01dc50d +pointerAt:
Claus Gittinger <cg@exept.de>
parents: 11756
diff changeset
  1510
%}.
ee84c01dc50d +pointerAt:
Claus Gittinger <cg@exept.de>
parents: 11756
diff changeset
  1511
ee84c01dc50d +pointerAt:
Claus Gittinger <cg@exept.de>
parents: 11756
diff changeset
  1512
    self primitiveFailed.
ee84c01dc50d +pointerAt:
Claus Gittinger <cg@exept.de>
parents: 11756
diff changeset
  1513
ee84c01dc50d +pointerAt:
Claus Gittinger <cg@exept.de>
parents: 11756
diff changeset
  1514
    "
ee84c01dc50d +pointerAt:
Claus Gittinger <cg@exept.de>
parents: 11756
diff changeset
  1515
     |b|
ee84c01dc50d +pointerAt:
Claus Gittinger <cg@exept.de>
parents: 11756
diff changeset
  1516
     b := ByteArray new:(ExternalAddress pointerSize).
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1517
     b pointerAt:1 put:(ExternalAddress newAddress:16r12345678).
11850
ee84c01dc50d +pointerAt:
Claus Gittinger <cg@exept.de>
parents: 11756
diff changeset
  1518
     Transcript showCR:((b unsignedLongAt:1) printStringRadix:16).
ee84c01dc50d +pointerAt:
Claus Gittinger <cg@exept.de>
parents: 11756
diff changeset
  1519
     Transcript showCR:((b pointerAt:1)).
ee84c01dc50d +pointerAt:
Claus Gittinger <cg@exept.de>
parents: 11756
diff changeset
  1520
    "
ee84c01dc50d +pointerAt:
Claus Gittinger <cg@exept.de>
parents: 11756
diff changeset
  1521
!
ee84c01dc50d +pointerAt:
Claus Gittinger <cg@exept.de>
parents: 11756
diff changeset
  1522
6492
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  1523
pointerAt:index put:value
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  1524
    "set the pointer starting at index from the signed Integer value.
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1525
     The index is a smalltalk index (i.e. 1-based).
6492
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  1526
     Only aligned accesses are allowed.
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  1527
     The value is either an ExternalAddress or ExternalBytes"
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  1528
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  1529
%{
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  1530
    OBJ *pointer;
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  1531
7814
c649ba9fd538 #pointerAt:put: now works for ExternalAddressLike objects
Stefan Vogel <sv@exept.de>
parents: 7813
diff changeset
  1532
    if (__isExternalAddressLike(value)) {
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1533
	pointer = __externalAddressVal(value);
7197
a68adb223592 also handle subclasses of ExternalBytes (Mapped..)
Claus Gittinger <cg@exept.de>
parents: 7193
diff changeset
  1534
    } else if (__isExternalBytesLike(value)) {
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1535
	pointer = __externalBytesVal(value);
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1536
	if (pointer == (OBJ *)0)
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1537
	    pointer = 0;
11852
6732161ece56 changed #pointerAt:put:
Claus Gittinger <cg@exept.de>
parents: 11850
diff changeset
  1538
    } else if (value == nil) {
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1539
	pointer = 0;
6492
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  1540
    } else goto bad;
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  1541
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  1542
    if (__isSmallInteger(index)) {
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1543
	unsigned char *cp;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1544
	int sz;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1545
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1546
	__fetchBytePointerAndSize__(self, &cp, &sz);
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1547
	if (cp) {
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1548
	    unsigned INT idx = ((unsigned INT)__smallIntegerVal(index)) - 1;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1549
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1550
	    if ((idx+(sizeof(pointer)-1)) < sz) {
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1551
		cp += idx;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1552
		/*
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1553
		 * aligned
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1554
		 */
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1555
		if (((INT)cp & (sizeof(pointer)-1)) == 0) {
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1556
		    ((char **)cp)[0] = (char *) pointer;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1557
		    RETURN (value);
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1558
		}
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1559
	    }
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1560
	}
6492
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  1561
    }
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  1562
bad:;
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  1563
%}.
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  1564
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  1565
    self primitiveFailed.
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  1566
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  1567
    "
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  1568
     |b|
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  1569
     b := ByteArray new:ExternalAddress pointerSize.
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1570
     b pointerAt:1 put:(ExternalAddress newAddress:16r12345678).
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1571
     (b unsignedLongAt:1) printStringRadix:16
6492
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  1572
    "
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  1573
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  1574
    "Modified: / 1.7.1996 / 21:11:39 / cg"
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  1575
    "Created: / 5.3.1998 / 10:57:18 / stefan"
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  1576
!
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  1577
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1578
signedDoubleWordAt:index
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1579
    "return the 4-bytes starting at index as a signed Integer.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  1580
     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
  1581
     The value is retrieved in the machines natural byte order.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1582
     This may be worth a primitive."
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1583
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  1584
    ^ self signedDoubleWordAt:index MSB:(UninterpretedBytes isBigEndian)
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1585
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1586
    "
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1587
     |b|
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1588
     b := ByteArray new:4.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1589
     b doubleWordAt:1 put:16rFFFFFFFF.
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1590
     (b signedDoubleWordAt:1)
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  1591
    "
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  1592
    "
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  1593
     |b|
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  1594
     b := ByteArray new:4.
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  1595
     b signedDoubleWordAt:1 put:-1.
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1596
     (b doubleWordAt:1)
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1597
    "
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1598
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1599
    "Modified: 1.7.1996 / 21:11:28 / cg"
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1600
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1601
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1602
signedDoubleWordAt:index MSB:msb
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  1603
    "return the 4-bytes starting at index as a (signed) Integer.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  1604
     The index is a smalltalk index (i.e. 1-based).
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  1605
     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
  1606
     LSB-first otherwise."
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  1607
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1608
    |val
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  1609
     ival "{ Class: SmallInteger }"
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  1610
     t    "{ Class: SmallInteger }"
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  1611
     i    "{ Class: SmallInteger }"
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  1612
     b1   "{ Class: SmallInteger }"
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  1613
     b2   "{ Class: SmallInteger }"
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  1614
     b3   "{ Class: SmallInteger }"
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  1615
     b4   "{ Class: SmallInteger }"|
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  1616
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  1617
%{
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  1618
    /*
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  1619
     * handle the most common cases fast ...
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  1620
     */
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  1621
    if (__isSmallInteger(index)) {
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1622
	unsigned char *cp;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1623
	int sz;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1624
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1625
	__fetchBytePointerAndSize__(self, &cp, &sz);
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1626
	if (cp) {
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1627
	    unsigned INT idx = ((unsigned INT)__intVal(index)) - 1;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1628
	    int iVal;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1629
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1630
	    if ((idx+(sizeof(int)-1)) < sz) {
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1631
		cp += idx;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1632
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1633
		if (msb == true) {
8901
824a89d0b5c7 alpha64 vs. POINTER_SIZE cleanup
Claus Gittinger <cg@exept.de>
parents: 8893
diff changeset
  1634
#if defined(__MSBFIRST__)
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1635
		    if (((INT)cp & (sizeof(int)-1))== 0) {
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1636
			/*
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1637
			 * aligned
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1638
			 */
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1639
			iVal = ((int *)cp)[0];
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1640
		    } else
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  1641
#endif
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1642
		    {
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1643
			iVal = cp[0];
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1644
			iVal = (iVal << 8) | cp[1];
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1645
			iVal = (iVal << 8) | cp[2];
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1646
			iVal = (iVal << 8) | cp[3];
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1647
		    }
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1648
		} else {
8901
824a89d0b5c7 alpha64 vs. POINTER_SIZE cleanup
Claus Gittinger <cg@exept.de>
parents: 8893
diff changeset
  1649
#if defined(__i386__) || (defined(UNALIGNED_FETCH_OK) && defined(__LSBFIRST__))
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1650
		    /*
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1651
		     * aligned or not - we dont care
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1652
		     * (i386 can fetch unaligned)
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1653
		     */
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1654
		    iVal = ((int *)cp)[0];
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  1655
#else
8901
824a89d0b5c7 alpha64 vs. POINTER_SIZE cleanup
Claus Gittinger <cg@exept.de>
parents: 8893
diff changeset
  1656
# if defined(__LSBFIRST__)
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1657
		    if (((INT)cp & (sizeof(int)-1))== 0) {
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1658
			/*
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1659
			 * aligned
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1660
			 */
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1661
			iVal = ((int *)cp)[0];
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1662
		    } else
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  1663
# endif
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1664
		    {
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1665
			iVal = cp[3];
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1666
			iVal = (iVal << 8) | cp[2];
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1667
			iVal = (iVal << 8) | cp[1];
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1668
			iVal = (iVal << 8) | cp[0];
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1669
		    }
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  1670
#endif
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1671
		}
8901
824a89d0b5c7 alpha64 vs. POINTER_SIZE cleanup
Claus Gittinger <cg@exept.de>
parents: 8893
diff changeset
  1672
#if __POINTER_SIZE__ == 8
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1673
		RETURN (__mkSmallInteger(iVal));
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  1674
#else
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1675
		RETURN (__MKINT(iVal));
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  1676
#endif
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1677
	    }
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1678
	}
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  1679
    }
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  1680
%}.
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1681
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  1682
    "/ fallBack code - non ByteArray-like receiver
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  1683
    "/ or funny index
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  1684
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  1685
    i := index.
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  1686
    b1 := self at:i.
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  1687
    b2 := self at:(i+1).
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  1688
    b3 := self at:(i+2).
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  1689
    b4 := self at:(i+3).
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  1690
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  1691
    msb ifFalse:[
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1692
	t := b4. b4 := b1. b1 := t.
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1693
	t := b3. b3 := b2. b2 := t.
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1694
    ].
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  1695
    ival := b1.
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  1696
    ival := (ival bitShift:8) + b2.
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  1697
    ival := (ival bitShift:8) + b3.
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  1698
    val := (ival bitShift:8) + b4.
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  1699
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  1700
    (val > (16r7FFFFFFF)) ifTrue:[
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1701
	^ val - (16r100000000)
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  1702
    ].
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  1703
    ^ val
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1704
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1705
    "
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1706
     |b|
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  1707
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  1708
     b := ByteArray withAll:#(1 2 3 4).
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1709
     (b signedDoubleWordAt:1 MSB:true) printStringRadix:16.
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1710
     (b signedDoubleWordAt: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
  1711
    "
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1712
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1713
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1714
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1715
signedDoubleWordAt:index put:value
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1716
    "set the 4-bytes starting at index from the signed Integer value.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  1717
     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
  1718
     The value is stored in the machines natural byte order.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1719
     This may be worth a primitive."
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1720
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1721
    |v|
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1722
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1723
    value >= 0 ifTrue:[
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1724
	v := value
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1725
    ] ifFalse:[
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1726
	v := value + 16r100000000
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1727
    ].
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1728
    self doubleWordAt:index put:v.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1729
    ^ value
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1730
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1731
    "
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1732
     |b|
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1733
     b := ByteArray new:4.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1734
     b signedDoubleWordAt:1 put:-1.
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1735
     (b doubleWordAt:1) printStringRadix:16
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1736
    "
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1737
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1738
    "Modified: 1.7.1996 / 21:11:39 / cg"
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1739
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1740
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1741
signedDoubleWordAt:index put:value MSB:msb
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1742
    "set the 4-bytes starting at index from the signed Integer value.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  1743
     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
  1744
     Depending on msb, the value is stored MSB-first or LSB-first.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1745
     This may be worth a primitive."
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1746
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1747
    |v|
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1748
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1749
    value >= 0 ifTrue:[
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1750
	v := value
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1751
    ] ifFalse:[
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1752
	v := value + 16r100000000
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1753
    ].
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1754
    self doubleWordAt:index put:v MSB:msb.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1755
    ^ value
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1756
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1757
    "
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1758
     |b|
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1759
     b := ByteArray new:4.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1760
     b signedDoubleWordAt:1 put:-1.
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1761
     (b doubleWordAt:1) printStringRadix:16
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1762
    "
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1763
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1764
    "Modified: 1.7.1996 / 21:11:46 / cg"
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1765
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1766
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1767
unsignedLongAt:index
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1768
    "return the 4-bytes starting at index as an (unsigned) Integer.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  1769
     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
  1770
     The value is retrieved in the machines natural byte order.
4019
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
  1771
     Subclasses may redefine this for better performance.
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
  1772
     Same as doubleWordAt: for protocol completeness"
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1773
4019
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
  1774
    ^ self doubleWordAt:index
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1775
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1776
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1777
     |b|
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1778
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1779
     b := ByteArray withAll:#(1 2 3 4).
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1780
     (b unsignedLongAt:1) printStringRadix:16
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1781
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1782
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1783
    "Created: / 5.3.1998 / 11:56:53 / stefan"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1784
    "Modified: / 5.3.1998 / 14:58:48 / stefan"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1785
!
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1786
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1787
unsignedLongAt:index bigEndian:msb
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1788
    "return the 4-bytes starting at index as an (unsigned) Integer.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  1789
     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
  1790
     The value is retrieved MSB-first, if the msb-arg is true;
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1791
     LSB-first otherwise.
4019
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
  1792
     Subclasses may redefine this for better performance.
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
  1793
     Same as doubleWordAt:MSB: for protocol completeness"
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1794
4019
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
  1795
    ^ self doubleWordAt:index MSB:msb
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1796
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1797
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1798
     |b|
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1799
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1800
     b := ByteArray withAll:#(1 2 3 4).
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1801
     (b unsignedLongAt:1 bigEndian:true) printStringRadix:16.
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1802
     (b unsignedLongAt:1 bigEndian:false) printStringRadix:16
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1803
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1804
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1805
    "Modified: / 21.1.1998 / 17:42:30 / cg"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1806
    "Created: / 5.3.1998 / 11:46:05 / stefan"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1807
!
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1808
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1809
unsignedLongAt:index put:value
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1810
    "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
  1811
     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
  1812
     The value should be in the range 0 to 16rFFFFFFFF
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1813
     (for negative values, the stored value is not defined).
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1814
     The value is stored in the machines natural byte order.
4019
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
  1815
     Subclasses may redefine this for better performance.
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
  1816
     Same as doubleWordAt:put: for protocol completeness"
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1817
4019
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
  1818
    ^ self doubleWordAt:index put:value
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1819
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1820
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1821
     |b|
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1822
     b := ByteArray new:4.
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1823
     b unsignedLongAt:1 put:16r04030201.
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1824
     b inspect
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1825
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1826
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1827
    "Created: / 5.3.1998 / 11:57:44 / stefan"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1828
    "Modified: / 5.3.1998 / 14:58:59 / stefan"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1829
!
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1830
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1831
unsignedLongAt:index put:aNumber bigEndian:msb
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1832
    "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
  1833
     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
  1834
     The value must be in the range 0 to 16rFFFFFFFF.
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1835
     The value is stored MSB-first if msb is true; LSB-first otherwise.
4019
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
  1836
     Subclasses may redefine this for better performance.
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
  1837
     Same as doubleWordAt:put:MSB: for protocol completeness"
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1838
4019
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
  1839
    ^ self doubleWordAt:index put:aNumber MSB:msb
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1840
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1841
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1842
     |b|
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1843
     b := ByteArray new:8.
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1844
     b unsignedLongAt:1 put:16r04030201 bigEndian:true.
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1845
     (b unsignedLongAt:1 bigEndian:false) printStringRadix:16
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1846
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1847
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1848
    "Modified: / 21.1.1998 / 17:43:34 / cg"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1849
    "Created: / 5.3.1998 / 11:43:53 / stefan"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1850
    "Modified: / 5.3.1998 / 11:47:30 / stefan"
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1851
! !
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1852
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1853
!UninterpretedBytes methodsFor:'accessing-shorts'!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1854
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1855
shortAt:index
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1856
    "return the 2-bytes starting at index as a signed Integer.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1857
     The index is a smalltalk index (i.e. 1-based).
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1858
     The value is retrieved in the machines natural byte order.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1859
     This may be worth a primitive.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1860
     This is the ST80 equivalent of #signedWordAt:"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1861
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1862
    ^ (self unsignedShortAt:index) signExtendedShortValue
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1863
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1864
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1865
     |b|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1866
     b := ByteArray new:2.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1867
     b unsignedShortAt:1 put:16rFFFF.
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1868
     b shortAt:1
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1869
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1870
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1871
    "Modified: / 1.7.1996 / 21:14:38 / cg"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1872
    "Created: / 5.3.1998 / 10:59:57 / stefan"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1873
    "Modified: / 5.3.1998 / 23:39:38 / stefan"
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1874
!
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1875
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1876
shortAt:index bigEndian:msb
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1877
    "return the 2-bytes starting at index as a signed Integer.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  1878
     The index is a smalltalk index (i.e. 1-based).
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1879
     The value is retrieved MSB-first, if the msb-arg is true;
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1880
     LSB-first otherwise.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1881
     This is the ST80 equivalent of #signedWordAt:"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1882
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1883
    ^ (self unsignedShortAt:index bigEndian:msb) signExtendedShortValue
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1884
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1885
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1886
     |b|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1887
     b := ByteArray new:2.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1888
     b unsignedShortAt:1 put:16rFFFF.
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1889
     b shortAt:1
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1890
    "
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1891
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1892
    "Modified: / 1.7.1996 / 21:14:38 / cg"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1893
    "Created: / 5.3.1998 / 23:41:21 / stefan"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1894
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1895
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1896
shortAt:index put:value
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1897
    "set the 2-bytes starting at index from the signed Integer value.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1898
     The index is a smalltalk index (i.e. 1-based).
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1899
     The stored value must be in the range -32768 .. +32676.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1900
     The value is stored in the machines natural byteorder.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1901
     This may be worth a primitive.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1902
     This is the ST80 equivalent of #signedWordAt:put:"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1903
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1904
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1905
    |v|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1906
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1907
    value >= 0 ifTrue:[
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1908
	v := value
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1909
    ] ifFalse:[
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1910
	v := 16r10000 + value
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1911
    ].
8017
55c184efc51c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7816
diff changeset
  1912
    self unsignedShortAt:index put:v bigEndian:(UninterpretedBytes isBigEndian).
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1913
    ^ value
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1914
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1915
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1916
     |b|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1917
     b := ByteArray new:6.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1918
     b shortAt:1 put:-1.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1919
     b shortAt:3 put:-2.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1920
     b shortAt:5 put:0.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1921
     b inspect
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1922
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1923
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1924
    "Modified: / 1.7.1996 / 21:12:07 / cg"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1925
    "Created: / 5.3.1998 / 11:02:05 / stefan"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1926
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1927
8017
55c184efc51c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7816
diff changeset
  1928
shortAt:index put:value bigEndian:bigEndian
55c184efc51c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7816
diff changeset
  1929
    "set the 2-bytes starting at index from the signed Integer value.
55c184efc51c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7816
diff changeset
  1930
     The index is a smalltalk index (i.e. 1-based).
55c184efc51c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7816
diff changeset
  1931
     The stored value must be in the range -32768 .. +32676.
8018
dfc5be947218 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8017
diff changeset
  1932
     The value is stored in the byteorder given by bigEndian.
dfc5be947218 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8017
diff changeset
  1933
     This may be worth a primitive."
8017
55c184efc51c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7816
diff changeset
  1934
55c184efc51c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7816
diff changeset
  1935
55c184efc51c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7816
diff changeset
  1936
    |v|
55c184efc51c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7816
diff changeset
  1937
55c184efc51c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7816
diff changeset
  1938
    value >= 0 ifTrue:[
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1939
	v := value
8017
55c184efc51c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7816
diff changeset
  1940
    ] ifFalse:[
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1941
	v := 16r10000 + value
8017
55c184efc51c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7816
diff changeset
  1942
    ].
55c184efc51c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7816
diff changeset
  1943
    self unsignedShortAt:index put:v bigEndian:bigEndian.
55c184efc51c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7816
diff changeset
  1944
    ^ value
55c184efc51c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7816
diff changeset
  1945
55c184efc51c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7816
diff changeset
  1946
    "
55c184efc51c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7816
diff changeset
  1947
     |b|
55c184efc51c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7816
diff changeset
  1948
     b := ByteArray new:4.
55c184efc51c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7816
diff changeset
  1949
     b shortAt:1 put:1 bigEndian:true.
55c184efc51c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7816
diff changeset
  1950
     b shortAt:3 put:1 bigEndian:false.
55c184efc51c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7816
diff changeset
  1951
     b inspect
55c184efc51c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7816
diff changeset
  1952
    "
55c184efc51c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7816
diff changeset
  1953
55c184efc51c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7816
diff changeset
  1954
    "Modified: / 1.7.1996 / 21:12:07 / cg"
55c184efc51c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7816
diff changeset
  1955
    "Created: / 5.3.1998 / 11:02:05 / stefan"
55c184efc51c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7816
diff changeset
  1956
!
55c184efc51c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7816
diff changeset
  1957
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1958
signedWordAt:index
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1959
    "return the 2-bytes starting at index as a signed Integer.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1960
     The index is a smalltalk index (i.e. 1-based).
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1961
     The value is retrieved in the machines natural byte order.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1962
     This may be worth a primitive."
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1963
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1964
    ^ (self wordAt:index) signExtendedShortValue
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1965
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1966
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1967
     |b|
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1968
     b := ByteArray new:2.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1969
     b wordAt:1 put:16rFFFF.
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1970
     b signedWordAt:1
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1971
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1972
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1973
    "Modified: 1.7.1996 / 21:14:38 / cg"
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1974
!
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1975
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1976
signedWordAt:index MSB:msb
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1977
    "return the 2-bytes starting at index as a signed Integer.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  1978
     The index is a smalltalk index (i.e. 1-based).
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1979
     The value is retrieved MSB-first if the msb-arg is true,
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1980
     LSB-first otherwise.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1981
     This may be worth a primitive."
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1982
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1983
    ^ (self wordAt:index MSB:msb) signExtendedShortValue
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1984
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1985
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1986
     |b|
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1987
     b := ByteArray new:2.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1988
     b wordAt:1 put:16r0080.
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1989
     b signedWordAt:1 MSB:true.
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1990
     b signedWordAt:1 MSB:false.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1991
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1992
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1993
    "Modified: 1.7.1996 / 21:15:57 / cg"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1994
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1995
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1996
signedWordAt:index put:value
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1997
    "set the 2-bytes starting at index from the signed Integer value.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1998
     The index is a smalltalk index (i.e. 1-based).
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1999
     The stored value must be in the range -32768 .. +32676.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2000
     The value is stored in the machines natural byteorder.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2001
     This may be worth a primitive.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2002
     This is the ST80 equivalent of #signedWordAt:put:"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2003
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2004
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2005
    |v|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2006
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2007
    value >= 0 ifTrue:[
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  2008
	v := value
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2009
    ] ifFalse:[
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  2010
	v := 16r10000 + value
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2011
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2012
    self unsignedShortAt:index put:v.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2013
    ^ value
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2014
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2015
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2016
     |b|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2017
     b := ByteArray new:6.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2018
     b shortAt:1 put:-1.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2019
     b shortAt:3 put:-2.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2020
     b shortAt:5 put:0.
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2021
     b inspect
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2022
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2023
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2024
    "Modified: / 1.7.1996 / 21:12:07 / cg"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2025
    "Modified: / 5.3.1998 / 11:01:30 / stefan"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2026
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2027
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2028
signedWordAt:index put:value MSB:msb
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2029
    "set the 2-bytes starting at index from the signed Integer value.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2030
     The index is a smalltalk index (i.e. 1-based).
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2031
     The stored value must be in the range -32768 .. +32676.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2032
     The value is stored MSB-first, if the msb-arg is true;
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2033
     LSB-first otherwise.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2034
     This may be worth a primitive."
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2035
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2036
    |v|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2037
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2038
    value >= 0 ifTrue:[
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2039
	v := value
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2040
    ] ifFalse:[
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2041
	v := 16r10000 + value
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2042
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2043
    self wordAt:index put:v MSB:msb.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2044
    ^ value
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2045
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2046
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2047
     |b|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2048
     b := ByteArray new:4.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2049
     b signedWordAt:1 put:-1.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2050
     b signedWordAt:3 put:-2.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2051
     b inspect
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2052
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2053
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2054
    "Modified: 1.7.1996 / 21:12:13 / cg"
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2055
!
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2056
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2057
unsignedShortAt:index
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2058
    "return the 2-bytes starting at index as an (unsigned) Integer.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2059
     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
  2060
     The value is retrieved in the machines natural byte order
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2061
     Subclasses may redefine this for better performance.
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2062
     This is the ST80 equivalent of #wordAt:"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2063
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2064
4019
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
  2065
    ^ self unsignedShortAt:index bigEndian:(UninterpretedBytes isBigEndian)
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2066
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2067
    "Created: / 5.3.1998 / 11:38:25 / stefan"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2068
    "Modified: / 5.3.1998 / 14:59:25 / stefan"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2069
!
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2070
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2071
unsignedShortAt:index bigEndian:msb
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2072
    "return the 2-bytes starting at index as an (unsigned) Integer.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2073
     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
  2074
     The value is retrieved MSB-first (high 8 bits at lower index) if msb is true;
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2075
     LSB-first (i.e. low 8-bits at lower byte index) if its false)"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2076
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2077
    |b1 "{ Class: SmallInteger }"
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2078
     b2 "{ Class: SmallInteger }"|
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2079
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2080
    b1 := self at:index.
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2081
    b2 := self at:(index + 1).
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2082
    msb ifTrue:[
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  2083
	^ (b1 bitShift:8) + b2
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2084
    ].
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2085
    ^ (b2 bitShift:8) + b1
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2086
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2087
    "Modified: / 21.1.1998 / 17:46:07 / cg"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2088
    "Created: / 5.3.1998 / 11:49:29 / stefan"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2089
!
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2090
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2091
unsignedShortAt:index put:value
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2092
    "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
  2093
     The index is a smalltalk index (i.e. 1-based).
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2094
     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
  2095
     The value is stored in the machines natural byteorder."
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2096
4019
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
  2097
    ^ self unsignedShortAt:index put:value bigEndian:(UninterpretedBytes isBigEndian)
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2098
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2099
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2100
     |b|
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2101
     b := ByteArray new:4.
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2102
     b unsignedShortAt:1 put:16r0102.
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2103
     b unsignedShortAt:3 put:16r0304.
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2104
     b inspect
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2105
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2106
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2107
    "Created: / 5.3.1998 / 11:54:52 / stefan"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2108
    "Modified: / 5.3.1998 / 14:59:38 / stefan"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2109
!
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2110
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2111
unsignedShortAt:index put:value bigEndian:msb
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2112
    "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
  2113
     The index is a smalltalk index (i.e. 1-based).
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2114
     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
  2115
     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
  2116
     lower index) if msb is false, MSB-first otherwise"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2117
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2118
    |b1 b2
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2119
     iVal "{ Class: SmallInteger }"|
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2120
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2121
    iVal := value.
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2122
    ((iVal < 0) or:[iVal > 16rFFFF]) ifTrue:[
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2123
	^ self elementBoundsError:iVal
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2124
    ].
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2125
    msb ifTrue:[
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2126
	b1 := ((iVal bitShift:-8) bitAnd:16rFF).
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2127
	b2 := (iVal bitAnd:16rFF).
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2128
    ] ifFalse:[
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2129
	b1 := (iVal bitAnd:16rFF).
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2130
	b2 := ((iVal bitShift:-8) bitAnd:16rFF).
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2131
    ].
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2132
    self at:index   put:b1.
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2133
    self at:index+1 put:b2.
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2134
    ^ value
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2135
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2136
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2137
     |b|
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2138
     b := ByteArray new:8.
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2139
     b unsignedShortAt:1 put:16r0102 bigEndian:false.
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2140
     b unsignedShortAt:3 put:16r0304 bigEndian:false.
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2141
     b unsignedShortAt:5 put:16r0102 bigEndian:true.
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2142
     b unsignedShortAt:7 put:16r0304 bigEndian:true.
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2143
     b inspect
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2144
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2145
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2146
    "Modified: / 21.1.1998 / 17:48:15 / cg"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2147
    "Modified: / 5.3.1998 / 11:52:28 / stefan"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2148
!
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2149
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2150
wordAt:index
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2151
    "return the 2-bytes starting at index as an (unsigned) Integer.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2152
     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
  2153
     The value is retrieved in the machines natural byte order
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2154
     Subclasses may redefine this for better performance."
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2155
4019
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
  2156
    ^ self wordAt:index MSB:(UninterpretedBytes isBigEndian)
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2157
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2158
    "Modified: / 5.3.1998 / 14:59:51 / stefan"
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2159
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2160
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2161
wordAt:index MSB:msb
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2162
    "return the 2-bytes starting at index as an (unsigned) Integer.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2163
     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
  2164
     The value is retrieved MSB (high 8 bits at lower index) if msb is true;
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2165
     LSB-first (i.e. low 8-bits at lower byte index) if its false.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2166
     Question: should it be retrieve signed values ? (see ByteArray>>signedWordAt:)"
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2167
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2168
    |b1 "{ Class: SmallInteger }"
3212
b8cc18f8691b moved some of ExtBytes protocol to here.
Claus Gittinger <cg@exept.de>
parents: 3209
diff changeset
  2169
     b2 "{ Class: SmallInteger }"|
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2170
3212
b8cc18f8691b moved some of ExtBytes protocol to here.
Claus Gittinger <cg@exept.de>
parents: 3209
diff changeset
  2171
    b1 := self at:index.
b8cc18f8691b moved some of ExtBytes protocol to here.
Claus Gittinger <cg@exept.de>
parents: 3209
diff changeset
  2172
    b2 := self at:(index + 1).
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2173
    msb ifTrue:[
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  2174
	^ (b1 bitShift:8) + b2
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2175
    ].
3212
b8cc18f8691b moved some of ExtBytes protocol to here.
Claus Gittinger <cg@exept.de>
parents: 3209
diff changeset
  2176
    ^ (b2 bitShift:8) + b1
b8cc18f8691b moved some of ExtBytes protocol to here.
Claus Gittinger <cg@exept.de>
parents: 3209
diff changeset
  2177
b8cc18f8691b moved some of ExtBytes protocol to here.
Claus Gittinger <cg@exept.de>
parents: 3209
diff changeset
  2178
    "Modified: / 21.1.1998 / 17:46:07 / cg"
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2179
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2180
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2181
wordAt:index put:value
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2182
    "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
  2183
     The index is a smalltalk index (i.e. 1-based).
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2184
     The stored value must be in the range 0 .. 16rFFFF.
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2185
     The value is stored in the machines natural byteorder.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2186
     Question: should it accept signed values ? (see ByteArray>>signedWordAt:put:)"
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2187
4019
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
  2188
    ^ self wordAt:index put:value MSB:(UninterpretedBytes isBigEndian)
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2189
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2190
    "
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2191
     |b|
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2192
     b := ByteArray new:4.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2193
     b wordAt:1 put:16r0102.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2194
     b wordAt:3 put:16r0304.
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2195
     b inspect
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2196
    "
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2197
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2198
    "Modified: / 5.3.1998 / 15:00:03 / stefan"
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2199
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2200
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2201
wordAt:index put:value MSB:msb
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2202
    "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
  2203
     The index is a smalltalk index (i.e. 1-based).
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2204
     The stored value must be in the range 0 .. 16rFFFF.
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2205
     The value is stored LSB-first (i.e. the low 8bits are stored at the
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2206
     lower index) if msb is false, MSB-first otherwise.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2207
     Question: should it accept signed values ? (see ByteArray>>signedWordAt:put:)"
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2208
3212
b8cc18f8691b moved some of ExtBytes protocol to here.
Claus Gittinger <cg@exept.de>
parents: 3209
diff changeset
  2209
    |b1 b2
b8cc18f8691b moved some of ExtBytes protocol to here.
Claus Gittinger <cg@exept.de>
parents: 3209
diff changeset
  2210
     iVal "{ Class: SmallInteger }"|
b8cc18f8691b moved some of ExtBytes protocol to here.
Claus Gittinger <cg@exept.de>
parents: 3209
diff changeset
  2211
b8cc18f8691b moved some of ExtBytes protocol to here.
Claus Gittinger <cg@exept.de>
parents: 3209
diff changeset
  2212
    iVal := value.
b8cc18f8691b moved some of ExtBytes protocol to here.
Claus Gittinger <cg@exept.de>
parents: 3209
diff changeset
  2213
    ((iVal < 0) or:[iVal > 16rFFFF]) ifTrue:[
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2214
	^ self elementBoundsError:iVal
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2215
    ].
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2216
    msb ifTrue:[
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2217
	b1 := ((iVal bitShift:-8) bitAnd:16rFF).
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2218
	b2 := (iVal bitAnd:16rFF).
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2219
    ] ifFalse:[
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2220
	b1 := (iVal bitAnd:16rFF).
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2221
	b2 := ((iVal bitShift:-8) bitAnd:16rFF).
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2222
    ].
3212
b8cc18f8691b moved some of ExtBytes protocol to here.
Claus Gittinger <cg@exept.de>
parents: 3209
diff changeset
  2223
    self at:index   put:b1.
b8cc18f8691b moved some of ExtBytes protocol to here.
Claus Gittinger <cg@exept.de>
parents: 3209
diff changeset
  2224
    self at:index+1 put:b2.
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2225
    ^ value
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2226
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2227
    "
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2228
     b := ByteArray new:8.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2229
     b wordAt:1 put:16r0102 MSB:false.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2230
     b wordAt:3 put:16r0304 MSB:false.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2231
     b wordAt:5 put:16r0102 MSB:true.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2232
     b wordAt:7 put:16r0304 MSB:true.
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2233
     b inspect
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2234
    "
3212
b8cc18f8691b moved some of ExtBytes protocol to here.
Claus Gittinger <cg@exept.de>
parents: 3209
diff changeset
  2235
b8cc18f8691b moved some of ExtBytes protocol to here.
Claus Gittinger <cg@exept.de>
parents: 3209
diff changeset
  2236
    "Modified: / 21.1.1998 / 17:48:15 / cg"
b8cc18f8691b moved some of ExtBytes protocol to here.
Claus Gittinger <cg@exept.de>
parents: 3209
diff changeset
  2237
!
b8cc18f8691b moved some of ExtBytes protocol to here.
Claus Gittinger <cg@exept.de>
parents: 3209
diff changeset
  2238
b8cc18f8691b moved some of ExtBytes protocol to here.
Claus Gittinger <cg@exept.de>
parents: 3209
diff changeset
  2239
wordAtWordIndex:index
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2240
    "return the unsigned short at index, anInteger.
3212
b8cc18f8691b moved some of ExtBytes protocol to here.
Claus Gittinger <cg@exept.de>
parents: 3209
diff changeset
  2241
     Fetching in the machines natural byte order.
b8cc18f8691b moved some of ExtBytes protocol to here.
Claus Gittinger <cg@exept.de>
parents: 3209
diff changeset
  2242
     Indices are 1-based and scaled as appropriate to allow
b8cc18f8691b moved some of ExtBytes protocol to here.
Claus Gittinger <cg@exept.de>
parents: 3209
diff changeset
  2243
     accessing the memory as an array of word entries.
b8cc18f8691b moved some of ExtBytes protocol to here.
Claus Gittinger <cg@exept.de>
parents: 3209
diff changeset
  2244
     (i.e. indices are 1, 2, ...)"
b8cc18f8691b moved some of ExtBytes protocol to here.
Claus Gittinger <cg@exept.de>
parents: 3209
diff changeset
  2245
4019
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
  2246
    ^ self wordAtWordIndex:index MSB:(UninterpretedBytes isBigEndian)
3212
b8cc18f8691b moved some of ExtBytes protocol to here.
Claus Gittinger <cg@exept.de>
parents: 3209
diff changeset
  2247
b8cc18f8691b moved some of ExtBytes protocol to here.
Claus Gittinger <cg@exept.de>
parents: 3209
diff changeset
  2248
    "Created: / 21.1.1998 / 17:48:26 / cg"
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2249
    "Modified: / 5.3.1998 / 15:00:16 / stefan"
3212
b8cc18f8691b moved some of ExtBytes protocol to here.
Claus Gittinger <cg@exept.de>
parents: 3209
diff changeset
  2250
!
b8cc18f8691b moved some of ExtBytes protocol to here.
Claus Gittinger <cg@exept.de>
parents: 3209
diff changeset
  2251
b8cc18f8691b moved some of ExtBytes protocol to here.
Claus Gittinger <cg@exept.de>
parents: 3209
diff changeset
  2252
wordAtWordIndex:index MSB:msb
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2253
    "return the unsigned short at index, anInteger.
3212
b8cc18f8691b moved some of ExtBytes protocol to here.
Claus Gittinger <cg@exept.de>
parents: 3209
diff changeset
  2254
     Fetching is MSB if msb is true, LSB otherwise.
b8cc18f8691b moved some of ExtBytes protocol to here.
Claus Gittinger <cg@exept.de>
parents: 3209
diff changeset
  2255
     Indices are 1-based and scaled as appropriate to allow
b8cc18f8691b moved some of ExtBytes protocol to here.
Claus Gittinger <cg@exept.de>
parents: 3209
diff changeset
  2256
     accessing the memory as an array of word entries.
b8cc18f8691b moved some of ExtBytes protocol to here.
Claus Gittinger <cg@exept.de>
parents: 3209
diff changeset
  2257
     (i.e. indices are 1, 2, ...)"
b8cc18f8691b moved some of ExtBytes protocol to here.
Claus Gittinger <cg@exept.de>
parents: 3209
diff changeset
  2258
b8cc18f8691b moved some of ExtBytes protocol to here.
Claus Gittinger <cg@exept.de>
parents: 3209
diff changeset
  2259
    ^ self wordAt:(index - 1 * 2 + 1) MSB:msb
b8cc18f8691b moved some of ExtBytes protocol to here.
Claus Gittinger <cg@exept.de>
parents: 3209
diff changeset
  2260
b8cc18f8691b moved some of ExtBytes protocol to here.
Claus Gittinger <cg@exept.de>
parents: 3209
diff changeset
  2261
    "Created: / 21.1.1998 / 17:48:30 / cg"
b8cc18f8691b moved some of ExtBytes protocol to here.
Claus Gittinger <cg@exept.de>
parents: 3209
diff changeset
  2262
!
b8cc18f8691b moved some of ExtBytes protocol to here.
Claus Gittinger <cg@exept.de>
parents: 3209
diff changeset
  2263
b8cc18f8691b moved some of ExtBytes protocol to here.
Claus Gittinger <cg@exept.de>
parents: 3209
diff changeset
  2264
wordAtWordIndex:index put:value
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2265
    "set the short at index, anInteger.
3212
b8cc18f8691b moved some of ExtBytes protocol to here.
Claus Gittinger <cg@exept.de>
parents: 3209
diff changeset
  2266
     Storing in the machines natural byte order.
b8cc18f8691b moved some of ExtBytes protocol to here.
Claus Gittinger <cg@exept.de>
parents: 3209
diff changeset
  2267
     Indices are 1-based and scaled as appropriate to allow
b8cc18f8691b moved some of ExtBytes protocol to here.
Claus Gittinger <cg@exept.de>
parents: 3209
diff changeset
  2268
     accessing the memory as an array of word entries.
b8cc18f8691b moved some of ExtBytes protocol to here.
Claus Gittinger <cg@exept.de>
parents: 3209
diff changeset
  2269
     (i.e. indices are 1, 2, ...)"
b8cc18f8691b moved some of ExtBytes protocol to here.
Claus Gittinger <cg@exept.de>
parents: 3209
diff changeset
  2270
4019
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
  2271
    ^ self wordAtWordIndex:index put:value MSB:(UninterpretedBytes isBigEndian)
3212
b8cc18f8691b moved some of ExtBytes protocol to here.
Claus Gittinger <cg@exept.de>
parents: 3209
diff changeset
  2272
b8cc18f8691b moved some of ExtBytes protocol to here.
Claus Gittinger <cg@exept.de>
parents: 3209
diff changeset
  2273
    "Created: / 21.1.1998 / 17:48:34 / cg"
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2274
    "Modified: / 5.3.1998 / 15:00:27 / stefan"
3212
b8cc18f8691b moved some of ExtBytes protocol to here.
Claus Gittinger <cg@exept.de>
parents: 3209
diff changeset
  2275
!
b8cc18f8691b moved some of ExtBytes protocol to here.
Claus Gittinger <cg@exept.de>
parents: 3209
diff changeset
  2276
b8cc18f8691b moved some of ExtBytes protocol to here.
Claus Gittinger <cg@exept.de>
parents: 3209
diff changeset
  2277
wordAtWordIndex:index put:value MSB:msb
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2278
    "set the short at index, anInteger.
3212
b8cc18f8691b moved some of ExtBytes protocol to here.
Claus Gittinger <cg@exept.de>
parents: 3209
diff changeset
  2279
     Storing is MSB if msb is true, LSB otherwise.
b8cc18f8691b moved some of ExtBytes protocol to here.
Claus Gittinger <cg@exept.de>
parents: 3209
diff changeset
  2280
     Indices are 1-based and scaled as appropriate to allow
b8cc18f8691b moved some of ExtBytes protocol to here.
Claus Gittinger <cg@exept.de>
parents: 3209
diff changeset
  2281
     accessing the memory as an array of word entries.
b8cc18f8691b moved some of ExtBytes protocol to here.
Claus Gittinger <cg@exept.de>
parents: 3209
diff changeset
  2282
     (i.e. indices are 1, 2, ...)"
b8cc18f8691b moved some of ExtBytes protocol to here.
Claus Gittinger <cg@exept.de>
parents: 3209
diff changeset
  2283
b8cc18f8691b moved some of ExtBytes protocol to here.
Claus Gittinger <cg@exept.de>
parents: 3209
diff changeset
  2284
    ^ self wordAt:(index - 1 * 2 + 1) put:value MSB:msb
b8cc18f8691b moved some of ExtBytes protocol to here.
Claus Gittinger <cg@exept.de>
parents: 3209
diff changeset
  2285
b8cc18f8691b moved some of ExtBytes protocol to here.
Claus Gittinger <cg@exept.de>
parents: 3209
diff changeset
  2286
    "Created: / 21.1.1998 / 17:48:38 / cg"
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2287
! !
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2288
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2289
!UninterpretedBytes methodsFor:'accessing-strings'!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2290
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2291
stringAt:index
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2292
    "return a string starting at index up to the 0-byte.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2293
     The index is a smalltalk index (i.e. 1-based)."
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2294
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2295
    |stream i "{ Class: SmallInteger }" c|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2296
10676
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  2297
    stream := WriteStream on:(String new:40).
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2298
    i := index.
10676
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  2299
    [(c := self byteAt:i) ~~ 0] whileTrue:[
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2300
	stream nextPut:(Character value:c).
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2301
	i := i + 1.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2302
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2303
    ^ stream contents
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2304
10676
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  2305
    "
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2306
      #[71 72 73 74 75 76 77 0] stringAt:1
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2307
      #[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
  2308
      '1234567890' stringAt:2
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  2309
    "
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2310
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2311
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2312
stringAt:index put:aString
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2313
    "copy aString to the externalBytes, starting at index up to
7815
6bd3a60a6f0c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7814
diff changeset
  2314
     (and including) the 0-byte (which is always written).
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2315
     The index is a smalltalk index (i.e. 1-based)."
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2316
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2317
    |i "{ Class: SmallInteger }"|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2318
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2319
    i := index.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2320
    aString do:[:aChar |
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2321
	self byteAt:i put:aChar codePoint.
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2322
	i := i + 1.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2323
    ].
10676
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  2324
    self byteAt:i put:0.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2325
    ^ aString
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2326
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2327
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2328
     |bytes|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2329
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2330
     bytes := ExternalBytes new:10.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2331
     bytes stringAt:1 put:'hello'.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2332
     1 to:bytes size do:[:i |
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2333
	Transcript showCR:(bytes at:i)
10676
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  2334
     ].
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  2335
    "
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  2336
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  2337
    "
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  2338
     (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
  2339
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2340
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2341
    "Created: / 21.1.1998 / 17:45:02 / cg"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2342
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2343
7812
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  2344
stringAt:index put:aString size:maxSize
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  2345
    "copy aString to the externalBytes, starting at index up to either maxSize characters,
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  2346
     or (and including) the 0-byte, whichever is encountered first.
7815
6bd3a60a6f0c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7814
diff changeset
  2347
     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
  2348
     The index is a smalltalk index (i.e. 1-based)."
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  2349
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  2350
    |remaining "{ Class: SmallInteger }"
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  2351
     i         "{ Class: SmallInteger }"|
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  2352
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  2353
    remaining := maxSize.
7816
827f1cf51862 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7815
diff changeset
  2354
    remaining <= 0 ifTrue:[^ aString].
7812
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  2355
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  2356
    i := index.
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  2357
    aString do:[:aChar |
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2358
	self byteAt:i put:aChar codePoint.
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2359
	i := i + 1.
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2360
	remaining := remaining - 1.
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2361
	remaining <= 0 ifTrue:[^ aString].
7812
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  2362
    ].
10676
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  2363
    self byteAt:i put:0.
7812
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  2364
    ^ aString
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  2365
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  2366
    "
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  2367
     |bytes|
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  2368
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  2369
     bytes := ExternalBytes new:10.
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  2370
     bytes stringAt:1 put:'hello' size:3.
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  2371
     1 to:bytes size do:[:i |
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2372
	Transcript showCR:(bytes at:i)
7812
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  2373
     ]
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  2374
    "
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  2375
    "
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  2376
     |bytes|
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  2377
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  2378
     bytes := ByteArray new:10 withAll:16rFF.
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  2379
     bytes stringAt:1 put:'he' size:3.
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  2380
     1 to:bytes size do:[:i |
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2381
	Transcript showCR:(bytes at:i)
7812
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  2382
     ]
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  2383
    "
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  2384
10676
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  2385
    "
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  2386
     (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
  2387
    "
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  2388
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  2389
7812
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  2390
    "Created: / 21.1.1998 / 17:45:02 / cg"
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  2391
!
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  2392
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2393
stringAt:index size:maxSize
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2394
    "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
  2395
     The index is a smalltalk index (i.e. 1-based)."
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2396
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2397
    |stream c
10676
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  2398
     max "{ Class: SmallInteger }"
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  2399
     start "{ Class: SmallInteger }"|
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2400
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2401
    stream := WriteStream on:(String new:maxSize).
10676
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  2402
    start := index.
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  2403
    max := start + maxSize - 1.
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  2404
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  2405
    start to:max do:[:eachIndex|
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2406
	c := self byteAt:eachIndex.
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2407
	c == 0 ifTrue:[
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2408
	    ^ stream contents
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2409
	].
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2410
	stream nextPut:(Character value:c).
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2411
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2412
    ^ stream contents
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2413
10676
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  2414
    "
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  2415
      #[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
  2416
      #[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
  2417
      '1234567890' stringAt:2 size:6
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  2418
    "
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2419
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2420
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2421
zeroByteStringAt:index maximumSize:count
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2422
    "extract a zeroByte-delimited string, given initial index and
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2423
     maximum number of characters (bytes).
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2424
     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
  2425
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2426
    |bytes idx|
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2427
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2428
    bytes := self copyFrom:index to:(index + count - 1).
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2429
    idx := bytes indexOf:0.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2430
    idx ~~ 0 ifTrue:[ bytes := bytes copyTo:idx-1 ].
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2431
    ^ bytes asString
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2432
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2433
    "Created: 9.9.1996 / 15:28:34 / cg"
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2434
! !
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2435
12951
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  2436
!UninterpretedBytes methodsFor:'converting'!
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  2437
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  2438
asExternalBytes
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  2439
    |sz bytes|
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  2440
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  2441
    sz := self size.
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  2442
    bytes := ExternalBytes unprotectedNew:sz.
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  2443
    bytes replaceBytesFrom:1 to:sz with:self startingAt:1.
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  2444
    ^ bytes
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  2445
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  2446
    "
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  2447
      #[1 2 3 4 5 6 7] asExternalBytes
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  2448
      'Hello World' asExternalBytes
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  2449
    "
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  2450
! !
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  2451
4782
04a2ea1ad3a5 added replaceBytes...
Claus Gittinger <cg@exept.de>
parents: 4530
diff changeset
  2452
!UninterpretedBytes methodsFor:'filling & replacing'!
04a2ea1ad3a5 added replaceBytes...
Claus Gittinger <cg@exept.de>
parents: 4530
diff changeset
  2453
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2454
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
  2455
    "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
  2456
     like collection.
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2457
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2458
     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
  2459
     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
  2460
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2461
%{  /* NOCONTEXT */
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2462
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2463
    int nIndex, repNIndex;
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2464
    int startIndex, stopIndex;
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2465
    REGISTER unsigned char *src;
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2466
    REGISTER int repStartIndex;
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2467
    int repStopIndex, count;
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2468
    REGISTER unsigned char *dst;
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2469
    OBJ cls;
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2470
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2471
#ifndef NO_PRIM_BYTEARR
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2472
    if ((__isBytes(aCollection) || __isExternalBytesLike(aCollection))
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2473
     && __isBytes(self)
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2474
     && __bothSmallInteger(start, stop)
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2475
     && __isSmallInteger(repStart)) {
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2476
	startIndex = __intVal(start) - 1;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2477
	if (startIndex >= 0) {
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2478
	    dst = (__ByteArrayInstPtr(self)->ba_element) + startIndex;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2479
	    nIndex = __byteArraySize(self);
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2480
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2481
	    if ((cls = __qClass(self)) != @global(ByteArray)) {
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2482
		int nInst;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2483
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2484
		nInst = __OBJS2BYTES__(__intVal(__ClassInstPtr(cls)->c_ninstvars));
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2485
		dst += nInst;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2486
		nIndex -= nInst;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2487
	    }
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2488
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2489
	    stopIndex = __intVal(stop) - 1;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2490
	    count = stopIndex - startIndex + 1;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2491
	    if (count == 0) {
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2492
		RETURN ( self );
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2493
	    }
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2494
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2495
	    if ((count > 0) && (stopIndex < nIndex)) {
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2496
		repStartIndex = __intVal(repStart) - 1;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2497
		if (repStartIndex >= 0) {
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2498
		    if (__isExternalBytesLike(aCollection)) {
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2499
			OBJ sz;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2500
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2501
			src = __externalAddressVal(aCollection);
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2502
			if (src == 0) goto fallBack;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2503
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2504
			sz = __externalBytesSize(aCollection);
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2505
			if (__isSmallInteger(sz)) {
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2506
			    repNIndex = __smallIntegerVal(sz);
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2507
			} else {
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2508
			    repNIndex = repStopIndex+1; /* always enough */
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2509
			}
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2510
			src = src + repStartIndex;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2511
		    } else {
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2512
			if (__isString(aCollection)) {
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2513
			    repNIndex = __stringSize(aCollection);
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2514
			} else {
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2515
			    repNIndex = __qSize(aCollection) - OHDR_SIZE;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2516
			}
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2517
			src = (__ByteArrayInstPtr(aCollection)->ba_element) + repStartIndex;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2518
			if ((cls = __qClass(aCollection)) != @global(ByteArray)) {
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2519
			    int nInst;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2520
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2521
			    nInst = __OBJS2BYTES__(__intVal(__ClassInstPtr(cls)->c_ninstvars));
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2522
			    src += nInst;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2523
			    repNIndex -= nInst;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2524
			}
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2525
		    }
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2526
		    repStopIndex = repStartIndex + (stopIndex - startIndex);
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2527
		    if (repStopIndex < repNIndex) {
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2528
			if (aCollection == self) {
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2529
			    /* take care of overlapping copy */
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2530
			    if (src < dst) {
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2531
				/* must do a reverse copy */
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2532
				src += count;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2533
				dst += count;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2534
				while (count-- > 0) {
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2535
				    *--dst = *--src;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2536
				}
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2537
				RETURN ( self );
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2538
			    }
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2539
			}
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2540
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2541
# ifdef bcopy4
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2542
			if (((unsigned INT)src & 3) == ((unsigned INT)dst & 3)) {
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2543
			    int nW;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2544
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2545
			    /* copy unaligned part */
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2546
			    while (count && ((unsigned INT)src & 3)) {
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2547
				*dst++ = *src++;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2548
				count--;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2549
			    }
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2550
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2551
			    if (count > 0) {
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2552
				/* copy aligned part */
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2553
				nW = count >> 2;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2554
				bcopy4(src, dst, nW);
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2555
				if ((count = count & 3) != 0) {
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2556
				    /* copy any remaining part */
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2557
				    src += (nW<<2);
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2558
				    dst += (nW<<2);
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2559
				    while (count--) {
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2560
					*dst++ = *src++;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2561
				    }
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2562
				}
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2563
			    }
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2564
			    RETURN ( self );
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2565
			}
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2566
# else
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2567
#  if __POINTER_SIZE__ == 8
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2568
			if (((unsigned INT)src & 7) == ((unsigned INT)dst & 7)) {
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2569
			    /* copy unaligned part */
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2570
			    while (count && ((unsigned INT)src & 7)) {
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2571
				*dst++ = *src++;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2572
				count--;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2573
			    }
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2574
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2575
			    /* copy aligned part */
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2576
			    while (count >= 8) {
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2577
				((unsigned INT *)dst)[0] = ((unsigned INT *)src)[0];
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2578
				dst += 8;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2579
				src += 8;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2580
				count -= 8;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2581
			    }
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2582
			    while (count--) {
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2583
				*dst++ = *src++;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2584
			    }
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2585
			    RETURN ( self );
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2586
			}
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2587
#  endif /* 64bit */
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2588
# endif /* bcopy4 */
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2589
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2590
# ifdef FAST_MEMCPY
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2591
			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
  2592
# else
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2593
#  ifdef __UNROLL_LOOPS__
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2594
			while (count >= 8) {
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2595
			    dst[0] = src[0]; dst[1] = src[1];
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2596
			    dst[2] = src[2]; dst[3] = src[3];
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2597
			    dst[4] = src[4]; dst[5] = src[5];
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2598
			    dst[6] = src[6]; dst[7] = src[7];
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2599
			    dst += 8; src += 8;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2600
			    count -= 8;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2601
			}
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2602
#  endif /* __UNROLL_LOOPS__ */
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2603
			while (count-- > 0) {
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2604
			    *dst++ = *src++;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2605
			}
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2606
# endif
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2607
			RETURN ( self );
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2608
		    }
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2609
		}
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2610
	    }
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2611
	}
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2612
    }
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2613
fallBack: ;
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2614
#endif
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2615
%}.
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2616
    "
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2617
     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
  2618
     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
  2619
    "
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2620
    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
  2621
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2622
    "
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2623
     #[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16]
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2624
	copy
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2625
	    replaceFrom:1 to:8
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2626
	    with:#[10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160]
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2627
	    startingAt:1
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2628
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2629
     #[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16]
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2630
	copy
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2631
	    replaceFrom:3 to:10
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2632
	    with:#[10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160]
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2633
	    startingAt:1
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2634
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2635
     #[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16]
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2636
	copy
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2637
	    replaceFrom:3 to:4
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2638
	    with:#[10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160]
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2639
	    startingAt:1
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2640
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2641
     #[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16]
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2642
	copy
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2643
	    replaceFrom:0 to:9
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2644
	    with:#[10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160]
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2645
	    startingAt:1
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2646
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2647
     #[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16]
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2648
	copy
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2649
	    replaceFrom:1 to:10
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2650
	    with:#[10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160]
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2651
	    startingAt:0
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2652
    "
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2653
!
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2654
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2655
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
  2656
    "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
  2657
     byte-array-like.
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2658
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2659
     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
  2660
     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
  2661
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2662
    ^ self
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2663
	replaceBytesFrom:startIndex
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2664
	to:(startIndex + replacementCollection size - repStartIndex)
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2665
	with:replacementCollection
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2666
	startingAt:repStartIndex
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2667
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2668
    "
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2669
     args:    startIndex            : <integer>
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2670
	      replacementCollection : <collection of <bytes> >
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2671
	      repStartIndex         : <integer>
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2672
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2673
     returns: self
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2674
    "
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2675
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2676
    "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
  2677
    "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
  2678
!
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2679
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2680
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
  2681
    "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
  2682
     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
  2683
     Return the receiver.
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2684
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2685
     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
  2686
     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
  2687
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2688
    ((aCollection class == self class)
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2689
     or:[aCollection isByteCollection]) ifTrue:[
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2690
	^ 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
  2691
    ].
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2692
    ^ 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
  2693
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2694
    "
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2695
     args:    startIndex            : <integer>
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2696
	      stopIndex             : <integer>
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2697
	      replacementCollection : <collection of <bytes> >
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2698
	      repStartIndex         : <integer>
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2699
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2700
     returns: self
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2701
    "
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2702
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2703
    "Modified: / 27.7.1998 / 16:58:33 / cg"
4782
04a2ea1ad3a5 added replaceBytes...
Claus Gittinger <cg@exept.de>
parents: 4530
diff changeset
  2704
! !
04a2ea1ad3a5 added replaceBytes...
Claus Gittinger <cg@exept.de>
parents: 4530
diff changeset
  2705
12757
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  2706
!UninterpretedBytes methodsFor:'hashing'!
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  2707
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  2708
computeXorHashFrom:startIndex to:endIndex
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  2709
    "compute and answer the SmallInteger-Hash of the bytes
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  2710
     from startIndex to endIndex.
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  2711
     If endindex = 0 or endIndex > size, hash up the size.
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  2712
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  2713
     NOTE: startIndex and endIndex are only hints about what should be hashed.
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2714
	   In fact, more bytes could be involved in hashing.
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2715
	   SO ARRAYS MUST BE EQUAL TO HASH TO THE SAME VALUE"
12757
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  2716
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  2717
    |w|
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  2718
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  2719
%{
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  2720
    if (__bothSmallInteger(startIndex, endIndex)) {
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2721
	unsigned char *cp;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2722
	INT sz;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2723
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2724
	__fetchBytePointerAndSize__(self, &cp, &sz);
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2725
	if (cp) {
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2726
	    INT sidx = ((unsigned INT)__smallIntegerVal(startIndex)) - 1;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2727
	    INT eidx = ((unsigned INT)__smallIntegerVal(endIndex)) - 1;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2728
	    unsigned char *ep;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2729
	    unsigned INT hash = 0, hash2 = 0, carry;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2730
	    int i;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2731
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2732
	    if (eidx < 0 || eidx >= sz) eidx = sz - 1;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2733
	    if (sidx > eidx) sidx = eidx;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2734
	    if (sidx < 0) {
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2735
		RETURN(__mkSmallInteger(0));
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2736
	    }
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2737
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2738
	    ep = cp + eidx;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2739
	    cp += sidx;
12757
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  2740
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  2741
#if 0
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2742
	    /*
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2743
	     * On LSB-First (little endian) cpus,
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2744
	     * this code does not produce the same result
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2745
	     * if the same bytes are at different positions
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2746
	     */
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2747
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2748
	    if ((INT)cp & (sizeof(INT)-1)) {
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2749
		/* not aligned */
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2750
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2751
		for (i=0; cp <= ep; cp++) {
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2752
		    hash2 = (hash2 << 8) | *cp;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2753
		    if (++i == sizeof(INT)) {
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2754
			hash ^= hash2;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2755
			i = hash2 = 0;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2756
		    }
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2757
		}
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2758
	    } else {
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2759
		/* aligned */
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2760
		for (; cp+sizeof(INT) <= ep; cp += sizeof(INT)) {
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2761
		    hash ^= *(unsigned INT *)cp;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2762
		}
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2763
		for (; cp <= ep; cp++) {
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2764
		    hash2 = (hash2 << 8) | *cp;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2765
		}
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2766
	    }
12757
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  2767
#else
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2768
	    for (i=0; cp <= ep-sizeof(INT); cp += sizeof(INT)) {
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2769
		hash2 = cp[0];
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2770
		hash2 = (hash2 << 8) | cp[1];
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2771
		hash2 = (hash2 << 8) | cp[2];
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2772
		hash2 = (hash2 << 8) | cp[3];
12757
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  2773
#if __POINTER_SIZE__ == 8
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2774
		hash2 = (hash2 << 8) | cp[4];
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2775
		hash2 = (hash2 << 8) | cp[5];
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2776
		hash2 = (hash2 << 8) | cp[6];
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2777
		hash2 = (hash2 << 8) | cp[7];
12757
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  2778
#endif
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2779
		/*
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2780
		 * multiply by large prime to scramble bits and
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2781
		 * to avoid a 0 result from
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2782
		 * #[1 2 3 4 1 2 3 4] computeXorHashFrom:1 to:8.
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2783
		 */
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2784
		hash ^= (hash * 31415821) ^ hash2;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2785
	    }
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2786
	    for (hash2 = 0; cp <= ep; cp++) {
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2787
		hash2 = (hash2 << 8) | *cp;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2788
	    }
12757
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  2789
#endif
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2790
	    hash ^= (hash * 31415821) ^ hash2;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2791
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2792
	    /*
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2793
	     * fold the high bits not fitting into a SmallInteger
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2794
	     */
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2795
	    carry = hash & ~_MAX_INT;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2796
	    if (carry) {
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2797
		hash = (hash & _MAX_INT) ^ (carry >> 8);
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2798
	    }
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2799
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2800
	    RETURN(__mkSmallInteger(hash));
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2801
	}
12757
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  2802
    }
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  2803
%}.
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  2804
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  2805
    ^ self primitiveFailed
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  2806
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  2807
    "
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  2808
     #[1 2 3 4] computeXorHashFrom:1 to:4.
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  2809
     #[1 2 3 4] computeXorHashFrom:1 to:32.
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  2810
     #[1 2 3 4] computeXorHashFrom:1 to:0.
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  2811
     #[1 2 3 4 5] computeXorHashFrom:1 to:4.
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  2812
     #[1 2 3 4 1 2 3 4] computeXorHashFrom:1 to:8.
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  2813
     #[1 2 3 4 5 6 7 8] computeXorHashFrom:2 to:8.
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  2814
     #[2 3 4 5 6 7 8] computeXorHashFrom:1 to:7.
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  2815
    "
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  2816
! !
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  2817
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2818
!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
  2819
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2820
copyReverse
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2821
    "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
  2822
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2823
    ^ self copy reverse
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2824
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2825
    "
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2826
     #[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
  2827
     #[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
  2828
    "
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2829
! !
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2830
3363
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  2831
!UninterpretedBytes methodsFor:'misc'!
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  2832
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2833
swapLongAt:byteIndex
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2834
    "swap the byteOrder of a long.
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2835
     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
  2836
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  2837
    |t|
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  2838
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  2839
    t := self byteAt:byteIndex.
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  2840
    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
  2841
    self byteAt:(byteIndex + 3) put:t.
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  2842
    t := self byteAt:(byteIndex + 1).
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  2843
    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
  2844
    self byteAt:(byteIndex + 2) put:t
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  2845
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  2846
    "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
  2847
! !
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  2848
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2849
!UninterpretedBytes methodsFor:'private'!
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2850
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2851
slowReplaceBytesFrom:start to:stop with:sourceBytes startingAt:sourceIndex
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2852
    "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
  2853
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2854
    |srcIdx|
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2855
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2856
    srcIdx := sourceIndex.
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2857
    start to:stop do:[:dstIdx |
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2858
	self at:dstIdx put:(sourceBytes at:srcIdx).
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2859
	srcIdx := srcIdx + 1
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2860
    ].
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2861
! !
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  2862
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2863
!UninterpretedBytes methodsFor:'queries'!
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2864
7218
b798be6d632f elementBoundsError -> elementBoundsError:
Claus Gittinger <cg@exept.de>
parents: 7197
diff changeset
  2865
defaultElement
b798be6d632f elementBoundsError -> elementBoundsError:
Claus Gittinger <cg@exept.de>
parents: 7197
diff changeset
  2866
    ^ 0
b798be6d632f elementBoundsError -> elementBoundsError:
Claus Gittinger <cg@exept.de>
parents: 7197
diff changeset
  2867
!
b798be6d632f elementBoundsError -> elementBoundsError:
Claus Gittinger <cg@exept.de>
parents: 7197
diff changeset
  2868
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2869
sizeInBytes
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2870
    "return the number of 8-bit bytes in the receiver.
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2871
     This is needed since subclasse may redefine #size (TwoByteString)"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2872
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2873
    ^ super size
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2874
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2875
    "Created: / 5.3.1998 / 10:41:13 / stefan"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2876
! !
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2877
8986
c2962d45eca0 new: #isByteCollection
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
  2878
!UninterpretedBytes methodsFor:'testing'!
c2962d45eca0 new: #isByteCollection
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
  2879
c2962d45eca0 new: #isByteCollection
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
  2880
isByteCollection
c2962d45eca0 new: #isByteCollection
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
  2881
    "return true, if the receiver has access methods for bytes;
c2962d45eca0 new: #isByteCollection
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
  2882
     true is returned here - the method is redefined from Object."
c2962d45eca0 new: #isByteCollection
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
  2883
c2962d45eca0 new: #isByteCollection
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
  2884
    ^ true
9005
b82aa6bdc487 #isNonByteCollection
Stefan Vogel <sv@exept.de>
parents: 8995
diff changeset
  2885
!
b82aa6bdc487 #isNonByteCollection
Stefan Vogel <sv@exept.de>
parents: 8995
diff changeset
  2886
b82aa6bdc487 #isNonByteCollection
Stefan Vogel <sv@exept.de>
parents: 8995
diff changeset
  2887
isNonByteCollection
b82aa6bdc487 #isNonByteCollection
Stefan Vogel <sv@exept.de>
parents: 8995
diff changeset
  2888
    "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
  2889
     false is returned here - the method is redefined from Collection."
b82aa6bdc487 #isNonByteCollection
Stefan Vogel <sv@exept.de>
parents: 8995
diff changeset
  2890
b82aa6bdc487 #isNonByteCollection
Stefan Vogel <sv@exept.de>
parents: 8995
diff changeset
  2891
    ^ false
8986
c2962d45eca0 new: #isByteCollection
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
  2892
! !
c2962d45eca0 new: #isByteCollection
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
  2893
11009
fb66915c5bb5 changed #acceptVisitor:with: - moved to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 10676
diff changeset
  2894
!UninterpretedBytes methodsFor:'visiting'!
fb66915c5bb5 changed #acceptVisitor:with: - moved to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 10676
diff changeset
  2895
fb66915c5bb5 changed #acceptVisitor:with: - moved to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 10676
diff changeset
  2896
acceptVisitor:aVisitor with:aParameter
fb66915c5bb5 changed #acceptVisitor:with: - moved to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 10676
diff changeset
  2897
fb66915c5bb5 changed #acceptVisitor:with: - moved to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 10676
diff changeset
  2898
    ^ aVisitor visitByteArray:self with:aParameter
fb66915c5bb5 changed #acceptVisitor:with: - moved to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 10676
diff changeset
  2899
! !
fb66915c5bb5 changed #acceptVisitor:with: - moved to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 10676
diff changeset
  2900
695
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
  2901
!UninterpretedBytes class methodsFor:'documentation'!
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
  2902
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
  2903
version
13576
7fae51fa160c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 13575
diff changeset
  2904
    ^ '$Header: /cvs/stx/stx/libbasic/UninterpretedBytes.st,v 1.79 2011-08-09 23:41:11 cg Exp $'
12253
c933c6fcdeef changed: #fromHexStringWithSeparators:
Claus Gittinger <cg@exept.de>
parents: 11973
diff changeset
  2905
!
c933c6fcdeef changed: #fromHexStringWithSeparators:
Claus Gittinger <cg@exept.de>
parents: 11973
diff changeset
  2906
c933c6fcdeef changed: #fromHexStringWithSeparators:
Claus Gittinger <cg@exept.de>
parents: 11973
diff changeset
  2907
version_CVS
13576
7fae51fa160c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 13575
diff changeset
  2908
    ^ '$Header: /cvs/stx/stx/libbasic/UninterpretedBytes.st,v 1.79 2011-08-09 23:41:11 cg Exp $'
695
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
  2909
! !