UninterpretedBytes.st
author Claus Gittinger <cg@exept.de>
Fri, 11 Mar 2016 17:16:10 +0100
changeset 19345 e2526c51d771
parent 19301 21b0b9bf3a74
child 19349 d10a0648ff0f
child 19353 2b04ee017e72
permissions -rw-r--r--
#FEATURE class: UninterpretedBytes added: #pointerValueAt:
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
19345
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
     1
"{ Encoding: utf8 }"
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
     2
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
     3
"
a27a279701f8 Initial revision
claus
parents:
diff changeset
     4
 COPYRIGHT (c) 1993 by Claus Gittinger
300
fe1f742a9224 *** empty log message ***
claus
parents: 95
diff changeset
     5
	      All Rights Reserved
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
     6
a27a279701f8 Initial revision
claus
parents:
diff changeset
     7
 This software is furnished under a license and may be used
a27a279701f8 Initial revision
claus
parents:
diff changeset
     8
 only in accordance with the terms of that license and with the
a27a279701f8 Initial revision
claus
parents:
diff changeset
     9
 inclusion of the above copyright notice.   This software may not
a27a279701f8 Initial revision
claus
parents:
diff changeset
    10
 be provided or otherwise made available to, or used by, any
a27a279701f8 Initial revision
claus
parents:
diff changeset
    11
 other person.  No title to or ownership of the software is
a27a279701f8 Initial revision
claus
parents:
diff changeset
    12
 hereby transferred.
a27a279701f8 Initial revision
claus
parents:
diff changeset
    13
"
6492
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
    14
"{ Package: 'stx:libbasic' }"
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
    15
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
    16
"{ NameSpace: Smalltalk }"
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
    17
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
    18
ArrayedCollection subclass:#UninterpretedBytes
1266
cef9b3cd49df commentary
Claus Gittinger <cg@exept.de>
parents: 695
diff changeset
    19
	instanceVariableNames:''
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
    20
	classVariableNames:'IsBigEndian'
1266
cef9b3cd49df commentary
Claus Gittinger <cg@exept.de>
parents: 695
diff changeset
    21
	poolDictionaries:''
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
    22
	category:'Collections-Abstract'
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    23
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    24
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    25
!UninterpretedBytes primitiveDefinitions!
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    26
%{
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    27
/*
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    28
 * Notice: I am abstract, and my subclasses may be anything.
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    29
 * Therefore, the code must always handle the fallback case
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    30
 * where the receiver is neither an ExternalBytes nor a ByteArray.
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    31
 * (which are, however, the most common)
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    32
 *
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    33
 * macro to fetch my byte address and size-in-bytes;
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    34
 * convenient for inline-C code.
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    35
 * (yes, C is bad ...)
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    36
 */
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    37
#define __fetchBytePointerAndSize__(o, pPtr, pSize) \
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    38
    {\
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    39
      if (__isNonNilObject(o)) { \
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
    40
	if (__isByteArrayLike(o)) { \
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
    41
	  *(pPtr) = (unsigned char *)__ByteArrayInstPtr(o)->ba_element; \
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
    42
	  *(pSize) = __byteArraySize(o); \
15004
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
    43
	} else if (__qIsExternalBytesLike(o)) { \
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
    44
	  OBJ __sz__ = __externalBytesSize(o); \
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
    45
	  if (__isSmallInteger(__sz__)) { \
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
    46
	    *(pSize) = __intVal(__sz__); \
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
    47
	    *(pPtr) = (unsigned char *)(__externalBytesAddress(o)); \
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
    48
	  } else { \
15004
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
    49
	    *(pSize) = 0; \
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
    50
	    *(pPtr) = (unsigned char *)0; \
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
    51
	  } \
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
    52
	} else { \
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
    53
	    *(pSize) /* nInstBytes */ = OHDR_SIZE + __OBJS2BYTES__(__intVal(__ClassInstPtr(__qClass(o))->c_ninstvars)); \
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
    54
	    *(pPtr) = (char *)(__InstPtr(self)) + *(pSize) /* nInstBytes */; \
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
    55
	    *(pSize) = __qSize(self) - *(pSize) /* nInstBytes */; \
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
    56
	} \
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    57
      } else { \
15004
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
    58
	*(pSize) = 0; \
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
    59
	*(pPtr) = (unsigned char *)0; \
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    60
      } \
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    61
    }
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    62
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    63
%}
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    64
! !
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    65
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
    66
!UninterpretedBytes class methodsFor:'documentation'!
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    67
88
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    68
copyright
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    69
"
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    70
 COPYRIGHT (c) 1993 by Claus Gittinger
300
fe1f742a9224 *** empty log message ***
claus
parents: 95
diff changeset
    71
	      All Rights Reserved
88
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    72
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    73
 This software is furnished under a license and may be used
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    74
 only in accordance with the terms of that license and with the
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    75
 inclusion of the above copyright notice.   This software may not
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    76
 be provided or otherwise made available to, or used by, any
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    77
 other person.  No title to or ownership of the software is
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    78
 hereby transferred.
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    79
"
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    80
!
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    81
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
    82
documentation
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
    83
"
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
    84
    UninterpretedBytes provides the common protocol for byte-storage
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
    85
    containers; concrete subclasses are
19101
8ccbefbc944d #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19047
diff changeset
    86
        ByteArray (which store the bytes within the Smalltalk object memory)
8ccbefbc944d #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19047
diff changeset
    87
        String    (knows that the bytes represent characters)
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
    88
    and
19101
8ccbefbc944d #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19047
diff changeset
    89
        ExternalBytes (which store the bytes in the malloc-heap).
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
    90
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
    91
    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
    92
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
    93
    [See also:]
19101
8ccbefbc944d #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19047
diff changeset
    94
        ByteArray String ExternalBytes
1294
e26bbb61f6b2 documentation
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
    95
e26bbb61f6b2 documentation
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
    96
    [author:]
19101
8ccbefbc944d #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19047
diff changeset
    97
        Claus Gittinger
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    98
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    99
    [Notice:]
19101
8ccbefbc944d #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19047
diff changeset
   100
        Notice the confusion due to multiple methods with the same
8ccbefbc944d #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19047
diff changeset
   101
        functionality (i.e. 'xxxx:MSB:' vs. 'xxxx:bigEndian:').
8ccbefbc944d #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19047
diff changeset
   102
        The reason is that at the time this class was written,
8ccbefbc944d #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19047
diff changeset
   103
        ST80 did not offer protocol to specify the byteOrder, and
8ccbefbc944d #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19047
diff changeset
   104
        ST/X provided methods ending in 'MSB:' for this.
8ccbefbc944d #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19047
diff changeset
   105
        In the meanwhile, VW added protocol ending in 'bigEndian:',
8ccbefbc944d #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19047
diff changeset
   106
        which has been added here for compatibility.
8ccbefbc944d #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19047
diff changeset
   107
        (certainly a point, where an ansi-standard will help)
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   108
"
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   109
! !
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   110
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   111
!UninterpretedBytes class methodsFor:'initialization'!
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   112
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   113
initialize
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   114
    IsBigEndian := self isBigEndian.
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   115
! !
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   116
3363
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
   117
!UninterpretedBytes class methodsFor:'instance creation'!
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
   118
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   119
from:aByteArray
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   120
    "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
   121
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   122
    |len bytes|
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   123
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   124
    len := aByteArray size.
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   125
    bytes := self new:len.
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   126
    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
   127
    ^ bytes
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
    "
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   130
      String from:#[40 41 42]
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   131
      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
   132
    "
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   133
!
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   134
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   135
fromHexString:aString
15717
b05a01005030 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15087
diff changeset
   136
    "decode a byteArray from a hex string (as generated by hexPrintOn:)"
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   137
12551
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   138
    | sz bytes s hi 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
    sz := aString size.
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   141
    sz == 0 ifTrue:[^ self new].
14970
319eeed62505 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 14224
diff changeset
   142
    sz odd ifTrue:[ ConversionError raiseWith:aString errorString:'invalid hex string (odd size)' ].
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   143
12551
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   144
    bytes := self new: sz // 2.
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   145
    s := aString readStream.
12551
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   146
    1 to: sz // 2 do: [ :idx |
18346
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   147
	hi := s next digitValue.
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   148
	lo := s next digitValue.
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   149
	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
   150
    ].
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   151
    ^ bytes
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   152
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   153
    "
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   154
     ByteArray fromHexString:'1234FEFF'
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   155
     ExternalBytes fromHexString:'1234FEFF'
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
    "
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   158
     |s|
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   159
     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
   160
     ByteArray fromHexString:s
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   161
    "
12551
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   162
    "
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   163
     Time millisecondsToRun:[
18346
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   164
	1000000 timesRepeat:[ ByteArray fromHexString:'1234FEFF1234FEFF1234FEFF1234FEFF' ]
12551
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   165
     ].
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   166
    "
15717
b05a01005030 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15087
diff changeset
   167
b05a01005030 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15087
diff changeset
   168
    "Modified (comment): / 28-08-2013 / 20:40:04 / cg"
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   169
!
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   170
11874
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   171
fromHexStringWithSeparators:aString
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   172
    "read a bytearray from a printed string representation, where
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   173
     individual bytes are encoded as two hex digits, optionally separated by whiteSpace.
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   174
     See also fromHexString:, which does something similar, but does not allow for spaces"
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   175
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   176
    ^ self streamContents:[:outStream |
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   177
	|inStream h|
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   178
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   179
	inStream := aString readStream.
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   180
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   181
	[
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   182
	    inStream skipSeparators.
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   183
	    inStream atEnd
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   184
	] whileFalse:[
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   185
	    h := inStream next:2.
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   186
	    outStream nextPut:(Integer readFrom:h base:16).
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   187
	].
11874
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   188
    ].
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   189
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   190
    "
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   191
     ByteArray fromHexString:'1234FEFF'
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   192
     ByteArray fromHexStringWithSeparators:'   12  34 FE FF'
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   193
    "
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   194
!
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   195
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   196
fromPackedString:aString
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   197
    "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
   198
     6bits are encoded per character. The argument, aString must be a multiple
18633
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   199
     of 4 in size (since 24 is the lcm of 6 and 8).
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   200
     Every 6 bit packet is encoded as a character in 32..95.
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   201
     Characters below 32 are ignored (so line breaks can be inserted at any place).
18649
e9d831015328 fix: signedLongIntVal returns an INT
Claus Gittinger <cg@exept.de>
parents: 18633
diff changeset
   202
     An addition final byte defines how many bytes of the last triple are valid.
18633
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   203
     This is somewhat like the radix-encoding used in good old PDP11 times ;-)
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   204
     ST-80 uses this encoding for Images ...
16798
acfbeccbc226 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16796
diff changeset
   205
     This is a base64 encoding, very similar (but not equal) to the algorithm used in RFC1421.
18346
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   206
     PS: It took a while to figure that one out ...
18633
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   207
     PPS: I don't like it ;-)"
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   208
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   209
    |index    "{ Class: SmallInteger }"
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   210
     dstIndex "{ Class: SmallInteger }"
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   211
     stop     "{ Class: SmallInteger }"
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   212
     sixBits  "{ Class: SmallInteger }"
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   213
     n        "{ Class: SmallInteger }"
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   214
     sz       "{ Class: SmallInteger }"
12551
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   215
     last bytes|
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   216
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   217
    sz := aString size.
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   218
    sz == 0 ifTrue:[^ self new].
12551
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   219
    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
   220
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   221
    stop := sz // 4 * 3.
12551
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   222
    "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
   223
     range 97 .. otherwise, its exact."
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   224
12551
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   225
    last := aString last codePoint.
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   226
    last > 96 ifTrue:[
18649
e9d831015328 fix: signedLongIntVal returns an INT
Claus Gittinger <cg@exept.de>
parents: 18633
diff changeset
   227
	stop := stop - 3 + (last - 96)
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   228
    ].
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   229
    bytes := self new:stop.
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   230
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   231
    index := 1. dstIndex := 1.
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   232
    [dstIndex <= stop] whileTrue:[
18649
e9d831015328 fix: signedLongIntVal returns an INT
Claus Gittinger <cg@exept.de>
parents: 18633
diff changeset
   233
	"/ take 4 characters ...
e9d831015328 fix: signedLongIntVal returns an INT
Claus Gittinger <cg@exept.de>
parents: 18633
diff changeset
   234
	"/ allow a line break before each group of 4
e9d831015328 fix: signedLongIntVal returns an INT
Claus Gittinger <cg@exept.de>
parents: 18633
diff changeset
   235
	sixBits := (aString at:index) codePoint.
e9d831015328 fix: signedLongIntVal returns an INT
Claus Gittinger <cg@exept.de>
parents: 18633
diff changeset
   236
	[sixBits < 32] whileTrue:[
e9d831015328 fix: signedLongIntVal returns an INT
Claus Gittinger <cg@exept.de>
parents: 18633
diff changeset
   237
	    index := index + 1.
e9d831015328 fix: signedLongIntVal returns an INT
Claus Gittinger <cg@exept.de>
parents: 18633
diff changeset
   238
	    sixBits := (aString at:index) codePoint.
e9d831015328 fix: signedLongIntVal returns an INT
Claus Gittinger <cg@exept.de>
parents: 18633
diff changeset
   239
	].
e9d831015328 fix: signedLongIntVal returns an INT
Claus Gittinger <cg@exept.de>
parents: 18633
diff changeset
   240
	sixBits := sixBits bitAnd:16r3F.
e9d831015328 fix: signedLongIntVal returns an INT
Claus Gittinger <cg@exept.de>
parents: 18633
diff changeset
   241
	n := sixBits.
e9d831015328 fix: signedLongIntVal returns an INT
Claus Gittinger <cg@exept.de>
parents: 18633
diff changeset
   242
e9d831015328 fix: signedLongIntVal returns an INT
Claus Gittinger <cg@exept.de>
parents: 18633
diff changeset
   243
	"/ self assert:(aString at:index+1) codePoint >= 32.
e9d831015328 fix: signedLongIntVal returns an INT
Claus Gittinger <cg@exept.de>
parents: 18633
diff changeset
   244
	sixBits := (aString at:index+1) codePoint bitAnd:16r3F.
e9d831015328 fix: signedLongIntVal returns an INT
Claus Gittinger <cg@exept.de>
parents: 18633
diff changeset
   245
	n := (n bitShift:6) + sixBits.
e9d831015328 fix: signedLongIntVal returns an INT
Claus Gittinger <cg@exept.de>
parents: 18633
diff changeset
   246
e9d831015328 fix: signedLongIntVal returns an INT
Claus Gittinger <cg@exept.de>
parents: 18633
diff changeset
   247
	"/ self assert:(aString at:index+2) codePoint >= 32.
e9d831015328 fix: signedLongIntVal returns an INT
Claus Gittinger <cg@exept.de>
parents: 18633
diff changeset
   248
	sixBits := (aString at:index+2) codePoint bitAnd:16r3F.
e9d831015328 fix: signedLongIntVal returns an INT
Claus Gittinger <cg@exept.de>
parents: 18633
diff changeset
   249
	n := (n bitShift:6) + sixBits.
e9d831015328 fix: signedLongIntVal returns an INT
Claus Gittinger <cg@exept.de>
parents: 18633
diff changeset
   250
e9d831015328 fix: signedLongIntVal returns an INT
Claus Gittinger <cg@exept.de>
parents: 18633
diff changeset
   251
	"/ self assert:(aString at:index+3) codePoint >= 32.
e9d831015328 fix: signedLongIntVal returns an INT
Claus Gittinger <cg@exept.de>
parents: 18633
diff changeset
   252
	sixBits := (aString at:index+3) codePoint bitAnd:16r3F.
e9d831015328 fix: signedLongIntVal returns an INT
Claus Gittinger <cg@exept.de>
parents: 18633
diff changeset
   253
	n := (n bitShift:6) + sixBits.
e9d831015328 fix: signedLongIntVal returns an INT
Claus Gittinger <cg@exept.de>
parents: 18633
diff changeset
   254
e9d831015328 fix: signedLongIntVal returns an INT
Claus Gittinger <cg@exept.de>
parents: 18633
diff changeset
   255
	index := index + 4.
e9d831015328 fix: signedLongIntVal returns an INT
Claus Gittinger <cg@exept.de>
parents: 18633
diff changeset
   256
e9d831015328 fix: signedLongIntVal returns an INT
Claus Gittinger <cg@exept.de>
parents: 18633
diff changeset
   257
	"/ now have 24 bits in n
e9d831015328 fix: signedLongIntVal returns an INT
Claus Gittinger <cg@exept.de>
parents: 18633
diff changeset
   258
e9d831015328 fix: signedLongIntVal returns an INT
Claus Gittinger <cg@exept.de>
parents: 18633
diff changeset
   259
	bytes at:dstIndex put:(n bitShift:-16).
e9d831015328 fix: signedLongIntVal returns an INT
Claus Gittinger <cg@exept.de>
parents: 18633
diff changeset
   260
e9d831015328 fix: signedLongIntVal returns an INT
Claus Gittinger <cg@exept.de>
parents: 18633
diff changeset
   261
	dstIndex < stop ifTrue:[
e9d831015328 fix: signedLongIntVal returns an INT
Claus Gittinger <cg@exept.de>
parents: 18633
diff changeset
   262
	    bytes at:dstIndex+1 put:((n bitShift:-8) bitAnd:16rFF).
e9d831015328 fix: signedLongIntVal returns an INT
Claus Gittinger <cg@exept.de>
parents: 18633
diff changeset
   263
	    dstIndex+2 <= stop ifTrue:[
e9d831015328 fix: signedLongIntVal returns an INT
Claus Gittinger <cg@exept.de>
parents: 18633
diff changeset
   264
		bytes at:dstIndex+2 put:(n bitAnd:16rFF).
e9d831015328 fix: signedLongIntVal returns an INT
Claus Gittinger <cg@exept.de>
parents: 18633
diff changeset
   265
	    ]
e9d831015328 fix: signedLongIntVal returns an INT
Claus Gittinger <cg@exept.de>
parents: 18633
diff changeset
   266
	].
e9d831015328 fix: signedLongIntVal returns an INT
Claus Gittinger <cg@exept.de>
parents: 18633
diff changeset
   267
	dstIndex := dstIndex + 3.
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   268
    ].
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   269
    ^ bytes
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   270
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
     ByteArray fromPackedString:(#[1 1 1 1] asPackedString)
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   273
     ByteArray fromPackedString:(#[1 1 1 1 1] asPackedString)
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   274
     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
   275
     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
   276
     ByteArray fromPackedString:(#[1 1 1 1 1 1 1 1] asPackedString)
18633
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   277
     ByteArray fromPackedString:((ByteArray new:256) asPackedString)
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   278
     ByteArray fromPackedString:((ByteArray new:128) asPackedString)
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   279
     ByteArray fromPackedString:((ByteArray new:129) asPackedString)
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   280
     ByteArray fromPackedString:((ByteArray new:130) asPackedString)
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   281
     ByteArray fromPackedString:((ByteArray new:131) asPackedString)
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   282
     ByteArray fromPackedString:((ByteArray new:132) asPackedString)
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   283
     ByteArray fromPackedString:((ByteArray new:64) asPackedString)
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   284
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   285
     0 to:256 do:[:l |
18649
e9d831015328 fix: signedLongIntVal returns an INT
Claus Gittinger <cg@exept.de>
parents: 18633
diff changeset
   286
	|orig copy|
e9d831015328 fix: signedLongIntVal returns an INT
Claus Gittinger <cg@exept.de>
parents: 18633
diff changeset
   287
e9d831015328 fix: signedLongIntVal returns an INT
Claus Gittinger <cg@exept.de>
parents: 18633
diff changeset
   288
	0 to:255 do:[:fill |
e9d831015328 fix: signedLongIntVal returns an INT
Claus Gittinger <cg@exept.de>
parents: 18633
diff changeset
   289
	    orig := ByteArray new:l withAll:fill.
e9d831015328 fix: signedLongIntVal returns an INT
Claus Gittinger <cg@exept.de>
parents: 18633
diff changeset
   290
	    copy := ByteArray fromPackedString:(orig asPackedString).
e9d831015328 fix: signedLongIntVal returns an INT
Claus Gittinger <cg@exept.de>
parents: 18633
diff changeset
   291
	    self assert:(orig = copy).
e9d831015328 fix: signedLongIntVal returns an INT
Claus Gittinger <cg@exept.de>
parents: 18633
diff changeset
   292
	 ]
18633
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   293
     ]
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   294
    "
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   295
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   296
    "Modified: / 6.3.1997 / 15:28:52 / cg"
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   297
    "Modified: / 18.12.1997 / 17:17:11 / stefan"
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   298
!
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   299
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   300
uninitializedNew:anInteger
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   301
    "return a new instance of the receiver with uninitialized
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   302
     (i.e. undefined) contents. The indexed elements have any random
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   303
     value. However, any named instance variables are still nilled.
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   304
     For use, when contents will be set anyway shortly after - this
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   305
     is a bit faster than the regular basicNew:, which clears the bytes.
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   306
     Of course, it only makes a difference for very big ByteArrays, such
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   307
     as used for images/bitmaps.
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   308
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   309
     Notice: if you want to port code using uninitializedNew: to another
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   310
     smalltalk, you have to add an 'uninitializedNew: -> basicNew:'-calling
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   311
     method to the ByteArray class of the other smalltalk."
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   312
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   313
%{  /* NOCONTEXT */
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   314
    OBJ newobj;
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   315
    INT instsize, nInstVars, nindexedinstvars;
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   316
    REGISTER OBJ *op;
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   317
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   318
    if (__isSmallInteger(anInteger)) {
18346
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   319
	nindexedinstvars = __intVal(anInteger);
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   320
	if (nindexedinstvars >= 0) {
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   321
	    if (self == ByteArray) {
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   322
		/*
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   323
		 * the most common case
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   324
		 */
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   325
		instsize = OHDR_SIZE + nindexedinstvars;
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   326
		if (__CanDoQuickNew(instsize)) {        /* OBJECT ALLOCATION */
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   327
		    __qCheckedNew(newobj, instsize);
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   328
		    __InstPtr(newobj)->o_class = self;
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   329
		    __qSTORE(newobj, self);
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   330
		    RETURN (newobj );
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   331
		}
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   332
	    } else {
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   333
		/*
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   334
		 * Take care for subclasses like TwoByteString
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   335
		 */
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   336
		switch (__smallIntegerVal(__ClassInstPtr(self)->c_flags) & ARRAYMASK) {
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   337
		case BYTEARRAY:
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   338
		    break;
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   339
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   340
		case WORDARRAY:
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   341
		case SWORDARRAY:
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   342
		    nindexedinstvars *= 2;
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   343
		    break;
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   344
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   345
		case LONGARRAY:
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   346
		case SLONGARRAY:
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   347
		    nindexedinstvars *= 4;
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   348
		    break;
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   349
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   350
		default:
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   351
		    /* don't know about this array type, delegate to super */
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   352
		    goto out;
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   353
		}
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   354
	    }
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   355
	    nInstVars = __intVal(__ClassInstPtr(self)->c_ninstvars);
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   356
	    instsize = OHDR_SIZE + __OBJS2BYTES__(nInstVars) + nindexedinstvars;
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   357
	    __PROTECT_CONTEXT__
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   358
	    __qNew(newobj, instsize);   /* OBJECT ALLOCATION */
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   359
	    __UNPROTECT_CONTEXT__
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   360
	    if (newobj != nil) {
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   361
		__InstPtr(newobj)->o_class = self;
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   362
		__qSTORE(newobj, self);
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   363
		if (nInstVars) {
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   364
		    /*
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   365
		     * still have to nil out named instvars ...
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   366
		     */
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   367
#if defined(memset4) && defined(FAST_OBJECT_MEMSET4)
18346
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   368
		    memset4(__InstPtr(newobj)->i_instvars, nil, nInstVars);
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   369
#else
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   370
# if defined(FAST_MEMSET) && !defined(NEGATIVE_ADDRESSES)
18346
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   371
		    /*
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   372
		     * knowing that nil is 0
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   373
		     */
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   374
		    memset(__InstPtr(newobj)->i_instvars, 0, instsize - OHDR_SIZE);
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   375
# else
18346
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   376
		    op = __InstPtr(newobj)->i_instvars;
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   377
		    while (nInstVars--)
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   378
			*op++ = nil;
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   379
# endif
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   380
#endif
18346
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   381
		}
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   382
		RETURN ( newobj );
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   383
	    }
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   384
	}
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   385
    }
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   386
out:;
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   387
%}.
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   388
    ^ self basicNew:anInteger
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   389
!
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   390
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   391
with:aByteArray from:start to:stop
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   392
    "return new instance with a copy of aByteArray
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   393
     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
   394
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   395
    |len bytes|
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   396
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   397
    len := stop-start+1.
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   398
    bytes := self new:len.
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   399
    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
   400
    ^ bytes
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   401
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   402
    "
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   403
      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
   404
    "
3363
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
   405
! !
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
   406
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   407
!UninterpretedBytes class methodsFor:'queries'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   408
8893
99996b25482e +isAbstract
Claus Gittinger <cg@exept.de>
parents: 8092
diff changeset
   409
isAbstract
11220
1ed300ff0d21 comment
Claus Gittinger <cg@exept.de>
parents: 11009
diff changeset
   410
    "Return if this class is an abstract class.
1ed300ff0d21 comment
Claus Gittinger <cg@exept.de>
parents: 11009
diff changeset
   411
     True is returned for UninterpretedBytes here; false for subclasses.
1ed300ff0d21 comment
Claus Gittinger <cg@exept.de>
parents: 11009
diff changeset
   412
     Abstract subclasses must redefine again."
1ed300ff0d21 comment
Claus Gittinger <cg@exept.de>
parents: 11009
diff changeset
   413
8893
99996b25482e +isAbstract
Claus Gittinger <cg@exept.de>
parents: 8092
diff changeset
   414
    ^ self == UninterpretedBytes
99996b25482e +isAbstract
Claus Gittinger <cg@exept.de>
parents: 8092
diff changeset
   415
!
99996b25482e +isAbstract
Claus Gittinger <cg@exept.de>
parents: 8092
diff changeset
   416
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   417
isBigEndian
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   418
    "return true, if words/shorts store the most-significant
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   419
     byte first (MSB), false if least-sign.-first (LSB).
4019
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
   420
     I.e. false for vax, intel; true for m68k, sun.
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
   421
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
   422
     Notice: UninterpretedBytes isBigEndian
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   423
	     this is inlined both by stc and the jit compiler"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   424
a27a279701f8 Initial revision
claus
parents:
diff changeset
   425
%{  /* NOCONTEXT */
a27a279701f8 Initial revision
claus
parents:
diff changeset
   426
8901
824a89d0b5c7 alpha64 vs. POINTER_SIZE cleanup
Claus Gittinger <cg@exept.de>
parents: 8893
diff changeset
   427
#if defined(__MSBFIRST__)
3936
dd8cd28d4a9b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3459
diff changeset
   428
    RETURN (true);
dd8cd28d4a9b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3459
diff changeset
   429
#else
8901
824a89d0b5c7 alpha64 vs. POINTER_SIZE cleanup
Claus Gittinger <cg@exept.de>
parents: 8893
diff changeset
   430
# if defined(__LSBFIRST__)
4275
9fc4a735a1d3 BFIRST stuff
Claus Gittinger <cg@exept.de>
parents: 4019
diff changeset
   431
    RETURN (false);
9fc4a735a1d3 BFIRST stuff
Claus Gittinger <cg@exept.de>
parents: 4019
diff changeset
   432
# else
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   433
    /*
a27a279701f8 Initial revision
claus
parents:
diff changeset
   434
     * I dont like ifdefs - you always forget some ...
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   435
     * therefore we look into a structure at run-time.
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   436
     * (also, there are CPUs around [mips], where the byteorder
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   437
     *  is programmable, and which come in different flavours)
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   438
     *
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   439
     * NOTICE:
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   440
     *    both the JIT and stc may inline this to a
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   441
     *    constant for systems where this is known.
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   442
     */
a27a279701f8 Initial revision
claus
parents:
diff changeset
   443
    union {
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   444
	unsigned int   u_l;
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   445
	char           u_c[sizeof(int)];
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   446
    } u;
a27a279701f8 Initial revision
claus
parents:
diff changeset
   447
a27a279701f8 Initial revision
claus
parents:
diff changeset
   448
    u.u_l = 0x87654321;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   449
    if (u.u_c[0] == 0x21) RETURN (false);
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   450
    RETURN (true);
4275
9fc4a735a1d3 BFIRST stuff
Claus Gittinger <cg@exept.de>
parents: 4019
diff changeset
   451
# endif
3936
dd8cd28d4a9b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3459
diff changeset
   452
#endif
18346
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   453
%}.
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   454
    ^ false     "/ an arbitrary default
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   455
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   456
    "
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   457
     UninterpretedBytes isBigEndian
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   458
    "
3209
eff7ad7f0825 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3207
diff changeset
   459
!
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   460
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   461
isBuiltInClass
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   462
    "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
   463
     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
   464
     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
   465
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   466
    ^ self == UninterpretedBytes
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   467
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
   468
    "Modified: / 23.4.1996 / 15:56:25 / cg"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
   469
    "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
   470
! !
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   471
19345
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
   472
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
   473
!UninterpretedBytes methodsFor:'Compatibility-Squeak'!
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
   474
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
   475
copyFromByteArray:aByteArray
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
   476
    "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
   477
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
   478
    self replaceBytesFrom:1 to:(self size min:aByteArray size) with:aByteArray startingAt:1
15087
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
   479
!
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
   480
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
   481
signedLongAt:index
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
   482
    "return the 4-bytes starting at index as a signed Integer.
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
   483
     The index is a smalltalk index (i.e. 1-based).
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
   484
     The value is retrieved in the machines natural byte order.
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
   485
     This may be worth a primitive."
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
   486
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
   487
    ^ self longAt:index
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
   488
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
   489
    "
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
   490
     |b|
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
   491
     b := ByteArray new:4.
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
   492
     b unsignedLongAt:1 put:16rFFFFFFFF.
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
   493
     b signedLongAt:1
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
   494
    "
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
   495
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
   496
    "Modified: 1.7.1996 / 21:14:38 / cg"
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
   497
!
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
   498
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
   499
signedLongAt:index put:newValue
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
   500
    "store a 4-bytes value starting at index.
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
   501
     The index is a smalltalk index (i.e. 1-based).
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
   502
     The value is in the machines natural byte order."
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
   503
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
   504
    ^ self longAt:index put:newValue
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
   505
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
   506
    "
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
   507
     |b|
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
   508
     b := ByteArray new:4.
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
   509
     b signedLongAt:1 put:-1.
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
   510
     b unsignedLongAt:1
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
   511
    "
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
   512
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
   513
    "Modified: 1.7.1996 / 21:14:38 / cg"
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
   514
! !
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
   515
9185
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
   516
!UninterpretedBytes methodsFor:'Compatibility-V''Age'!
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
   517
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
   518
uint32At:zeroBasedIndex
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
   519
    "return the 4-bytes starting at index as (unsigned) Integer.
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
   520
     The index is a C index (i.e. 0-based).
19301
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
   521
     The value is retrieved in the machine's natural byte order.
9185
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
   522
     Similar to unsignedLongAt:, except for the index base"
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
   523
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
   524
    ^ self unsignedLongAt:zeroBasedIndex+1
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
   525
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
   526
    "
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
   527
     |b|
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
   528
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
   529
     b := ByteArray withAll:#(0 0 0 0).
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
   530
     b uint32At:0 put:16r12345678.
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
   531
     b uint32At:0.
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
   532
     b
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
   533
    "
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
   534
!
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
   535
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
   536
uint32At:zeroBasedIndex put:anInteger
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
   537
    "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
   538
     The index is a C index (i.e. 0-based).
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
   539
     The value is stored in the machines natural byte order.
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
   540
     Similar to unsignedLongAt:put:, except for the index base"
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
   541
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
   542
    ^ self unsignedLongAt:zeroBasedIndex+1 put:anInteger
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
   543
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
   544
    "
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
   545
     |b|
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
   546
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
   547
     b := ByteArray withAll:#(0 0 0 0).
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
   548
     b uint32At:0 put:16r12345678.
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
   549
     b
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
   550
    "
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
   551
! !
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
   552
16796
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
   553
!UninterpretedBytes methodsFor:'accessing-arbitrary-long ints'!
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
   554
19197
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
   555
signedIntegerAt:index length:n bigEndian:bigEndian
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
   556
    "return the n-byte signed integer starting at index.
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
   557
     With n=1, this returns the single signed byte's value,
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
   558
     n=2, a signed short, n=4 a signed int etc.
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
   559
     Useful to extract arbitrary long integers"
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
   560
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
   561
    |val highByte|
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
   562
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
   563
    val := 0.
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
   564
    bigEndian ifTrue:[
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
   565
        highByte := (self at:index).
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
   566
        index to:index+n-1 do:[:i |
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
   567
            val := (val<<8) + (self at:i)
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
   568
        ]
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
   569
    ] ifFalse:[
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
   570
        highByte := (self at:index+n-1).
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
   571
        index+n-1 to:index by:-1 do:[:i |
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
   572
            val := (val<<8) + (self at:i)
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
   573
        ]
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
   574
    ].
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
   575
    (highByte bitTest:16r80) ifTrue:[
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
   576
        ^ val - (1 bitShift:(n*8))
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
   577
    ].    
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
   578
    ^ val
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
   579
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
   580
    "
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
   581
     |b|
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
   582
     b := #[ 16r01 16rFF 16r00 16r04 16r05 ].
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
   583
     (b signedIntegerAt:2 length:2 bigEndian:false). ' -> 255 (00FF) '.
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
   584
     (b signedIntegerAt:2 length:2 bigEndian:true).  ' -> -256 (FF00) '.   
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
   585
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
   586
     b := #[ 16r01 16r00 16rFF 16r04 16r05 ].
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
   587
     (b signedIntegerAt:2 length:2 bigEndian:false). ' -> -256 (FF00) '.
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
   588
     (b signedIntegerAt:2 length:2 bigEndian:true).  ' -> 255 (00FF) '.   
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
   589
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
   590
     b := #[ 16r01 16r7F 16r00 16r04 16r05 ].
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
   591
     (b signedIntegerAt:2 length:2 bigEndian:false). ' -> 127 (007F) '.
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
   592
     (b signedIntegerAt:2 length:2 bigEndian:true).  ' -> 32512 (7F00) '.      
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
   593
    "
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
   594
    
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
   595
    "
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
   596
     |b|
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
   597
     b := #[ 16r01 16r02 16r03 16r04 16r05 ].
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
   598
     (b signedIntegerAt:2 length:4 bigEndian:false).
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
   599
     (b signedIntegerAt:2 length:4 bigEndian:true).
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
   600
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
   601
     b := #[ 16r01 16r82 16r03 16r04 16r05 ].
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
   602
     (b signedIntegerAt:2 length:4 bigEndian:false).
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
   603
     (b signedIntegerAt:2 length:4 bigEndian:true).
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
   604
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
   605
     b := #[ 16r01 16r82 16r03 16r04 16r85 ].
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
   606
     (b signedIntegerAt:2 length:4 bigEndian:false).
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
   607
     (b signedIntegerAt:2 length:4 bigEndian:true).
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
   608
    "
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
   609
!
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
   610
16796
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
   611
unsignedIntegerAt:index length:n bigEndian:bigEndian
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
   612
    "return the n-byte unsigned integer starting at index.
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
   613
     With n=1, this returns the single byte's value,
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
   614
     n=2, an unsigned short, n=4 an unsigned int etc.
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
   615
     Useful to extract arbitrary long integers"
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
   616
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
   617
    |val|
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
   618
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
   619
    val := 0.
18346
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   620
    bigEndian ifTrue:[
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   621
	index to:index+n-1 do:[:i |
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   622
	    val := (val<<8) + (self at:i)
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   623
	]
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   624
    ] ifFalse:[
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   625
	index+n-1 to:index by:-1 do:[:i |
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   626
	    val := (val<<8) + (self at:i)
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   627
	]
16796
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
   628
    ].
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
   629
    ^ val
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
   630
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
   631
    "
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
   632
     |b|
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
   633
     b := #[ 16r01 16r02 16r03 16r04 16r05 ].
18346
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   634
     (b unsignedIntegerAt:2 length:4 bigEndian:false).
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   635
     (b unsignedIntegerAt:2 length:4 bigEndian:true).
16796
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
   636
    "
19301
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
   637
!
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
   638
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
   639
unsignedIntegerAt:index put:newValue length:n bigEndian:bigEndian
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
   640
    "store the n-byte unsigned integer starting at index.
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
   641
     With n=1, this stores a single byte's value,
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
   642
     n=2, an unsigned short, n=4 an unsigned int etc.
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
   643
     Useful to replace arbitrary long integers"
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
   644
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
   645
    |val|
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
   646
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
   647
    val := newValue.
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
   648
    bigEndian ifTrue:[
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
   649
        index to:index+n-1 do:[:i |
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
   650
            self at:i put:(val bitAnd:16rFF).
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
   651
            val := val bitShift:-8.
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
   652
        ]
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
   653
    ] ifFalse:[
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
   654
        index+n-1 to:index by:-1 do:[:i |
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
   655
            self at:i put:(val bitAnd:16rFF).
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
   656
            val := val bitShift:-8.
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
   657
        ]
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
   658
    ].
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
   659
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
   660
    "
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
   661
     |b|
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
   662
     b := #[ 16r01 16r02 16r03 16r04 16r05 ] copy.
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
   663
     (b unsignedIntegerAt:2 put:16r11223344 length:3 bigEndian:false). b.
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
   664
     (b unsignedIntegerAt:2 put:16r11223344 length:3 bigEndian:true). b.
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
   665
    "
16796
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
   666
! !
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
   667
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   668
!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
   669
4422
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
   670
bcdByteAt:index
13724
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
   671
    "return the bcd-value for a byte at index in the range 0..99.
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
   672
     BCD treats nibbles (4-bit) as an encoded decimal number's digits
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
   673
     (i.e. the value n is encoded as: ((n // 10) * 16) + (n \\ 10)"
4422
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
   674
4425
a10011c1b6eb bcd support - again.
Claus Gittinger <cg@exept.de>
parents: 4422
diff changeset
   675
    ^ (self byteAt:index) decodeFromBCD
4422
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
   676
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
   677
    "
15004
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
   678
     #[ 16r55 ] bcdByteAt:1
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
   679
     #[ 16r99] bcdByteAt:1
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   680
     #[ 16rAA] bcdByteAt:1
4422
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
   681
    "
13724
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
   682
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
   683
    "Modified (comment): / 26-09-2011 / 11:57:33 / cg"
4422
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
   684
!
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
   685
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
   686
bcdByteAt:index put:aNumber
13724
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
   687
    "set the byte at index as bcd-value in the range 0..99.
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
   688
     BCD treats nibbles (4-bit) as an encoded decimal number's digits
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
   689
     (i.e. the value n is encoded as: ((n // 10) * 16) + (n \\ 10)"
4422
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
   690
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
   691
    (aNumber between:0 and:99) ifFalse:[
15004
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
   692
	self error:'invalid value for BCD encoding'
4422
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
   693
    ].
4425
a10011c1b6eb bcd support - again.
Claus Gittinger <cg@exept.de>
parents: 4422
diff changeset
   694
    ^ self byteAt:index put:aNumber encodeAsBCD
4422
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
   695
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
   696
    "
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   697
     (((ByteArray new:1) bcdByteAt:1 put:55; yourself) at:1) hexPrintString
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   698
     (((ByteArray new:1) bcdByteAt:1 put:99; yourself) at:1) hexPrintString
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   699
     (((ByteArray new:1) bcdByteAt:1 put:100; yourself) at:1) hexPrintString
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   700
     (((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
   701
    "
13724
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
   702
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
   703
    "Modified (comment): / 26-09-2011 / 11:57:36 / cg"
4422
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
   704
!
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
   705
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   706
signedByteAt:index
13724
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
   707
    "return the byte at index as a signed 8 bit value in the range -128..+127.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   708
     The index is a smalltalk index (i.e. 1-based).
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   709
     This may be worth a primitive."
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   710
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   711
    ^ (self at:index) signExtendedByteValue
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   712
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   713
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   714
     |b|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   715
     b := ByteArray new:2.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   716
     b at:1 put:16rFF.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   717
     b at:2 put:16r7F.
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   718
     b signedByteAt:1
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   719
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   720
13724
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
   721
    "Modified: / 01-07-1996 / 21:13:53 / cg"
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
   722
    "Modified (comment): / 26-09-2011 / 11:57:14 / cg"
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   723
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   724
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   725
signedByteAt:index put:aSignedByteValue
13724
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
   726
    "return the byte at index as a signed 8 bit value in the range -128..+127.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   727
     The index is a smalltalk index (i.e. 1-based).
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   728
     Return the signedByteValue argument.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   729
     This may be worth a primitive."
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   730
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   731
    |b "{ Class: SmallInteger }"|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   732
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   733
    aSignedByteValue >= 0 ifTrue:[
15004
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
   734
	b := aSignedByteValue
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   735
    ] ifFalse:[
15004
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
   736
	b := 16r100 + aSignedByteValue
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   737
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   738
    self at:index put:b.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   739
    ^ aSignedByteValue
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   740
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   741
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   742
     |b|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   743
     b := ByteArray new:2.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   744
     b signedByteAt:1 put:-1.
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   745
     b at:1
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   746
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   747
13724
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
   748
    "Modified: / 01-07-1996 / 21:12:37 / cg"
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
   749
    "Modified (comment): / 26-09-2011 / 11:57:18 / cg"
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   750
! !
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   751
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   752
!UninterpretedBytes methodsFor:'accessing-floats & doubles'!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
   753
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   754
doubleAt:index
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   755
    "return the 8-bytes starting at index as a Float.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   756
     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
   757
     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
   758
     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
   759
     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
   760
     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
   761
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   762
    |newFloat|
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   763
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   764
%{
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   765
    /*
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   766
     * handle the most common cases fast ...
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   767
     */
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   768
    if (__isSmallInteger(index)) {
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   769
	unsigned char *cp;
15004
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
   770
	INT sz;
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   771
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   772
	__fetchBytePointerAndSize__(self, &cp, &sz);
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   773
	if (cp) {
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   774
	    unsigned INT idx = ((unsigned INT)__intVal(index)) - 1;
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   775
3434
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
   776
	    if ((idx+(sizeof(double)-1)) < sz) {
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   777
		cp += idx;
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   778
		/*
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   779
		 * aligned
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   780
		 */
3434
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
   781
		if (((INT)cp & (sizeof(double)-1)) == 0) {
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   782
		    double dVal = ((double *)cp)[0];
3434
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
   783
		    OBJ f;
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
   784
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
   785
		    __qMKFLOAT(f, dVal);
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   786
		    RETURN (f);
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   787
		}
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   788
	    }
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   789
	}
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   790
    }
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   791
%}.
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   792
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   793
    newFloat := Float basicNew.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   794
    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
   795
	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
   796
    ].
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   797
    ^ newFloat.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   798
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   799
    "
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   800
     |b|
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   801
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   802
     b := ByteArray new:20.
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   803
     b doubleAt:1 put:(Float pi).
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   804
     Transcript showCR:b.
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   805
     Transcript showCR:(b doubleAt:1)
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   806
    "
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   807
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   808
3446
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
   809
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
   810
    "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
   811
     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
   812
     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
   813
     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
   814
     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
   815
     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
   816
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
   817
    |newFloat|
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
   818
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   819
    msb == IsBigEndian ifTrue:[
18346
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   820
	^ 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
   821
    ].
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
   822
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
   823
    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
   824
    1 to:8 do:[:destIndex|
18346
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   825
	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
   826
    ].
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
   827
    ^ newFloat.
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
   828
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
   829
    "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
   830
!
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
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
doubleAt:index put:aFloat
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   833
    "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
   834
     starting at index.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   835
     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
   836
     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
   837
     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
   838
     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
   839
     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
   840
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   841
    |flt|
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   842
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   843
%{
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   844
    /*
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   845
     * handle the most common cases fast ...
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   846
     */
16320
dcb66fff0a89 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15836
diff changeset
   847
    if (__isSmallInteger(index)) {
18346
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   848
	unsigned char *cp;
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   849
	INT sz;
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   850
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   851
	__fetchBytePointerAndSize__(self, &cp, &sz);
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   852
	if (cp) {
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   853
	    unsigned INT idx = ((unsigned INT)__intVal(index)) - 1;
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   854
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   855
	    if ((idx+(sizeof(double)-1)) < sz) {
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   856
		cp += idx;
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   857
		/*
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   858
		 * aligned
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   859
		 */
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   860
		if (((INT)cp & (sizeof(double)-1)) == 0) {
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   861
		    if (__isFloat(aFloat)) {
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   862
			((double *)cp)[0] = __floatVal(aFloat);
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   863
			RETURN (aFloat);
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   864
		    }
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   865
		    if (__isShortFloat(aFloat)) {
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   866
			((double *)cp)[0] = (double)(__shortFloatVal(aFloat));
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   867
			RETURN (aFloat);
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   868
		    }
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   869
		    if (__isSmallInteger(aFloat)) {
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   870
			((double *)cp)[0] = (double)(__intVal(aFloat));
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   871
			RETURN (aFloat);
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   872
		    }
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   873
		}
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   874
	    }
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   875
	}
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   876
    }
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   877
%}.
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   878
16320
dcb66fff0a89 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15836
diff changeset
   879
    flt := aFloat asFloat.
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   880
    1 to:8 do:[:srcIndex|
18346
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   881
	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
   882
    ].
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   883
    ^ aFloat
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   884
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   885
3446
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
   886
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
   887
    "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
   888
     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
   889
     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
   890
     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
   891
     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
   892
     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
   893
     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
   894
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
   895
    |flt|
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
   896
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   897
    msb == IsBigEndian ifTrue:[
18346
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   898
	^ 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
   899
    ].
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
   900
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
   901
    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
   902
    1 to:8 do:[:srcIndex|
18346
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   903
	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
   904
    ].
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
   905
    ^ aFloat
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
   906
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
   907
    "Created: / 15.5.1998 / 17:22:27 / cg"
3447
Claus Gittinger <cg@exept.de>
parents: 3446
diff changeset
   908
    "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
   909
!
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
   910
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   911
floatAt:index
3434
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
   912
    "return the 4-bytes starting at index as a ShortFloat.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   913
     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
   914
     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
   915
     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
   916
     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
   917
     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
   918
     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
   919
     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
   920
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   921
    |newFloat|
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   922
3434
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
   923
%{
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
   924
    /*
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
   925
     * handle the most common cases fast ...
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
   926
     */
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
   927
    if (__isSmallInteger(index)) {
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   928
	unsigned char *cp;
15004
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
   929
	INT sz;
3434
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
   930
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   931
	__fetchBytePointerAndSize__(self, &cp, &sz);
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   932
	if (cp) {
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   933
	    unsigned INT idx = ((unsigned INT)__intVal(index)) - 1;
3434
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
   934
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   935
	    if ((idx+(sizeof(float)-1)) < sz) {
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   936
		cp += idx;
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   937
		/*
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   938
		 * aligned
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   939
		 */
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   940
		if (((INT)cp & (sizeof(float)-1)) == 0) {
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   941
		    float fVal = ((float *)cp)[0];
3434
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
   942
		    OBJ f;
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
   943
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
   944
		    __qMKSFLOAT(f, fVal);
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   945
		    RETURN (f);
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   946
		}
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   947
	    }
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   948
	}
3434
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
   949
    }
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
   950
%}.
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
   951
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   952
    newFloat := ShortFloat basicNew.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   953
    1 to:4 do:[:destIndex|
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   954
	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
   955
    ].
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   956
    ^ newFloat.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   957
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   958
3446
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
   959
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
   960
    "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
   961
     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
   962
     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
   963
     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
   964
     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
   965
     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
   966
     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
   967
     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
   968
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
   969
    |newFloat|
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
   970
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   971
    msb == IsBigEndian ifTrue:[
18346
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   972
	^ 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
   973
    ].
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
   974
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
   975
    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
   976
    1 to:4 do:[:destIndex|
18346
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   977
	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
   978
    ].
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
   979
    ^ newFloat.
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
   980
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
   981
    "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
   982
    "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
   983
!
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
   984
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   985
floatAt:index put:aFloat
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   986
    "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
   987
     starting at index.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   988
     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
   989
     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
   990
     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
   991
     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
   992
     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
   993
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   994
    |sflt|
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   995
3434
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
   996
%{
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
   997
    /*
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
   998
     * handle the most common cases fast ...
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
   999
     */
16320
dcb66fff0a89 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15836
diff changeset
  1000
    if (__isSmallInteger(index)) {
18346
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
  1001
	unsigned char *cp;
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
  1002
	INT sz;
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
  1003
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
  1004
	__fetchBytePointerAndSize__(self, &cp, &sz);
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
  1005
	if (cp) {
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
  1006
	    unsigned INT idx = ((unsigned INT)__intVal(index)) - 1;
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
  1007
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
  1008
	    if ((idx+(sizeof(float)-1)) < sz) {
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
  1009
		cp += idx;
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
  1010
		/*
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
  1011
		 * aligned
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
  1012
		 */
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
  1013
		if (((INT)cp & (sizeof(float)-1)) == 0) {
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
  1014
		    if (__isShortFloat(aFloat)) {
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
  1015
			((float *)cp)[0] = __shortFloatVal(aFloat);
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
  1016
			RETURN (self);
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
  1017
		    }
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
  1018
		    if (__isFloat(aFloat)) {
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
  1019
			((float *)cp)[0] = (float)__floatVal(aFloat);
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
  1020
			RETURN (self);
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
  1021
		    }
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
  1022
		    if (__isSmallInteger(aFloat)) {
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
  1023
			((float *)cp)[0] = (float)__intVal(aFloat);
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
  1024
			RETURN (self);
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
  1025
		    }
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
  1026
		    // bail out to smalltalk code
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
  1027
		}
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
  1028
	    }
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
  1029
	}
3434
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  1030
    }
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  1031
%}.
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  1032
16320
dcb66fff0a89 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15836
diff changeset
  1033
    sflt := aFloat asShortFloat.
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1034
    1 to:4 do:[:srcIndex|
18346
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
  1035
	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
  1036
    ].
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1037
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1038
3446
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  1039
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
  1040
    "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
  1041
     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
  1042
     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
  1043
     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
  1044
     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
  1045
     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
  1046
     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
  1047
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  1048
    |sflt|
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  1049
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
  1050
    msb == IsBigEndian ifTrue:[
18346
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
  1051
	self floatAt:index put:aFloat.
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
  1052
	^ self.
3446
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  1053
    ].
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  1054
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  1055
    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
  1056
    1 to:4 do:[:srcIndex|
18346
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
  1057
	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
  1058
    ].
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  1059
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  1060
    "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
  1061
!
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  1062
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1063
ieeeDoubleAt:index
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1064
    "retrieve the 8 bytes starting at index as a float.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  1065
     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
  1066
     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
  1067
     number format."
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1068
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1069
    "
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1070
     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
  1071
     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
  1072
     to an IBM 370 or old VAX etc.
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1073
     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
  1074
     no problem.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1075
    "
9258
83c940f349ea isIEEEFormat
Claus Gittinger <cg@exept.de>
parents: 9185
diff changeset
  1076
    Float isIEEEFormat ifFalse:[self error:'unsupported operation'].
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  1077
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1078
    ^ self doubleAt:index
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1079
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1080
    "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
  1081
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1082
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1083
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
  1084
    "store the value of the argument, aFloat into the receiver
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  1085
     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
  1086
     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
  1087
     (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
  1088
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1089
    "
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1090
     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
  1091
     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
  1092
     to an IBM 370 or old VAX etc.
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1093
     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
  1094
     no problem.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1095
    "
9258
83c940f349ea isIEEEFormat
Claus Gittinger <cg@exept.de>
parents: 9185
diff changeset
  1096
    Float isIEEEFormat ifFalse:[self error:'unsupported operation'].
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  1097
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1098
    ^ self doubleAt:index put:aFloat
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1099
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1100
    "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
  1101
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1102
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1103
ieeeFloatAt:index
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1104
    "retrieve the 4 bytes starting at index as a float.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  1105
     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
  1106
     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
  1107
     number format."
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1108
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1109
    "
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1110
     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
  1111
     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
  1112
     to an IBM 370 or old VAX etc.
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1113
     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
  1114
     no problem.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1115
    "
9258
83c940f349ea isIEEEFormat
Claus Gittinger <cg@exept.de>
parents: 9185
diff changeset
  1116
    ShortFloat isIEEEFormat ifFalse:[self error:'unsupported operation'].
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  1117
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1118
    ^ self floatAt:index
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1119
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1120
    "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
  1121
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1122
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1123
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
  1124
    "store the value of the argument, aFloat into the receiver
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1125
     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
  1126
     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
  1127
     (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
  1128
     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
  1129
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1130
    "
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1131
     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
  1132
     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
  1133
     to an IBM 370 or old VAX etc.
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1134
     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
  1135
     no problem.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1136
    "
9258
83c940f349ea isIEEEFormat
Claus Gittinger <cg@exept.de>
parents: 9185
diff changeset
  1137
    ShortFloat isIEEEFormat ifFalse:[self error:'unsupported operation'].
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  1138
16320
dcb66fff0a89 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15836
diff changeset
  1139
    self floatAt:index put:aFloat
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1140
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1141
    "Created: / 5.3.1998 / 10:51:11 / stefan"
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1142
! !
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1143
13724
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  1144
!UninterpretedBytes methodsFor:'accessing-longlongs (64bit)'!
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1145
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1146
longLongAt:index
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1147
    "return the 8-bytes starting at index as a signed Integer.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1148
     The index is a smalltalk index (i.e. 1-based).
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1149
     The value is retrieved in the machines natural byte order.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1150
     This may be worth a primitive."
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1151
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1152
    |w|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1153
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
  1154
    w := self unsignedLongLongAt:index bigEndian:IsBigEndian.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1155
    (w > (16r7FFFFFFFFFFFFFFF)) ifTrue:[
18346
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
  1156
	^ w - (16r10000000000000000)
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1157
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1158
    ^ w
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1159
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1160
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1161
     |b|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1162
     b := ByteArray new:4.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1163
     b unsignedLongLongAt:1 put:16rFFFFFFFFFFFFFFFF.
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1164
     (b longLongAt:1)
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1165
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1166
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1167
    "Modified: / 1.7.1996 / 21:11:28 / cg"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1168
    "Created: / 5.3.1998 / 14:40:05 / stefan"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1169
    "Modified: / 5.3.1998 / 14:58:32 / stefan"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1170
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1171
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1172
longLongAt:index bigEndian:msb
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1173
    "return the 8-bytes starting at index as a signed Integer.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1174
     The index is a smalltalk index (i.e. 1-based).
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1175
     The value is retrieved in the given byte order.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1176
     This may be worth a primitive."
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1177
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1178
    |w|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1179
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1180
    w := self unsignedLongLongAt:index bigEndian:msb.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1181
    (w > (16r7FFFFFFFFFFFFFFF)) ifTrue:[
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1182
	^ w - (16r10000000000000000)
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1183
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1184
    ^ w
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1185
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1186
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1187
     |b|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1188
     b := ByteArray new:4.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1189
     b unsignedLongLongAt:1 put:16rFFFFFFFFFFFFFFFF.
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1190
     (b longLongAt:1 msb:true)
3459
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
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1193
    "Modified: / 5.3.1998 / 12:06:28 / stefan"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1194
    "Created: / 5.3.1998 / 14:40:54 / stefan"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1195
    "Modified: / 9.5.1998 / 01:10:59 / cg"
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
longLongAt:byteIndex put:anInteger
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1199
    "store a signed longLong (64bit) integer.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1200
     The index is a smalltalk index (i.e. 1-based).
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1201
     Same as #signedQuadWordAt:put: - for ST80 compatibility."
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1202
7813
3cc0b75d1684 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7812
diff changeset
  1203
    |v|
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1204
7813
3cc0b75d1684 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7812
diff changeset
  1205
    v := anInteger.
3cc0b75d1684 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7812
diff changeset
  1206
    anInteger < 0 ifTrue:[
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1207
	v := v + 16r10000000000000000
7813
3cc0b75d1684 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7812
diff changeset
  1208
    ].
3cc0b75d1684 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7812
diff changeset
  1209
    ^ self unsignedLongLongAt:byteIndex put:v
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1210
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1211
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1212
longLongAt:byteIndex put:anInteger bigEndian:msb
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1213
    "store a signed longLong (64bit) integer.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1214
     The index is a smalltalk index (i.e. 1-based).
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1215
     Same as #signedQuadWordAt:put: - for ST80 compatibility."
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
    |v|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1218
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1219
    v := anInteger.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1220
    anInteger < 0 ifTrue:[
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1221
	v := v + 16r10000000000000000
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1222
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1223
    ^ self unsignedLongLongAt:byteIndex put:v bigEndian:msb
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1224
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1225
    "Created: / 9.5.1998 / 01:10:24 / cg"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1226
    "Modified: / 9.5.1998 / 01:13:34 / cg"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1227
!
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
quadWordAt:index MSB:msb
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1230
    "return the 8-bytes starting at index as an (unsigned) Integer.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1231
     The index is a smalltalk index (i.e. 1-based).
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1232
     Depending on msb, the value is retrieved MSB or LSB-first."
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1233
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1234
    |l
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1235
     bIdx  "{ Class: SmallInteger }"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1236
     delta "{ Class: SmallInteger }"|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1237
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1238
    l := LargeInteger basicNew numberOfDigits:8.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1239
    msb ifTrue:[
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1240
	bIdx := index + 7.
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1241
	delta := -1
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1242
    ] ifFalse:[
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1243
	bIdx := index.
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1244
	delta := 1
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1245
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1246
    1 to:8 do:[:i |
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1247
	l digitAt:i put:(self basicAt:bIdx).
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1248
	bIdx := bIdx + delta
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1249
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1250
    ^ l compressed
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
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1253
     |b|
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
     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
  1256
     (b quadWordAt:1 MSB:false) printStringRadix:16
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1257
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1258
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1259
    "Modified: 5.11.1996 / 14:06:21 / cg"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1260
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1261
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1262
quadWordAt:index put:anInteger MSB:msb
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1263
    "set the 8-bytes starting at index from the (unsigned) Integer value.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1264
     The index is a smalltalk index (i.e. 1-based).
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1265
     The value must be in the range 0 to 16rFFFFFFFFFFFFFFFF.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1266
     Depending on msb, the value is stored MSB-first or LSB-first."
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
    |bIdx  "{ Class: SmallInteger }"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1269
     delta "{ Class: SmallInteger }"|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1270
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1271
    ((anInteger < 0) or:[anInteger > 16rFFFFFFFFFFFFFFFF]) ifTrue:[
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1272
	^ self elementBoundsError:anInteger
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1273
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1274
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1275
    msb ifTrue:[
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1276
	bIdx := index + 7.
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1277
	delta := -1
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1278
    ] ifFalse:[
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1279
	bIdx := index.
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1280
	delta := 1
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1281
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1282
    1 to:8 do:[:i |
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1283
	self basicAt:bIdx put:(anInteger digitAt:i).
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1284
	bIdx := bIdx + delta.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1285
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1286
    ^ anInteger
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1287
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1288
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1289
     |b|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1290
     b := ByteArray new:8.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1291
     b quadWordAtIndex:1 put:16r0807060504030201 MSB:false.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1292
     b inspect
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
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1295
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1296
unsignedLongLongAt:index bigEndian:msb
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1297
    "return the 8-bytes starting at index as an (unsigned) Integer.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1298
     The index is a smalltalk index (i.e. 1-based).
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1299
     Depending on msb, the value is retrieved MSB or LSB-first."
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1300
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1301
    |l
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1302
     bIdx  "{ Class: SmallInteger }"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1303
     delta "{ Class: SmallInteger }"|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1304
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1305
    l := LargeInteger basicNew numberOfDigits:8.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1306
    msb ifTrue:[
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1307
	bIdx := index + 7.
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1308
	delta := -1
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1309
    ] ifFalse:[
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1310
	bIdx := index.
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1311
	delta := 1
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1312
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1313
    1 to:8 do:[:i |
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1314
	l digitAt:i put:(self basicAt:bIdx).
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1315
	bIdx := bIdx + delta
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1316
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1317
    ^ l compressed
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1318
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1319
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1320
     |b|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1321
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1322
     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
  1323
     (b unsignedLongLongAt:1 bigEndian:false) printStringRadix:16
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1324
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1325
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1326
    "Modified: / 5.11.1996 / 14:06:21 / cg"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1327
    "Modified: / 5.3.1998 / 14:04:44 / stefan"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1328
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1329
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1330
unsignedLongLongAt:index put:anInteger
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1331
    "set the 8-bytes starting at index from the (unsigned) Integer value.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1332
     The index is a smalltalk index (i.e. 1-based).
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1333
     The value must be in the range 0 to 16rFFFFFFFFFFFFFFFF.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1334
     The value is stored in natural byte order."
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1335
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
  1336
    ^ self unsignedLongLongAt:index put:anInteger bigEndian:IsBigEndian
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1337
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1338
    "Created: / 5.3.1998 / 14:44:00 / stefan"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1339
    "Modified: / 5.3.1998 / 15:02:32 / stefan"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1340
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1341
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1342
unsignedLongLongAt:index put:anInteger bigEndian:msb
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1343
    "set the 8-bytes starting at index from the (unsigned) Integer value.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1344
     The index is a smalltalk index (i.e. 1-based).
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1345
     The value must be in the range 0 to 16rFFFFFFFFFFFFFFFF.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1346
     Depending on msb, the value is stored MSB-first or LSB-first."
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1347
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1348
    |bIdx  "{ Class: SmallInteger }"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1349
     delta "{ Class: SmallInteger }"|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1350
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1351
    ((anInteger < 0) or:[anInteger > 16rFFFFFFFFFFFFFFFF]) ifTrue:[
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1352
	^ self elementBoundsError:anInteger
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1353
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1354
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1355
    msb ifTrue:[
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1356
	bIdx := index + 7.
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1357
	delta := -1
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1358
    ] ifFalse:[
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1359
	bIdx := index.
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1360
	delta := 1
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1361
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1362
    1 to:8 do:[:i |
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1363
	self basicAt:bIdx put:(anInteger digitAt:i).
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1364
	bIdx := bIdx + delta.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1365
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1366
    ^ anInteger
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1367
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1368
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1369
     |b|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1370
     b := ByteArray new:8.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1371
     b unsignedLongLongAt:1 put:16r0807060504030201 bigEndian:false.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1372
     b inspect
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1373
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1374
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1375
    "Created: / 5.3.1998 / 14:06:02 / stefan"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1376
! !
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1377
13724
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  1378
!UninterpretedBytes methodsFor:'accessing-longs (32bit)'!
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1379
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1380
doubleWordAt:index
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1381
    "return the 4-bytes starting at index as an (unsigned) Integer.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1382
     The index is a smalltalk index (i.e. 1-based).
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  1383
     The value is retrieved in the machines natural byte order."
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1384
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
  1385
    ^ self doubleWordAt:index MSB:IsBigEndian
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1386
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1387
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1388
     |b|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1389
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1390
     b := ByteArray withAll:#(1 2 3 4).
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1391
     (b doubleWordAt:1) printStringRadix:16
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1392
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1393
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1394
    "Modified: / 5.3.1998 / 14:57:35 / stefan"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1395
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1396
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1397
doubleWordAt:index MSB:msb
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1398
    "return the 4-bytes starting at index as an (unsigned) Integer.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1399
     The index is a smalltalk index (i.e. 1-based).
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1400
     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
  1401
     LSB-first otherwise."
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1402
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1403
    |val
4019
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
  1404
     ival "{ Class: SmallInteger }"
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
  1405
     t    "{ Class: SmallInteger }"
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1406
     i    "{ Class: SmallInteger }"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1407
     b1   "{ Class: SmallInteger }"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1408
     b2   "{ Class: SmallInteger }"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1409
     b3   "{ Class: SmallInteger }"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1410
     b4   "{ Class: SmallInteger }"|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1411
4019
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
  1412
%{
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
  1413
    /*
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
  1414
     * handle the most common cases fast ...
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
  1415
     */
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
  1416
    if (__isSmallInteger(index)) {
19047
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  1417
        unsigned char *cp;
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  1418
        INT sz;
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  1419
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  1420
        __fetchBytePointerAndSize__(self, &cp, &sz);
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  1421
        if (cp) {
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  1422
            unsigned INT idx = ((unsigned INT)__intVal(index)) - 1;
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  1423
            unsigned int iVal;
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  1424
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  1425
            if ((idx+(sizeof(int)-1)) < sz) {
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  1426
                cp += idx;
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  1427
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  1428
                if (msb == true) {
8901
824a89d0b5c7 alpha64 vs. POINTER_SIZE cleanup
Claus Gittinger <cg@exept.de>
parents: 8893
diff changeset
  1429
#if defined(__MSBFIRST__)
19047
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  1430
                    if (((INT)cp & (sizeof(int)-1))== 0) {
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  1431
                        /*
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  1432
                         * aligned
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  1433
                         */
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  1434
                        iVal = ((unsigned int *)cp)[0];
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  1435
                    } else
4019
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
  1436
#endif
19047
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  1437
                    {
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  1438
                        iVal = cp[0];
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  1439
                        iVal = (iVal << 8) | cp[1];
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  1440
                        iVal = (iVal << 8) | cp[2];
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  1441
                        iVal = (iVal << 8) | cp[3];
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  1442
                    }
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  1443
                } else {
8901
824a89d0b5c7 alpha64 vs. POINTER_SIZE cleanup
Claus Gittinger <cg@exept.de>
parents: 8893
diff changeset
  1444
#if defined(__i386__) || (defined(UNALIGNED_FETCH_OK) && defined(__LSBFIRST__))
19047
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  1445
                    /*
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  1446
                     * aligned or not - we dont care
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  1447
                     * (i386 can fetch unaligned)
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  1448
                     */
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  1449
                    iVal = ((unsigned int *)cp)[0];
4019
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
  1450
#else
8901
824a89d0b5c7 alpha64 vs. POINTER_SIZE cleanup
Claus Gittinger <cg@exept.de>
parents: 8893
diff changeset
  1451
# if defined(__LSBFIRST__)
19047
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  1452
                    if (((INT)cp & (sizeof(int)-1))== 0) {
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  1453
                        /*
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  1454
                         * aligned
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  1455
                         */
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  1456
                        iVal = ((unsigned int *)cp)[0];
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  1457
                    } else
4019
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
  1458
# endif
19047
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  1459
                    {
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  1460
                        iVal = cp[3];
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  1461
                        iVal = (iVal << 8) | cp[2];
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  1462
                        iVal = (iVal << 8) | cp[1];
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  1463
                        iVal = (iVal << 8) | cp[0];
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  1464
                    }
4019
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
  1465
#endif
19047
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  1466
                }
8901
824a89d0b5c7 alpha64 vs. POINTER_SIZE cleanup
Claus Gittinger <cg@exept.de>
parents: 8893
diff changeset
  1467
#if __POINTER_SIZE__ == 8
19047
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  1468
                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
  1469
#else
19047
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  1470
                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
  1471
#endif
19047
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  1472
            }
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  1473
        }
4019
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
  1474
    }
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
  1475
%}.
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
  1476
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
  1477
    "/ fallBack code - non ByteArray-like receiver
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
  1478
    "/ or funny index
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
  1479
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1480
    i := index.
19047
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  1481
    b1 := self byteAt:i.
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  1482
    b2 := self byteAt:(i+1).
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  1483
    b3 := self byteAt:(i+2).
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  1484
    b4 := self byteAt:(i+3).
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1485
4019
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
  1486
    msb ifFalse:[
19047
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  1487
        t := b4. b4 := b1. b1 := t.
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  1488
        t := b3. b3 := b2. b2 := t.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1489
    ].
4019
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
  1490
    ival := b1.
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
  1491
    ival := (ival bitShift:8) + b2.
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
  1492
    ival := (ival bitShift:8) + b3.
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
  1493
    val := (ival bitShift:8) + b4.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1494
    ^ val
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1495
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1496
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1497
     |b|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1498
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1499
     b := ByteArray withAll:#(1 2 3 4).
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1500
     (b doubleWordAt:1 MSB:true) printStringRadix:16.
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1501
     (b doubleWordAt:1 MSB:false) printStringRadix:16
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1502
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1503
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1504
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1505
doubleWordAt:index put:value
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1506
    "set the 4-bytes starting at index from the (unsigned) Integer value.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1507
     The index is a smalltalk index (i.e. 1-based).
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1508
     The value should be in the range 0 to 16rFFFFFFFF
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1509
     (for negative values, the stored value is not defined).
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  1510
     The value is stored in the machines natural byte order."
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1511
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
  1512
    ^ self doubleWordAt:index put:value MSB:IsBigEndian
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1513
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1514
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1515
     |b|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1516
     b := ByteArray new:4.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1517
     b doubleWordAt:1 put:16r04030201.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1518
     b inspect
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1519
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1520
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1521
    "Modified: / 5.3.1998 / 14:57:48 / stefan"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1522
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1523
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1524
doubleWordAt:index put:aNumber MSB:msb
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1525
    "set the 4-bytes starting at index from the (unsigned) Integer value.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1526
     The index is a smalltalk index (i.e. 1-based).
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1527
     The value must be in the range 0 to 16rFFFFFFFF.
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  1528
     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
  1529
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1530
    |i "{ Class: SmallInteger }" |
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1531
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1532
    ((aNumber < 0) or:[aNumber > 16rFFFFFFFF]) ifTrue:[
19047
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  1533
        ^ self elementBoundsError:aNumber
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1534
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1535
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1536
    i := index.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1537
    msb ifTrue:[
19047
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  1538
        self byteAt:i     put:(aNumber digitAt:4).
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  1539
        self byteAt:(i+1) put:(aNumber digitAt:3).
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  1540
        self byteAt:(i+2) put:(aNumber digitAt:2).
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  1541
        self byteAt:(i+3) put:(aNumber digitAt:1).
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1542
    ] ifFalse:[
19047
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  1543
        self byteAt:i     put:(aNumber digitAt:1).
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  1544
        self byteAt:(i+1) put:(aNumber digitAt:2).
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  1545
        self byteAt:(i+2) put:(aNumber digitAt:3).
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  1546
        self byteAt:(i+3) put:(aNumber digitAt:4).
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1547
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1548
    ^ aNumber
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1549
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1550
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1551
     |b|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1552
     b := ByteArray new:8.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1553
     b doubleWordAt:1 put:16r04030201 MSB:true.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1554
     b doubleWordAt:5 put:16r04030201 MSB:false.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1555
     b inspect
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1556
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1557
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1558
    "Modified: / 21.1.1998 / 17:43:34 / cg"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1559
    "Modified: / 5.3.1998 / 11:42:17 / stefan"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1560
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1561
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1562
doubleWordAtDoubleWordIndex:index
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1563
    "return the unsigned long at index, anInteger.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1564
     Fetching in the machines natural byte order.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1565
     Indices are 1-based and scaled as appropriate to allow
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1566
     accessing the memory as an array of doubleWord entries.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1567
     (i.e. indices are 1, 2, ...)"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1568
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
  1569
    ^ self doubleWordAtDoubleWordIndex:index MSB:IsBigEndian
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1570
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1571
    "Created: / 21.1.1998 / 17:43:53 / cg"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1572
    "Modified: / 5.3.1998 / 14:58:06 / stefan"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1573
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1574
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1575
doubleWordAtDoubleWordIndex:index MSB:msb
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1576
    "return the unsigned long at index, anInteger.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1577
     Fetching is MSB if msb is true, LSB otherwise.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1578
     Indices are 1-based and scaled as appropriate to allow
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1579
     accessing the memory as an array of doubleWord entries.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1580
     (i.e. indices are 1, 2, ...)"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1581
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1582
    ^ self doubleWordAt:(index - 1 * 4 + 1) MSB:msb
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1583
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1584
    "Created: / 21.1.1998 / 17:44:07 / cg"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1585
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1586
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1587
doubleWordAtDoubleWordIndex:index put:value
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1588
    "set the long at index, anInteger.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1589
     Storing in the machines natural byte order.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1590
     Indices are 1-based and scaled as appropriate to allow
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1591
     accessing the memory as an array of doubleWord entries.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1592
     (i.e. indices are 1, 2, ...)"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1593
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
  1594
    ^ self doubleWordAtDoubleWordIndex:index put:value MSB:IsBigEndian
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1595
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1596
    "Created: / 21.1.1998 / 17:44:13 / cg"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1597
    "Modified: / 5.3.1998 / 14:58:19 / stefan"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1598
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1599
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1600
doubleWordAtDoubleWordIndex:index put:value MSB:msb
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1601
    "set the long at index, anInteger.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1602
     Storing is MSB if msb is true, LSB otherwise.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1603
     Indices are 1-based and scaled as appropriate to allow
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1604
     accessing the memory as an array of doubleWord entries.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1605
     (i.e. indices are 1, 2, ...)"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1606
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1607
    ^ self doubleWordAt:(index - 1 * 4 + 1) put:value MSB:msb
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1608
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1609
    "Created: / 21.1.1998 / 17:44:19 / cg"
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1610
!
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1611
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1612
longAt:index
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1613
    "return the 4-bytes starting at index as a signed Integer.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  1614
     The index is a smalltalk index (i.e. 1-based).
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1615
     The value is retrieved in the machines natural byte order,
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1616
     therefore, this should only be used for byte-data which is
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1617
     only used inside this machine.
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1618
     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
  1619
     or stored into a file, always use longAt:MSB: and specify
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1620
     a definite byteOrder."
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1621
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1622
    |w|
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1623
3434
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  1624
%{
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  1625
    /*
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  1626
     * handle the most common cases fast ...
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  1627
     */
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  1628
    if (__isSmallInteger(index)) {
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1629
	unsigned char *cp;
15004
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  1630
	INT sz;
3434
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  1631
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1632
	__fetchBytePointerAndSize__(self, &cp, &sz);
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1633
	if (cp) {
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1634
	    unsigned INT idx = ((unsigned INT)__intVal(index)) - 1;
3434
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  1635
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1636
	    if ((idx+(sizeof(int)-1)) < sz) {
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1637
		cp += idx;
8901
824a89d0b5c7 alpha64 vs. POINTER_SIZE cleanup
Claus Gittinger <cg@exept.de>
parents: 8893
diff changeset
  1638
#if defined(__i386__)
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1639
		/*
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1640
		 * aligned or not, we dont care (i386 can do both)
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1641
		 */
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1642
		{
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1643
		    int iVal = ((int *)cp)[0];
3434
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  1644
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1645
		    RETURN (__MKINT(iVal));
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1646
		}
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1647
#else
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1648
		/*
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1649
		 * aligned
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1650
		 */
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1651
		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
  1652
		    int iVal = ((int *)cp)[0];
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1653
8901
824a89d0b5c7 alpha64 vs. POINTER_SIZE cleanup
Claus Gittinger <cg@exept.de>
parents: 8893
diff changeset
  1654
# if __POINTER_SIZE__ == 8
8913
b9498d27a554 64bit; mkSmallInteger
Claus Gittinger <cg@exept.de>
parents: 8901
diff changeset
  1655
		    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
  1656
# else
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1657
		    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
  1658
# endif
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1659
		}
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1660
#endif
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1661
	    }
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1662
	}
3434
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  1663
    }
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  1664
%}.
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  1665
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1666
    w := self unsignedLongAt:index.
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1667
    (w > (16r7FFFFFFF)) ifTrue:[
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1668
	^ w - (16r100000000)
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1669
    ].
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1670
    ^ w
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1671
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1672
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1673
     |b|
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1674
     b := ByteArray new:4.
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1675
     b unsignedLongAt:1 put:16rFFFFFFFF.
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1676
     (b longAt:1)
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1677
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1678
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1679
    "Modified: / 1.7.1996 / 21:11:28 / cg"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1680
    "Modified: / 5.3.1998 / 12:06:28 / stefan"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1681
!
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1682
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1683
longAt:index bigEndian:msb
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1684
    "return the 4-bytes starting at index as a signed Integer.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  1685
     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
  1686
     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
  1687
     This may be worth a primitive."
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1688
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1689
    |w|
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1690
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1691
    w := self unsignedLongAt:index bigEndian:msb.
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1692
    (w > (16r7FFFFFFF)) ifTrue:[
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1693
	^ w - (16r100000000)
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1694
    ].
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1695
    ^ w
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1696
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1697
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1698
     |b|
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1699
     b := ByteArray new:4.
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1700
     b unsignedLongAt:1 put:16rFFFFFFFF.
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1701
     (b longAt:1)
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1702
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1703
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1704
    "Modified: / 1.7.1996 / 21:11:33 / cg"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1705
    "Created: / 5.3.1998 / 14:02:03 / stefan"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1706
!
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1707
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1708
longAt:index put:value
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1709
    "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
  1710
     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
  1711
     The value is stored in the machines natural byte order.
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1712
     This may be worth a primitive.
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1713
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1714
     This is the ST80 version of #signedDoubleWordAt:put:"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1715
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1716
    |v|
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1717
3434
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  1718
%{
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  1719
    /*
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  1720
     * handle the most common cases fast ...
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  1721
     */
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  1722
    if (__isSmallInteger(index)) {
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1723
	unsigned char *cp;
15004
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  1724
	INT sz;
3434
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  1725
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1726
	__fetchBytePointerAndSize__(self, &cp, &sz);
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1727
	if (cp) {
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1728
	    unsigned INT idx = ((unsigned INT)__intVal(index)) - 1;
3434
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  1729
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1730
	    if ((idx+(sizeof(int)-1)) < sz) {
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1731
		cp += idx;
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1732
		/*
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1733
		 * aligned
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1734
		 */
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1735
		if (((INT)cp & (sizeof(int)-1)) == 0) {
18649
e9d831015328 fix: signedLongIntVal returns an INT
Claus Gittinger <cg@exept.de>
parents: 18633
diff changeset
  1736
		    INT __v;
3434
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  1737
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1738
		    if (__isSmallInteger(value)) {
18650
54bf614c5585 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 18649
diff changeset
  1739
			// how about a range check?
54bf614c5585 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 18649
diff changeset
  1740
			((int *)cp)[0] = (int)(__intVal(value));
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1741
			RETURN (value);
3434
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  1742
		    }
18666
aa1bd3d0fb7f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 18664
diff changeset
  1743
# if __POINTER_SIZE__ == 4
18649
e9d831015328 fix: signedLongIntVal returns an INT
Claus Gittinger <cg@exept.de>
parents: 18633
diff changeset
  1744
		    if ((__v = __signedLongIntVal(value)) != 0) {
18650
54bf614c5585 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 18649
diff changeset
  1745
			// how about a range check?
54bf614c5585 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 18649
diff changeset
  1746
			((int *)cp)[0] = (int)(__v);
3434
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  1747
			RETURN (value);
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  1748
		    }
18666
aa1bd3d0fb7f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 18664
diff changeset
  1749
#endif
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1750
		}
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1751
	    }
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1752
	}
3434
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  1753
    }
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  1754
%}.
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  1755
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1756
    value >= 0 ifTrue:[
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1757
	v := value
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1758
    ] ifFalse:[
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1759
	v := value + 16r100000000
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1760
    ].
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1761
    self unsignedLongAt:index put:v.
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1762
    ^ value
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1763
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1764
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1765
     |b|
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1766
     b := ByteArray new:4.
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1767
     b longAt:1 put:-1.
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1768
     (b unsignedLongAt:1) printStringRadix:16
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1769
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1770
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1771
    "Modified: / 1.7.1996 / 21:11:39 / cg"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1772
    "Created: / 5.3.1998 / 10:57:18 / stefan"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1773
!
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  1774
3444
09f811ddbb51 added #longAt:put:bigEndian:
ca
parents: 3439
diff changeset
  1775
longAt:byteIndex put:anInteger bigEndian:msb
09f811ddbb51 added #longAt:put:bigEndian:
ca
parents: 3439
diff changeset
  1776
    "store a signed long (32bit) integer.
09f811ddbb51 added #longAt:put:bigEndian:
ca
parents: 3439
diff changeset
  1777
     The index is a smalltalk index (i.e. 1-based).
09f811ddbb51 added #longAt:put:bigEndian:
ca
parents: 3439
diff changeset
  1778
     Same as #signedQuadWordAt:put: - for ST80 compatibility."
09f811ddbb51 added #longAt:put:bigEndian:
ca
parents: 3439
diff changeset
  1779
09f811ddbb51 added #longAt:put:bigEndian:
ca
parents: 3439
diff changeset
  1780
    |v|
09f811ddbb51 added #longAt:put:bigEndian:
ca
parents: 3439
diff changeset
  1781
09f811ddbb51 added #longAt:put:bigEndian:
ca
parents: 3439
diff changeset
  1782
    v := anInteger.
09f811ddbb51 added #longAt:put:bigEndian:
ca
parents: 3439
diff changeset
  1783
    anInteger < 0 ifTrue:[
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1784
	v := v + 16r100000000
3444
09f811ddbb51 added #longAt:put:bigEndian:
ca
parents: 3439
diff changeset
  1785
    ].
09f811ddbb51 added #longAt:put:bigEndian:
ca
parents: 3439
diff changeset
  1786
    ^ self unsignedLongAt:byteIndex put:v bigEndian:msb
09f811ddbb51 added #longAt:put:bigEndian:
ca
parents: 3439
diff changeset
  1787
09f811ddbb51 added #longAt:put:bigEndian:
ca
parents: 3439
diff changeset
  1788
    "Created: / 9.5.1998 / 01:10:24 / cg"
09f811ddbb51 added #longAt:put:bigEndian:
ca
parents: 3439
diff changeset
  1789
    "Modified: / 9.5.1998 / 01:13:34 / cg"
09f811ddbb51 added #longAt:put:bigEndian:
ca
parents: 3439
diff changeset
  1790
!
09f811ddbb51 added #longAt:put:bigEndian:
ca
parents: 3439
diff changeset
  1791
18880
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1792
nativeIntAt:index
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1793
    "return the 4- or 8-bytes (depending on the native integer/pointer size) starting at index as a signed Integer.
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1794
     The index is a smalltalk index (i.e. 1-based).
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1795
     The value is retrieved in the machines natural byte order,
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1796
     therefore, this should only be used for byte-data which is
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1797
     only used inside this machine."
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1798
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1799
    |w|
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1800
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1801
%{
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1802
    /*
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1803
     * handle the most common cases fast ...
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1804
     */
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1805
    if (__isSmallInteger(index)) {
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1806
        unsigned char *cp;
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1807
        INT sz;
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1808
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1809
        __fetchBytePointerAndSize__(self, &cp, &sz);
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1810
        if (cp) {
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1811
            unsigned INT idx = ((unsigned INT)__intVal(index)) - 1;
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1812
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1813
            if ((idx+(sizeof(INT)-1)) < sz) {
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1814
                cp += idx;
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1815
#if defined(__i386__)
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1816
                /*
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1817
                 * aligned or not, we dont care (i386 can do both)
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1818
                 */
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1819
                {
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1820
                    INT iVal = ((INT *)cp)[0];
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1821
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1822
                    RETURN (__MKINT(iVal));
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1823
                }
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1824
#else
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1825
                /*
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1826
                 * aligned
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1827
                 */
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1828
                if (((INT)cp & (sizeof(INT)-1)) == 0) {
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1829
                    INT iVal = ((INT *)cp)[0];
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1830
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1831
                    RETURN (__MKINT(iVal));
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1832
                }
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1833
#endif
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1834
            }
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1835
        }
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1836
    }
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1837
%}.
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1838
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1839
    ^ self primitiveFailed.
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1840
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1841
    "
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1842
     |b|
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1843
     b := ByteArray new:8.
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1844
     b nativeIntAt:1 put:SmallInteger maxVal.
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1845
     b nativeIntAt:1
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1846
    "
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1847
!
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1848
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1849
nativeIntAt:index put:value
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1850
    "set the 4- or 8-bytes (depending on INT-/pointer size) starting at index from the signed Integer value.
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1851
     The index is a smalltalk index (i.e. 1-based).
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1852
     The value is stored in the machines natural byte order."
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1853
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1854
    |v|
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1855
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1856
%{
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1857
    /*
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1858
     * handle the most common cases fast ...
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1859
     */
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1860
    if (__isSmallInteger(index)) {
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1861
        unsigned char *cp;
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1862
        INT sz;
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1863
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1864
        __fetchBytePointerAndSize__(self, &cp, &sz);
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1865
        if (cp) {
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1866
            unsigned INT idx = ((unsigned INT)__intVal(index)) - 1;
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1867
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1868
            if ((idx+(sizeof(INT)-1)) < sz) {
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1869
                cp += idx;
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1870
                /*
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1871
                 * aligned
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1872
                 */
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1873
                if (((INT)cp & (sizeof(INT)-1)) == 0) {
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1874
                    INT __v;
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1875
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1876
                    if (__isSmallInteger(value)) {
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1877
                        // how about a range check?
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1878
                        ((INT *)cp)[0] = (INT)(__intVal(value));
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1879
                        RETURN (value);
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1880
                    }
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1881
                    if ((__v = __signedLongIntVal(value)) != 0) {
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1882
                        // how about a range check?
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1883
                        ((INT *)cp)[0] = (INT)(__v);
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1884
                        RETURN (value);
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1885
                    }
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1886
                }
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1887
            }
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1888
        }
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1889
    }
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1890
%}.
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1891
    ^ self primitiveFailed.
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1892
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1893
    "
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1894
     |b|
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1895
     b := ByteArray new:8.
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1896
     b nativeIntAt:1 put:SmallInteger maxVal.
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1897
     (b nativeIntAt:1) 
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1898
    "
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1899
!
b1b117bdaa9e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 18666
diff changeset
  1900
11850
ee84c01dc50d +pointerAt:
Claus Gittinger <cg@exept.de>
parents: 11756
diff changeset
  1901
pointerAt:index
ee84c01dc50d +pointerAt:
Claus Gittinger <cg@exept.de>
parents: 11756
diff changeset
  1902
    "get a pointer starting at index as ExternalAddress.
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1903
     The index is a smalltalk index (i.e. 1-based).
11850
ee84c01dc50d +pointerAt:
Claus Gittinger <cg@exept.de>
parents: 11756
diff changeset
  1904
     Only aligned accesses are allowed."
ee84c01dc50d +pointerAt:
Claus Gittinger <cg@exept.de>
parents: 11756
diff changeset
  1905
ee84c01dc50d +pointerAt:
Claus Gittinger <cg@exept.de>
parents: 11756
diff changeset
  1906
%{
ee84c01dc50d +pointerAt:
Claus Gittinger <cg@exept.de>
parents: 11756
diff changeset
  1907
    if (__isSmallInteger(index)) {
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1908
	unsigned char *cp;
15004
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  1909
	INT sz;
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1910
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1911
	__fetchBytePointerAndSize__(self, &cp, &sz);
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1912
	if (cp) {
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1913
	    unsigned INT idx = ((unsigned INT)__smallIntegerVal(index)) - 1;
13576
7fae51fa160c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 13575
diff changeset
  1914
	    char *pointer;
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1915
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1916
	    if ((idx+(sizeof(pointer)-1)) < sz) {
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1917
		cp += idx;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1918
		/*
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1919
		 * aligned
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1920
		 */
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1921
		if (((INT)cp & (sizeof(pointer)-1)) == 0) {
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1922
		    pointer = ((char **)cp)[0];
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1923
		    RETURN (__MKEXTERNALADDRESS(pointer));
15004
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  1924
		} else {
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  1925
#if 0
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  1926
		    printf("cp UNALIGNED (%"_lx_")\n", (INT)cp);
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  1927
#endif
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1928
		}
15004
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  1929
	    } else {
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  1930
#if 0
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  1931
		printf("idx(%"_ld_")+(sizeof(pointer)-1) (%d) >= sz (%"_ld_")\n",
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  1932
			idx, (int)(sizeof(pointer)-1), sz);
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  1933
#endif
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1934
	    }
15004
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  1935
	} else {
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  1936
#if 0
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  1937
	    printf("cp is NULL\n");
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  1938
#endif
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1939
	}
15004
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  1940
    } else {
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  1941
#if 0
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  1942
	printf("bad index\n");
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  1943
#endif
11850
ee84c01dc50d +pointerAt:
Claus Gittinger <cg@exept.de>
parents: 11756
diff changeset
  1944
    }
ee84c01dc50d +pointerAt:
Claus Gittinger <cg@exept.de>
parents: 11756
diff changeset
  1945
bad:;
ee84c01dc50d +pointerAt:
Claus Gittinger <cg@exept.de>
parents: 11756
diff changeset
  1946
%}.
ee84c01dc50d +pointerAt:
Claus Gittinger <cg@exept.de>
parents: 11756
diff changeset
  1947
ee84c01dc50d +pointerAt:
Claus Gittinger <cg@exept.de>
parents: 11756
diff changeset
  1948
    self primitiveFailed.
ee84c01dc50d +pointerAt:
Claus Gittinger <cg@exept.de>
parents: 11756
diff changeset
  1949
ee84c01dc50d +pointerAt:
Claus Gittinger <cg@exept.de>
parents: 11756
diff changeset
  1950
    "
ee84c01dc50d +pointerAt:
Claus Gittinger <cg@exept.de>
parents: 11756
diff changeset
  1951
     |b|
ee84c01dc50d +pointerAt:
Claus Gittinger <cg@exept.de>
parents: 11756
diff changeset
  1952
     b := ByteArray new:(ExternalAddress pointerSize).
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1953
     b pointerAt:1 put:(ExternalAddress newAddress:16r12345678).
11850
ee84c01dc50d +pointerAt:
Claus Gittinger <cg@exept.de>
parents: 11756
diff changeset
  1954
     Transcript showCR:((b unsignedLongAt:1) printStringRadix:16).
ee84c01dc50d +pointerAt:
Claus Gittinger <cg@exept.de>
parents: 11756
diff changeset
  1955
     Transcript showCR:((b pointerAt:1)).
ee84c01dc50d +pointerAt:
Claus Gittinger <cg@exept.de>
parents: 11756
diff changeset
  1956
    "
ee84c01dc50d +pointerAt:
Claus Gittinger <cg@exept.de>
parents: 11756
diff changeset
  1957
!
ee84c01dc50d +pointerAt:
Claus Gittinger <cg@exept.de>
parents: 11756
diff changeset
  1958
6492
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  1959
pointerAt:index put:value
15004
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  1960
    "set the pointer starting at index from the integer or externalAddress value.
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1961
     The index is a smalltalk index (i.e. 1-based).
6492
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  1962
     Only aligned accesses are allowed.
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  1963
     The value is either an ExternalAddress or ExternalBytes"
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  1964
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  1965
%{
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  1966
    OBJ *pointer;
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  1967
7814
c649ba9fd538 #pointerAt:put: now works for ExternalAddressLike objects
Stefan Vogel <sv@exept.de>
parents: 7813
diff changeset
  1968
    if (__isExternalAddressLike(value)) {
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1969
	pointer = __externalAddressVal(value);
7197
a68adb223592 also handle subclasses of ExternalBytes (Mapped..)
Claus Gittinger <cg@exept.de>
parents: 7193
diff changeset
  1970
    } else if (__isExternalBytesLike(value)) {
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1971
	pointer = __externalBytesVal(value);
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1972
	if (pointer == (OBJ *)0)
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1973
	    pointer = 0;
11852
6732161ece56 changed #pointerAt:put:
Claus Gittinger <cg@exept.de>
parents: 11850
diff changeset
  1974
    } else if (value == nil) {
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1975
	pointer = 0;
15004
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  1976
    } else if (__isSmallInteger(value)) {
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  1977
	pointer = (OBJ *)__intVal(value);
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  1978
    } else {
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  1979
	if ((pointer = (OBJ *)__unsignedLongIntVal(value)) == 0) {
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  1980
	    goto bad;
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  1981
	}
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  1982
    }
6492
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  1983
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  1984
    if (__isSmallInteger(index)) {
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1985
	unsigned char *cp;
15004
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  1986
	INT sz;
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1987
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1988
	__fetchBytePointerAndSize__(self, &cp, &sz);
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1989
	if (cp) {
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1990
	    unsigned INT idx = ((unsigned INT)__smallIntegerVal(index)) - 1;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1991
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1992
	    if ((idx+(sizeof(pointer)-1)) < sz) {
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1993
		cp += idx;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1994
		/*
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1995
		 * aligned
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1996
		 */
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1997
		if (((INT)cp & (sizeof(pointer)-1)) == 0) {
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1998
		    ((char **)cp)[0] = (char *) pointer;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1999
		    RETURN (value);
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2000
		}
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2001
	    }
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2002
	}
6492
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  2003
    }
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  2004
bad:;
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  2005
%}.
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  2006
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  2007
    self primitiveFailed.
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  2008
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  2009
    "
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  2010
     |b|
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  2011
     b := ByteArray new:ExternalAddress pointerSize.
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2012
     b pointerAt:1 put:(ExternalAddress newAddress:16r12345678).
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2013
     (b unsignedLongAt:1) printStringRadix:16
6492
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  2014
    "
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  2015
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  2016
    "Modified: / 1.7.1996 / 21:11:39 / cg"
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  2017
    "Created: / 5.3.1998 / 10:57:18 / stefan"
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  2018
!
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  2019
19345
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2020
pointerValueAt:index
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2021
    "get a pointer starting at index as Integer.
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2022
     The index is a smalltalk index (i.e. 1-based).
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2023
     Only aligned accesses are allowed."
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2024
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2025
%{
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2026
    if (__isSmallInteger(index)) {
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2027
        unsigned char *cp;
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2028
        INT sz;
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2029
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2030
        __fetchBytePointerAndSize__(self, &cp, &sz);
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2031
        if (cp) {
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2032
            unsigned INT idx = ((unsigned INT)__smallIntegerVal(index)) - 1;
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2033
            char *pointer;
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2034
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2035
            if ((idx+(sizeof(pointer)-1)) < sz) {
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2036
                cp += idx;
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2037
                /*
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2038
                 * aligned
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2039
                 */
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2040
                if (((INT)cp & (sizeof(pointer)-1)) == 0) {
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2041
                    pointer = ((char **)cp)[0];
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2042
                    RETURN (__MKUINT((INT)(pointer)));
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2043
                } else {
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2044
#if 0
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2045
                    printf("cp UNALIGNED (%"_lx_")\n", (INT)cp);
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2046
#endif
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2047
                }
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2048
            } else {
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2049
#if 0
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2050
                printf("idx(%"_ld_")+(sizeof(pointer)-1) (%d) >= sz (%"_ld_")\n",
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2051
                        idx, (int)(sizeof(pointer)-1), sz);
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2052
#endif
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2053
            }
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2054
        } else {
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2055
#if 0
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2056
            printf("cp is NULL\n");
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2057
#endif
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2058
        }
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2059
    } else {
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2060
#if 0
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2061
        printf("bad index\n");
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2062
#endif
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2063
    }
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2064
bad:;
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2065
%}.
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2066
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2067
    self primitiveFailed.
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2068
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2069
    "
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2070
     |b|
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2071
     b := ByteArray new:(ExternalAddress pointerSize).
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2072
     b pointerAt:1 put:(ExternalAddress newAddress:16r12345678).
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2073
     Transcript showCR:((b unsignedLongAt:1) printStringRadix:16).
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2074
     Transcript showCR:((b pointerAt:1)).
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2075
     Transcript showCR:((b pointerValueAt:1)).
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2076
    "
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2077
!
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2078
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2079
signedDoubleWordAt:index
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2080
    "return the 4-bytes starting at index as a signed Integer.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2081
     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
  2082
     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
  2083
     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
  2084
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
  2085
    ^ self signedDoubleWordAt:index MSB:IsBigEndian
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2086
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2087
    "
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2088
     |b|
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2089
     b := ByteArray new:4.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2090
     b doubleWordAt:1 put:16rFFFFFFFF.
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2091
     (b signedDoubleWordAt:1)
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2092
    "
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2093
    "
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2094
     |b|
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2095
     b := ByteArray new:4.
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2096
     b signedDoubleWordAt:1 put:-1.
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2097
     (b doubleWordAt:1)
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2098
    "
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2099
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2100
    "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
  2101
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2102
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2103
signedDoubleWordAt:index MSB:msb
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2104
    "return the 4-bytes starting at index as a (signed) Integer.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2105
     The index is a smalltalk index (i.e. 1-based).
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2106
     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
  2107
     LSB-first otherwise."
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2108
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2109
    |val
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2110
     ival "{ Class: SmallInteger }"
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2111
     t    "{ Class: SmallInteger }"
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2112
     i    "{ Class: SmallInteger }"
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2113
     b1   "{ Class: SmallInteger }"
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2114
     b2   "{ Class: SmallInteger }"
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2115
     b3   "{ Class: SmallInteger }"
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2116
     b4   "{ Class: SmallInteger }"|
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2117
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2118
%{
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2119
    /*
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2120
     * handle the most common cases fast ...
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2121
     */
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2122
    if (__isSmallInteger(index)) {
19047
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2123
        unsigned char *cp;
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2124
        INT sz;
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2125
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2126
        __fetchBytePointerAndSize__(self, &cp, &sz);
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2127
        if (cp) {
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2128
            unsigned INT idx = ((unsigned INT)__intVal(index)) - 1;
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2129
            int iVal;
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2130
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2131
            if ((idx+(sizeof(int)-1)) < sz) {
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2132
                cp += idx;
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2133
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2134
                if (msb == true) {
8901
824a89d0b5c7 alpha64 vs. POINTER_SIZE cleanup
Claus Gittinger <cg@exept.de>
parents: 8893
diff changeset
  2135
#if defined(__MSBFIRST__)
19047
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2136
                    if (((INT)cp & (sizeof(int)-1))== 0) {
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2137
                        /*
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2138
                         * aligned
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2139
                         */
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2140
                        iVal = ((int *)cp)[0];
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2141
                    } else
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2142
#endif
19047
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2143
                    {
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2144
                        iVal = cp[0];
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2145
                        iVal = (iVal << 8) | cp[1];
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2146
                        iVal = (iVal << 8) | cp[2];
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2147
                        iVal = (iVal << 8) | cp[3];
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2148
                    }
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2149
                } else {
8901
824a89d0b5c7 alpha64 vs. POINTER_SIZE cleanup
Claus Gittinger <cg@exept.de>
parents: 8893
diff changeset
  2150
#if defined(__i386__) || (defined(UNALIGNED_FETCH_OK) && defined(__LSBFIRST__))
19047
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2151
                    /*
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2152
                     * aligned or not - we dont care
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2153
                     * (i386 can fetch unaligned)
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2154
                     */
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2155
                    iVal = ((int *)cp)[0];
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2156
#else
8901
824a89d0b5c7 alpha64 vs. POINTER_SIZE cleanup
Claus Gittinger <cg@exept.de>
parents: 8893
diff changeset
  2157
# if defined(__LSBFIRST__)
19047
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2158
                    if (((INT)cp & (sizeof(int)-1))== 0) {
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2159
                        /*
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2160
                         * aligned
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2161
                         */
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2162
                        iVal = ((int *)cp)[0];
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2163
                    } else
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2164
# endif
19047
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2165
                    {
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2166
                        iVal = cp[3];
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2167
                        iVal = (iVal << 8) | cp[2];
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2168
                        iVal = (iVal << 8) | cp[1];
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2169
                        iVal = (iVal << 8) | cp[0];
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2170
                    }
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2171
#endif
19047
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2172
                }
8901
824a89d0b5c7 alpha64 vs. POINTER_SIZE cleanup
Claus Gittinger <cg@exept.de>
parents: 8893
diff changeset
  2173
#if __POINTER_SIZE__ == 8
19047
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2174
                RETURN (__mkSmallInteger(iVal));
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2175
#else
19047
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2176
                RETURN (__MKINT(iVal));
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2177
#endif
19047
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2178
            }
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2179
        }
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2180
    }
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2181
%}.
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2182
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2183
    "/ fallBack code - non ByteArray-like receiver
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2184
    "/ or funny index
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2185
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2186
    i := index.
19047
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2187
    b1 := self byteAt:i.
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2188
    b2 := self byteAt:(i+1).
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2189
    b3 := self byteAt:(i+2).
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2190
    b4 := self byteAt:(i+3).
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2191
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2192
    msb ifFalse:[
19047
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2193
        t := b4. b4 := b1. b1 := t.
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2194
        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
  2195
    ].
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2196
    ival := b1.
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2197
    ival := (ival bitShift:8) + b2.
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2198
    ival := (ival bitShift:8) + b3.
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2199
    val := (ival bitShift:8) + b4.
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2200
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2201
    (val > (16r7FFFFFFF)) ifTrue:[
19047
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2202
        ^ val - (16r100000000)
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2203
    ].
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2204
    ^ val
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2205
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2206
    "
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2207
     |b|
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2208
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2209
     b := ByteArray withAll:#(1 2 3 4).
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2210
     (b signedDoubleWordAt:1 MSB:true) printStringRadix:16.
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2211
     (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
  2212
    "
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2213
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2214
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2215
signedDoubleWordAt:index put:value
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2216
    "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
  2217
     The index is a smalltalk index (i.e. 1-based).
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2218
     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
  2219
     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
  2220
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2221
    |v|
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2222
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2223
    value >= 0 ifTrue:[
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2224
	v := value
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2225
    ] ifFalse:[
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2226
	v := value + 16r100000000
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
    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
  2229
    ^ value
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2230
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2231
    "
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2232
     |b|
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2233
     b := ByteArray new:4.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2234
     b signedDoubleWordAt:1 put:-1.
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2235
     (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
  2236
    "
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2237
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2238
    "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
  2239
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2240
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2241
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
  2242
    "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
  2243
     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
  2244
     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
  2245
     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
  2246
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2247
    |v|
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2248
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2249
    value >= 0 ifTrue:[
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2250
	v := value
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2251
    ] ifFalse:[
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2252
	v := value + 16r100000000
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2253
    ].
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2254
    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
  2255
    ^ value
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2256
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2257
    "
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2258
     |b|
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2259
     b := ByteArray new:4.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2260
     b signedDoubleWordAt:1 put:-1.
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2261
     (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
  2262
    "
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2263
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2264
    "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
  2265
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2266
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2267
unsignedLongAt:index
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2268
    "return the 4-bytes starting at index as an (unsigned) Integer.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2269
     The index is a smalltalk index (i.e. 1-based).
19301
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  2270
     The value is retrieved in the machine's natural byte order.
4019
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
  2271
     Subclasses may redefine this for better performance.
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
  2272
     Same as doubleWordAt: for protocol completeness"
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2273
19301
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  2274
    ^ self doubleWordAt:index MSB:IsBigEndian
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2275
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2276
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2277
     |b|
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2278
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2279
     b := ByteArray withAll:#(1 2 3 4).
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2280
     (b unsignedLongAt:1) printStringRadix:16
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2281
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2282
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2283
    "Created: / 5.3.1998 / 11:56:53 / stefan"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2284
    "Modified: / 5.3.1998 / 14:58:48 / stefan"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2285
!
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2286
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2287
unsignedLongAt:index bigEndian:msb
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2288
    "return the 4-bytes starting at index as an (unsigned) Integer.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2289
     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
  2290
     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
  2291
     LSB-first otherwise.
4019
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
  2292
     Subclasses may redefine this for better performance.
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
  2293
     Same as doubleWordAt:MSB: for protocol completeness"
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2294
4019
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
  2295
    ^ self doubleWordAt:index MSB:msb
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2296
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2297
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2298
     |b|
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2299
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2300
     b := ByteArray withAll:#(1 2 3 4).
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2301
     (b unsignedLongAt:1 bigEndian:true) printStringRadix:16.
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2302
     (b unsignedLongAt:1 bigEndian:false) printStringRadix:16
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2303
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2304
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2305
    "Modified: / 21.1.1998 / 17:42:30 / cg"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2306
    "Created: / 5.3.1998 / 11:46:05 / stefan"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2307
!
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2308
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2309
unsignedLongAt:index put:value
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2310
    "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
  2311
     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
  2312
     The value should be in the range 0 to 16rFFFFFFFF
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2313
     (for negative values, the stored value is not defined).
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2314
     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
  2315
     Subclasses may redefine this for better performance.
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
  2316
     Same as doubleWordAt:put: for protocol completeness"
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2317
4019
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
  2318
    ^ self doubleWordAt:index put:value
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2319
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2320
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2321
     |b|
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2322
     b := ByteArray new:4.
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2323
     b unsignedLongAt:1 put:16r04030201.
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2324
     b inspect
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2325
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2326
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2327
    "Created: / 5.3.1998 / 11:57:44 / stefan"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2328
    "Modified: / 5.3.1998 / 14:58:59 / stefan"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2329
!
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2330
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2331
unsignedLongAt:index put:aNumber bigEndian:msb
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2332
    "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
  2333
     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
  2334
     The value must be in the range 0 to 16rFFFFFFFF.
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2335
     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
  2336
     Subclasses may redefine this for better performance.
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
  2337
     Same as doubleWordAt:put:MSB: for protocol completeness"
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2338
4019
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
  2339
    ^ self doubleWordAt:index put:aNumber MSB:msb
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2340
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2341
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2342
     |b|
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2343
     b := ByteArray new:8.
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2344
     b unsignedLongAt:1 put:16r04030201 bigEndian:true.
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2345
     (b unsignedLongAt:1 bigEndian:false) printStringRadix:16
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2346
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2347
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2348
    "Modified: / 21.1.1998 / 17:43:34 / cg"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2349
    "Created: / 5.3.1998 / 11:43:53 / stefan"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2350
    "Modified: / 5.3.1998 / 11:47:30 / stefan"
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2351
! !
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2352
13724
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  2353
!UninterpretedBytes methodsFor:'accessing-shorts (16bit)'!
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2354
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2355
shortAt:index
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2356
    "return the 2-bytes starting at index as a signed Integer.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2357
     The index is a smalltalk index (i.e. 1-based).
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2358
     The value is retrieved in the machines natural byte order.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2359
     This may be worth a primitive.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2360
     This is the ST80 equivalent of #signedWordAt:"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2361
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2362
    ^ (self unsignedShortAt:index) signExtendedShortValue
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2363
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2364
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2365
     |b|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2366
     b := ByteArray new:2.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2367
     b unsignedShortAt:1 put:16rFFFF.
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2368
     b shortAt:1
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2369
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2370
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2371
    "Modified: / 1.7.1996 / 21:14:38 / cg"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2372
    "Created: / 5.3.1998 / 10:59:57 / stefan"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2373
    "Modified: / 5.3.1998 / 23:39:38 / stefan"
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2374
!
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2375
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2376
shortAt:index bigEndian:msb
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2377
    "return the 2-bytes starting at index as a signed Integer.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2378
     The index is a smalltalk index (i.e. 1-based).
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2379
     The value is retrieved MSB-first, if the msb-arg is true;
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2380
     LSB-first otherwise.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2381
     This is the ST80 equivalent of #signedWordAt:"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2382
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2383
    ^ (self unsignedShortAt:index bigEndian:msb) signExtendedShortValue
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2384
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2385
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2386
     |b|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2387
     b := ByteArray new:2.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2388
     b unsignedShortAt:1 put:16rFFFF.
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2389
     b shortAt:1
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2390
    "
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2391
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2392
    "Modified: / 1.7.1996 / 21:14:38 / cg"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2393
    "Created: / 5.3.1998 / 23:41:21 / stefan"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2394
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2395
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2396
shortAt:index put:value
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2397
    "set the 2-bytes starting at index from the signed Integer value.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2398
     The index is a smalltalk index (i.e. 1-based).
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2399
     The stored value must be in the range -32768 .. +32676.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2400
     The value is stored in the machines natural byteorder.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2401
     This may be worth a primitive.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2402
     This is the ST80 equivalent of #signedWordAt:put:"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2403
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2404
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2405
    |v|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2406
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2407
    value >= 0 ifTrue:[
18346
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
  2408
	v := value
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2409
    ] ifFalse:[
18346
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
  2410
	v := 16r10000 + value
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2411
    ].
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
  2412
    self unsignedShortAt:index put:v bigEndian:IsBigEndian.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2413
    ^ value
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2414
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2415
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2416
     |b|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2417
     b := ByteArray new:6.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2418
     b shortAt:1 put:-1.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2419
     b shortAt:3 put:-2.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2420
     b shortAt:5 put:0.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2421
     b inspect
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2422
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2423
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2424
    "Modified: / 1.7.1996 / 21:12:07 / cg"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2425
    "Created: / 5.3.1998 / 11:02:05 / stefan"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2426
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2427
8017
55c184efc51c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7816
diff changeset
  2428
shortAt:index put:value bigEndian:bigEndian
55c184efc51c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7816
diff changeset
  2429
    "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
  2430
     The index is a smalltalk index (i.e. 1-based).
55c184efc51c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7816
diff changeset
  2431
     The stored value must be in the range -32768 .. +32676.
8018
dfc5be947218 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8017
diff changeset
  2432
     The value is stored in the byteorder given by bigEndian.
dfc5be947218 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8017
diff changeset
  2433
     This may be worth a primitive."
8017
55c184efc51c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7816
diff changeset
  2434
55c184efc51c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7816
diff changeset
  2435
55c184efc51c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7816
diff changeset
  2436
    |v|
55c184efc51c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7816
diff changeset
  2437
55c184efc51c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7816
diff changeset
  2438
    value >= 0 ifTrue:[
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2439
	v := value
8017
55c184efc51c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7816
diff changeset
  2440
    ] ifFalse:[
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2441
	v := 16r10000 + value
8017
55c184efc51c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7816
diff changeset
  2442
    ].
55c184efc51c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7816
diff changeset
  2443
    self unsignedShortAt:index put:v bigEndian:bigEndian.
55c184efc51c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7816
diff changeset
  2444
    ^ value
55c184efc51c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7816
diff changeset
  2445
55c184efc51c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7816
diff changeset
  2446
    "
55c184efc51c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7816
diff changeset
  2447
     |b|
55c184efc51c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7816
diff changeset
  2448
     b := ByteArray new:4.
55c184efc51c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7816
diff changeset
  2449
     b shortAt:1 put:1 bigEndian:true.
55c184efc51c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7816
diff changeset
  2450
     b shortAt:3 put:1 bigEndian:false.
55c184efc51c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7816
diff changeset
  2451
     b inspect
55c184efc51c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7816
diff changeset
  2452
    "
55c184efc51c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7816
diff changeset
  2453
55c184efc51c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7816
diff changeset
  2454
    "Modified: / 1.7.1996 / 21:12:07 / cg"
55c184efc51c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7816
diff changeset
  2455
    "Created: / 5.3.1998 / 11:02:05 / stefan"
55c184efc51c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7816
diff changeset
  2456
!
55c184efc51c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7816
diff changeset
  2457
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2458
signedWordAt:index
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2459
    "return the 2-bytes starting at index as a signed Integer.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2460
     The index is a smalltalk index (i.e. 1-based).
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2461
     The value is retrieved in the machines natural byte order.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2462
     This may be worth a primitive."
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2463
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2464
    ^ (self wordAt:index) signExtendedShortValue
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2465
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2466
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2467
     |b|
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2468
     b := ByteArray new:2.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2469
     b wordAt:1 put:16rFFFF.
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2470
     b signedWordAt:1
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2471
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2472
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2473
    "Modified: 1.7.1996 / 21:14:38 / cg"
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2474
!
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2475
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2476
signedWordAt:index MSB:msb
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2477
    "return the 2-bytes starting at index as a signed Integer.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2478
     The index is a smalltalk index (i.e. 1-based).
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2479
     The value is retrieved MSB-first if the msb-arg is true,
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2480
     LSB-first otherwise.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2481
     This may be worth a primitive."
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2482
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2483
    ^ (self wordAt:index MSB:msb) signExtendedShortValue
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2484
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2485
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2486
     |b|
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2487
     b := ByteArray new:2.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2488
     b wordAt:1 put:16r0080.
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2489
     b signedWordAt:1 MSB:true.
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2490
     b signedWordAt:1 MSB:false.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2491
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2492
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2493
    "Modified: 1.7.1996 / 21:15:57 / cg"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2494
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2495
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2496
signedWordAt:index put:value
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2497
    "set the 2-bytes starting at index from the signed Integer value.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2498
     The index is a smalltalk index (i.e. 1-based).
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2499
     The stored value must be in the range -32768 .. +32676.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2500
     The value is stored in the machines natural byteorder.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2501
     This may be worth a primitive.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2502
     This is the ST80 equivalent of #signedWordAt:put:"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2503
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2504
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2505
    |v|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2506
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2507
    value >= 0 ifTrue:[
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  2508
	v := value
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2509
    ] ifFalse:[
4308
20585b7ae5e1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  2510
	v := 16r10000 + value
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2511
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2512
    self unsignedShortAt:index put:v.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2513
    ^ value
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2514
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2515
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2516
     |b|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2517
     b := ByteArray new:6.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2518
     b shortAt:1 put:-1.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2519
     b shortAt:3 put:-2.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2520
     b shortAt:5 put:0.
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2521
     b inspect
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2522
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2523
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2524
    "Modified: / 1.7.1996 / 21:12:07 / cg"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2525
    "Modified: / 5.3.1998 / 11:01:30 / stefan"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2526
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2527
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2528
signedWordAt:index put:value MSB:msb
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2529
    "set the 2-bytes starting at index from the signed Integer value.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2530
     The index is a smalltalk index (i.e. 1-based).
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2531
     The stored value must be in the range -32768 .. +32676.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2532
     The value is stored MSB-first, if the msb-arg is true;
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2533
     LSB-first otherwise.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2534
     This may be worth a primitive."
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2535
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2536
    |v|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2537
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2538
    value >= 0 ifTrue:[
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2539
	v := value
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2540
    ] ifFalse:[
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2541
	v := 16r10000 + value
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2542
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2543
    self wordAt:index put:v MSB:msb.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2544
    ^ value
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2545
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2546
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2547
     |b|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2548
     b := ByteArray new:4.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2549
     b signedWordAt:1 put:-1.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2550
     b signedWordAt:3 put:-2.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2551
     b inspect
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2552
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2553
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2554
    "Modified: 1.7.1996 / 21:12:13 / cg"
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2555
!
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2556
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2557
unsignedShortAt:index
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2558
    "return the 2-bytes starting at index as an (unsigned) Integer.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2559
     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
  2560
     The value is retrieved in the machines natural byte order
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2561
     Subclasses may redefine this for better performance.
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2562
     This is the ST80 equivalent of #wordAt:"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2563
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2564
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
  2565
    ^ self unsignedShortAt:index bigEndian:IsBigEndian
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2566
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2567
    "Created: / 5.3.1998 / 11:38:25 / stefan"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2568
    "Modified: / 5.3.1998 / 14:59:25 / stefan"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2569
!
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2570
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2571
unsignedShortAt:index bigEndian:msb
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2572
    "return the 2-bytes starting at index as an (unsigned) Integer.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2573
     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
  2574
     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
  2575
     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
  2576
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2577
    |b1 "{ Class: SmallInteger }"
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2578
     b2 "{ Class: SmallInteger }"|
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2579
19046
Claus Gittinger <cg@exept.de>
parents: 18969
diff changeset
  2580
    b1 := self byteAt:index.
Claus Gittinger <cg@exept.de>
parents: 18969
diff changeset
  2581
    b2 := self byteAt:(index + 1).
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2582
    msb ifTrue:[
19046
Claus Gittinger <cg@exept.de>
parents: 18969
diff changeset
  2583
        ^ (b1 bitShift:8) + b2
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2584
    ].
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2585
    ^ (b2 bitShift:8) + b1
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2586
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2587
    "Modified: / 21.1.1998 / 17:46:07 / cg"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2588
    "Created: / 5.3.1998 / 11:49:29 / stefan"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2589
!
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2590
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2591
unsignedShortAt:index put:value
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2592
    "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
  2593
     The index is a smalltalk index (i.e. 1-based).
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2594
     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
  2595
     The value is stored in the machines natural byteorder."
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2596
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
  2597
    ^ self unsignedShortAt:index put:value bigEndian:IsBigEndian
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2598
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2599
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2600
     |b|
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2601
     b := ByteArray new:4.
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2602
     b unsignedShortAt:1 put:16r0102.
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2603
     b unsignedShortAt:3 put:16r0304.
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2604
     b inspect
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2605
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2606
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2607
    "Created: / 5.3.1998 / 11:54:52 / stefan"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2608
    "Modified: / 5.3.1998 / 14:59:38 / stefan"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2609
!
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2610
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2611
unsignedShortAt:index put:value bigEndian:msb
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2612
    "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
  2613
     The index is a smalltalk index (i.e. 1-based).
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2614
     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
  2615
     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
  2616
     lower index) if msb is false, MSB-first otherwise"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2617
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2618
    |b1 b2
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2619
     iVal "{ Class: SmallInteger }"|
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2620
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2621
    iVal := value.
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2622
    ((iVal < 0) or:[iVal > 16rFFFF]) ifTrue:[
19046
Claus Gittinger <cg@exept.de>
parents: 18969
diff changeset
  2623
        ^ self elementBoundsError:iVal
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2624
    ].
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2625
    msb ifTrue:[
19046
Claus Gittinger <cg@exept.de>
parents: 18969
diff changeset
  2626
        b1 := ((iVal bitShift:-8) bitAnd:16rFF).
Claus Gittinger <cg@exept.de>
parents: 18969
diff changeset
  2627
        b2 := (iVal bitAnd:16rFF).
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2628
    ] ifFalse:[
19046
Claus Gittinger <cg@exept.de>
parents: 18969
diff changeset
  2629
        b1 := (iVal bitAnd:16rFF).
Claus Gittinger <cg@exept.de>
parents: 18969
diff changeset
  2630
        b2 := ((iVal bitShift:-8) bitAnd:16rFF).
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2631
    ].
19046
Claus Gittinger <cg@exept.de>
parents: 18969
diff changeset
  2632
    self byteAt:index   put:b1.
Claus Gittinger <cg@exept.de>
parents: 18969
diff changeset
  2633
    self byteAt:index+1 put:b2.
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2634
    ^ value
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2635
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2636
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2637
     |b|
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2638
     b := ByteArray new:8.
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2639
     b unsignedShortAt:1 put:16r0102 bigEndian:false.
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2640
     b unsignedShortAt:3 put:16r0304 bigEndian:false.
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2641
     b unsignedShortAt:5 put:16r0102 bigEndian:true.
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2642
     b unsignedShortAt:7 put:16r0304 bigEndian:true.
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2643
     b inspect
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2644
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2645
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2646
    "Modified: / 21.1.1998 / 17:48:15 / cg"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2647
    "Modified: / 5.3.1998 / 11:52:28 / stefan"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2648
!
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2649
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2650
wordAt:index
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2651
    "return the 2-bytes starting at index as an (unsigned) Integer.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2652
     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
  2653
     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
  2654
     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
  2655
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
  2656
    ^ self wordAt:index MSB:IsBigEndian
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2657
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2658
    "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
  2659
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2660
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2661
wordAt:index MSB:msb
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2662
    "return the 2-bytes starting at index as an (unsigned) Integer.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2663
     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
  2664
     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
  2665
     LSB-first (i.e. low 8-bits at lower byte index) if its false.
19046
Claus Gittinger <cg@exept.de>
parents: 18969
diff changeset
  2666
     Notice: 
Claus Gittinger <cg@exept.de>
parents: 18969
diff changeset
  2667
        the index is a byte index; thus, this allows for unaligned access to
Claus Gittinger <cg@exept.de>
parents: 18969
diff changeset
  2668
        words on any boundary.
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2669
     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
  2670
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2671
    |b1 "{ Class: SmallInteger }"
3212
b8cc18f8691b moved some of ExtBytes protocol to here.
Claus Gittinger <cg@exept.de>
parents: 3209
diff changeset
  2672
     b2 "{ Class: SmallInteger }"|
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2673
19046
Claus Gittinger <cg@exept.de>
parents: 18969
diff changeset
  2674
    b1 := self byteAt:index.
Claus Gittinger <cg@exept.de>
parents: 18969
diff changeset
  2675
    b2 := self byteAt:(index + 1).
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2676
    msb ifTrue:[
19046
Claus Gittinger <cg@exept.de>
parents: 18969
diff changeset
  2677
        ^ (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
  2678
    ].
3212
b8cc18f8691b moved some of ExtBytes protocol to here.
Claus Gittinger <cg@exept.de>
parents: 3209
diff changeset
  2679
    ^ (b2 bitShift:8) + b1
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2680
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2681
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2682
wordAt:index put:value
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2683
    "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
  2684
     The index is a smalltalk index (i.e. 1-based).
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2685
     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
  2686
     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
  2687
     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
  2688
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
  2689
    ^ self wordAt:index put:value MSB:IsBigEndian
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2690
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2691
    "
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2692
     |b|
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2693
     b := ByteArray new:4.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2694
     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
  2695
     b wordAt:3 put:16r0304.
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2696
     b inspect
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2697
    "
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2698
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2699
    "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
  2700
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2701
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2702
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
  2703
    "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
  2704
     The index is a smalltalk index (i.e. 1-based).
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2705
     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
  2706
     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
  2707
     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
  2708
     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
  2709
3212
b8cc18f8691b moved some of ExtBytes protocol to here.
Claus Gittinger <cg@exept.de>
parents: 3209
diff changeset
  2710
    |b1 b2
b8cc18f8691b moved some of ExtBytes protocol to here.
Claus Gittinger <cg@exept.de>
parents: 3209
diff changeset
  2711
     iVal "{ Class: SmallInteger }"|
b8cc18f8691b moved some of ExtBytes protocol to here.
Claus Gittinger <cg@exept.de>
parents: 3209
diff changeset
  2712
b8cc18f8691b moved some of ExtBytes protocol to here.
Claus Gittinger <cg@exept.de>
parents: 3209
diff changeset
  2713
    iVal := value.
b8cc18f8691b moved some of ExtBytes protocol to here.
Claus Gittinger <cg@exept.de>
parents: 3209
diff changeset
  2714
    ((iVal < 0) or:[iVal > 16rFFFF]) ifTrue:[
19046
Claus Gittinger <cg@exept.de>
parents: 18969
diff changeset
  2715
        ^ self elementBoundsError:iVal
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2716
    ].
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2717
    msb ifTrue:[
19046
Claus Gittinger <cg@exept.de>
parents: 18969
diff changeset
  2718
        b1 := ((iVal bitShift:-8) bitAnd:16rFF).
Claus Gittinger <cg@exept.de>
parents: 18969
diff changeset
  2719
        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
  2720
    ] ifFalse:[
19046
Claus Gittinger <cg@exept.de>
parents: 18969
diff changeset
  2721
        b1 := (iVal bitAnd:16rFF).
Claus Gittinger <cg@exept.de>
parents: 18969
diff changeset
  2722
        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
  2723
    ].
19046
Claus Gittinger <cg@exept.de>
parents: 18969
diff changeset
  2724
    self byteAt:index   put:b1.
Claus Gittinger <cg@exept.de>
parents: 18969
diff changeset
  2725
    self byteAt: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
  2726
    ^ value
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2727
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2728
    "
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2729
     b := ByteArray new:8.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2730
     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
  2731
     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
  2732
     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
  2733
     b wordAt:7 put:16r0304 MSB:true.
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2734
     b inspect
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2735
    "
3212
b8cc18f8691b moved some of ExtBytes protocol to here.
Claus Gittinger <cg@exept.de>
parents: 3209
diff changeset
  2736
b8cc18f8691b moved some of ExtBytes protocol to here.
Claus Gittinger <cg@exept.de>
parents: 3209
diff changeset
  2737
    "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
  2738
!
b8cc18f8691b moved some of ExtBytes protocol to here.
Claus Gittinger <cg@exept.de>
parents: 3209
diff changeset
  2739
b8cc18f8691b moved some of ExtBytes protocol to here.
Claus Gittinger <cg@exept.de>
parents: 3209
diff changeset
  2740
wordAtWordIndex:index
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2741
    "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
  2742
     Fetching in the machines natural byte order.
b8cc18f8691b moved some of ExtBytes protocol to here.
Claus Gittinger <cg@exept.de>
parents: 3209
diff changeset
  2743
     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
  2744
     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
  2745
     (i.e. indices are 1, 2, ...)"
b8cc18f8691b moved some of ExtBytes protocol to here.
Claus Gittinger <cg@exept.de>
parents: 3209
diff changeset
  2746
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
  2747
    ^ self wordAtWordIndex:index MSB:IsBigEndian
3212
b8cc18f8691b moved some of ExtBytes protocol to here.
Claus Gittinger <cg@exept.de>
parents: 3209
diff changeset
  2748
b8cc18f8691b moved some of ExtBytes protocol to here.
Claus Gittinger <cg@exept.de>
parents: 3209
diff changeset
  2749
    "Created: / 21.1.1998 / 17:48:26 / cg"
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2750
    "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
  2751
!
b8cc18f8691b moved some of ExtBytes protocol to here.
Claus Gittinger <cg@exept.de>
parents: 3209
diff changeset
  2752
b8cc18f8691b moved some of ExtBytes protocol to here.
Claus Gittinger <cg@exept.de>
parents: 3209
diff changeset
  2753
wordAtWordIndex:index MSB:msb
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2754
    "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
  2755
     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
  2756
     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
  2757
     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
  2758
     (i.e. indices are 1, 2, ...)"
b8cc18f8691b moved some of ExtBytes protocol to here.
Claus Gittinger <cg@exept.de>
parents: 3209
diff changeset
  2759
b8cc18f8691b moved some of ExtBytes protocol to here.
Claus Gittinger <cg@exept.de>
parents: 3209
diff changeset
  2760
    ^ 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
  2761
b8cc18f8691b moved some of ExtBytes protocol to here.
Claus Gittinger <cg@exept.de>
parents: 3209
diff changeset
  2762
    "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
  2763
!
b8cc18f8691b moved some of ExtBytes protocol to here.
Claus Gittinger <cg@exept.de>
parents: 3209
diff changeset
  2764
b8cc18f8691b moved some of ExtBytes protocol to here.
Claus Gittinger <cg@exept.de>
parents: 3209
diff changeset
  2765
wordAtWordIndex:index put:value
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2766
    "set the short at index, anInteger.
3212
b8cc18f8691b moved some of ExtBytes protocol to here.
Claus Gittinger <cg@exept.de>
parents: 3209
diff changeset
  2767
     Storing in the machines natural byte order.
b8cc18f8691b moved some of ExtBytes protocol to here.
Claus Gittinger <cg@exept.de>
parents: 3209
diff changeset
  2768
     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
  2769
     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
  2770
     (i.e. indices are 1, 2, ...)"
b8cc18f8691b moved some of ExtBytes protocol to here.
Claus Gittinger <cg@exept.de>
parents: 3209
diff changeset
  2771
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
  2772
    ^ self wordAtWordIndex:index put:value MSB:IsBigEndian
3212
b8cc18f8691b moved some of ExtBytes protocol to here.
Claus Gittinger <cg@exept.de>
parents: 3209
diff changeset
  2773
b8cc18f8691b moved some of ExtBytes protocol to here.
Claus Gittinger <cg@exept.de>
parents: 3209
diff changeset
  2774
    "Created: / 21.1.1998 / 17:48:34 / cg"
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2775
    "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
  2776
!
b8cc18f8691b moved some of ExtBytes protocol to here.
Claus Gittinger <cg@exept.de>
parents: 3209
diff changeset
  2777
b8cc18f8691b moved some of ExtBytes protocol to here.
Claus Gittinger <cg@exept.de>
parents: 3209
diff changeset
  2778
wordAtWordIndex:index put:value MSB:msb
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2779
    "set the short at index, anInteger.
3212
b8cc18f8691b moved some of ExtBytes protocol to here.
Claus Gittinger <cg@exept.de>
parents: 3209
diff changeset
  2780
     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
  2781
     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
  2782
     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
  2783
     (i.e. indices are 1, 2, ...)"
b8cc18f8691b moved some of ExtBytes protocol to here.
Claus Gittinger <cg@exept.de>
parents: 3209
diff changeset
  2784
b8cc18f8691b moved some of ExtBytes protocol to here.
Claus Gittinger <cg@exept.de>
parents: 3209
diff changeset
  2785
    ^ 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
  2786
b8cc18f8691b moved some of ExtBytes protocol to here.
Claus Gittinger <cg@exept.de>
parents: 3209
diff changeset
  2787
    "Created: / 21.1.1998 / 17:48:38 / cg"
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2788
! !
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2789
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2790
!UninterpretedBytes methodsFor:'accessing-strings'!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2791
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2792
stringAt:index
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2793
    "return a string starting at index up to the 0-byte.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2794
     The index is a smalltalk index (i.e. 1-based)."
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2795
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2796
    |stream i "{ Class: SmallInteger }" c|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2797
10676
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  2798
    stream := WriteStream on:(String new:40).
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2799
    i := index.
10676
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  2800
    [(c := self byteAt:i) ~~ 0] whileTrue:[
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2801
	stream nextPut:(Character value:c).
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2802
	i := i + 1.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2803
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2804
    ^ stream contents
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2805
10676
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  2806
    "
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2807
      #[71 72 73 74 75 76 77 0] stringAt:1
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2808
      #[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
  2809
      '1234567890' stringAt:2
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  2810
    "
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2811
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2812
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2813
stringAt:index put:aString
19196
1db38251aeb2 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19101
diff changeset
  2814
    "copy aString to the receiver, starting at index up to
7815
6bd3a60a6f0c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7814
diff changeset
  2815
     (and including) the 0-byte (which is always written).
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2816
     The index is a smalltalk index (i.e. 1-based)."
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2817
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2818
    |i "{ Class: SmallInteger }"|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2819
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2820
    i := index.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2821
    aString do:[:aChar |
19196
1db38251aeb2 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19101
diff changeset
  2822
        self byteAt:i put:aChar codePoint.
1db38251aeb2 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19101
diff changeset
  2823
        i := i + 1.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2824
    ].
10676
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  2825
    self byteAt:i put:0.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2826
    ^ aString
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2827
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2828
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2829
     |bytes|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2830
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2831
     bytes := ExternalBytes new:10.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2832
     bytes stringAt:1 put:'hello'.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2833
     1 to:bytes size do:[:i |
19196
1db38251aeb2 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19101
diff changeset
  2834
        Transcript showCR:(bytes at:i)
10676
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  2835
     ].
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  2836
    "
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  2837
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  2838
    "
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  2839
     (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
  2840
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2841
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2842
    "Created: / 21.1.1998 / 17:45:02 / cg"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2843
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2844
7812
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  2845
stringAt:index put:aString size:maxSize
19196
1db38251aeb2 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19101
diff changeset
  2846
    "copy aString to the receiver, starting at index up to either maxSize characters,
7812
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  2847
     or (and including) the 0-byte, whichever is encountered first.
7815
6bd3a60a6f0c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7814
diff changeset
  2848
     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
  2849
     The index is a smalltalk index (i.e. 1-based)."
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  2850
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  2851
    |remaining "{ Class: SmallInteger }"
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  2852
     i         "{ Class: SmallInteger }"|
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  2853
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  2854
    remaining := maxSize.
7816
827f1cf51862 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7815
diff changeset
  2855
    remaining <= 0 ifTrue:[^ aString].
7812
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  2856
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  2857
    i := index.
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  2858
    aString do:[:aChar |
19196
1db38251aeb2 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19101
diff changeset
  2859
        self byteAt:i put:aChar codePoint.
1db38251aeb2 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19101
diff changeset
  2860
        i := i + 1.
1db38251aeb2 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19101
diff changeset
  2861
        remaining := remaining - 1.
1db38251aeb2 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19101
diff changeset
  2862
        remaining <= 0 ifTrue:[^ aString].
7812
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  2863
    ].
10676
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  2864
    self byteAt:i put:0.
7812
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  2865
    ^ aString
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  2866
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  2867
    "
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  2868
     |bytes|
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  2869
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  2870
     bytes := ExternalBytes new:10.
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  2871
     bytes stringAt:1 put:'hello' size:3.
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  2872
     1 to:bytes size do:[:i |
19196
1db38251aeb2 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19101
diff changeset
  2873
        Transcript showCR:(bytes at:i)
7812
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  2874
     ]
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  2875
    "
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  2876
    "
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  2877
     |bytes|
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  2878
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  2879
     bytes := ByteArray new:10 withAll:16rFF.
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  2880
     bytes stringAt:1 put:'he' size:3.
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  2881
     1 to:bytes size do:[:i |
19196
1db38251aeb2 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19101
diff changeset
  2882
        Transcript showCR:(bytes at:i)
7812
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  2883
     ]
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  2884
    "
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  2885
10676
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  2886
    "
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  2887
     (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
  2888
    "
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  2889
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  2890
7812
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  2891
    "Created: / 21.1.1998 / 17:45:02 / cg"
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  2892
!
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  2893
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2894
stringAt:index size:maxSize
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2895
    "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
  2896
     The index is a smalltalk index (i.e. 1-based)."
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2897
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2898
    |stream c
10676
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  2899
     max "{ Class: SmallInteger }"
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  2900
     start "{ Class: SmallInteger }"|
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2901
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2902
    stream := WriteStream on:(String new:maxSize).
10676
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  2903
    start := index.
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  2904
    max := start + maxSize - 1.
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  2905
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  2906
    start to:max do:[:eachIndex|
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2907
	c := self byteAt:eachIndex.
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2908
	c == 0 ifTrue:[
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2909
	    ^ stream contents
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2910
	].
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2911
	stream nextPut:(Character value:c).
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2912
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2913
    ^ stream contents
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2914
10676
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  2915
    "
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  2916
      #[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
  2917
      #[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
  2918
      '1234567890' stringAt:2 size:6
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  2919
    "
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2920
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2921
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2922
zeroByteStringAt:index maximumSize:count
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2923
    "extract a zeroByte-delimited string, given initial index and
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2924
     maximum number of characters (bytes).
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2925
     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
  2926
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2927
    |bytes idx|
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2928
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2929
    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
  2930
    idx := bytes indexOf:0.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2931
    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
  2932
    ^ bytes asString
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2933
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2934
    "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
  2935
! !
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2936
12951
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  2937
!UninterpretedBytes methodsFor:'converting'!
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  2938
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  2939
asExternalBytes
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  2940
    |sz bytes|
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  2941
14142
7a769e54130d changed:
Stefan Vogel <sv@exept.de>
parents: 14132
diff changeset
  2942
    sz := self byteSize.
12951
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  2943
    bytes := ExternalBytes unprotectedNew:sz.
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  2944
    bytes replaceBytesFrom:1 to:sz with:self startingAt:1.
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  2945
    ^ bytes
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  2946
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  2947
    "
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  2948
      #[1 2 3 4 5 6 7] asExternalBytes
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  2949
      'Hello World' asExternalBytes
14142
7a769e54130d changed:
Stefan Vogel <sv@exept.de>
parents: 14132
diff changeset
  2950
      'Hello World' asUnicodeString asExternalBytes
12951
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  2951
    "
14132
debafd18f04b added: #asUUID
Stefan Vogel <sv@exept.de>
parents: 14131
diff changeset
  2952
!
debafd18f04b added: #asUUID
Stefan Vogel <sv@exept.de>
parents: 14131
diff changeset
  2953
14155
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  2954
asExternalBytesUnprotected
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  2955
    "Like asExternalBytes, but does not register the bytes so
15836
cdf0d7258f9e class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15717
diff changeset
  2956
     bytes are GARBAGE-COLLECTED."
14155
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  2957
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  2958
    |bytes sz|
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  2959
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  2960
    sz := self byteSize.
15836
cdf0d7258f9e class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15717
diff changeset
  2961
    bytes := ExternalBytes unprotectedNew:sz.
14155
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  2962
    bytes replaceFrom:1 to:sz with:self startingAt:1.
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  2963
    ^ bytes
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  2964
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  2965
    "
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  2966
     |x|
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  2967
     x := 'fooBar' asExternalBytesUnprotected.
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  2968
     ObjectMemory garbageCollect
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  2969
    "
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  2970
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  2971
    "Created: / 05-06-2012 / 14:11:35 / Jan Vrany <jan.vrany@fit.cvut.cz>"
15836
cdf0d7258f9e class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15717
diff changeset
  2972
    "Modified: / 30-11-2013 / 11:42:21 / cg"
14155
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  2973
!
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  2974
18600
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  2975
asSingleByteString
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  2976
    "return the receiver converted to a 'normal' string.
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  2977
     Raises an error if unrepresentable characters are encountered.
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  2978
     See also: asSingleByteStringIfPossible and asSingleByteStringReplaceInvalidWith:"
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  2979
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  2980
    ^ String fromString:self
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  2981
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  2982
    "
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  2983
     #[60 61 62 63] asSingleByteString
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  2984
     #[60 61 62 63] asExternalBytes  asSingleByteString
18969
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  2985
     #[67 68 69 70] asIntegerArray asSingleByteString
18600
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  2986
     (Unicode16String with:(Character value:16rFF)) asSingleByteString
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  2987
     (Unicode16String with:(Character value:16rFFFF)) asSingleByteString
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  2988
    "
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  2989
!
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  2990
18969
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  2991
asSingleByteStringIfPossible
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  2992
    "if possible, return the receiver converted to a 'normal' string.
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  2993
     It is only possible, if there are no characters with codePoints above 255 in the receiver.
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  2994
     If not possible, the (wideString) receiver is returned."
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  2995
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  2996
    self containsNon8BitElements ifTrue:[^ self asString].
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  2997
    ^ self asSingleByteString.
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  2998
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  2999
    "
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  3000
     #[67 68 69 70] asSingleByteStringIfPossible
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  3001
     #[67 68 69 70] asIntegerArray asSingleByteStringIfPossible
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  3002
     'hello' asUnicodeString asSingleByteStringIfPossible
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  3003
    "
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  3004
!
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  3005
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3006
asString
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3007
    "speed up string conversions"
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3008
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3009
    |size cls|
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3010
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3011
    cls := self class.
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3012
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3013
    (cls == ByteArray or:[cls == ImmutableByteArray or:[cls == ExternalBytes]]) ifTrue:[
18649
e9d831015328 fix: signedLongIntVal returns an INT
Claus Gittinger <cg@exept.de>
parents: 18633
diff changeset
  3014
	size := self size.
e9d831015328 fix: signedLongIntVal returns an INT
Claus Gittinger <cg@exept.de>
parents: 18633
diff changeset
  3015
	^ (String uninitializedNew:size) replaceBytesFrom:1 to:size with:self startingAt:1.
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3016
    ].
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3017
    ^ super asString.
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3018
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3019
    "
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3020
      #[16r41 16r42 16r43] asString
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3021
      #[16r41 16r42 16r43] asExternalBytes asString
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3022
    "
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3023
!
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3024
14132
debafd18f04b added: #asUUID
Stefan Vogel <sv@exept.de>
parents: 14131
diff changeset
  3025
asUUID
debafd18f04b added: #asUUID
Stefan Vogel <sv@exept.de>
parents: 14131
diff changeset
  3026
    ^ UUID fromBytes:self
12951
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  3027
! !
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  3028
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3029
!UninterpretedBytes methodsFor:'encoding & decoding'!
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3030
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3031
utf8Decoded
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3032
    "Interpreting myself as an UTF-8 representation, decode and return the decoded string."
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3033
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3034
    ^ CharacterArray decodeFromUTF8:self.
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3035
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3036
    "
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3037
     #[16rC8 16rA0] utf8Decoded
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3038
     #[16rC8 16rA0] asString utf8Decoded
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3039
     #[16rC8 16rA0] asExternalBytes utf8Decoded
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3040
     (Character value:16r220) utf8Encoded utf8Decoded
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3041
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3042
     (Character value:16r800) utf8Encoded
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3043
     (Character value:16r220) utf8Encoded utf8Decoded
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3044
    "
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3045
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3046
    "test:
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3047
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3048
      |utf8Encoding original readBack|
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3049
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3050
      1 to:16rFFFF do:[:ascii |
18649
e9d831015328 fix: signedLongIntVal returns an INT
Claus Gittinger <cg@exept.de>
parents: 18633
diff changeset
  3051
	original := (Character value:ascii) asString.
e9d831015328 fix: signedLongIntVal returns an INT
Claus Gittinger <cg@exept.de>
parents: 18633
diff changeset
  3052
	utf8Encoding := original utf8Encoded.
e9d831015328 fix: signedLongIntVal returns an INT
Claus Gittinger <cg@exept.de>
parents: 18633
diff changeset
  3053
	readBack := utf8Encoding utf8Decoded.
e9d831015328 fix: signedLongIntVal returns an INT
Claus Gittinger <cg@exept.de>
parents: 18633
diff changeset
  3054
	readBack = original ifFalse:[
e9d831015328 fix: signedLongIntVal returns an INT
Claus Gittinger <cg@exept.de>
parents: 18633
diff changeset
  3055
	    self halt
e9d831015328 fix: signedLongIntVal returns an INT
Claus Gittinger <cg@exept.de>
parents: 18633
diff changeset
  3056
	]
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3057
      ]
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3058
    "
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3059
!
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3060
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3061
utf8DecodedWithTwoByteCharactersReplacedBy:replacementCharacter
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3062
    "Interpreting myself as an UTF-8 representation, decode and return
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3063
     the decoded string. Suppress all 2-byte (above 16rFF) characters,
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3064
     and replace them with replacementCharacter"
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3065
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3066
    |in out c|
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3067
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3068
    self containsNon7BitAscii ifFalse:[
18649
e9d831015328 fix: signedLongIntVal returns an INT
Claus Gittinger <cg@exept.de>
parents: 18633
diff changeset
  3069
	^ self asSingleByteString
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3070
    ].
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3071
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3072
    out := WriteStream on:(String uninitializedNew:self size * 3 // 2).
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3073
    in := self readStream.
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3074
    [in atEnd] whileFalse:[
18649
e9d831015328 fix: signedLongIntVal returns an INT
Claus Gittinger <cg@exept.de>
parents: 18633
diff changeset
  3075
	c := Character utf8DecodeFrom:in.
e9d831015328 fix: signedLongIntVal returns an INT
Claus Gittinger <cg@exept.de>
parents: 18633
diff changeset
  3076
	c codePoint > 16rFF ifTrue:[
e9d831015328 fix: signedLongIntVal returns an INT
Claus Gittinger <cg@exept.de>
parents: 18633
diff changeset
  3077
	    c := replacementCharacter
e9d831015328 fix: signedLongIntVal returns an INT
Claus Gittinger <cg@exept.de>
parents: 18633
diff changeset
  3078
	].
e9d831015328 fix: signedLongIntVal returns an INT
Claus Gittinger <cg@exept.de>
parents: 18633
diff changeset
  3079
	out nextPut:c.
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3080
    ].
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3081
    ^ out contents
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3082
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3083
    "
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3084
     (Character value:16r220) utf8Encoded
18649
e9d831015328 fix: signedLongIntVal returns an INT
Claus Gittinger <cg@exept.de>
parents: 18633
diff changeset
  3085
	utf8DecodedWithTwoByteCharactersReplacedBy:(Character space)
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3086
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3087
     (Character value:16r220) utf8Encoded asExternalBytes copyButLast
18649
e9d831015328 fix: signedLongIntVal returns an INT
Claus Gittinger <cg@exept.de>
parents: 18633
diff changeset
  3088
	utf8DecodedWithTwoByteCharactersReplacedBy:(Character space)
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3089
    "
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3090
! !
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3091
4782
04a2ea1ad3a5 added replaceBytes...
Claus Gittinger <cg@exept.de>
parents: 4530
diff changeset
  3092
!UninterpretedBytes methodsFor:'filling & replacing'!
04a2ea1ad3a5 added replaceBytes...
Claus Gittinger <cg@exept.de>
parents: 4530
diff changeset
  3093
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3094
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
  3095
    "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
  3096
     like collection.
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3097
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3098
     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
  3099
     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
  3100
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3101
%{  /* NOCONTEXT */
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3102
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3103
    int nIndex, repNIndex;
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3104
    int startIndex, stopIndex;
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3105
    REGISTER unsigned char *src;
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3106
    REGISTER int repStartIndex;
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3107
    int repStopIndex, count;
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3108
    REGISTER unsigned char *dst;
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3109
    OBJ cls;
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3110
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3111
#ifndef NO_PRIM_BYTEARR
14082
8ee1315d35eb Revert to 1.81
Stefan Vogel <sv@exept.de>
parents: 14081
diff changeset
  3112
    if ((__isBytes(aCollection) || __isExternalBytesLike(aCollection))
14142
7a769e54130d changed:
Stefan Vogel <sv@exept.de>
parents: 14132
diff changeset
  3113
     && (__isBytes(self) || __isWords(self))
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3114
     && __bothSmallInteger(start, stop)
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3115
     && __isSmallInteger(repStart)) {
15004
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3116
	startIndex = __intVal(start) - 1;
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3117
	if (startIndex >= 0) {
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3118
	    dst = (__ByteArrayInstPtr(self)->ba_element) + startIndex;
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3119
	    nIndex = __byteArraySize(self);
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3120
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3121
	    if ((cls = __qClass(self)) != @global(ByteArray)) {
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3122
		int nInst;
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3123
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3124
		nInst = __OBJS2BYTES__(__intVal(__ClassInstPtr(cls)->c_ninstvars));
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3125
		dst += nInst;
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3126
		nIndex -= nInst;
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3127
	    }
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3128
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3129
	    stopIndex = __intVal(stop) - 1;
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3130
	    count = stopIndex - startIndex + 1;
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3131
	    if (count == 0) {
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3132
		RETURN ( self );
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3133
	    }
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3134
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3135
	    if ((count > 0) && (stopIndex < nIndex)) {
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3136
		repStartIndex = __intVal(repStart) - 1;
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3137
		if (repStartIndex >= 0) {
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3138
		    if (__isExternalBytesLike(aCollection)) {
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3139
			OBJ sz;
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3140
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3141
			src = __externalAddressVal(aCollection);
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3142
			if (src == 0) goto fallBack;
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3143
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3144
			sz = __externalBytesSize(aCollection);
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3145
			if (__isSmallInteger(sz)) {
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3146
			    repNIndex = __smallIntegerVal(sz);
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3147
			} else {
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3148
			    repNIndex = repStopIndex+1; /* always enough */
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3149
			}
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3150
			src = src + repStartIndex;
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3151
		    } else {
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3152
			if (__isStringLike(aCollection)) {
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3153
			    repNIndex = __stringSize(aCollection);
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3154
			} else {
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3155
			    repNIndex = __qSize(aCollection) - OHDR_SIZE;
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3156
			}
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3157
			src = (__ByteArrayInstPtr(aCollection)->ba_element) + repStartIndex;
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3158
			if ((cls = __qClass(aCollection)) != @global(ByteArray)) {
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3159
			    int nInst;
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3160
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3161
			    nInst = __OBJS2BYTES__(__intVal(__ClassInstPtr(cls)->c_ninstvars));
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3162
			    src += nInst;
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3163
			    repNIndex -= nInst;
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3164
			}
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3165
		    }
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3166
		    repStopIndex = repStartIndex + (stopIndex - startIndex);
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3167
		    if (repStopIndex < repNIndex) {
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3168
			if (aCollection == self) {
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3169
			    /* take care of overlapping copy */
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3170
			    if (src < dst) {
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3171
				/* must do a reverse copy */
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3172
				src += count;
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3173
				dst += count;
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3174
				while (count-- > 0) {
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3175
				    *--dst = *--src;
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3176
				}
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3177
				RETURN ( self );
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3178
			    }
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3179
			}
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3180
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3181
# ifdef bcopy4
15004
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3182
			if (((unsigned INT)src & 3) == ((unsigned INT)dst & 3)) {
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3183
			    int nW;
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3184
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3185
			    /* copy unaligned part */
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3186
			    while (count && ((unsigned INT)src & 3)) {
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3187
				*dst++ = *src++;
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3188
				count--;
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3189
			    }
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3190
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3191
			    if (count > 0) {
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3192
				/* copy aligned part */
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3193
				nW = count >> 2;
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3194
				bcopy4(src, dst, nW);
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3195
				if ((count = count & 3) != 0) {
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3196
				    /* copy any remaining part */
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3197
				    src += (nW<<2);
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3198
				    dst += (nW<<2);
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3199
				    while (count--) {
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3200
					*dst++ = *src++;
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3201
				    }
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3202
				}
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3203
			    }
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3204
			    RETURN ( self );
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3205
			}
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3206
# else
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3207
#  if __POINTER_SIZE__ == 8
15004
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3208
			if (((unsigned INT)src & 7) == ((unsigned INT)dst & 7)) {
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3209
			    /* copy unaligned part */
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3210
			    while (count && ((unsigned INT)src & 7)) {
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3211
				*dst++ = *src++;
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3212
				count--;
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3213
			    }
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3214
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3215
			    /* copy aligned part */
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3216
			    while (count >= 8) {
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3217
				((unsigned INT *)dst)[0] = ((unsigned INT *)src)[0];
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3218
				dst += 8;
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3219
				src += 8;
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3220
				count -= 8;
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3221
			    }
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3222
			    while (count--) {
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3223
				*dst++ = *src++;
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3224
			    }
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3225
			    RETURN ( self );
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3226
			}
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3227
#  endif /* 64bit */
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3228
# endif /* bcopy4 */
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3229
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3230
# ifdef FAST_MEMCPY
15004
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3231
			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
  3232
# else
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3233
#  ifdef __UNROLL_LOOPS__
15004
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3234
			while (count >= 8) {
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3235
			    dst[0] = src[0]; dst[1] = src[1];
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3236
			    dst[2] = src[2]; dst[3] = src[3];
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3237
			    dst[4] = src[4]; dst[5] = src[5];
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3238
			    dst[6] = src[6]; dst[7] = src[7];
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3239
			    dst += 8; src += 8;
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3240
			    count -= 8;
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3241
			}
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3242
#  endif /* __UNROLL_LOOPS__ */
15004
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3243
			while (count-- > 0) {
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3244
			    *dst++ = *src++;
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3245
			}
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3246
# endif
15004
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3247
			RETURN ( self );
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3248
		    }
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3249
		}
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3250
	    }
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3251
	}
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3252
    }
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3253
fallBack: ;
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3254
#endif
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3255
%}.
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3256
    "
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3257
     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
  3258
     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
  3259
    "
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3260
    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
  3261
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3262
    "
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3263
     #[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16]
15004
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3264
	copy
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3265
	    replaceFrom:1 to:8
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3266
	    with:#[10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160]
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3267
	    startingAt:1
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3268
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3269
     #[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16]
15004
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3270
	copy
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3271
	    replaceFrom:3 to:10
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3272
	    with:#[10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160]
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3273
	    startingAt:1
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3274
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3275
     #[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16]
15004
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3276
	copy
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3277
	    replaceFrom:3 to:4
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3278
	    with:#[10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160]
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3279
	    startingAt:1
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3280
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3281
     #[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16]
15004
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3282
	copy
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3283
	    replaceFrom:0 to:9
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3284
	    with:#[10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160]
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3285
	    startingAt:1
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3286
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3287
     #[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16]
15004
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3288
	copy
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3289
	    replaceFrom:1 to:10
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3290
	    with:#[10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160]
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3291
	    startingAt:0
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3292
    "
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3293
!
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3294
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3295
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
  3296
    "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
  3297
     byte-array-like.
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3298
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3299
     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
  3300
     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
  3301
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3302
    ^ self
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3303
	replaceBytesFrom:startIndex
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3304
	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
  3305
	with:replacementCollection
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3306
	startingAt:repStartIndex
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3307
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3308
    "
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3309
     args:    startIndex            : <integer>
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3310
	      replacementCollection : <collection of <bytes> >
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3311
	      repStartIndex         : <integer>
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3312
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3313
     returns: self
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3314
    "
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3315
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3316
    "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
  3317
    "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
  3318
!
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3319
13902
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  3320
replaceBytesWith:replacementCollection
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  3321
    "replace elements from another collection, which must be byte-array-like.
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  3322
     Replace stops at whichever collection is smaller.
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  3323
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  3324
     Notice: This operation modifies the receiver, NOT a copy;
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  3325
     therefore the change may affect all others referencing the receiver."
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  3326
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  3327
    ^ self
15004
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3328
	replaceBytesFrom:1
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3329
	to:(replacementCollection size min:self size)
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3330
	with:replacementCollection
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3331
	startingAt:1
13902
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  3332
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  3333
    "
15004
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3334
     (ByteArray new:10) replaceBytesWith:'hello'
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3335
     (ByteArray new:10) replaceBytesWith:'hello world bla bla bla'
13902
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  3336
    "
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  3337
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  3338
    "Created: / 09-01-2012 / 16:18:10 / cg"
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  3339
!
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  3340
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3341
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
  3342
    "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
  3343
     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
  3344
     Return the receiver.
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3345
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3346
     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
  3347
     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
  3348
14131
3b0cb7751a71 changed: #replaceFrom:to:with:startingAt:
Claus Gittinger <cg@exept.de>
parents: 14082
diff changeset
  3349
    self class isBytes ifTrue:[
15004
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3350
	((aCollection class == self class)
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3351
	 or:[aCollection isByteCollection]) ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3352
	    ^ self replaceBytesFrom:startIndex to:stopIndex with:aCollection startingAt:repStartIndex
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3353
	].
7252
82cd08881a2a abstract replaceBytes fallback is required (lead to recursion)
Claus Gittinger <cg@exept.de>
parents: 7218
diff changeset
  3354
    ].
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3355
    ^ 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
  3356
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3357
    "
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3358
     args:    startIndex            : <integer>
15004
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3359
	      stopIndex             : <integer>
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3360
	      replacementCollection : <collection of <bytes> >
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  3361
	      repStartIndex         : <integer>
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3362
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3363
     returns: self
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3364
    "
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3365
14131
3b0cb7751a71 changed: #replaceFrom:to:with:startingAt:
Claus Gittinger <cg@exept.de>
parents: 14082
diff changeset
  3366
    "Modified: / 08-05-2012 / 13:23:27 / cg"
4782
04a2ea1ad3a5 added replaceBytes...
Claus Gittinger <cg@exept.de>
parents: 4530
diff changeset
  3367
! !
04a2ea1ad3a5 added replaceBytes...
Claus Gittinger <cg@exept.de>
parents: 4530
diff changeset
  3368
12757
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  3369
!UninterpretedBytes methodsFor:'hashing'!
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  3370
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  3371
computeXorHashFrom:startIndex to:endIndex
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  3372
    "compute and answer the SmallInteger-Hash of the bytes
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  3373
     from startIndex to endIndex.
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  3374
     If endindex = 0 or endIndex > size, hash up the size.
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  3375
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  3376
     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
  3377
	   In fact, more bytes could be involved in hashing.
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3378
	   SO ARRAYS MUST BE EQUAL TO HASH TO THE SAME VALUE"
12757
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  3379
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  3380
    |w|
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  3381
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  3382
%{
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  3383
    if (__bothSmallInteger(startIndex, endIndex)) {
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3384
	unsigned char *cp;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3385
	INT sz;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3386
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3387
	__fetchBytePointerAndSize__(self, &cp, &sz);
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3388
	if (cp) {
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3389
	    INT sidx = ((unsigned INT)__smallIntegerVal(startIndex)) - 1;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3390
	    INT eidx = ((unsigned INT)__smallIntegerVal(endIndex)) - 1;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3391
	    unsigned char *ep;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3392
	    unsigned INT hash = 0, hash2 = 0, carry;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3393
	    int i;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3394
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3395
	    if (eidx < 0 || eidx >= sz) eidx = sz - 1;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3396
	    if (sidx > eidx) sidx = eidx;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3397
	    if (sidx < 0) {
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3398
		RETURN(__mkSmallInteger(0));
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3399
	    }
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3400
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3401
	    ep = cp + eidx;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3402
	    cp += sidx;
12757
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  3403
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  3404
#if 0
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3405
	    /*
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3406
	     * On LSB-First (little endian) cpus,
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3407
	     * this code does not produce the same result
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3408
	     * if the same bytes are at different positions
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3409
	     */
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3410
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3411
	    if ((INT)cp & (sizeof(INT)-1)) {
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3412
		/* not aligned */
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3413
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3414
		for (i=0; cp <= ep; cp++) {
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3415
		    hash2 = (hash2 << 8) | *cp;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3416
		    if (++i == sizeof(INT)) {
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3417
			hash ^= hash2;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3418
			i = hash2 = 0;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3419
		    }
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3420
		}
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3421
	    } else {
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3422
		/* aligned */
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3423
		for (; cp+sizeof(INT) <= ep; cp += sizeof(INT)) {
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3424
		    hash ^= *(unsigned INT *)cp;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3425
		}
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3426
		for (; cp <= ep; cp++) {
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3427
		    hash2 = (hash2 << 8) | *cp;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3428
		}
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3429
	    }
12757
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  3430
#else
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3431
	    for (i=0; cp <= ep-sizeof(INT); cp += sizeof(INT)) {
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3432
		hash2 = cp[0];
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3433
		hash2 = (hash2 << 8) | cp[1];
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3434
		hash2 = (hash2 << 8) | cp[2];
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3435
		hash2 = (hash2 << 8) | cp[3];
12757
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  3436
#if __POINTER_SIZE__ == 8
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3437
		hash2 = (hash2 << 8) | cp[4];
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3438
		hash2 = (hash2 << 8) | cp[5];
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3439
		hash2 = (hash2 << 8) | cp[6];
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3440
		hash2 = (hash2 << 8) | cp[7];
12757
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  3441
#endif
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3442
		/*
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3443
		 * multiply by large prime to scramble bits and
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3444
		 * to avoid a 0 result from
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3445
		 * #[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
  3446
		 */
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3447
		hash ^= (hash * 31415821) ^ hash2;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3448
	    }
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3449
	    for (hash2 = 0; cp <= ep; cp++) {
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3450
		hash2 = (hash2 << 8) | *cp;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3451
	    }
12757
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  3452
#endif
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3453
	    hash ^= (hash * 31415821) ^ hash2;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3454
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3455
	    /*
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3456
	     * fold the high bits not fitting into a SmallInteger
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3457
	     */
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3458
	    carry = hash & ~_MAX_INT;
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3459
	    if (carry) {
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3460
		hash = (hash & _MAX_INT) ^ (carry >> 8);
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3461
	    }
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3462
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3463
	    RETURN(__mkSmallInteger(hash));
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3464
	}
12757
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  3465
    }
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  3466
%}.
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  3467
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  3468
    ^ self primitiveFailed
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  3469
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  3470
    "
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  3471
     #[1 2 3 4] computeXorHashFrom:1 to:4.
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  3472
     #[1 2 3 4] computeXorHashFrom:1 to:32.
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  3473
     #[1 2 3 4] computeXorHashFrom:1 to:0.
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  3474
     #[1 2 3 4 5] computeXorHashFrom:1 to:4.
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  3475
     #[1 2 3 4 1 2 3 4] computeXorHashFrom:1 to:8.
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  3476
     #[1 2 3 4 5 6 7 8] computeXorHashFrom:2 to:8.
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  3477
     #[2 3 4 5 6 7 8] computeXorHashFrom:1 to:7.
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  3478
    "
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  3479
! !
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  3480
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3481
!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
  3482
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3483
copyReverse
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3484
    "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
  3485
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3486
    ^ self copy reverse
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3487
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3488
    "
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3489
     #[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
  3490
     #[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
  3491
    "
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3492
! !
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3493
14131
3b0cb7751a71 changed: #replaceFrom:to:with:startingAt:
Claus Gittinger <cg@exept.de>
parents: 14082
diff changeset
  3494
3363
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  3495
!UninterpretedBytes methodsFor:'misc'!
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  3496
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3497
swapLongAt:byteIndex
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  3498
    "swap the byteOrder of a long.
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  3499
     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
  3500
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  3501
    |t|
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  3502
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  3503
    t := self byteAt:byteIndex.
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  3504
    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
  3505
    self byteAt:(byteIndex + 3) put:t.
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  3506
    t := self byteAt:(byteIndex + 1).
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  3507
    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
  3508
    self byteAt:(byteIndex + 2) put:t
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  3509
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  3510
    "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
  3511
! !
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  3512
18664
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  3513
!UninterpretedBytes methodsFor:'printing & storing'!
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  3514
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  3515
hexPrintOn:aStream
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  3516
    "print as hex string, eg: 'FF0243'.
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  3517
     This string can be used in #fromHexString: to recreate the byteArray"
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  3518
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  3519
    self hexPrintOn:aStream withSeparator:nil
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  3520
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  3521
    "
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  3522
      #[1 2 3 4 10 17] hexPrintOn:Transcript
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  3523
    "
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  3524
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  3525
    "
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  3526
     |s|
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  3527
     s := String streamContents:[:s | #[1 2 3 4 10 17] hexPrintOn:s].
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  3528
     ByteArray fromHexString:s
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  3529
    "
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  3530
!
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  3531
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  3532
hexPrintOn:aStream withSeparator:aSeparatorStringOrCharacterOrNil
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  3533
    "print as hex string with separators, eg: 'FF:02:43'"
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  3534
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  3535
    |first|
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  3536
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  3537
    first := true.
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  3538
    1 to:self size do:[:idx |
18666
aa1bd3d0fb7f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 18664
diff changeset
  3539
	aSeparatorStringOrCharacterOrNil notNil ifTrue:[
aa1bd3d0fb7f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 18664
diff changeset
  3540
	    first ifFalse:[
aa1bd3d0fb7f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 18664
diff changeset
  3541
		aSeparatorStringOrCharacterOrNil printOn:aStream
aa1bd3d0fb7f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 18664
diff changeset
  3542
	    ] ifTrue:[
aa1bd3d0fb7f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 18664
diff changeset
  3543
		first := false.
aa1bd3d0fb7f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 18664
diff changeset
  3544
	    ].
aa1bd3d0fb7f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 18664
diff changeset
  3545
	].
aa1bd3d0fb7f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 18664
diff changeset
  3546
	(self byteAt:idx) printOn:aStream base:16 size:2 fill:$0.
18664
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  3547
    ].
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  3548
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  3549
    "
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  3550
      #[1 2 3 4 10 17] hexPrintOn:Transcript withSeparator:$:
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  3551
      #[1 2 3 4 10 17] hexPrintOn:Transcript withSeparator:(Character space)
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  3552
      #[1 2 3 4 10 17] hexPrintOn:Transcript withSeparator:'-'
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  3553
      #[1 2 3 4 10 17] hexPrintOn:Transcript withSeparator:nil
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  3554
    "
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  3555
!
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  3556
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  3557
hexPrintString
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  3558
    "print as hex string, eg: 'FF0243'.
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  3559
     This string can be used in #fromHexString: to recreate the byteArray"
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  3560
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  3561
    ^ self hexPrintStringWithSeparator:nil
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  3562
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  3563
    "
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  3564
     #[1 2 3 4 10 17] hexPrintString
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  3565
     ByteArray fromHexString:#[1 2 3 4 10 17] hexPrintString
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  3566
    "
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  3567
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  3568
    "Modified: / 03-07-2010 / 01:59:19 / cg"
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  3569
!
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  3570
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  3571
hexPrintStringWithSeparator:aSeparatorStringOrCharacterOrNil
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  3572
    "print as hex string, eg: 'FF:02:43'."
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  3573
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  3574
    ^ String
18666
aa1bd3d0fb7f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 18664
diff changeset
  3575
	streamContents:[:s |
aa1bd3d0fb7f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 18664
diff changeset
  3576
	    self hexPrintOn:s withSeparator:aSeparatorStringOrCharacterOrNil.
aa1bd3d0fb7f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 18664
diff changeset
  3577
	]
18664
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  3578
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  3579
    "
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  3580
      #[1 2 3 4 10 17] hexPrintStringWithSeparator:$:
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  3581
      #[1 2 3 4 10 17] hexPrintStringWithSeparator:Character space
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  3582
      #[1 2 3 4 10 17] hexPrintStringWithSeparator:' - '
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  3583
      #[1 2 3 4 10 17] hexPrintStringWithSeparator:nil
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  3584
    "
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  3585
! !
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  3586
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3587
!UninterpretedBytes methodsFor:'private'!
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3588
18969
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  3589
slowReplaceBytesFrom:startArg to:stopArg with:sourceBytes startingAt:sourceIndex
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3590
    "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
  3591
18969
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  3592
    |srcIdx "{ Class:SmallInteger }"
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  3593
     start "{ Class:SmallInteger }"
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  3594
     stop "{ Class:SmallInteger }"|
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  3595
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  3596
    start := startArg.
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  3597
    stop := stopArg.
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3598
    srcIdx := sourceIndex.
18969
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  3599
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3600
    start to:stop do:[:dstIdx |
18969
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  3601
        self at:dstIdx put:(sourceBytes at:srcIdx).
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  3602
        srcIdx := srcIdx + 1
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3603
    ].
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3604
! !
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3605
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3606
!UninterpretedBytes methodsFor:'queries'!
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3607
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3608
containsNon7BitAscii
18969
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  3609
    "return true, if the underlying collection contains elements longer than 7 bits
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3610
     (i.e. if it is non-ascii)"
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3611
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3612
    |sz "{ Class:SmallInteger }"|
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3613
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3614
    sz := self size.
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3615
    1 to:sz do:[:idx|
18969
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  3616
        (self at:idx) > 16r7F ifTrue:[
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  3617
            ^ true.
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  3618
        ].
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  3619
    ].
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  3620
    ^ false.
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  3621
!
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  3622
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  3623
containsNon8BitElements
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  3624
    "return true, if the underlying structure contains elements larger than a single byte"
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  3625
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  3626
    |sz "{ Class:SmallInteger }"|
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  3627
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  3628
    sz := self size.
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  3629
    1 to:sz do:[:idx|
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  3630
        (self at:idx) > 16rFF ifTrue:[
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  3631
            ^ true.
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  3632
        ].
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3633
    ].
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3634
    ^ false.
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3635
!
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3636
7218
b798be6d632f elementBoundsError -> elementBoundsError:
Claus Gittinger <cg@exept.de>
parents: 7197
diff changeset
  3637
defaultElement
b798be6d632f elementBoundsError -> elementBoundsError:
Claus Gittinger <cg@exept.de>
parents: 7197
diff changeset
  3638
    ^ 0
b798be6d632f elementBoundsError -> elementBoundsError:
Claus Gittinger <cg@exept.de>
parents: 7197
diff changeset
  3639
!
b798be6d632f elementBoundsError -> elementBoundsError:
Claus Gittinger <cg@exept.de>
parents: 7197
diff changeset
  3640
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3641
referencesAny:aCollection
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3642
    "redefined to speed up searching when many of my instances are present"
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3643
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3644
%{ /* NOCONTEXT */
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3645
    if (__mkSmallInteger(0) == __ClassInstPtr(__qClass(self))->c_ninstvars) {
18649
e9d831015328 fix: signedLongIntVal returns an INT
Claus Gittinger <cg@exept.de>
parents: 18633
diff changeset
  3646
	/* I am only bytes */
e9d831015328 fix: signedLongIntVal returns an INT
Claus Gittinger <cg@exept.de>
parents: 18633
diff changeset
  3647
	RETURN(false)
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3648
    }
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3649
%}.
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3650
    ^ super referencesAny:aCollection
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3651
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3652
    "
18649
e9d831015328 fix: signedLongIntVal returns an INT
Claus Gittinger <cg@exept.de>
parents: 18633
diff changeset
  3653
	'abc' referencesAny:#()
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3654
    "
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3655
!
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3656
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3657
sizeInBytes
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3658
    "return the number of 8-bit bytes in the receiver.
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3659
     This is needed since subclasse may redefine #size (TwoByteString)"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3660
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3661
    ^ super size
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3662
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3663
    "Created: / 5.3.1998 / 10:41:13 / stefan"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3664
! !
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3665
8986
c2962d45eca0 new: #isByteCollection
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
  3666
!UninterpretedBytes methodsFor:'testing'!
c2962d45eca0 new: #isByteCollection
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
  3667
c2962d45eca0 new: #isByteCollection
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
  3668
isByteCollection
c2962d45eca0 new: #isByteCollection
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
  3669
    "return true, if the receiver has access methods for bytes;
c2962d45eca0 new: #isByteCollection
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
  3670
     true is returned here - the method is redefined from Object."
c2962d45eca0 new: #isByteCollection
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
  3671
c2962d45eca0 new: #isByteCollection
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
  3672
    ^ true
9005
b82aa6bdc487 #isNonByteCollection
Stefan Vogel <sv@exept.de>
parents: 8995
diff changeset
  3673
!
b82aa6bdc487 #isNonByteCollection
Stefan Vogel <sv@exept.de>
parents: 8995
diff changeset
  3674
b82aa6bdc487 #isNonByteCollection
Stefan Vogel <sv@exept.de>
parents: 8995
diff changeset
  3675
isNonByteCollection
b82aa6bdc487 #isNonByteCollection
Stefan Vogel <sv@exept.de>
parents: 8995
diff changeset
  3676
    "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
  3677
     false is returned here - the method is redefined from Collection."
b82aa6bdc487 #isNonByteCollection
Stefan Vogel <sv@exept.de>
parents: 8995
diff changeset
  3678
b82aa6bdc487 #isNonByteCollection
Stefan Vogel <sv@exept.de>
parents: 8995
diff changeset
  3679
    ^ false
8986
c2962d45eca0 new: #isByteCollection
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
  3680
! !
c2962d45eca0 new: #isByteCollection
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
  3681
11009
fb66915c5bb5 changed #acceptVisitor:with: - moved to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 10676
diff changeset
  3682
!UninterpretedBytes methodsFor:'visiting'!
fb66915c5bb5 changed #acceptVisitor:with: - moved to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 10676
diff changeset
  3683
fb66915c5bb5 changed #acceptVisitor:with: - moved to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 10676
diff changeset
  3684
acceptVisitor:aVisitor with:aParameter
16719
19b7ae0bbb49 comment/format only
Claus Gittinger <cg@exept.de>
parents: 16320
diff changeset
  3685
    "dispatch for visitor pattern; send #visitByteArray:with: to aVisitor."
11009
fb66915c5bb5 changed #acceptVisitor:with: - moved to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 10676
diff changeset
  3686
fb66915c5bb5 changed #acceptVisitor:with: - moved to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 10676
diff changeset
  3687
    ^ aVisitor visitByteArray:self with:aParameter
fb66915c5bb5 changed #acceptVisitor:with: - moved to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 10676
diff changeset
  3688
! !
fb66915c5bb5 changed #acceptVisitor:with: - moved to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 10676
diff changeset
  3689
695
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
  3690
!UninterpretedBytes class methodsFor:'documentation'!
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
  3691
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
  3692
version
18600
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  3693
    ^ '$Header$'
12253
c933c6fcdeef changed: #fromHexStringWithSeparators:
Claus Gittinger <cg@exept.de>
parents: 11973
diff changeset
  3694
!
c933c6fcdeef changed: #fromHexStringWithSeparators:
Claus Gittinger <cg@exept.de>
parents: 11973
diff changeset
  3695
c933c6fcdeef changed: #fromHexStringWithSeparators:
Claus Gittinger <cg@exept.de>
parents: 11973
diff changeset
  3696
version_CVS
18600
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  3697
    ^ '$Header$'
695
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
  3698
! !
15087
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  3699
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
  3700
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
  3701
UninterpretedBytes initialize!