UninterpretedBytes.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Thu, 31 Mar 2016 08:51:45 +0100
branchjv
changeset 19527 169a7088b668
parent 19478 1f5aa87f6170
parent 19502 194e575d35ad
child 19528 117cd2d2715b
permissions -rw-r--r--
Merge
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
19502
194e575d35ad #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19461
diff changeset
     1
"{ Encoding: utf8 }"
194e575d35ad #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19461
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
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
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
19402
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
    19
	instanceVariableNames:''
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
    20
	classVariableNames:'IsBigEndian'
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
    21
	poolDictionaries:''
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
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)) { \
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
    40
        if (__isByteArrayLike(o)) { \
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
    41
          *(pPtr) = (unsigned char *)__ByteArrayInstPtr(o)->ba_element; \
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
    42
          *(pSize) = __byteArraySize(o); \
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
    43
        } else if (__qIsExternalBytesLike(o)) { \
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
    44
          OBJ __sz__ = __externalBytesSize(o); \
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
    45
          if (__isSmallInteger(__sz__)) { \
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
    46
            *(pSize) = __intVal(__sz__); \
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
    47
            *(pPtr) = (unsigned char *)(__externalBytesAddress(o)); \
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
    48
          } else { \
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
    49
            *(pSize) = 0; \
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
    50
            *(pPtr) = (unsigned char *)0; \
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
    51
          } \
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
    52
        } else { \
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
    53
            *(pSize) /* nInstBytes */ = OHDR_SIZE + __OBJS2BYTES__(__intVal(__ClassInstPtr(__qClass(o))->c_ninstvars)); \
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
    54
            *(pPtr) = (char *)(__InstPtr(self)) + *(pSize) /* nInstBytes */; \
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
    55
            *(pSize) = __qSize(self) - *(pSize) /* nInstBytes */; \
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
    56
        } \
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    57
      } else { \
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
    58
        *(pSize) = 0; \
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
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
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
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 |
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   147
        hi := s next digitValue.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   148
        lo := s next digitValue.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
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:[
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
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 |
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   177
        |inStream h|
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   178
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   179
        inStream := aString readStream.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   180
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   181
        [
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   182
            inStream skipSeparators.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   183
            inStream atEnd
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   184
        ] whileFalse:[
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   185
            h := inStream next:2.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   186
            outStream nextPut:(Integer readFrom:h base:16).
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
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:[
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
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:[
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   233
        "/ take 4 characters ...
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   234
        "/ allow a line break before each group of 4
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   235
        sixBits := (aString at:index) codePoint.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   236
        [sixBits < 32] whileTrue:[
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   237
            index := index + 1.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   238
            sixBits := (aString at:index) codePoint.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   239
        ].
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   240
        sixBits := sixBits bitAnd:16r3F.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   241
        n := sixBits.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   242
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   243
        "/ self assert:(aString at:index+1) codePoint >= 32.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   244
        sixBits := (aString at:index+1) codePoint bitAnd:16r3F.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   245
        n := (n bitShift:6) + sixBits.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   246
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   247
        "/ self assert:(aString at:index+2) codePoint >= 32.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   248
        sixBits := (aString at:index+2) codePoint bitAnd:16r3F.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   249
        n := (n bitShift:6) + sixBits.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   250
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   251
        "/ self assert:(aString at:index+3) codePoint >= 32.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   252
        sixBits := (aString at:index+3) codePoint bitAnd:16r3F.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   253
        n := (n bitShift:6) + sixBits.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   254
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   255
        index := index + 4.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   256
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   257
        "/ now have 24 bits in n
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   258
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   259
        bytes at:dstIndex put:(n bitShift:-16).
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   260
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   261
        dstIndex < stop ifTrue:[
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   262
            bytes at:dstIndex+1 put:((n bitShift:-8) bitAnd:16rFF).
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   263
            dstIndex+2 <= stop ifTrue:[
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   264
                bytes at:dstIndex+2 put:(n bitAnd:16rFF).
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   265
            ]
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   266
        ].
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
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 |
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   286
        |orig copy|
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   287
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   288
        0 to:255 do:[:fill |
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   289
            orig := ByteArray new:l withAll:fill.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   290
            copy := ByteArray fromPackedString:(orig asPackedString).
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   291
            self assert:(orig = copy).
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
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)) {
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   319
        nindexedinstvars = __intVal(anInteger);
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   320
        if (nindexedinstvars >= 0) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   321
            if (self == ByteArray) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   322
                /*
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   323
                 * the most common case
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   324
                 */
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   325
                instsize = OHDR_SIZE + nindexedinstvars;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   326
                if (__CanDoQuickNew(instsize)) {        /* OBJECT ALLOCATION */
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   327
                    __qCheckedNew(newobj, instsize);
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   328
                    __InstPtr(newobj)->o_class = self;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   329
                    __qSTORE(newobj, self);
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   330
                    RETURN (newobj );
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   331
                }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   332
            } else {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   333
                /*
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   334
                 * Take care for subclasses like TwoByteString
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   335
                 */
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   336
                switch (__smallIntegerVal(__ClassInstPtr(self)->c_flags) & ARRAYMASK) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   337
                case BYTEARRAY:
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   338
                    break;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   339
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   340
                case WORDARRAY:
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   341
                case SWORDARRAY:
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   342
                    nindexedinstvars *= 2;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   343
                    break;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   344
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   345
                case LONGARRAY:
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   346
                case SLONGARRAY:
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   347
                    nindexedinstvars *= 4;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   348
                    break;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   349
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   350
                default:
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   351
                    /* don't know about this array type, delegate to super */
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   352
                    goto out;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   353
                }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   354
            }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   355
            nInstVars = __intVal(__ClassInstPtr(self)->c_ninstvars);
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   356
            instsize = OHDR_SIZE + __OBJS2BYTES__(nInstVars) + nindexedinstvars;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   357
            __PROTECT_CONTEXT__
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   358
            __qNew(newobj, instsize);   /* OBJECT ALLOCATION */
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   359
            __UNPROTECT_CONTEXT__
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   360
            if (newobj != nil) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   361
                __InstPtr(newobj)->o_class = self;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   362
                __qSTORE(newobj, self);
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   363
                if (nInstVars) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   364
                    /*
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   365
                     * still have to nil out named instvars ...
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   366
                     */
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   367
#if defined(memset4) && defined(FAST_OBJECT_MEMSET4)
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
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)
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   371
                    /*
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   372
                     * knowing that nil is 0
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   373
                     */
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
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
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   376
                    op = __InstPtr(newobj)->i_instvars;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   377
                    while (nInstVars--)
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
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
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   381
                }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   382
                RETURN ( newobj );
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   383
            }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
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.
19461
7a4d28b76572 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19415
diff changeset
   412
     Abstract subclasses must redefine this again."
11220
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
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
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 {
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   444
        unsigned int   u_l;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
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
19502
194e575d35ad #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19461
diff changeset
   472
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   473
!UninterpretedBytes methodsFor:'Compatibility'!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   474
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   475
doubleWordAt:index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   476
    "return the 4-bytes starting at index as an (unsigned) Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   477
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   478
     The value is retrieved in the machines natural byte order."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   479
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   480
    ^ self unsignedInt32At:index MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   481
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   482
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   483
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   484
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   485
     b := ByteArray withAll:#(1 2 3 4).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   486
     (b doubleWordAt:1) printStringRadix:16
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   487
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   488
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   489
    "Modified: / 5.3.1998 / 14:57:35 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   490
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   491
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   492
doubleWordAt:index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   493
    "return the 4-bytes starting at index as an (unsigned) Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   494
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   495
     The value is retrieved MSB-first, if the msb-arg is true;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   496
     LSB-first otherwise."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   497
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   498
    ^ self unsignedInt32At:index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   499
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   500
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   501
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   502
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   503
     b := ByteArray withAll:#(1 2 3 4).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   504
     (b doubleWordAt:1 MSB:true) printStringRadix:16.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   505
     (b doubleWordAt:1 MSB:false) printStringRadix:16
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   506
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   507
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   508
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   509
doubleWordAt:byteIndex put:anInteger
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   510
    "set the 4-bytes starting at index from the (unsigned) Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   511
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   512
     The value should be in the range 0 to 16rFFFFFFFF
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   513
     (for negative values, the stored value is not defined).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   514
     The value is stored in the machines natural byte order."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   515
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   516
   ^ self unsignedInt32At:byteIndex put:anInteger MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   517
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   518
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   519
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   520
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   521
     b doubleWordAt:1 put:16r04030201.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   522
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   523
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   524
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   525
    "Modified: / 5.3.1998 / 14:57:48 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   526
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   527
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   528
doubleWordAt:byteIndex put:anInteger MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   529
    "set the 4-bytes starting at index from the (unsigned) Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   530
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   531
     The value must be in the range 0 to 16rFFFFFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   532
     The value is stored MSB-first if msb is true; LSB-first otherwise."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   533
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   534
   ^ self unsignedInt32At:byteIndex put:anInteger MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   535
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   536
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   537
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   538
     b := ByteArray new:8.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   539
     b doubleWordAt:1 put:16r04030201 MSB:true.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   540
     b doubleWordAt:5 put:16r04030201 MSB:false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   541
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   542
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   543
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   544
    "Modified: / 21.1.1998 / 17:43:34 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   545
    "Modified: / 5.3.1998 / 11:42:17 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   546
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   547
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   548
doubleWordAtDoubleWordIndex:int32Index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   549
    "return the unsigned long (int32) at index, anInteger.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   550
     Fetching in the machine's natural byte order.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   551
     Indices are 1-based and scaled as appropriate to allow
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   552
     accessing the memory as an array of doubleWord entries.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   553
     (i.e. indices are 1, 2, ...)"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   554
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   555
    ^ self doubleWordAtDoubleWordIndex:int32Index MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   556
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   557
    "Created: / 21.1.1998 / 17:43:53 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   558
    "Modified: / 5.3.1998 / 14:58:06 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   559
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   560
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   561
doubleWordAtDoubleWordIndex:int32Index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   562
    "return the unsigned long (int32) at index, anInteger.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   563
     Fetching is MSB if msb is true, LSB otherwise.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   564
     Indices are 1-based and scaled as appropriate to allow
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   565
     accessing the memory as an array of doubleWord entries.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   566
     (i.e. indices are 1, 2, ...)"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   567
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   568
    ^ self unsignedInt32At:((int32Index - 1) * 4 + 1) MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   569
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   570
    "Created: / 21.1.1998 / 17:44:07 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   571
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   572
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   573
doubleWordAtDoubleWordIndex:int32Index put:anInteger
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   574
    "set the long at index, anInteger.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   575
     Storing in the machines natural byte order.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   576
     Indices are 1-based and scaled as appropriate to allow
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   577
     accessing the memory as an array of doubleWord entries.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   578
     (i.e. indices are 1, 2, ...)"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   579
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   580
    ^ self doubleWordAtDoubleWordIndex:int32Index put:anInteger MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   581
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   582
    "Created: / 21.1.1998 / 17:44:13 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   583
    "Modified: / 5.3.1998 / 14:58:19 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   584
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   585
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   586
doubleWordAtDoubleWordIndex:int32Index put:anInteger MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   587
    "set the long at index, anInteger.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   588
     Storing is MSB if msb is true, LSB otherwise.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   589
     Indices are 1-based and scaled as appropriate to allow
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   590
     accessing the memory as an array of doubleWord entries.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   591
     (i.e. indices are 1, 2, ...)"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   592
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   593
    ^ self unsignedInt32At:((int32Index - 1) * 4 + 1) put:anInteger MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   594
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   595
    "Created: / 21.1.1998 / 17:44:19 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   596
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   597
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   598
int16At:byteIndex
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   599
    "return the 2-bytes starting at index as a signed Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   600
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   601
     The value is retrieved in the machines natural byte order.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   602
     This may be worth a primitive."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   603
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   604
    ^ self signedInt16At:byteIndex
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   605
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   606
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   607
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   608
     b := ByteArray new:2.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   609
     b wordAt:1 put:16rFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   610
     b signedWordAt:1
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   611
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   612
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   613
    "Modified: 1.7.1996 / 21:14:38 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   614
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   615
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   616
int16At:byteIndex MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   617
    "return the 2-bytes starting at index as a signed Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   618
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   619
     The value is retrieved in the machines natural byte order.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   620
     This may be worth a primitive."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   621
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   622
    ^ self signedInt16At:byteIndex MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   623
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   624
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   625
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   626
     b := ByteArray new:2.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   627
     b wordAt:1 put:16rFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   628
     b signedWordAt:1
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   629
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   630
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   631
    "Modified: 1.7.1996 / 21:14:38 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   632
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   633
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   634
int16At:index put:anInteger
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   635
    "set the 2-bytes starting at index from the signed Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   636
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   637
     The stored value must be in the range -32768 .. +32676.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   638
     The value is stored in the machine's natural byteorder"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   639
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   640
    ^ self signedInt16At:index put:anInteger MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   641
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   642
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   643
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   644
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   645
     b shortAt:1 put:1 bigEndian:true.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   646
     b shortAt:3 put:1 bigEndian:false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   647
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   648
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   649
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   650
    "Modified: / 1.7.1996 / 21:12:07 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   651
    "Created: / 5.3.1998 / 11:02:05 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   652
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   653
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   654
int16At:index put:anInteger MSB:bigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   655
    "set the 2-bytes starting at index from the signed Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   656
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   657
     The stored value must be in the range -32768 .. +32676.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   658
     The value is stored in the byteorder given by bigEndian.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   659
     This may be worth a primitive."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   660
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   661
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   662
    ^ self signedInt16At:index put:anInteger MSB:bigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   663
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   664
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   665
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   666
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   667
     b shortAt:1 put:1 bigEndian:true.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   668
     b shortAt:3 put:1 bigEndian:false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   669
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   670
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   671
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   672
    "Modified: / 1.7.1996 / 21:12:07 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   673
    "Created: / 5.3.1998 / 11:02:05 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   674
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   675
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   676
longAt:index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   677
    "return the 4-bytes starting at index as a signed Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   678
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   679
     The value is retrieved in the machines natural byte order,
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   680
     therefore, this should only be used for byte-data which is
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   681
     only used inside this machine.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   682
     To setup data packets which are to be sent to other machines,
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   683
     or stored into a file, always use longAt:MSB: and specify
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   684
     a definite byteOrder."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   685
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   686
    ^ self signedInt32At:index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   687
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   688
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   689
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   690
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   691
     b unsignedLongAt:1 put:16rFFFFFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   692
     (b longAt:1)
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   693
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   694
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   695
    "Modified: / 1.7.1996 / 21:11:28 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   696
    "Modified: / 5.3.1998 / 12:06:28 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   697
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   698
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   699
longAt:index bigEndian:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   700
    "return the 4-bytes starting at index as a signed Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   701
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   702
     Depending on msb, the value is retrieved MSB-first or LSB-first.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   703
     This may be worth a primitive."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   704
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   705
    ^ self signedInt32At:index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   706
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   707
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   708
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   709
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   710
     b unsignedLongAt:1 put:16rFFFFFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   711
     (b longAt:1)
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   712
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   713
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   714
    "Modified: / 1.7.1996 / 21:11:33 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   715
    "Created: / 5.3.1998 / 14:02:03 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   716
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   717
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   718
longAt:index put:value
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   719
    "set the 4-bytes starting at index from the signed Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   720
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   721
     The value is stored in the machine's natural byte order."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   722
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   723
    ^ self signedInt32At:index put:value MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   724
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   725
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   726
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   727
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   728
     b longAt:1 put:-1.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   729
     (b unsignedLongAt:1) printStringRadix:16
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   730
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   731
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   732
    "Modified: / 1.7.1996 / 21:11:39 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   733
    "Created: / 5.3.1998 / 10:57:18 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   734
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   735
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   736
longAt:byteIndex put:anInteger bigEndian:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   737
    "store a signed long (32bit) integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   738
     The index is a smalltalk index (i.e. 1-based)."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   739
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   740
    ^ self signedInt32At:byteIndex put:anInteger MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   741
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   742
    "Created: / 9.5.1998 / 01:10:24 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   743
    "Modified: / 9.5.1998 / 01:13:34 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   744
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   745
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   746
longLongAt:index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   747
    "return the 8-bytes starting at index as a signed Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   748
     The index is a smalltalk index (i.e. 1-based).
19502
194e575d35ad #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19461
diff changeset
   749
     The value is retrieved in the machineÄs natural byte order.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   750
     This may be worth a primitive."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   751
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   752
    ^ self signedInt64At:index MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   753
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   754
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   755
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   756
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   757
     b unsignedLongLongAt:1 put:16rFFFFFFFFFFFFFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   758
     (b longLongAt:1)
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   759
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   760
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   761
    "Modified: / 1.7.1996 / 21:11:28 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   762
    "Created: / 5.3.1998 / 14:40:05 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   763
    "Modified: / 5.3.1998 / 14:58:32 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   764
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   765
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   766
longLongAt:index bigEndian:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   767
    "return the 8-bytes starting at index as a signed Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   768
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   769
     The value is retrieved in the given byte order.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   770
     This may be worth a primitive."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   771
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   772
    ^ self signedInt64At:index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   773
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   774
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   775
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   776
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   777
     b unsignedLongLongAt:1 put:16rFFFFFFFFFFFFFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   778
     (b longLongAt:1 msb:true)
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   779
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   780
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   781
    "Modified: / 5.3.1998 / 12:06:28 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   782
    "Created: / 5.3.1998 / 14:40:54 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   783
    "Modified: / 9.5.1998 / 01:10:59 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   784
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   785
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   786
longLongAt:byteIndex put:anInteger
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   787
    "store a signed longLong (64bit) integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   788
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   789
     Same as #signedQuadWordAt:put: - for ST80 compatibility."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   790
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   791
    ^ self signedInt64At:byteIndex put:anInteger MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   792
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   793
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   794
longLongAt:byteIndex put:anInteger bigEndian:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   795
    "store a signed longLong (64bit) integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   796
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   797
     Same as #signedQuadWordAt:put: - for ST80 compatibility."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   798
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   799
    ^ self signedInt64At:byteIndex put:anInteger MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   800
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   801
    "Created: / 9.5.1998 / 01:10:24 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   802
    "Modified: / 9.5.1998 / 01:13:34 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   803
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   804
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   805
quadWordAt:index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   806
    "return the 8-bytes starting at index as an (unsigned) Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   807
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   808
     Depending on msb, the value is retrieved MSB or LSB-first."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   809
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   810
   ^ self unsignedInt64At:index MSB:msb 
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   811
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   812
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   813
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   814
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   815
     b := ByteArray withAll:#(1 2 3 4 5 6 7 8).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   816
     (b quadWordAt:1 MSB:false) printStringRadix:16
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   817
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   818
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   819
    "Modified: 5.11.1996 / 14:06:21 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   820
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   821
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   822
quadWordAt:index put:anInteger MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   823
    "set the 8-bytes starting at index from the (unsigned) Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   824
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   825
     The value must be in the range 0 to 16rFFFFFFFFFFFFFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   826
     Depending on msb, the value is stored MSB-first or LSB-first."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   827
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   828
    ^ self unsignedInt64At:index put:anInteger MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   829
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   830
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   831
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   832
     b := ByteArray new:8.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   833
     b quadWordAtIndex:1 put:16r0807060504030201 MSB:false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   834
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   835
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   836
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   837
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   838
shortAt:index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   839
    "return the 2-bytes starting at index as a signed Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   840
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   841
     The value is retrieved in the machines natural byte order.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   842
     This may be worth a primitive.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   843
     This is the ST80 equivalent of #signedWordAt:"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   844
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   845
    ^ self signedInt16At:index MSB:IsBigEndian
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   846
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   847
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   848
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   849
     b := ByteArray new:2.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   850
     b unsignedShortAt:1 put:16rFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   851
     b shortAt:1
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   852
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   853
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   854
    "Modified: / 1.7.1996 / 21:14:38 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   855
    "Created: / 5.3.1998 / 10:59:57 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   856
    "Modified: / 5.3.1998 / 23:39:38 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   857
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   858
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   859
shortAt:index bigEndian:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   860
    "return the 2-bytes starting at index as a signed Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   861
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   862
     The value is retrieved MSB-first, if the msb-arg is true;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   863
     LSB-first otherwise.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   864
     This is the ST80 equivalent of #signedWordAt:"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   865
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   866
    ^ self signedInt16At:index MSB:msb
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   867
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   868
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   869
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   870
     b := ByteArray new:2.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   871
     b unsignedShortAt:1 put:16rFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   872
     b shortAt:1
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   873
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   874
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   875
    "Modified: / 1.7.1996 / 21:14:38 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   876
    "Created: / 5.3.1998 / 23:41:21 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   877
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   878
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   879
shortAt:index put:value
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   880
    "set the 2-bytes starting at index from the signed Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   881
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   882
     The stored value must be in the range -32768 .. +32676.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   883
     The value is stored in the machines natural byteorder.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   884
     This may be worth a primitive.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   885
     This is the ST80 equivalent of #signedWordAt:put:"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   886
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   887
    ^ self signedInt16At:index put:value MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   888
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   889
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   890
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   891
     b := ByteArray new:6.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   892
     b shortAt:1 put:-1.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   893
     b shortAt:3 put:-2.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   894
     b shortAt:5 put:0.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   895
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   896
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   897
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   898
    "Modified: / 1.7.1996 / 21:12:07 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   899
    "Created: / 5.3.1998 / 11:02:05 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   900
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   901
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   902
shortAt:index put:value bigEndian:bigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   903
    "set the 2-bytes starting at index from the signed Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   904
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   905
     The stored value must be in the range -32768 .. +32676.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   906
     The value is stored in the byteorder given by bigEndian.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   907
     This may be worth a primitive."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   908
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   909
    ^ self signedInt16At:index put:value MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   910
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   911
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   912
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   913
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   914
     b shortAt:1 put:1 bigEndian:true.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   915
     b shortAt:3 put:1 bigEndian:false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   916
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   917
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   918
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   919
    "Modified: / 1.7.1996 / 21:12:07 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   920
    "Created: / 5.3.1998 / 11:02:05 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   921
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   922
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   923
signedDoubleWordAt:index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   924
    "return the 4-bytes starting at index as a signed Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   925
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   926
     The value is retrieved in the machines natural byte order.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   927
     This may be worth a primitive."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   928
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   929
    ^ self signedInt32At:index MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   930
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   931
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   932
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   933
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   934
     b doubleWordAt:1 put:16rFFFFFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   935
     (b signedDoubleWordAt:1)
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   936
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   937
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   938
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   939
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   940
     b signedDoubleWordAt:1 put:-1.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   941
     (b doubleWordAt:1)
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   942
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   943
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   944
    "Modified: 1.7.1996 / 21:11:28 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   945
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   946
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   947
signedDoubleWordAt:index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   948
    "return the 4-bytes starting at index as a (signed) Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   949
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   950
     The value is retrieved MSB-first, if the msb-arg is true;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   951
     LSB-first otherwise."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   952
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   953
    ^ self signedInt32At:index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   954
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   955
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   956
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   957
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   958
     b := ByteArray withAll:#(1 2 3 4).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   959
     (b signedDoubleWordAt:1 MSB:true) printStringRadix:16.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   960
     (b signedDoubleWordAt:1 MSB:false) printStringRadix:16
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   961
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   962
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   963
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   964
signedDoubleWordAt:index put:value
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   965
    "set the 4-bytes starting at index from the signed Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   966
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   967
     The value is stored in the machines natural byte order.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   968
     This may be worth a primitive."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   969
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   970
    ^ self signedInt32At:index put:value MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   971
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   972
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   973
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   974
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   975
     b signedDoubleWordAt:1 put:-1.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   976
     (b doubleWordAt:1) printStringRadix:16
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   977
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   978
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   979
    "Modified: 1.7.1996 / 21:11:39 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   980
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   981
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   982
signedDoubleWordAt:index put:value MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   983
    "set the 4-bytes starting at index from the signed Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   984
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   985
     Depending on msb, the value is stored MSB-first or LSB-first.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   986
     This may be worth a primitive."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   987
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   988
    ^ self signedInt32At:index put:value MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   989
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   990
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   991
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   992
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   993
     b signedDoubleWordAt:1 put:-1.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   994
     (b doubleWordAt:1) printStringRadix:16
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   995
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   996
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   997
    "Modified: 1.7.1996 / 21:11:46 / cg"
15087
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
   998
!
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
   999
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1000
signedLongAt:index
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1001
    "return the 4-bytes starting at index as a signed Integer.
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1002
     The index is a smalltalk index (i.e. 1-based).
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1003
     The value is retrieved in the machine's natural byte order."
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1004
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1005
    ^ self signedInt32At:index
15087
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1006
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1007
    "
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1008
     |b|
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1009
     b := ByteArray new:4.
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1010
     b unsignedLongAt:1 put:16rFFFFFFFF.
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1011
     b signedLongAt:1
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1012
    "
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1013
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1014
    "Modified: 1.7.1996 / 21:14:38 / cg"
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1015
!
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1016
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1017
signedLongAt:index put:newValue
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1018
    "store a 4-bytes signed value starting at index.
15087
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1019
     The index is a smalltalk index (i.e. 1-based).
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1020
     The value is in the machine's natural byte order."
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1021
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1022
    ^ self signedInt32At:index put:newValue
15087
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1023
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1024
    "
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1025
     |b|
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1026
     b := ByteArray new:4.
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1027
     b signedLongAt:1 put:-1.
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1028
     b unsignedLongAt:1
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1029
    "
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1030
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1031
    "Modified: 1.7.1996 / 21:14:38 / cg"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1032
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1033
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1034
signedWordAt:index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1035
    "return the 2-bytes starting at index as a signed Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1036
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1037
     The value is retrieved in the machines natural byte order.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1038
     This may be worth a primitive."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1039
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1040
    ^ (self unsignedInt16At:index MSB:IsBigEndian) signExtendedShortValue
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1041
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1042
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1043
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1044
     b := ByteArray new:2.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1045
     b wordAt:1 put:16rFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1046
     b signedWordAt:1
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1047
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1048
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1049
    "Modified: 1.7.1996 / 21:14:38 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1050
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1051
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1052
signedWordAt:index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1053
    "return the 2-bytes starting at index as a signed Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1054
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1055
     The value is retrieved MSB-first if the msb-arg is true,
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1056
     LSB-first otherwise.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1057
     This may be worth a primitive."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1058
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1059
    ^ (self unsignedInt16At:index MSB:msb) signExtendedShortValue
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1060
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1061
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1062
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1063
     b := ByteArray new:2.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1064
     b wordAt:1 put:16r0080.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1065
     b signedWordAt:1 MSB:true.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1066
     b signedWordAt:1 MSB:false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1067
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1068
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1069
    "Modified: 1.7.1996 / 21:15:57 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1070
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1071
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1072
signedWordAt:byteIndex put:anInteger
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1073
    "set the 2-bytes starting at index from the signed Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1074
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1075
     The stored value must be in the range -32768 .. +32676.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1076
     The value is stored in the machine's natural byteorder."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1077
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1078
    ^ self signedInt16At:byteIndex put:anInteger MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1079
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1080
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1081
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1082
     b := ByteArray new:6.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1083
     b shortAt:1 put:-1.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1084
     b shortAt:3 put:-2.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1085
     b shortAt:5 put:0.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1086
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1087
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1088
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1089
    "Modified: / 1.7.1996 / 21:12:07 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1090
    "Modified: / 5.3.1998 / 11:01:30 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1091
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1092
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1093
signedWordAt:byteIndex put:anInteger MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1094
    "set the 2-bytes starting at index from the signed Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1095
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1096
     The stored value must be in the range -32768 .. +32676.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1097
     The value is stored MSB-first, if the msb-arg is true;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1098
     LSB-first otherwise."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1099
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1100
    ^ self signedInt16At:byteIndex put:anInteger MSB:msb
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1101
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1102
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1103
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1104
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1105
     b signedWordAt:1 put:-1.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1106
     b signedWordAt:3 put:-2.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1107
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1108
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1109
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1110
    "Modified: 1.7.1996 / 21:12:13 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1111
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1112
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1113
unsignedLongAt:index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1114
    "return the 4-bytes starting at index as an (unsigned) Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1115
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1116
     The value is retrieved in the machine's natural byte order.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1117
     Subclasses may redefine this for better performance.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1118
     Same as doubleWordAt: for protocol completeness"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1119
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1120
    ^ self unsignedInt32At:index MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1121
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1122
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1123
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1124
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1125
     b := ByteArray withAll:#(1 2 3 4).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1126
     (b unsignedLongAt:1) printStringRadix:16
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1127
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1128
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1129
    "Created: / 5.3.1998 / 11:56:53 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1130
    "Modified: / 5.3.1998 / 14:58:48 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1131
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1132
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1133
unsignedLongAt:index bigEndian:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1134
    "return the 4-bytes starting at index as an (unsigned) Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1135
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1136
     The value is retrieved MSB-first, if the msb-arg is true;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1137
     LSB-first otherwise.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1138
     Subclasses may redefine this for better performance.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1139
     Same as doubleWordAt:MSB: for protocol completeness"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1140
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1141
    ^ self unsignedInt32At:index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1142
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1143
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1144
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1145
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1146
     b := ByteArray withAll:#(1 2 3 4).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1147
     (b unsignedLongAt:1 bigEndian:true) printStringRadix:16.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1148
     (b unsignedLongAt:1 bigEndian:false) printStringRadix:16
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1149
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1150
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1151
    "Modified: / 21.1.1998 / 17:42:30 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1152
    "Created: / 5.3.1998 / 11:46:05 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1153
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1154
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1155
unsignedLongAt:index put:value
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1156
    "set the 4-bytes starting at index from the (unsigned) Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1157
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1158
     The value should be in the range 0 to 16rFFFFFFFF
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1159
     (for negative values, the stored value is not defined).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1160
     The value is stored in the machines natural byte order.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1161
     Subclasses may redefine this for better performance.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1162
     Same as doubleWordAt:put: for protocol completeness"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1163
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1164
    ^ self unsignedInt32At:index put:value MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1165
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1166
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1167
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1168
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1169
     b unsignedLongAt:1 put:16r04030201.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1170
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1171
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1172
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1173
    "Created: / 5.3.1998 / 11:57:44 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1174
    "Modified: / 5.3.1998 / 14:58:59 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1175
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1176
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1177
unsignedLongAt:index put:aNumber bigEndian:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1178
    "set the 4-bytes starting at index from the (unsigned) Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1179
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1180
     The value must be in the range 0 to 16rFFFFFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1181
     The value is stored MSB-first if msb is true; LSB-first otherwise.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1182
     Subclasses may redefine this for better performance.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1183
     Same as doubleWordAt:put:MSB: for protocol completeness"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1184
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1185
    ^ self unsignedInt32At:index put:aNumber MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1186
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1187
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1188
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1189
     b := ByteArray new:8.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1190
     b unsignedLongAt:1 put:16r04030201 bigEndian:true.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1191
     (b unsignedLongAt:1 bigEndian:false) printStringRadix:16
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1192
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1193
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1194
    "Modified: / 21.1.1998 / 17:43:34 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1195
    "Created: / 5.3.1998 / 11:43:53 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1196
    "Modified: / 5.3.1998 / 11:47:30 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1197
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1198
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1199
unsignedLongLongAt:index bigEndian:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1200
    "return the 8-bytes starting at index as an (unsigned) Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1201
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1202
     Depending on msb, the value is retrieved MSB or LSB-first."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1203
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1204
    ^ self unsignedInt64At:index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1205
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1206
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1207
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1208
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1209
     b := ByteArray withAll:#(1 2 3 4 5 6 7 8).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1210
     (b unsignedLongLongAt:1 bigEndian:false) printStringRadix:16
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1211
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1212
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1213
    "Modified: / 5.11.1996 / 14:06:21 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1214
    "Modified: / 5.3.1998 / 14:04:44 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1215
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1216
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1217
unsignedLongLongAt:index put:anInteger
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1218
    "set the 8-bytes starting at index from the (unsigned) Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1219
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1220
     The value must be in the range 0 to 16rFFFFFFFFFFFFFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1221
     The value is stored in natural byte order."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1222
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1223
    ^ self unsignedInt64At:index put:anInteger MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1224
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1225
    "Created: / 5.3.1998 / 14:44:00 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1226
    "Modified: / 5.3.1998 / 15:02:32 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1227
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1228
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1229
unsignedLongLongAt:index put:anInteger bigEndian:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1230
    "set the 8-bytes starting at index from the (unsigned) Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1231
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1232
     The value must be in the range 0 to 16rFFFFFFFFFFFFFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1233
     Depending on msb, the value is stored MSB-first or LSB-first."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1234
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1235
    ^ self unsignedInt64At:index put:anInteger MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1236
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1237
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1238
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1239
     b := ByteArray new:8.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1240
     b unsignedLongLongAt:1 put:16r0807060504030201 bigEndian:false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1241
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1242
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1243
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1244
    "Created: / 5.3.1998 / 14:06:02 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1245
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1246
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1247
unsignedShortAt:index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1248
    "return the 2-bytes starting at index as an (unsigned) Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1249
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1250
     The value is retrieved in the machines natural byte order
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1251
     Subclasses may redefine this for better performance.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1252
     This is the ST80 equivalent of #wordAt:"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1253
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1254
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1255
    ^ self unsignedInt16At:index MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1256
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1257
    "Created: / 5.3.1998 / 11:38:25 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1258
    "Modified: / 5.3.1998 / 14:59:25 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1259
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1260
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1261
unsignedShortAt:index bigEndian:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1262
    "return the 2-bytes starting at index as an (unsigned) Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1263
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1264
     The value is retrieved MSB-first (high 8 bits at lower index) if msb is true;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1265
     LSB-first (i.e. low 8-bits at lower byte index) if its false)"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1266
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1267
    ^ self unsignedInt16At:index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1268
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1269
    "Modified: / 21.1.1998 / 17:46:07 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1270
    "Created: / 5.3.1998 / 11:49:29 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1271
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1272
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1273
unsignedShortAt:index put:value
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1274
    "set the 2-bytes starting at index from the (unsigned) Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1275
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1276
     The stored value must be in the range 0 .. 16rFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1277
     The value is stored in the machines natural byteorder."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1278
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1279
    ^ self unsignedInt16At:index put:value
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1280
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1281
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1282
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1283
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1284
     b unsignedShortAt:1 put:16r0102.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1285
     b unsignedShortAt:3 put:16r0304.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1286
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1287
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1288
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1289
    "Created: / 5.3.1998 / 11:54:52 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1290
    "Modified: / 5.3.1998 / 14:59:38 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1291
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1292
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1293
unsignedShortAt:index put:value bigEndian:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1294
    "set the 2-bytes starting at index from the (unsigned) Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1295
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1296
     The stored value must be in the range 0 .. 16rFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1297
     The value is stored LSB-first (i.e. the low 8bits are stored at the
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1298
     lower index) if msb is false, MSB-first otherwise"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1299
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1300
    ^ self unsignedInt16At:index put:value MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1301
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1302
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1303
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1304
     b := ByteArray new:8.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1305
     b unsignedShortAt:1 put:16r0102 bigEndian:false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1306
     b unsignedShortAt:3 put:16r0304 bigEndian:false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1307
     b unsignedShortAt:5 put:16r0102 bigEndian:true.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1308
     b unsignedShortAt:7 put:16r0304 bigEndian:true.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1309
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1310
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1311
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1312
    "Modified: / 21.1.1998 / 17:48:15 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1313
    "Modified: / 5.3.1998 / 11:52:28 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1314
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1315
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1316
wordAt:index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1317
    "return the 2-bytes starting at index as an (unsigned) Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1318
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1319
     The value is retrieved in the machines natural byte order
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1320
     Subclasses may redefine this for better performance."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1321
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1322
    ^ self unsignedInt16At:index MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1323
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1324
    "Modified: / 5.3.1998 / 14:59:51 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1325
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1326
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1327
wordAt:index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1328
    "return the 2-bytes starting at index as an (unsigned) Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1329
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1330
     The value is retrieved MSB (high 8 bits at lower index) if msb is true;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1331
     LSB-first (i.e. low 8-bits at lower byte index) if its false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1332
     Notice: 
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1333
        the index is a byte index; thus, this allows for unaligned access to
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1334
        words on any boundary.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1335
     Question: should it be retrieve signed values ? (see ByteArray>>signedWordAt:)"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1336
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1337
    ^ self unsignedInt16At:index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1338
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1339
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1340
wordAt:index put:value
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1341
    "set the 2-bytes starting at index from the (unsigned) Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1342
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1343
     The stored value must be in the range 0 .. 16rFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1344
     The value is stored in the machines natural byteorder.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1345
     Question: should it accept signed values ? (see ByteArray>>signedWordAt:put:)"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1346
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1347
    ^ self unsignedInt16At:index put:value MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1348
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1349
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1350
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1351
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1352
     b wordAt:1 put:16r0102.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1353
     b wordAt:3 put:16r0304.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1354
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1355
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1356
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1357
    "Modified: / 5.3.1998 / 15:00:03 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1358
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1359
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1360
wordAt:index put:value MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1361
    "set the 2-bytes starting at index from the (unsigned) Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1362
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1363
     The stored value must be in the range 0 .. 16rFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1364
     The value is stored LSB-first (i.e. the low 8bits are stored at the
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1365
     lower index) if msb is false, MSB-first otherwise.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1366
     Question: should it accept signed values ? (see ByteArray>>signedWordAt:put:)"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1367
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1368
    ^ self unsignedInt16At:index put:value MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1369
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1370
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1371
     b := ByteArray new:8.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1372
     b wordAt:1 put:16r0102 MSB:false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1373
     b wordAt:3 put:16r0304 MSB:false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1374
     b wordAt:5 put:16r0102 MSB:true.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1375
     b wordAt:7 put:16r0304 MSB:true.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1376
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1377
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1378
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1379
    "Modified: / 21.1.1998 / 17:48:15 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1380
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1381
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1382
wordAtWordIndex:int16Index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1383
    "return the unsigned short (uint16) at index, anInteger.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1384
     Fetching in the machines natural byte order.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1385
     Indices are 1-based and scaled as appropriate to allow
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1386
     accessing the memory as an array of word entries.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1387
     (i.e. indices are 1, 2, ...)"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1388
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1389
    ^ self unsignedInt16At:int16Index MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1390
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1391
    "Created: / 21.1.1998 / 17:48:26 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1392
    "Modified: / 5.3.1998 / 15:00:16 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1393
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1394
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1395
wordAtWordIndex:int16Index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1396
    "return the unsigned short (uint16) at index, anInteger.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1397
     Fetching is MSB if msb is true, LSB otherwise.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1398
     Indices are 1-based and scaled as appropriate to allow
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1399
     accessing the memory as an array of word entries.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1400
     (i.e. indices are 1, 2, ...)"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1401
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1402
    ^ self unsignedInt16At:((int16Index - 1) * 2 + 1) MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1403
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1404
    "Created: / 21.1.1998 / 17:48:30 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1405
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1406
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1407
wordAtWordIndex:int16Index put:anInteger
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1408
    "set the unsigned short (uint16) at index, anInteger.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1409
     Storing in the machine's natural byte order.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1410
     Indices are 1-based and scaled as appropriate to allow
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1411
     accessing the memory as an array of word entries.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1412
     (i.e. indices are 1, 2, ...)"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1413
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1414
    ^ self unsignedInt16At:int16Index put:anInteger MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1415
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1416
    "Created: / 21.1.1998 / 17:48:34 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1417
    "Modified: / 5.3.1998 / 15:00:27 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1418
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1419
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1420
wordAtWordIndex:int16Index put:anInteger MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1421
    "set the short at index, anInteger.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1422
     Storing is MSB if msb is true, LSB otherwise.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1423
     Indices are 1-based and scaled as appropriate to allow
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1424
     accessing the memory as an array of word entries.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1425
     (i.e. indices are 1, 2, ...)"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1426
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1427
    ^ self unsignedInt16At:((int16Index - 1) * 2 + 1) put:anInteger MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1428
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1429
    "Created: / 21.1.1998 / 17:48:38 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1430
! !
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1431
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1432
!UninterpretedBytes methodsFor:'Compatibility-Squeak'!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1433
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1434
copyFromByteArray:aByteArray
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1435
    "copy as much as possible from aByteArray"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1436
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1437
    self replaceBytesFrom:1 to:(self size min:aByteArray size) with:aByteArray startingAt:1
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  1438
! !
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  1439
9185
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1440
!UninterpretedBytes methodsFor:'Compatibility-V''Age'!
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1441
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1442
uint32At:zeroBasedIndex
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1443
    "return the 4-bytes starting at index as (unsigned) Integer.
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1444
     WARNING: The index is a C index (i.e. 0-based).
19301
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1445
     The value is retrieved in the machine's natural byte order.
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1446
     Similar to unsignedInt32At:, except for the index base"
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1447
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1448
    ^ self unsignedInt32At:zeroBasedIndex+1
9185
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1449
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1450
    "
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1451
     |b|
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1452
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1453
     b := ByteArray withAll:#(0 0 0 0).
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1454
     b uint32At:0 put:16r12345678.
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1455
     b uint32At:0.
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1456
     b
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1457
    "
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1458
!
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1459
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1460
uint32At:zeroBasedIndex put:anInteger
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1461
    "set the 4-bytes starting at index to the value given by (unsigned) Integer.
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1462
     WARNING: The index is a C index (i.e. 0-based).
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1463
     The value is stored in the machine's natural byte order.
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1464
     Similar to unsignedInt32At:put:, except for the index base"
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1465
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1466
    ^ self unsignedInt32At:zeroBasedIndex+1 put:anInteger
9185
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1467
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1468
    "
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1469
     |b|
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1470
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1471
     b := ByteArray withAll:#(0 0 0 0).
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1472
     b uint32At:0 put:16r12345678.
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1473
     b
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1474
    "
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1475
! !
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1476
16796
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1477
!UninterpretedBytes methodsFor:'accessing-arbitrary-long ints'!
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1478
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1479
nativeIntAt:index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1480
    "return the 4- or 8-bytes (depending on the native integer/pointer size) 
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1481
     starting at index as a signed Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1482
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1483
     The value is retrieved in the machines natural byte order,
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1484
     therefore, this should only be used for byte-data which is
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1485
     only used inside this machine."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1486
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1487
    |w|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1488
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1489
%{
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1490
    /*
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1491
     * handle the most common cases fast ...
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1492
     */
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1493
    if (__isSmallInteger(index)) {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1494
        unsigned char *cp;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1495
        INT sz;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1496
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1497
        __fetchBytePointerAndSize__(self, &cp, &sz);
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1498
        if (cp) {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1499
            unsigned INT idx = ((unsigned INT)__intVal(index)) - 1;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1500
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1501
            if ((idx+(sizeof(INT)-1)) < sz) {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1502
                cp += idx;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1503
#if defined(__i386__)
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1504
                /*
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1505
                 * aligned or not, we dont care (i386 can do both)
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1506
                 */
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1507
                {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1508
                    INT iVal = ((INT *)cp)[0];
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1509
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1510
                    RETURN (__MKINT(iVal));
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1511
                }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1512
#else
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1513
                /*
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1514
                 * aligned
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1515
                 */
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1516
                if (((INT)cp & (sizeof(INT)-1)) == 0) {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1517
                    INT iVal = ((INT *)cp)[0];
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1518
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1519
                    RETURN (__MKINT(iVal));
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1520
                }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1521
#endif
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1522
            }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1523
        }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1524
    }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1525
%}.
19402
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1526
    SmallInteger maxBytes == 8 ifTrue:[
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1527
        ^ self signedInt64At:index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1528
    ].
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1529
    ^ self signedInt32At:index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1530
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1531
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1532
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1533
     b := ByteArray new:8.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1534
     b nativeIntAt:1 put:SmallInteger maxVal.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1535
     b nativeIntAt:1
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1536
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1537
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1538
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1539
nativeIntAt:index put:value
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1540
    "set the 4- or 8-bytes (depending on INT-/pointer size) starting at index from the signed Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1541
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1542
     The value is stored in the machine's natural byte order."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1543
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1544
%{  /* NOCONTEXT */
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1545
    /*
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1546
     * handle the most common cases fast ...
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1547
     */
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1548
    if (__isSmallInteger(index)) {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1549
        unsigned char *cp;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1550
        INT sz;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1551
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1552
        __fetchBytePointerAndSize__(self, &cp, &sz);
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1553
        if (cp) {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1554
            unsigned INT idx = ((unsigned INT)__intVal(index)) - 1;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1555
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1556
            if ((idx+(sizeof(INT)-1)) < sz) {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1557
                cp += idx;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1558
                /*
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1559
                 * aligned
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1560
                 */
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1561
                if (((INT)cp & (sizeof(INT)-1)) == 0) {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1562
                    INT __v;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1563
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1564
                    if (__isSmallInteger(value)) {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1565
                        // how about a range check?
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1566
                        ((INT *)cp)[0] = (INT)(__intVal(value));
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1567
                        RETURN (value);
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1568
                    }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1569
                    if ((__v = __signedLongIntVal(value)) != 0) {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1570
                        // how about a range check?
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1571
                        ((INT *)cp)[0] = (INT)(__v);
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1572
                        RETURN (value);
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1573
                    }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1574
                }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1575
            }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1576
        }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1577
    }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1578
%}.
19402
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1579
    SmallInteger maxBytes == 8 ifTrue:[
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1580
        ^ self signedInt64At:index put:value MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1581
    ].
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1582
    ^ self signedInt32At:index put:value MSB:IsBigEndian    
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1583
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1584
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1585
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1586
     b := ByteArray new:8.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1587
     b nativeIntAt:1 put:SmallInteger maxVal.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1588
     (b nativeIntAt:1) 
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1589
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1590
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1591
19402
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1592
signedIntegerAt:index length:len bigEndian:bigEndian
19197
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1593
    "return the n-byte signed integer starting at index.
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1594
     With n=1, this returns the single signed byte's value,
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1595
     n=2, a signed short, n=4 a signed int etc.
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1596
     Useful to extract arbitrary long integers"
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1597
19402
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1598
    |val highByte
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1599
     iIndex "{ Class:SmallInteger }"
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1600
     last "{ Class:SmallInteger }"|
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1601
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1602
    iIndex := index.
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1603
    last := iIndex + len - 1.
19197
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1604
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1605
    val := 0.
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1606
    bigEndian ifTrue:[
19402
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1607
        highByte := self at:iIndex.
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1608
        iIndex to:last do:[:i |
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1609
            val := (val<<8) + (self byteAt:i)
19197
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1610
        ]
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1611
    ] ifFalse:[
19402
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1612
        highByte := self at:last.
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1613
        last to:iIndex by:-1 do:[:i |
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1614
            val := (val<<8) + (self byteAt:i)
19197
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1615
        ]
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1616
    ].
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1617
    (highByte bitTest:16r80) ifTrue:[
19402
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1618
        ^ val - (1 bitShift:(len*8))
19197
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1619
    ].    
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1620
    ^ val
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1621
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1622
    "
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1623
     |b|
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1624
     b := #[ 16r01 16rFF 16r00 16r04 16r05 ].
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1625
     (b signedIntegerAt:2 length:2 bigEndian:false). ' -> 255 (00FF) '.
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1626
     (b signedIntegerAt:2 length:2 bigEndian:true).  ' -> -256 (FF00) '.   
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1627
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1628
     b := #[ 16r01 16r00 16rFF 16r04 16r05 ].
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1629
     (b signedIntegerAt:2 length:2 bigEndian:false). ' -> -256 (FF00) '.
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1630
     (b signedIntegerAt:2 length:2 bigEndian:true).  ' -> 255 (00FF) '.   
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1631
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1632
     b := #[ 16r01 16r7F 16r00 16r04 16r05 ].
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1633
     (b signedIntegerAt:2 length:2 bigEndian:false). ' -> 127 (007F) '.
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1634
     (b signedIntegerAt:2 length:2 bigEndian:true).  ' -> 32512 (7F00) '.      
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1635
    "
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1636
    
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1637
    "
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1638
     |b|
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1639
     b := #[ 16r01 16r02 16r03 16r04 16r05 ].
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1640
     (b signedIntegerAt:2 length:4 bigEndian:false).
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1641
     (b signedIntegerAt:2 length:4 bigEndian:true).
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1642
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1643
     b := #[ 16r01 16r82 16r03 16r04 16r05 ].
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1644
     (b signedIntegerAt:2 length:4 bigEndian:false).
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1645
     (b signedIntegerAt:2 length:4 bigEndian:true).
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1646
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1647
     b := #[ 16r01 16r82 16r03 16r04 16r85 ].
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1648
     (b signedIntegerAt:2 length:4 bigEndian:false).
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1649
     (b signedIntegerAt:2 length:4 bigEndian:true).
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1650
    "
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1651
!
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1652
19402
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1653
unsignedIntegerAt:index length:len bigEndian:bigEndian
16796
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1654
    "return the n-byte unsigned integer starting at index.
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1655
     With n=1, this returns the single byte's value,
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1656
     n=2, an unsigned short, n=4 an unsigned int etc.
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1657
     Useful to extract arbitrary long integers"
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1658
19402
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1659
    |val
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1660
     iIndex "{ Class:SmallInteger }"
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1661
     last "{ Class:SmallInteger }"|
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1662
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1663
    iIndex := index.
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1664
    last := iIndex + len - 1.
16796
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1665
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1666
    val := 0.
18346
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
  1667
    bigEndian ifTrue:[
19402
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1668
        iIndex to:last do:[:i |
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1669
            val := (val<<8) + (self byteAt:i)
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1670
        ]
18346
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
  1671
    ] ifFalse:[
19402
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1672
        last to:iIndex by:-1 do:[:i |
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1673
            val := (val<<8) + (self byteAt:i)
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1674
        ]
16796
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1675
    ].
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1676
    ^ val
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1677
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1678
    "
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1679
     |b|
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1680
     b := #[ 16r01 16r02 16r03 16r04 16r05 ].
18346
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
  1681
     (b unsignedIntegerAt:2 length:4 bigEndian:false).
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
  1682
     (b unsignedIntegerAt:2 length:4 bigEndian:true).
16796
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1683
    "
19301
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1684
!
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1685
19402
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1686
unsignedIntegerAt:index put:newValue length:len bigEndian:bigEndian
19301
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1687
    "store the n-byte unsigned integer starting at index.
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1688
     With n=1, this stores a single byte's value,
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1689
     n=2, an unsigned short, n=4 an unsigned int etc.
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1690
     Useful to replace arbitrary long integers"
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1691
19402
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1692
    |val
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1693
     iIndex "{ Class:SmallInteger }"
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1694
     last "{ Class:SmallInteger }"|
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1695
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1696
    iIndex := index.
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1697
    last := iIndex + len - 1.
19301
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1698
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1699
    val := newValue.
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1700
    bigEndian ifTrue:[
19402
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1701
        iIndex to:last do:[:i |
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1702
            self byteAt:i put:(val bitAnd:16rFF).
19301
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1703
            val := val bitShift:-8.
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1704
        ]
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1705
    ] ifFalse:[
19402
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1706
        last to:iIndex by:-1 do:[:i |
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1707
            self byteAt:i put:(val bitAnd:16rFF).
19301
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1708
            val := val bitShift:-8.
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1709
        ]
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1710
    ].
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1711
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1712
    "
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1713
     |b|
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1714
     b := #[ 16r01 16r02 16r03 16r04 16r05 ] copy.
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1715
     (b unsignedIntegerAt:2 put:16r11223344 length:3 bigEndian:false). b.
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1716
     (b unsignedIntegerAt:2 put:16r11223344 length:3 bigEndian:true). b.
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1717
    "
16796
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1718
! !
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1719
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1720
!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
  1721
4422
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1722
bcdByteAt:index
13724
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  1723
    "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
  1724
     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
  1725
     (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
  1726
4425
a10011c1b6eb bcd support - again.
Claus Gittinger <cg@exept.de>
parents: 4422
diff changeset
  1727
    ^ (self byteAt:index) decodeFromBCD
4422
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1728
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1729
    "
19352
3c5b0c74be2e #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19351
diff changeset
  1730
     #[ 16r55 ] bcdByteAt:1 
3c5b0c74be2e #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19351
diff changeset
  1731
     #[ 16r99 ] bcdByteAt:1  
3c5b0c74be2e #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19351
diff changeset
  1732
     #[ 16rAA ] bcdByteAt:1
4422
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1733
    "
13724
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  1734
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  1735
    "Modified (comment): / 26-09-2011 / 11:57:33 / cg"
4422
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1736
!
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1737
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1738
bcdByteAt:index put:aNumber
13724
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  1739
    "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
  1740
     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
  1741
     (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
  1742
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1743
    (aNumber between:0 and:99) ifFalse:[
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  1744
        self error:'invalid value for BCD encoding'
4422
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1745
    ].
4425
a10011c1b6eb bcd support - again.
Claus Gittinger <cg@exept.de>
parents: 4422
diff changeset
  1746
    ^ self byteAt:index put:aNumber encodeAsBCD
4422
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1747
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1748
    "
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1749
     (((ByteArray new:1) bcdByteAt:1 put:55; yourself) at:1) hexPrintString
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1750
     (((ByteArray new:1) bcdByteAt:1 put:99; yourself) at:1) hexPrintString
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1751
     (((ByteArray new:1) bcdByteAt:1 put:100; yourself) at:1) hexPrintString
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1752
     (((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
  1753
    "
13724
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  1754
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  1755
    "Modified (comment): / 26-09-2011 / 11:57:36 / cg"
4422
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1756
!
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1757
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1758
byteAt:byteIndex
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1759
    "return the byte at byteIndex as an unsigned 8 bit value in the range 0..255.
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1760
     The index is a smalltalk index (i.e. 1-based)."
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1761
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1762
%{
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1763
    if (__isSmallInteger(byteIndex)) {
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1764
        unsigned char *cp;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1765
        INT sz;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1766
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1767
        __fetchBytePointerAndSize__(self, &cp, &sz);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1768
        if (cp) {
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1769
            unsigned INT idx = ((unsigned INT)__intVal(byteIndex)) - 1;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1770
            char ch;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1771
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1772
            if (idx < sz) {
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1773
                ch = cp[idx] & 0xFF;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1774
                RETURN (__mkSmallInteger( ch ));
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1775
            }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1776
        }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1777
    }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1778
%}.
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1779
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1780
    ^ self at:byteIndex
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1781
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1782
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1783
     |b|
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1784
     b := ByteArray new:3.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1785
     b at:1 put:16rFF.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1786
     b at:2 put:16r7F.
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1787
     b at:3 put:16r80.
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1788
     b byteAt:1.    
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1789
     b byteAt:2.     
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1790
     b byteAt:3.     
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1791
    "
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1792
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1793
    "Modified: / 01-07-1996 / 21:13:53 / cg"
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1794
    "Modified (comment): / 26-09-2011 / 11:57:14 / cg"
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1795
!
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1796
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1797
byteAt:byteIndex put:anInteger
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1798
    "set the byte at byteIndex as an unsigned 8 bit value in the range 0..255.
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1799
     The index is a smalltalk index (i.e. 1-based)."
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1800
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1801
%{
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1802
    if (__isSmallInteger(byteIndex) && __isSmallInteger(anInteger)) {
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1803
        unsigned char *cp;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1804
        INT sz;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1805
        INT val = __intVal(anInteger);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1806
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1807
        if ( ((unsigned INT)val) <= 0xFF ) {
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1808
            __fetchBytePointerAndSize__(self, &cp, &sz);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1809
            if (cp) {
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1810
                unsigned INT idx = ((unsigned INT)__intVal(byteIndex)) - 1;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1811
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1812
                if (idx < sz) {
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1813
                    cp[idx] = val & 0xFF;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1814
                    RETURN (anInteger);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1815
                }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1816
            }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1817
        }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1818
    }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1819
%}.
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1820
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1821
    ^ self at:byteIndex put:anInteger
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1822
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1823
    "
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1824
     |b|
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1825
     b := ByteArray new:3.
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1826
     b byteAt:1 put:16rFF.
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1827
     b byteAt:2 put:16r7F.
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1828
     b byteAt:3 put:16r80.
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1829
     b signedByteAt:1.    
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1830
     b signedByteAt:2.     
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1831
     b signedByteAt:3.     
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1832
    "
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1833
!
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1834
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1835
signedByteAt:byteIndex
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1836
    "return the byte at byteIndex as a signed 8 bit value in the range -128..+127.
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1837
     The index is a smalltalk index (i.e. 1-based).
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1838
     This may be worth a primitive."
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1839
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1840
%{
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1841
    /*
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1842
     * handle the most common cases fast ...
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1843
     */
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1844
    if (__isSmallInteger(byteIndex)) {
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1845
        unsigned char *cp;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1846
        INT sz;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1847
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1848
        __fetchBytePointerAndSize__(self, &cp, &sz);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1849
        if (cp) {
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1850
            unsigned INT idx = ((unsigned INT)__intVal(byteIndex)) - 1;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1851
            char ch;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1852
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1853
            if (idx < sz) {
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1854
                cp += idx;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1855
                ch = cp[0];
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1856
# ifndef HAS_SIGNED_CHAR
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1857
                if ( (unsigned int)ch >= 0x80 ) {
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1858
                    ch = ch - 0x100;                
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1859
                }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1860
#endif
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1861
                RETURN (__mkSmallInteger( ch ));
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1862
            }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1863
        }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1864
    }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1865
%}.
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1866
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1867
    ^ (self byteAt:byteIndex) signExtendedByteValue
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1868
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1869
    "
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1870
     |b|
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1871
     b := ByteArray new:3.
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1872
     b at:1 put:16rFF.
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1873
     b at:2 put:16r7F.
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1874
     b at:3 put:16r80.
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1875
     b byteAt:1.    
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1876
     b byteAt:2.     
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1877
     b byteAt:3.     
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1878
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1879
13724
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  1880
    "Modified: / 01-07-1996 / 21:13:53 / cg"
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  1881
    "Modified (comment): / 26-09-2011 / 11:57:14 / cg"
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1882
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1883
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1884
signedByteAt:index put:aSignedByteValue
13724
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  1885
    "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
  1886
     The index is a smalltalk index (i.e. 1-based).
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1887
     Return the signedByteValue argument.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1888
     This may be worth a primitive."
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1889
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1890
    |b "{ Class: SmallInteger }"|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1891
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1892
    aSignedByteValue >= 0 ifTrue:[
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1893
        b := aSignedByteValue
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1894
    ] ifFalse:[
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1895
        b := 16r100 + aSignedByteValue
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1896
    ].
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1897
    self byteAt:index put:b.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1898
    ^ aSignedByteValue
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1899
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1900
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1901
     |b|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1902
     b := ByteArray new:2.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1903
     b signedByteAt:1 put:-1.
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1904
     b at:1
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1905
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1906
13724
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  1907
    "Modified: / 01-07-1996 / 21:12:37 / cg"
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  1908
    "Modified (comment): / 26-09-2011 / 11:57:18 / cg"
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1909
! !
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1910
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1911
!UninterpretedBytes methodsFor:'accessing-floats & doubles'!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1912
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1913
doubleAt:index
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1914
    "return the 8-bytes starting at index as a Float.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  1915
     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
  1916
     Notice, that (currently) ST/X Floats are what Doubles are in ST-80.
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1917
     Notice also, that the bytes are expected to be in this machine's
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1918
     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
  1919
     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
  1920
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1921
    |newFloat|
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1922
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  1923
%{
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  1924
    /*
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  1925
     * handle the most common cases fast ...
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  1926
     */
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  1927
    if (__isSmallInteger(index)) {
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1928
        unsigned char *cp;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1929
        INT sz;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1930
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1931
        __fetchBytePointerAndSize__(self, &cp, &sz);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1932
        if (cp) {
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1933
            INT idx = __intVal(index) - 1;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1934
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1935
            if ((idx >= 0) && ((idx+(sizeof(double)-1)) < sz)) {
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1936
                cp += idx;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1937
                /*
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1938
                 * aligned
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1939
                 */
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1940
                if (((INT)cp & (sizeof(double)-1)) == 0) {
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1941
                    double dVal = ((double *)cp)[0];
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1942
                    OBJ f;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1943
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1944
                    __qMKFLOAT(f, dVal);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1945
                    RETURN (f);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1946
                }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1947
            }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1948
        }
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  1949
    }
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  1950
%}.
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  1951
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1952
    newFloat := Float basicNew.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1953
    1 to:8 do:[:destIndex|
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1954
        newFloat basicAt:destIndex put:(self byteAt:(index - 1 + destIndex))
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1955
    ].
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1956
    ^ newFloat.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  1957
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  1958
    "
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  1959
     |b|
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  1960
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  1961
     b := ByteArray new:20.
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  1962
     b doubleAt:1 put:(Float pi).
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  1963
     Transcript showCR:b.
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  1964
     Transcript showCR:(b doubleAt:1)
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  1965
    "
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1966
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1967
3446
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  1968
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
  1969
    "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
  1970
     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
  1971
     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
  1972
     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
  1973
     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
  1974
     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
  1975
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  1976
    |newFloat|
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  1977
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
  1978
    msb == IsBigEndian ifTrue:[
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1979
        ^ 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
  1980
    ].
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  1981
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  1982
    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
  1983
    1 to:8 do:[:destIndex|
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1984
        newFloat basicAt:(9-destIndex) put:(self byteAt:(index - 1 + destIndex))
3446
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  1985
    ].
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  1986
    ^ newFloat.
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  1987
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  1988
    "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
  1989
!
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  1990
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1991
doubleAt:index put:aFloat
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1992
    "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
  1993
     starting at index.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  1994
     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
  1995
     Notice, that (currently) ST/X Floats are what Doubles are in ST-80.
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1996
     Notice also, that the bytes are expected to be in this machine's
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1997
     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
  1998
     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
  1999
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2000
    |flt|
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2001
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2002
%{
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2003
    /*
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2004
     * handle the most common cases fast ...
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2005
     */
16320
dcb66fff0a89 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15836
diff changeset
  2006
    if (__isSmallInteger(index)) {
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2007
        unsigned char *cp;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2008
        INT sz;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2009
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2010
        __fetchBytePointerAndSize__(self, &cp, &sz);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2011
        if (cp) {
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2012
            INT idx = __intVal(index) - 1;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2013
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2014
            if ((idx >= 0) && ((idx+(sizeof(double)-1)) < sz)) {
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2015
                cp += idx;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2016
                /*
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2017
                 * aligned
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2018
                 */
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2019
                if (((INT)cp & (sizeof(double)-1)) == 0) {
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2020
                    if (__isFloat(aFloat)) {
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2021
                        ((double *)cp)[0] = __floatVal(aFloat);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2022
                        RETURN (aFloat);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2023
                    }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2024
                    if (__isShortFloat(aFloat)) {
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2025
                        ((double *)cp)[0] = (double)(__shortFloatVal(aFloat));
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2026
                        RETURN (aFloat);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2027
                    }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2028
                    if (__isSmallInteger(aFloat)) {
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2029
                        ((double *)cp)[0] = (double)(__intVal(aFloat));
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2030
                        RETURN (aFloat);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2031
                    }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2032
                }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2033
            }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2034
        }
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2035
    }
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2036
%}.
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2037
16320
dcb66fff0a89 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15836
diff changeset
  2038
    flt := aFloat asFloat.
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2039
    1 to:8 do:[:srcIndex|
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2040
        self byteAt:(index - 1 + srcIndex) put:(flt basicAt:srcIndex)
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2041
    ].
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2042
    ^ aFloat
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2043
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2044
3446
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2045
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
  2046
    "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
  2047
     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
  2048
     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
  2049
     Notice, that (currently) ST/X Floats are what Doubles are in ST-80.
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2050
     Notice also, that the bytes are expected to be in this machine's
3446
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2051
     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
  2052
     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
  2053
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2054
    |flt|
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2055
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
  2056
    msb == IsBigEndian ifTrue:[
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2057
        ^ 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
  2058
    ].
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2059
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2060
    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
  2061
    1 to:8 do:[:srcIndex|
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2062
        self byteAt:(index - 1 + srcIndex) put:(flt basicAt:(9-srcIndex))
3446
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2063
    ].
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2064
    ^ aFloat
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2065
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2066
    "Created: / 15.5.1998 / 17:22:27 / cg"
3447
Claus Gittinger <cg@exept.de>
parents: 3446
diff changeset
  2067
    "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
  2068
!
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2069
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2070
floatAt:index
3434
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2071
    "return the 4-bytes starting at index as a ShortFloat.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2072
     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
  2073
     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
  2074
     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
  2075
     a float object which keeps an 8-byte double internally.
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2076
     Notice also, that the bytes are expected to be in this machine's
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2077
     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
  2078
     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
  2079
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2080
    |newFloat|
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2081
3434
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2082
%{
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2083
    /*
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2084
     * handle the most common cases fast ...
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2085
     */
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2086
    if (__isSmallInteger(index)) {
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2087
        unsigned char *cp;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2088
        INT sz;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2089
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2090
        __fetchBytePointerAndSize__(self, &cp, &sz);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2091
        if (cp) {
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2092
            INT idx = __intVal(index) - 1;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2093
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2094
            if ((idx >= 0) && ((idx+(sizeof(float)-1)) < sz)) {
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2095
                cp += idx;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2096
                /*
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2097
                 * aligned
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2098
                 */
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2099
                if (((INT)cp & (sizeof(float)-1)) == 0) {
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2100
                    float fVal = ((float *)cp)[0];
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2101
                    OBJ f;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2102
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2103
                    __qMKSFLOAT(f, fVal);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2104
                    RETURN (f);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2105
                }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2106
            }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2107
        }
3434
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2108
    }
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2109
%}.
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2110
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2111
    newFloat := ShortFloat basicNew.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2112
    1 to:4 do:[:destIndex|
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2113
        newFloat basicAt:destIndex put:(self byteAt:(index - 1 + destIndex))
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2114
    ].
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2115
    ^ newFloat.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2116
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2117
3446
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2118
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
  2119
    "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
  2120
     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
  2121
     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
  2122
     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
  2123
     a float object which keeps an 8-byte double internally.
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2124
     Notice also, that the bytes are expected to be in this machine's
3446
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2125
     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
  2126
     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
  2127
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2128
    |newFloat|
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2129
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
  2130
    msb == IsBigEndian ifTrue:[
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2131
        ^ 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
  2132
    ].
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2133
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2134
    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
  2135
    1 to:4 do:[:destIndex|
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2136
        newFloat basicAt:(5-destIndex) put:(self byteAt:(index - 1 + destIndex))
3446
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2137
    ].
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2138
    ^ newFloat.
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2139
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2140
    "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
  2141
    "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
  2142
!
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2143
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2144
floatAt:index put:aFloat
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2145
    "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
  2146
     starting at index.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2147
     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
  2148
     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
  2149
     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
  2150
     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
  2151
     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
  2152
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2153
    |sflt|
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2154
3434
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2155
%{
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2156
    /*
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2157
     * handle the most common cases fast ...
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2158
     */
16320
dcb66fff0a89 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15836
diff changeset
  2159
    if (__isSmallInteger(index)) {
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2160
        unsigned char *cp;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2161
        INT sz;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2162
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2163
        __fetchBytePointerAndSize__(self, &cp, &sz);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2164
        if (cp) {
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2165
            INT idx = __intVal(index) - 1;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2166
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2167
            if ((idx >= 0) && ((idx+(sizeof(float)-1)) < sz)) {
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2168
                cp += idx;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2169
                /*
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2170
                 * aligned
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2171
                 */
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2172
                if (((INT)cp & (sizeof(float)-1)) == 0) {
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2173
                    if (__isShortFloat(aFloat)) {
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2174
                        ((float *)cp)[0] = __shortFloatVal(aFloat);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2175
                        RETURN (self);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2176
                    }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2177
                    if (__isFloat(aFloat)) {
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2178
                        ((float *)cp)[0] = (float)__floatVal(aFloat);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2179
                        RETURN (self);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2180
                    }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2181
                    if (__isSmallInteger(aFloat)) {
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2182
                        ((float *)cp)[0] = (float)__intVal(aFloat);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2183
                        RETURN (self);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2184
                    }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2185
                    // bail out to smalltalk code
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2186
                }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2187
            }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2188
        }
3434
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2189
    }
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2190
%}.
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2191
16320
dcb66fff0a89 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15836
diff changeset
  2192
    sflt := aFloat asShortFloat.
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2193
    1 to:4 do:[:srcIndex|
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2194
        self byteAt:index - 1 + srcIndex put:(sflt basicAt:srcIndex)
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2195
    ].
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2196
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2197
3446
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2198
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
  2199
    "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
  2200
     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
  2201
     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
  2202
     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
  2203
     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
  2204
     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
  2205
     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
  2206
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2207
    |sflt|
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2208
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
  2209
    msb == IsBigEndian ifTrue:[
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2210
        self floatAt:index put:aFloat.
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2211
        ^ self.
3446
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2212
    ].
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2213
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2214
    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
  2215
    1 to:4 do:[:srcIndex|
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2216
        self byteAt:(index - 1 + srcIndex) put:(sflt basicAt:(5-srcIndex))
3446
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2217
    ].
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2218
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2219
    "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
  2220
!
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2221
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2222
ieeeDoubleAt:index
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2223
    "retrieve the 8 bytes starting at index as a float.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2224
     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
  2225
     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
  2226
     number format."
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
    "
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2229
     currently, we assume that the machine's native number format is already
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2230
     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
  2231
     to an IBM 370 or old VAX etc.
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2232
     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
  2233
     no problem.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2234
    "
9258
83c940f349ea isIEEEFormat
Claus Gittinger <cg@exept.de>
parents: 9185
diff changeset
  2235
    Float isIEEEFormat ifFalse:[self error:'unsupported operation'].
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2236
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2237
    ^ self doubleAt:index
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2238
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2239
    "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
  2240
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2241
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2242
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
  2243
    "store the value of the argument, aFloat into the receiver
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2244
     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
  2245
     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
  2246
     (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
  2247
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2248
    "
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2249
     currently, we assume that the machine's native number format is already
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2250
     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
  2251
     to an IBM 370 or old VAX etc.
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2252
     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
  2253
     no problem.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2254
    "
9258
83c940f349ea isIEEEFormat
Claus Gittinger <cg@exept.de>
parents: 9185
diff changeset
  2255
    Float isIEEEFormat ifFalse:[self error:'unsupported operation'].
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2256
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2257
    ^ self doubleAt:index put:aFloat
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2258
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2259
    "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
  2260
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2261
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2262
ieeeFloatAt:index
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2263
    "retrieve the 4 bytes starting at index as a float.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2264
     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
  2265
     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
  2266
     number format."
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2267
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2268
    "
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2269
     currently, we assume that the machine's native number format is already
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2270
     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
  2271
     to an IBM 370 or old VAX etc.
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2272
     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
  2273
     no problem.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2274
    "
9258
83c940f349ea isIEEEFormat
Claus Gittinger <cg@exept.de>
parents: 9185
diff changeset
  2275
    ShortFloat isIEEEFormat ifFalse:[self error:'unsupported operation'].
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2276
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2277
    ^ self floatAt:index
3323
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
    "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
  2280
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2281
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2282
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
  2283
    "store the value of the argument, aFloat into the receiver
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2284
     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
  2285
     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
  2286
     (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
  2287
     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
  2288
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2289
    "
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2290
     currently, we assume that the machine's native number format is already
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2291
     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
  2292
     to an IBM 370 or old VAX etc.
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2293
     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
  2294
     no problem.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2295
    "
9258
83c940f349ea isIEEEFormat
Claus Gittinger <cg@exept.de>
parents: 9185
diff changeset
  2296
    ShortFloat isIEEEFormat ifFalse:[self error:'unsupported operation'].
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2297
16320
dcb66fff0a89 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15836
diff changeset
  2298
    self floatAt:index put:aFloat
3323
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
    "Created: / 5.3.1998 / 10:51:11 / stefan"
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2301
! !
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2302
13724
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  2303
!UninterpretedBytes methodsFor:'accessing-longlongs (64bit)'!
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2304
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2305
signedInt64At:index
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2306
    "return the 8-bytes starting at index as a signed Integer.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2307
     The index is a smalltalk index (i.e. 1-based).
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2308
     The value is retrieved in the machines natural byte order.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2309
     This may be worth a primitive."
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2310
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2311
    |w|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2312
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2313
    w := self unsignedInt64At:index bigEndian:IsBigEndian.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2314
    (w > (16r7FFFFFFFFFFFFFFF)) ifTrue:[
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2315
        ^ w - (16r10000000000000000)
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2316
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2317
    ^ w
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2318
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2319
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2320
     |b|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2321
     b := ByteArray new:4.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2322
     b unsignedInt64At:1 put:16rFFFFFFFFFFFFFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2323
     (b signedInt64At:1)
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2324
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2325
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2326
    "Modified: / 1.7.1996 / 21:11:28 / cg"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2327
    "Created: / 5.3.1998 / 14:40:05 / stefan"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2328
    "Modified: / 5.3.1998 / 14:58:32 / stefan"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2329
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2330
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2331
signedInt64At:index MSB:msb
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2332
    "return the 8-bytes starting at index as a signed Integer.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2333
     The index is a smalltalk index (i.e. 1-based).
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2334
     The value is retrieved in the given byte order.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2335
     This may be worth a primitive."
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2336
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2337
    |w|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2338
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2339
    w := self unsignedInt64At:index MSB:msb.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2340
    (w > (16r7FFFFFFFFFFFFFFF)) ifTrue:[
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2341
        ^ w - (16r10000000000000000)
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2342
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2343
    ^ w
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2344
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2345
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2346
     |b|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2347
     b := ByteArray new:4.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2348
     b unsignedLongLongAt:1 put:16rFFFFFFFFFFFFFFFF.
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2349
     (b longLongAt:1 msb:true)
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2350
    "
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
    "Modified: / 5.3.1998 / 12:06:28 / stefan"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2353
    "Created: / 5.3.1998 / 14:40:54 / stefan"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2354
    "Modified: / 9.5.1998 / 01:10:59 / cg"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2355
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2356
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2357
signedInt64At:byteIndex put:anInteger 
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2358
    "store a signed longLong (64bit) integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2359
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2360
     Same as #signedQuadWordAt:put: - for ST80 compatibility."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2361
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2362
    ^ self signedInt64At:byteIndex put:anInteger MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2363
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2364
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2365
signedInt64At:byteIndex put:anInteger MSB:msb
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2366
    "store a signed longLong (64bit) integer.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2367
     The index is a smalltalk index (i.e. 1-based).
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2368
     Same as #signedQuadWordAt:put: - for ST80 compatibility."
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2369
7813
3cc0b75d1684 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7812
diff changeset
  2370
    |v|
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2371
7813
3cc0b75d1684 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7812
diff changeset
  2372
    v := anInteger.
3cc0b75d1684 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7812
diff changeset
  2373
    anInteger < 0 ifTrue:[
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2374
        v := v + 16r10000000000000000
7813
3cc0b75d1684 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7812
diff changeset
  2375
    ].
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2376
    self unsignedInt64At:byteIndex put:v MSB:msb.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2377
    ^ anInteger
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2378
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2379
    "Created: / 9.5.1998 / 01:10:24 / cg"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2380
    "Modified: / 9.5.1998 / 01:13:34 / cg"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2381
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2382
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2383
unsignedInt64At:byteIndex
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2384
    "return the 8-bytes starting at index in the machine's native
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2385
     byteorder as an unsigned integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2386
     The index is a smalltalk index (i.e. 1-based)"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2387
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2388
   ^ self unsignedInt64At:byteIndex MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2389
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2390
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2391
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2392
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2393
     b := ByteArray withAll:#(1 2 3 4 5 6 7 8).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2394
     (b unsignedLongLongAt:1 bigEndian:false) printStringRadix:16
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2395
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2396
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2397
    "Modified: / 5.11.1996 / 14:06:21 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2398
    "Modified: / 5.3.1998 / 14:04:44 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2399
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2400
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2401
unsignedInt64At:byteIndex MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2402
    "return the 8-bytes starting at index as an unsigned integer.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2403
     The index is a smalltalk index (i.e. 1-based).
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2404
     Depending on msb, the value is retrieved MSB or LSB-first."
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2405
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2406
    |l
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2407
     bIdx  "{ Class: SmallInteger }"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2408
     delta "{ Class: SmallInteger }"|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2409
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2410
    l := LargeInteger basicNew numberOfDigits:8.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2411
    msb ifTrue:[
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2412
        bIdx := byteIndex + 7.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2413
        delta := -1
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2414
    ] ifFalse:[
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2415
        bIdx := byteIndex.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2416
        delta := 1
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2417
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2418
    1 to:8 do:[:i |
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2419
        l digitAt:i put:(self byteAt:bIdx).
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2420
        bIdx := bIdx + delta
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2421
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2422
    ^ l compressed
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
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2425
     |b|
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
     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
  2428
     (b unsignedLongLongAt:1 bigEndian:false) printStringRadix:16
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2429
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2430
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2431
    "Modified: / 5.11.1996 / 14:06:21 / cg"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2432
    "Modified: / 5.3.1998 / 14:04:44 / stefan"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2433
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2434
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2435
unsignedInt64At:byteIndex put:anInteger 
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2436
    "set the 8-bytes starting at index from the (unsigned) Integer value.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2437
     The index is a smalltalk index (i.e. 1-based).
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2438
     The value must be in the range 0 to 16rFFFFFFFFFFFFFFFF.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2439
     The value is stored in the machine's natural byteorder."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2440
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2441
    ^ self unsignedInt64At:byteIndex put:anInteger MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2442
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2443
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2444
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2445
     b := ByteArray new:10.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2446
     b unsignedInt64At:1 put:16r0807060504030201 MSB:false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2447
     b unsignedInt64At:1 put:16r0807060504030201 MSB:true.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2448
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2449
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2450
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2451
    "Created: / 5.3.1998 / 14:06:02 / stefan"
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2452
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2453
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2454
unsignedInt64At:byteIndex put:anInteger MSB:msb
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2455
    "set the 8-bytes starting at index from the (unsigned) Integer value.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2456
     The index is a smalltalk index (i.e. 1-based).
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2457
     The value must be in the range 0 to 16rFFFFFFFFFFFFFFFF.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2458
     Depending on msb, the value is stored MSB-first or LSB-first."
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2460
    |bIdx  "{ Class: SmallInteger }"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2461
     delta "{ Class: SmallInteger }"|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2462
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2463
    ((anInteger < 0) or:[anInteger > 16rFFFFFFFFFFFFFFFF]) ifTrue:[
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2464
        ^ self elementBoundsError:anInteger
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2465
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2466
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2467
    msb ifTrue:[
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2468
        bIdx := byteIndex + 7.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2469
        delta := -1
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2470
    ] ifFalse:[
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2471
        bIdx := byteIndex.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2472
        delta := 1
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2473
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2474
    1 to:8 do:[:i |
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2475
        self byteAt:bIdx put:(anInteger digitAt:i).
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2476
        bIdx := bIdx + delta.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2477
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2478
    ^ anInteger
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2479
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2480
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2481
     |b|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2482
     b := ByteArray new:8.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2483
     b unsignedLongLongAt:1 put:16r0807060504030201 bigEndian:false.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2484
     b inspect
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2485
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2486
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2487
    "Created: / 5.3.1998 / 14:06:02 / stefan"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2488
! !
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2489
13724
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  2490
!UninterpretedBytes methodsFor:'accessing-longs (32bit)'!
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2491
11850
ee84c01dc50d +pointerAt:
Claus Gittinger <cg@exept.de>
parents: 11756
diff changeset
  2492
pointerAt:index
ee84c01dc50d +pointerAt:
Claus Gittinger <cg@exept.de>
parents: 11756
diff changeset
  2493
    "get a pointer starting at index as ExternalAddress.
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2494
     The index is a smalltalk index (i.e. 1-based).
11850
ee84c01dc50d +pointerAt:
Claus Gittinger <cg@exept.de>
parents: 11756
diff changeset
  2495
     Only aligned accesses are allowed."
ee84c01dc50d +pointerAt:
Claus Gittinger <cg@exept.de>
parents: 11756
diff changeset
  2496
ee84c01dc50d +pointerAt:
Claus Gittinger <cg@exept.de>
parents: 11756
diff changeset
  2497
%{
ee84c01dc50d +pointerAt:
Claus Gittinger <cg@exept.de>
parents: 11756
diff changeset
  2498
    if (__isSmallInteger(index)) {
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2499
        unsigned char *cp;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2500
        INT sz;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2501
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2502
        __fetchBytePointerAndSize__(self, &cp, &sz);
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2503
        if (cp) {
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2504
            INT idx = __smallIntegerVal(index) - 1;
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2505
            char *pointer;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2506
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2507
            if ((idx >= 0) && ((idx+(sizeof(pointer)-1)) < sz)) {
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2508
                cp += idx;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2509
                /*
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2510
                 * aligned
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2511
                 */
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2512
                if (((INT)cp & (sizeof(pointer)-1)) == 0) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2513
                    pointer = ((char **)cp)[0];
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2514
                    RETURN (__MKEXTERNALADDRESS(pointer));
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2515
                } else {
15004
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  2516
#if 0
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2517
                    printf("cp UNALIGNED (%"_lx_")\n", (INT)cp);
15004
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  2518
#endif
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2519
                }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2520
            } else {
15004
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  2521
#if 0
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2522
                printf("idx(%"_ld_")+(sizeof(pointer)-1) (%d) >= sz (%"_ld_")\n",
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2523
                        idx, (int)(sizeof(pointer)-1), sz);
15004
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  2524
#endif
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2525
            }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2526
        } else {
15004
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  2527
#if 0
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2528
            printf("cp is NULL\n");
15004
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  2529
#endif
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2530
        }
15004
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  2531
    } else {
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  2532
#if 0
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2533
        printf("bad index\n");
15004
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  2534
#endif
11850
ee84c01dc50d +pointerAt:
Claus Gittinger <cg@exept.de>
parents: 11756
diff changeset
  2535
    }
ee84c01dc50d +pointerAt:
Claus Gittinger <cg@exept.de>
parents: 11756
diff changeset
  2536
bad:;
ee84c01dc50d +pointerAt:
Claus Gittinger <cg@exept.de>
parents: 11756
diff changeset
  2537
%}.
ee84c01dc50d +pointerAt:
Claus Gittinger <cg@exept.de>
parents: 11756
diff changeset
  2538
ee84c01dc50d +pointerAt:
Claus Gittinger <cg@exept.de>
parents: 11756
diff changeset
  2539
    self primitiveFailed.
ee84c01dc50d +pointerAt:
Claus Gittinger <cg@exept.de>
parents: 11756
diff changeset
  2540
ee84c01dc50d +pointerAt:
Claus Gittinger <cg@exept.de>
parents: 11756
diff changeset
  2541
    "
ee84c01dc50d +pointerAt:
Claus Gittinger <cg@exept.de>
parents: 11756
diff changeset
  2542
     |b|
ee84c01dc50d +pointerAt:
Claus Gittinger <cg@exept.de>
parents: 11756
diff changeset
  2543
     b := ByteArray new:(ExternalAddress pointerSize).
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2544
     b pointerAt:1 put:(ExternalAddress newAddress:16r12345678).
11850
ee84c01dc50d +pointerAt:
Claus Gittinger <cg@exept.de>
parents: 11756
diff changeset
  2545
     Transcript showCR:((b unsignedLongAt:1) printStringRadix:16).
ee84c01dc50d +pointerAt:
Claus Gittinger <cg@exept.de>
parents: 11756
diff changeset
  2546
     Transcript showCR:((b pointerAt:1)).
ee84c01dc50d +pointerAt:
Claus Gittinger <cg@exept.de>
parents: 11756
diff changeset
  2547
    "
ee84c01dc50d +pointerAt:
Claus Gittinger <cg@exept.de>
parents: 11756
diff changeset
  2548
!
ee84c01dc50d +pointerAt:
Claus Gittinger <cg@exept.de>
parents: 11756
diff changeset
  2549
6492
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  2550
pointerAt:index put:value
15004
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  2551
    "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
  2552
     The index is a smalltalk index (i.e. 1-based).
6492
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  2553
     Only aligned accesses are allowed.
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2554
     The value is either an ExternalAddress, ExternalBytes or an Integer"
6492
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  2555
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  2556
%{
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  2557
    OBJ *pointer;
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  2558
7814
c649ba9fd538 #pointerAt:put: now works for ExternalAddressLike objects
Stefan Vogel <sv@exept.de>
parents: 7813
diff changeset
  2559
    if (__isExternalAddressLike(value)) {
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2560
        pointer = __externalAddressVal(value);
7197
a68adb223592 also handle subclasses of ExternalBytes (Mapped..)
Claus Gittinger <cg@exept.de>
parents: 7193
diff changeset
  2561
    } else if (__isExternalBytesLike(value)) {
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2562
        pointer = __externalBytesVal(value);
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2563
        if (pointer == (OBJ *)0)
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2564
            pointer = 0;
11852
6732161ece56 changed #pointerAt:put:
Claus Gittinger <cg@exept.de>
parents: 11850
diff changeset
  2565
    } else if (value == nil) {
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2566
        pointer = 0;
15004
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  2567
    } else if (__isSmallInteger(value)) {
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2568
        pointer = (OBJ *)__intVal(value);
15004
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  2569
    } else {
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2570
        if ((pointer = (OBJ *)__unsignedLongIntVal(value)) == 0) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2571
            goto bad;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2572
        }
15004
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  2573
    }
6492
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  2574
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  2575
    if (__isSmallInteger(index)) {
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2576
        unsigned char *cp;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2577
        INT sz;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2578
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2579
        __fetchBytePointerAndSize__(self, &cp, &sz);
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2580
        if (cp) {
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2581
            INT idx = __smallIntegerVal(index) - 1;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2582
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2583
            if ((idx >= 0) && ((idx+(sizeof(pointer)-1)) < sz)) {
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2584
                cp += idx;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2585
                /*
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2586
                 * aligned
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2587
                 */
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2588
                if (((INT)cp & (sizeof(pointer)-1)) == 0) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2589
                    ((char **)cp)[0] = (char *) pointer;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2590
                    RETURN (value);
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2591
                }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2592
            }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2593
        }
6492
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  2594
    }
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  2595
bad:;
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  2596
%}.
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  2597
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  2598
    self primitiveFailed.
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  2599
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  2600
    "
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  2601
     |b|
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  2602
     b := ByteArray new:ExternalAddress pointerSize.
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2603
     b pointerAt:1 put:(ExternalAddress newAddress:16r12345678).
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2604
     (b unsignedLongAt:1) printStringRadix:16
6492
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  2605
    "
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  2606
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  2607
    "Modified: / 1.7.1996 / 21:11:39 / cg"
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  2608
    "Created: / 5.3.1998 / 10:57:18 / stefan"
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  2609
!
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  2610
19345
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2611
pointerValueAt:index
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2612
    "get a pointer value starting at index as unsigned integer.
19345
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2613
     The index is a smalltalk index (i.e. 1-based).
19502
194e575d35ad #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19461
diff changeset
  2614
     Only aligned accesses are allowed.
194e575d35ad #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19461
diff changeset
  2615
     This returns an int with sizeof the machines's native pointer (4 or 8 bytes)"
19345
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2616
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2617
%{
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2618
    if (__isSmallInteger(index)) {
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2619
        unsigned char *cp;
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2620
        INT sz;
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2621
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2622
        __fetchBytePointerAndSize__(self, &cp, &sz);
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2623
        if (cp) {
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2624
            INT idx = __smallIntegerVal(index) - 1;
19345
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2625
            char *pointer;
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2626
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2627
            if ((idx >= 0) && ((idx+(sizeof(pointer)-1)) < sz)) {
19345
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2628
                cp += idx;
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2629
                /*
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2630
                 * aligned
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2631
                 */
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2632
                if (((INT)cp & (sizeof(pointer)-1)) == 0) {
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2633
                    pointer = ((char **)cp)[0];
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2634
                    RETURN (__MKUINT((INT)(pointer)));
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2635
                } else {
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2636
#if 0
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2637
                    printf("cp UNALIGNED (%"_lx_")\n", (INT)cp);
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2638
#endif
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2639
                }
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2640
            } else {
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2641
#if 0
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2642
                printf("idx(%"_ld_")+(sizeof(pointer)-1) (%d) >= sz (%"_ld_")\n",
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2643
                        idx, (int)(sizeof(pointer)-1), sz);
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2644
#endif
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2645
            }
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2646
        } else {
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2647
#if 0
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2648
            printf("cp is NULL\n");
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2649
#endif
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2650
        }
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2651
    } else {
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2652
#if 0
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2653
        printf("bad index\n");
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2654
#endif
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2655
    }
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2656
bad:;
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2657
%}.
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2658
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2659
    self primitiveFailed.
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2660
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2661
    "
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2662
     |b|
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2663
     b := ByteArray new:(ExternalAddress pointerSize).
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2664
     b pointerAt:1 put:(ExternalAddress newAddress:16r12345678).
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2665
     Transcript showCR:((b unsignedLongAt:1) printStringRadix:16).
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2666
     Transcript showCR:((b pointerAt:1)).
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2667
     Transcript showCR:((b pointerValueAt:1)).
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2668
    "
19502
194e575d35ad #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19461
diff changeset
  2669
194e575d35ad #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19461
diff changeset
  2670
    "Modified (comment): / 30-03-2016 / 11:01:55 / cg"
19345
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2671
!
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2672
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2673
signedInt32At:byteIndex
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2674
    "return the 4-bytes starting at byteIndex as a signed Integer.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2675
     The index is a smalltalk index (i.e. 1-based).
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2676
     The value is retrieved in the machine's natural byte order,
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2677
     therefore, this should only be used for byte-data which is
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2678
     only used inside this machine.
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2679
     To setup binary data packets which are to be sent to other machines,
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2680
     or stored into a file, always use the corresponding xxx:MSB: method
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2681
     and specify a definite byteOrder."
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2682
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2683
    |w|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2684
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2685
%{
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2686
    /*
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2687
     * handle the most common cases fast ...
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2688
     */
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2689
    if (__isSmallInteger(byteIndex)) {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2690
        unsigned char *cp;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2691
        INT sz;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2692
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2693
        __fetchBytePointerAndSize__(self, &cp, &sz);
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2694
        if (cp) {
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2695
            INT idx = __intVal(byteIndex) - 1;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2696
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2697
            if ((idx >= 0) && ((idx+(4-1)) < sz)) {
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2698
                int iVal;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2699
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2700
                cp += idx;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2701
#if defined(__i386__)
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2702
                /*
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2703
                 * aligned or not, we don't care (i386 can do both)
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2704
                 */
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2705
                {
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2706
                    iVal = ((int *)cp)[0];
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2707
                    RETURN (__MKINT(iVal));
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2708
                }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2709
#else
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2710
# if defined(__x86_64__)
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2711
                /*
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2712
                 * aligned or not, we don't care (i386 can do both)
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2713
                 */
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2714
                {
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2715
                    iVal = ((int *)cp)[0];
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2716
                    RETURN (__mkSmallInteger(iVal));
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2717
                }
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2718
# else
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2719
                /*
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2720
                 * aligned ?
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2721
                 */
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2722
                if (((INT)cp & (sizeof(int)-1)) == 0) {
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2723
                    iVal = ((int *)cp)[0];
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2724
                } else {
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2725
#  ifdef __LSBFIRST__
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2726
                    iVal = cp[0] & 0xFF;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2727
                    iVal += (cp[1] & 0xFF)<<8;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2728
                    iVal += (cp[2] & 0xFF)<<16;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2729
                    iVal += (cp[3] & 0xFF)<<24;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2730
#  else
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2731
#   ifdef __MSBFIRST__
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2732
                    iVal = cp[0] & 0xFF;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2733
                    iVal = (iVal<<8)+(cp[1] & 0xFF);
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2734
                    iVal = (iVal<<8)+(cp[2] & 0xFF);
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2735
                    iVal = (iVal<<8)+(cp[3] & 0xFF);
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2736
#   else
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2737
                    {
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2738
                        union {
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2739
                            int i;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2740
                            char c[4];
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2741
                        } u;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2742
                        u.c[0] = cp[0]; 
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2743
                        u.c[1] = cp[1]; 
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2744
                        u.c[2] = cp[2]; 
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2745
                        u.c[3] = cp[3];
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2746
                        iVal = u.i;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2747
                    }
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2748
#   endif
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2749
#  endif
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2750
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2751
#  if __POINTER_SIZE__ == 8
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2752
                    RETURN (__mkSmallInteger(iVal));
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2753
#  else
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2754
                    RETURN (__MKINT(iVal));
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2755
#  endif
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2756
                }
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2757
# endif
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2758
#endif
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2759
            }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2760
        }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2761
    }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2762
%}.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2763
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2764
    ^ self signedInt32At:byteIndex MSB:IsBigEndian.
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2765
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2766
    "
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2767
     |b|
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2768
     b := ByteArray new:4.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2769
     b unsignedLongAt:1 put:16rFFFFFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2770
     (b longAt:1)
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2771
    "
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2772
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2773
    "Modified: / 1.7.1996 / 21:11:28 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2774
    "Modified: / 5.3.1998 / 12:06:28 / stefan"
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2775
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2776
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2777
signedInt32At:byteIndex MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2778
    "return the 4-bytes starting at byteIndex as a (signed) Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2779
     The byteIndex is a smalltalk index (i.e. 1-based).
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2780
     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
  2781
     LSB-first otherwise."
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2782
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2783
    |val
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2784
     ival "{ Class: SmallInteger }"
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2785
     i    "{ Class: SmallInteger }"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2786
     bHH  "{ Class: SmallInteger }"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2787
     bHL  "{ Class: SmallInteger }"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2788
     bLH  "{ Class: SmallInteger }"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2789
     bLL  "{ Class: SmallInteger }"|
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2790
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2791
%{
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2792
    /*
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2793
     * handle the most common cases fast ...
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2794
     */
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2795
    if (__isSmallInteger(byteIndex)) {
19047
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2796
        unsigned char *cp;
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2797
        INT sz;
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2798
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2799
        __fetchBytePointerAndSize__(self, &cp, &sz);
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2800
        if (cp) {
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2801
            INT idx = __intVal(byteIndex) - 1;
19047
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2802
            int iVal;
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2803
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2804
            cp += idx;
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2805
            if ((idx >= 0) && ((idx+(sizeof(int)-1)) < sz)) {
19047
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2806
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2807
                if (msb == true) {
8901
824a89d0b5c7 alpha64 vs. POINTER_SIZE cleanup
Claus Gittinger <cg@exept.de>
parents: 8893
diff changeset
  2808
#if defined(__MSBFIRST__)
19047
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2809
                    if (((INT)cp & (sizeof(int)-1))== 0) {
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2810
                        /*
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2811
                         * aligned
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2812
                         */
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2813
                        iVal = ((int *)cp)[0];
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2814
                    } else
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2815
#endif
19047
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2816
                    {
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2817
                        iVal = cp[0];
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2818
                        iVal = (iVal << 8) | cp[1];
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2819
                        iVal = (iVal << 8) | cp[2];
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2820
                        iVal = (iVal << 8) | cp[3];
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2821
                    }
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2822
                } else {
8901
824a89d0b5c7 alpha64 vs. POINTER_SIZE cleanup
Claus Gittinger <cg@exept.de>
parents: 8893
diff changeset
  2823
#if defined(__i386__) || (defined(UNALIGNED_FETCH_OK) && defined(__LSBFIRST__))
19047
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2824
                    /*
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2825
                     * aligned or not - we don't care
19047
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2826
                     * (i386 can fetch unaligned)
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2827
                     */
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2828
                    iVal = ((int *)cp)[0];
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2829
#else
8901
824a89d0b5c7 alpha64 vs. POINTER_SIZE cleanup
Claus Gittinger <cg@exept.de>
parents: 8893
diff changeset
  2830
# if defined(__LSBFIRST__)
19047
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2831
                    if (((INT)cp & (sizeof(int)-1))== 0) {
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2832
                        /*
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2833
                         * aligned
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2834
                         */
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2835
                        iVal = ((int *)cp)[0];
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2836
                    } else
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2837
# endif
19047
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2838
                    {
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2839
                        iVal = cp[3];
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2840
                        iVal = (iVal << 8) | cp[2];
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2841
                        iVal = (iVal << 8) | cp[1];
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2842
                        iVal = (iVal << 8) | cp[0];
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2843
                    }
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2844
#endif
19047
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2845
                }
8901
824a89d0b5c7 alpha64 vs. POINTER_SIZE cleanup
Claus Gittinger <cg@exept.de>
parents: 8893
diff changeset
  2846
#if __POINTER_SIZE__ == 8
19047
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2847
                RETURN (__mkSmallInteger(iVal));
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2848
#else
19047
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2849
                RETURN (__MKINT(iVal));
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2850
#endif
19047
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2851
            }
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2852
        }
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2853
    }
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2854
%}.
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2855
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2856
    val := self unsignedInt32At:byteIndex MSB:msb.
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2857
    (val > (16r7FFFFFFF)) ifTrue:[
19047
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2858
        ^ val - (16r100000000)
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2859
    ].
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2860
    ^ val
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2861
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2862
    "
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2863
     |b|
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2864
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2865
     b := ByteArray withAll:#(1 2 3 4).
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2866
     (b signedInt32At:1 MSB:true) printStringRadix:16.    
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2867
     (b signedInt32At:1 MSB:false) printStringRadix:16
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2868
    "
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2869
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2870
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2871
signedInt32At:byteIndex put:anInteger
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2872
    "set the 4-bytes starting at index from the signed Integer anInteger.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2873
     The index is a smalltalk index (i.e. 1-based).
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2874
     The integer is stored in the machine's natural byte order."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2875
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2876
    ^ self signedInt32At:byteIndex put:anInteger MSB:IsBigEndian
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2877
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2878
    "
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2879
     |b|
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2880
     b := ByteArray new:4.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2881
     b longAt:1 put:-1.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2882
     (b unsignedLongAt:1) printStringRadix:16
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2883
    "
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2884
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2885
    "Modified: / 1.7.1996 / 21:11:39 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2886
    "Created: / 5.3.1998 / 10:57:18 / stefan"
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2887
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2888
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2889
signedInt32At:byteIndex put:anInteger MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2890
    "set the 4-bytes starting at byteIndex from the signed Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2891
     The byteIndex is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2892
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2893
     This is the ST80 version of #signedDoubleWordAt:put:"
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2894
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2895
    |v|
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2896
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2897
%{
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2898
    /*
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2899
     * handle the most common case fast ...
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2900
     */
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2901
    if (__isSmallInteger(byteIndex)) {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2902
        unsigned char *cp;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2903
        INT sz;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2904
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2905
        __fetchBytePointerAndSize__(self, &cp, &sz);
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2906
        if (cp) {
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2907
            INT idx = __intVal(byteIndex) - 1;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2908
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2909
            if ((idx >= 0) && ((idx+3) < sz)) {
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2910
                cp += idx;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2911
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2912
                if (__isSmallInteger(anInteger)) {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2913
                    INT __v = __intVal(anInteger);
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2914
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2915
# if __POINTER_SIZE__ == 8
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2916
                    if ((__v < -0x80000000L) || (__v > 0x7FFFFFFF)) {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2917
                        goto badArg;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2918
                    }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2919
# endif
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2920
                    if (((INT)cp & 3) == 0) {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2921
                        /*
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2922
                         * aligned
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2923
                         */
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2924
                        if (
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2925
# ifdef __LSBFIRST__
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2926
                            (msb == false)
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2927
# else
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2928
#  ifdef __MSBFIRST__
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2929
                            (msb == true)
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2930
#  else
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2931
                            (0)
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2932
#  endif
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2933
# endif
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2934
                        ) {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2935
                            ((int *)cp)[0] = (int)__v;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2936
                            RETURN (anInteger);
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2937
                        }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2938
                    }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2939
                    if (msb == false) {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2940
                        cp[0] = __v & 0xFF;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2941
                        cp[1] = (__v>>8) & 0xFF;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2942
                        cp[2] = (__v>>16) & 0xFF;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2943
                        cp[3] = (__v>>24) & 0xFF;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2944
                    } else {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2945
                        cp[0] = (__v>>24) & 0xFF;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2946
                        cp[1] = (__v>>16) & 0xFF;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2947
                        cp[2] = (__v>>8) & 0xFF;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2948
                        cp[3] = __v & 0xFF;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2949
                    }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2950
                    RETURN (anInteger);
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2951
                }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2952
            }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2953
        }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2954
    }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2955
  badArg: ;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2956
%}.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2957
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2958
    anInteger >= 0 ifTrue:[
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2959
        v := anInteger
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2960
    ] ifFalse:[
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2961
        v := anInteger + 16r100000000
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2962
    ].
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2963
    self unsignedInt32At:byteIndex put:v MSB:msb.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2964
    ^ anInteger
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2965
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2966
    "
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2967
     |b|
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2968
     b := ByteArray new:4.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2969
     b longAt:1 put:-1.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2970
     (b unsignedLongAt:1) printStringRadix:16
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2971
    "
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2972
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2973
    "Modified: / 1.7.1996 / 21:11:39 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2974
    "Created: / 5.3.1998 / 10:57:18 / stefan"
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2975
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2976
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2977
unsignedInt32At:byteIndex
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2978
    "return the 4-bytes starting at index as an (unsigned) Integer.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2979
     The index is a smalltalk index (i.e. 1-based).
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2980
     The value is retrieved in the machine's natural byte order."
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2981
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2982
    ^ self unsignedInt32At:byteIndex MSB:IsBigEndian
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2983
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2984
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2985
     |b|
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2986
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2987
     b := ByteArray withAll:#(1 2 3 4).
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2988
     (b unsignedInt32At:1) printStringRadix:16      
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2989
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2990
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2991
    "Modified: / 5.3.1998 / 14:57:35 / stefan"
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2992
!
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2993
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2994
unsignedInt32At:byteIndex MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2995
    "return the 4-bytes starting at index as an (unsigned) Integer.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2996
     The index is a smalltalk index (i.e. 1-based).
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2997
     The value is retrieved MSB-first, if the msb-arg is true;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2998
     LSB-first otherwise."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2999
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3000
    |val
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3001
     ival "{ Class: SmallInteger }"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3002
     i    "{ Class: SmallInteger }"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3003
     bHH  "{ Class: SmallInteger }"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3004
     bHL  "{ Class: SmallInteger }"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3005
     bLH  "{ Class: SmallInteger }"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3006
     bLL  "{ Class: SmallInteger }"|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3007
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3008
%{
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3009
    /*
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3010
     * handle the most common cases fast ...
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3011
     */
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3012
    if (__isSmallInteger(byteIndex)) {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3013
        unsigned char *cp;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3014
        INT sz;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3015
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3016
        __fetchBytePointerAndSize__(self, &cp, &sz);
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3017
        if (cp) {
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3018
            INT idx = __intVal(byteIndex) - 1;
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3019
            unsigned int iVal;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3020
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3021
            if ((idx >= 0) && ((idx+(sizeof(int)-1)) < sz)) {
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3022
                cp += idx;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3023
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3024
                if (msb == true) {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3025
#if defined(__MSBFIRST__)
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3026
                    if (((INT)cp & (sizeof(int)-1))== 0) {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3027
                        /*
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3028
                         * aligned
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3029
                         */
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3030
                        iVal = ((unsigned int *)cp)[0];
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3031
                    } else
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3032
#endif
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3033
                    {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3034
                        iVal = cp[0];
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3035
                        iVal = (iVal << 8) | cp[1];
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3036
                        iVal = (iVal << 8) | cp[2];
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3037
                        iVal = (iVal << 8) | cp[3];
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3038
                    }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3039
                } else {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3040
#if defined(__i386__) || (defined(UNALIGNED_FETCH_OK) && defined(__LSBFIRST__))
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3041
                    /*
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3042
                     * aligned or not - we dont care
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3043
                     * (i386 can fetch unaligned)
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3044
                     */
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3045
                    iVal = ((unsigned int *)cp)[0];
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3046
#else
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3047
# if defined(__LSBFIRST__)
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3048
                    if (((INT)cp & (sizeof(int)-1))== 0) {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3049
                        /*
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3050
                         * aligned
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3051
                         */
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3052
                        iVal = ((unsigned int *)cp)[0];
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3053
                    } else
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3054
# endif
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3055
                    {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3056
                        iVal = cp[3];
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3057
                        iVal = (iVal << 8) | cp[2];
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3058
                        iVal = (iVal << 8) | cp[1];
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3059
                        iVal = (iVal << 8) | cp[0];
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3060
                    }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3061
#endif
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3062
                }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3063
#if __POINTER_SIZE__ == 8
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3064
                RETURN (__mkSmallInteger(iVal));
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3065
#else
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3066
                RETURN (__MKUINT(iVal));
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3067
#endif
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3068
            }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3069
        }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3070
    }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3071
%}.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3072
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3073
    "/ fallBack code - non ByteArray-like receiver
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3074
    "/ or funny byteIndex
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3075
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3076
    i := byteIndex.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3077
    msb ifFalse:[
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3078
        bLL := self byteAt:i.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3079
        bLH := self byteAt:(i+1).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3080
        bHL := self byteAt:(i+2).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3081
        bHH := self byteAt:(i+3).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3082
    ] ifTrue:[        
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3083
        bHH := self byteAt:i.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3084
        bHL := self byteAt:(i+1).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3085
        bLH := self byteAt:(i+2).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3086
        bLL := self byteAt:(i+3).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3087
    ].
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3088
    ival := (bHH bitShift:8) + bHL.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3089
    ival := (ival bitShift:8) + bLH.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3090
    val := (ival bitShift:8) + bLL.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3091
    ^ val
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3092
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3093
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3094
     |b|
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3095
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3096
     b := ByteArray withAll:#(1 2 3 4).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3097
     (b unsignedInt32At:1 MSB:true) printStringRadix:16.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3098
     (b unsignedInt32At:1 MSB:false) printStringRadix:16
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3099
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3100
!
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3101
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3102
unsignedInt32At:byteIndex put:anInteger
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3103
    "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
  3104
     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
  3105
     The value must be in the range 0 to 16rFFFFFFFF.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3106
     The value is stored in the machine's native byte order"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3107
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3108
    ^ self unsignedInt32At:byteIndex put:anInteger MSB:IsBigEndian
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3109
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3110
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3111
     |b|
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3112
     b := ByteArray new:8.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3113
     b doubleWordAt:1 put:16r04030201 MSB:true.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3114
     b doubleWordAt:5 put:16r04030201 MSB:false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3115
     b inspect
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3116
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3117
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3118
    "Modified: / 21.1.1998 / 17:43:34 / cg"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3119
    "Modified: / 5.3.1998 / 11:42:17 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3120
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3121
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3122
unsignedInt32At:byteIndex put:anInteger MSB:msb
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3123
    "set the 4-bytes starting at byteIndex from the unsigned Integer value.
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3124
     The byteIndex is a smalltalk index (i.e. 1-based).
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3125
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3126
     This is the ST80 version of #doubleWordAt:put:"
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3127
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3128
    |v i b1 b2 b3 b4|
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3129
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3130
%{
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3131
    /*
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3132
     * handle the most common case fast ...
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3133
     */
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3134
    if (__isSmallInteger(byteIndex)) {
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3135
        unsigned char *cp;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3136
        INT sz;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3137
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3138
        __fetchBytePointerAndSize__(self, &cp, &sz);
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3139
        if (cp) {
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3140
            INT idx = __intVal(byteIndex) - 1;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3141
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3142
            if ((idx >= 0) && ((idx+3) < sz)) {
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3143
                cp += idx;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3144
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3145
                if (__isSmallInteger(anInteger)) {
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3146
                    INT __v = __intVal(anInteger);
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3147
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3148
# if __POINTER_SIZE__ == 8
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3149
                    if ((__v < 0) || (__v > 0xFFFFFFFF)) {
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3150
                        goto badArg;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3151
                    }
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3152
# endif
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3153
                    if (((INT)cp & 3) == 0) {
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3154
                        /*
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3155
                         * aligned
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3156
                         */
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3157
                        if (
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3158
# ifdef __LSBFIRST__
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3159
                            (msb == false)
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3160
# else
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3161
#  ifdef __MSBFIRST__
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3162
                            (msb == true)
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3163
#  else
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3164
                            (0)
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3165
#  endif
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3166
# endif
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3167
                        ) {
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3168
                            ((int *)cp)[0] = (int)__v;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3169
                            RETURN (anInteger);
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3170
                        }
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3171
                    }
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3172
                    if (msb == false) {
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3173
                        cp[0] = __v & 0xFF;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3174
                        cp[1] = (__v>>8) & 0xFF;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3175
                        cp[2] = (__v>>16) & 0xFF;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3176
                        cp[3] = (__v>>24) & 0xFF;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3177
                    } else {
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3178
                        cp[0] = (__v>>24) & 0xFF;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3179
                        cp[1] = (__v>>16) & 0xFF;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3180
                        cp[2] = (__v>>8) & 0xFF;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3181
                        cp[3] = __v & 0xFF;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3182
                    }
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3183
                    RETURN (anInteger);
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3184
                }
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3185
            }
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3186
        }
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3187
    }
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3188
  badArg: ;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3189
%}.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3190
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3191
    ((anInteger < 0) or:[anInteger > 16rFFFFFFFF]) ifTrue:[
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3192
        ^ self elementBoundsError:anInteger
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3193
    ].
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3194
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3195
    i := byteIndex.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3196
    msb ifTrue:[
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3197
        b1 := (anInteger digitAt:4).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3198
        b2 := (anInteger digitAt:3).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3199
        b3 := (anInteger digitAt:2).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3200
        b4 := (anInteger digitAt:1).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3201
    ] ifFalse:[
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3202
        b1 := (anInteger digitAt:1).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3203
        b2 := (anInteger digitAt:2).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3204
        b3 := (anInteger digitAt:3).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3205
        b4 := (anInteger digitAt:4).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3206
    ].
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3207
    self byteAt:i     put:b1.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3208
    self byteAt:(i+1) put:b2.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3209
    self byteAt:(i+2) put:b3.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3210
    self byteAt:(i+3) put:b3.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3211
    ^ anInteger
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3212
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3213
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3214
     |b|
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3215
     b := ByteArray new:4.
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3216
     b signedInt32At:1 put:-1.
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3217
     (b unsignedInt32At:1) printStringRadix:16 
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3218
    "
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3219
    "
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3220
     |b|
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3221
     b := ByteArray new:4.
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3222
     b unsignedInt32At:1 put:16rFFFFFFFF.
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3223
     (b signedInt32At:1) 
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3224
    "
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3225
! !
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3226
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3227
!UninterpretedBytes methodsFor:'accessing-shorts (16bit)'!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3228
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3229
signedInt16At:byteIndex
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3230
    "return the 2-bytes starting at index as a signed Integer.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3231
     The index is a smalltalk index (i.e. 1-based).
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3232
     The value is retrieved in the machine's natural byte order."
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3233
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3234
    ^ (self unsignedInt16At:byteIndex) signExtendedShortValue
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3235
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3236
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3237
     |b|
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3238
     b := ByteArray new:2.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3239
     b wordAt:1 put:16rFFFF.
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3240
     b signedWordAt:1
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3241
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3242
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3243
    "Modified: 1.7.1996 / 21:14:38 / cg"
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3244
!
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3245
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3246
signedInt16At:byteIndex MSB:msb
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3247
    "return the 2-bytes starting at index as a signed Integer.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  3248
     The index is a smalltalk index (i.e. 1-based).
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3249
     The value is retrieved MSB (high 8 bits at lower index) if msb is true;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3250
     LSB-first (i.e. low 8-bits at lower byte index) if it's false.
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3251
     Notice: 
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3252
        the index is a byte index; thus, this allows for unaligned access to
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3253
        words on any boundary."
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3254
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3255
    |b1 "{ Class: SmallInteger }"
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3256
     b2 "{ Class: SmallInteger }"|
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3257
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3258
%{
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3259
    /*
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3260
     * handle the most common cases fast ...
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3261
     */
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3262
    if (__isSmallInteger(byteIndex)) {
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3263
        unsigned char *cp;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3264
        INT sz;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3265
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3266
        __fetchBytePointerAndSize__(self, &cp, &sz);
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3267
        if (cp) {
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3268
            INT idx = __intVal(byteIndex) - 1;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3269
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3270
            if ((idx >= 0) && ((idx+(2-1)) < sz)) {
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3271
                short sVal;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3272
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3273
                cp += idx;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3274
                if (msb == false) {
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3275
#if defined(__i386__) || (defined(__LSBFIRST__) && defined(UNALIGNED_FETCH_OK))
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3276
                    /*
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3277
                     * aligned or not, we dont care (i386 can do both)
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3278
                     */
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3279
                    sVal = ((short *)cp)[0];
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3280
#else
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3281
                    sVal = (cp[0] & 0xFF) | ((cp[1] & 0xFF) << 8);
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3282
#endif
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3283
                } else {
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3284
                    sVal = ((cp[0] & 0xFF) << 8) | (cp[1] & 0xFF);
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3285
                }
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3286
                RETURN (__mkSmallInteger(sVal));
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3287
            }
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3288
        }
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3289
    }
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3290
%}.
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3291
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3292
    b1 := self byteAt:byteIndex.
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3293
    b2 := self byteAt:(byteIndex + 1).
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3294
    msb ifTrue:[
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3295
        ^ ((b1 bitShift:8) + b2) signExtendedShortValue
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3296
    ].
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3297
    ^ ((b2 bitShift:8) + b1) signExtendedShortValue
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3298
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3299
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3300
signedInt16At:index put:anInteger
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3301
    "set the 2-bytes starting at index from the signed Integer value.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3302
     The index is a smalltalk index (i.e. 1-based).
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3303
     The stored value must be in the range -32768 .. +32676.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3304
     The value is stored in the machine's natural byte order."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3305
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3306
    ^ self signedInt16At:index put:anInteger MSB:IsBigEndian
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3307
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3308
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3309
     |b|
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3310
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3311
     b signedInt16At:1 put:-2.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3312
     b signedInt16At:3 put:-3.
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3313
     b inspect
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3314
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3315
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3316
    "Modified: 1.7.1996 / 21:12:13 / cg"
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3317
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3318
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3319
signedInt16At:byteIndex put:anInteger MSB:msb
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3320
    "set the 2-bytes starting at byteIndex from the signed integer value.
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3321
     The byteIndex is a smalltalk index (i.e. 1-based).
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3322
     The stored value must be in the range -32768 .. +32676.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3323
     The value is stored MSB-first, if the msb-arg is true;
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3324
     LSB-first otherwise."
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3325
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3326
%{  /* NOCONTEXT */
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3327
    /*
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3328
     * handle the most common case fast ...
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3329
     */
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3330
    if (__isSmallInteger(byteIndex)) {
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3331
        unsigned char *cp;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3332
        INT sz;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3333
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3334
        __fetchBytePointerAndSize__(self, &cp, &sz);
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3335
        if (cp) {
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3336
            INT idx = __intVal(byteIndex) - 1;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3337
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3338
            if ((idx >= 0) && ((idx+1) < sz)) {
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3339
                cp += idx;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3340
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3341
                if (__isSmallInteger(anInteger)) {
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3342
                    INT __v = __intVal(anInteger);
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3343
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3344
                    if ((__v < -0x8000L) || (__v > 0x7FFF)) {
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3345
                        goto badArg;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3346
                    }
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3347
                    if (msb == false) { 
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3348
#if defined(__i386__) || (defined(__LSBFIRST__) && defined(UNALIGNED_FETCH_OK))
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3349
                        ((short *)cp)[0] = (short)__v;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3350
#else
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3351
                        cp[0] = __v & 0xFF;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3352
                        cp[1] = (__v >> 8) & 0xFF;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3353
#endif
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3354
                    } else {        
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3355
                        cp[0] = (__v >> 8) & 0xFF;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3356
                        cp[1] = __v & 0xFF;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3357
                    }
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3358
                    RETURN (anInteger);
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3359
                }
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3360
            }
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3361
        }
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3362
    }
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3363
  badArg: ;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3364
%}.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3365
    anInteger >= 0 ifTrue:[
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3366
        self unsignedInt16At:byteIndex put:anInteger MSB:msb.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3367
    ] ifFalse:[
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3368
        self unsignedInt16At:byteIndex put:(16r10000 + anInteger) MSB:msb.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3369
    ].
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3370
    ^ anInteger
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3371
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3372
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3373
     |b|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3374
     b := ByteArray new:4.
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3375
     b signedInt16At:1 put:-1.
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3376
     b signedInt16At:3 put:-2.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3377
     b inspect
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3378
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3379
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3380
    "Modified: 1.7.1996 / 21:12:13 / cg"
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3381
!
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3382
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3383
unsignedInt16At:index
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3384
    "return the 2-bytes starting at index as an (unsigned) Integer.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  3385
     The index is a smalltalk index (i.e. 1-based).
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3386
     The value is retrieved in the machine's natural byte order"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3387
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3388
    ^ self unsignedInt16At:index MSB:IsBigEndian
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3389
!
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3390
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3391
unsignedInt16At:byteIndex MSB:msb
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3392
    "return the 2-bytes starting at index as an (unsigned) Integer.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  3393
     The index is a smalltalk index (i.e. 1-based).
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3394
     The value is retrieved MSB (high 8 bits at lower index) if msb is true;
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3395
     LSB-first (i.e. low 8-bits at lower byte index) if it's false.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3396
     Notice: 
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3397
        the index is a byte index; thus, this allows for unaligned access to
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3398
        words on any boundary."
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3399
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3400
    |b1 "{ Class: SmallInteger }"
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3401
     b2 "{ Class: SmallInteger }"|
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3402
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3403
%{
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3404
    /*
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3405
     * handle the most common cases fast ...
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3406
     */
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3407
    if (__isSmallInteger(byteIndex)) {
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3408
        unsigned char *cp;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3409
        INT sz;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3410
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3411
        __fetchBytePointerAndSize__(self, &cp, &sz);
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3412
        if (cp) {
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3413
            INT idx = __intVal(byteIndex) - 1;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3414
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3415
            if ((idx >= 0) && ((idx+(2-1)) < sz)) {
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3416
                int iVal;
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3417
printf("1\n");
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3418
                cp += idx;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3419
                if (msb == false) {
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3420
#if defined(__i386__) || (defined(__LSBFIRST__) && defined(UNALIGNED_FETCH_OK))
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3421
                    /*
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3422
                     * aligned or not, we dont care (i386 can do both)
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3423
                     */
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3424
                    iVal = ((unsigned short *)cp)[0];
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3425
#else
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3426
                    iVal = (cp[0] & 0xFF) | ((cp[1] & 0xFF) << 8);
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3427
#endif
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3428
                } else {
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3429
                    iVal = ((cp[0] & 0xFF) << 8) | (cp[1] & 0xFF);
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3430
                }
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3431
                RETURN (__mkSmallInteger(iVal));
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3432
            }
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3433
        }
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3434
    }
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3435
%}.
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3436
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3437
    b1 := self byteAt:byteIndex.
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3438
    b2 := self byteAt:(byteIndex + 1).
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3439
    msb ifTrue:[
19046
Claus Gittinger <cg@exept.de>
parents: 18969
diff changeset
  3440
        ^ (b1 bitShift:8) + b2
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3441
    ].
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3442
    ^ (b2 bitShift:8) + b1
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3443
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3444
    "
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3445
     #[ 16rFF 16r00 ] unsignedInt16At:1 MSB:true
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3446
     #[ 16rFF 16r00 ] unsignedInt16At:1 MSB:false
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3447
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3448
     #[ 16rFF 16r00 ] unsignedInt16At:2 MSB:true
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3449
     #[ 16rFF 16r00 ] unsignedInt16At:2 MSB:false
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3450
    "
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3451
!
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3452
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3453
unsignedInt16At:index put:anInteger
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3454
    "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
  3455
     The index is a smalltalk index (i.e. 1-based).
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3456
     The stored value must be in the range 0 .. 16rFFFF.
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3457
     The value is stored in the machine's natural byteorder."
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3458
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3459
    ^ self unsignedInt16At:index put:anInteger MSB:IsBigEndian
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3460
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3461
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3462
     |b|
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3463
     b := ByteArray new:4.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3464
     b unsignedInt16At:1 put:16r0102.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3465
     b unsignedInt16At:3 put:16r0304.
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3466
     b inspect
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3467
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3468
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3469
    "Created: / 5.3.1998 / 11:54:52 / stefan"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3470
    "Modified: / 5.3.1998 / 14:59:38 / stefan"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3471
!
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3472
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3473
unsignedInt16At:byteIndex put:anInteger MSB:msb
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3474
    "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
  3475
     The index is a smalltalk index (i.e. 1-based).
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3476
     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
  3477
     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
  3478
     lower index) if msb is false, MSB-first otherwise"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3479
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3480
    |b1 b2
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3481
     iVal "{ Class: SmallInteger }"|
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3482
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3483
%{  /* NOCONTEXT */
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3484
    /*
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3485
     * handle the most common case fast ...
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3486
     */
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3487
    if (__isSmallInteger(byteIndex)) {
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3488
        unsigned char *cp;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3489
        INT sz;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3490
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3491
        __fetchBytePointerAndSize__(self, &cp, &sz);
19404
Claus Gittinger <cg@exept.de>
parents: 19402
diff changeset
  3492
        // printf("cp=%"_lx_"\n", (INT)cp);
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3493
        if (cp) {
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3494
            INT idx = __intVal(byteIndex) - 1;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3495
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3496
            if ((idx >= 0) && ((idx+1) < sz)) {
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3497
                cp += idx;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3498
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3499
                if (__isSmallInteger(anInteger)) {
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3500
                    INT __v = __intVal(anInteger);
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3501
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3502
                    if (((unsigned INT)__v) > 0xFFFF) {
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3503
                        goto badArg;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3504
                    }
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3505
                    if (msb == false) { 
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3506
#if defined(__i386__) || (defined(__LSBFIRST__) && defined(UNALIGNED_FETCH_OK))
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3507
                        ((unsigned short *)cp)[0] = (unsigned short)__v;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3508
#else
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3509
                        cp[0] = __v & 0xFF;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3510
                        cp[1] = (__v >> 8) & 0xFF;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3511
#endif
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3512
                    } else {        
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3513
                        cp[0] = (__v >> 8) & 0xFF;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3514
                        cp[1] = __v & 0xFF;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3515
                    }
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3516
                    RETURN (anInteger);
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3517
                }
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3518
            }
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3519
        }
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3520
    }
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3521
  badArg: ;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3522
%}.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3523
    iVal := anInteger.
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3524
    ((iVal < 0) or:[iVal > 16rFFFF]) ifTrue:[
19046
Claus Gittinger <cg@exept.de>
parents: 18969
diff changeset
  3525
        ^ self elementBoundsError:iVal
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3526
    ].
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3527
    msb ifTrue:[
19046
Claus Gittinger <cg@exept.de>
parents: 18969
diff changeset
  3528
        b1 := ((iVal bitShift:-8) bitAnd:16rFF).
Claus Gittinger <cg@exept.de>
parents: 18969
diff changeset
  3529
        b2 := (iVal bitAnd:16rFF).
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3530
    ] ifFalse:[
19046
Claus Gittinger <cg@exept.de>
parents: 18969
diff changeset
  3531
        b1 := (iVal bitAnd:16rFF).
Claus Gittinger <cg@exept.de>
parents: 18969
diff changeset
  3532
        b2 := ((iVal bitShift:-8) bitAnd:16rFF).
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3533
    ].
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3534
    self byteAt:byteIndex   put:b1.
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3535
    self byteAt:byteIndex+1 put:b2.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3536
    ^ anInteger
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3537
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3538
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3539
     |b|
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3540
     b := ByteArray new:8.
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3541
     b unsignedInt16At:1 put:16r0102 MSB:false.
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3542
     b unsignedInt16At:3 put:16r0304 MSB:false.
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3543
     b unsignedInt16At:5 put:16r0102 MSB:true.
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3544
     b unsignedInt16At:7 put:16r0304 MSB:true.
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3545
     b inspect
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3546
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3547
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3548
    "Modified: / 21.1.1998 / 17:48:15 / cg"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3549
    "Modified: / 5.3.1998 / 11:52:28 / stefan"
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3550
! !
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3551
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3552
!UninterpretedBytes methodsFor:'accessing-strings'!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3553
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3554
stringAt:index
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3555
    "return a string starting at index up to the 0-byte.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3556
     The index is a smalltalk index (i.e. 1-based)."
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3557
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3558
    |stream i "{ Class: SmallInteger }" c|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3559
10676
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  3560
    stream := WriteStream on:(String new:40).
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3561
    i := index.
10676
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  3562
    [(c := self byteAt:i) ~~ 0] whileTrue:[
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3563
        stream nextPut:(Character value:c).
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3564
        i := i + 1.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3565
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3566
    ^ stream contents
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3567
10676
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  3568
    "
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3569
      #[71 72 73 74 75 76 77 0] stringAt:1
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3570
      #[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
  3571
      '1234567890' stringAt:2
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  3572
    "
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3573
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3574
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3575
stringAt:index put:aString
19196
1db38251aeb2 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19101
diff changeset
  3576
    "copy aString to the receiver, starting at index up to
7815
6bd3a60a6f0c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7814
diff changeset
  3577
     (and including) the 0-byte (which is always written).
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3578
     The index is a smalltalk index (i.e. 1-based)."
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3579
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3580
    |i "{ Class: SmallInteger }"|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3581
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3582
    i := index.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3583
    aString do:[:aChar |
19196
1db38251aeb2 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19101
diff changeset
  3584
        self byteAt:i put:aChar codePoint.
1db38251aeb2 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19101
diff changeset
  3585
        i := i + 1.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3586
    ].
10676
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  3587
    self byteAt:i put:0.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3588
    ^ aString
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3589
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3590
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3591
     |bytes|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3592
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3593
     bytes := ExternalBytes new:10.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3594
     bytes stringAt:1 put:'hello'.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3595
     1 to:bytes size do:[:i |
19196
1db38251aeb2 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19101
diff changeset
  3596
        Transcript showCR:(bytes at:i)
10676
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  3597
     ].
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  3598
    "
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  3599
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  3600
    "
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  3601
     (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
  3602
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3603
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3604
    "Created: / 21.1.1998 / 17:45:02 / cg"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3605
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3606
7812
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  3607
stringAt:index put:aString size:maxSize
19196
1db38251aeb2 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19101
diff changeset
  3608
    "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
  3609
     or (and including) the 0-byte, whichever is encountered first.
7815
6bd3a60a6f0c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7814
diff changeset
  3610
     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
  3611
     The index is a smalltalk index (i.e. 1-based)."
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  3612
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  3613
    |remaining "{ Class: SmallInteger }"
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  3614
     i         "{ Class: SmallInteger }"|
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  3615
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  3616
    remaining := maxSize.
7816
827f1cf51862 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7815
diff changeset
  3617
    remaining <= 0 ifTrue:[^ aString].
7812
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  3618
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  3619
    i := index.
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  3620
    aString do:[:aChar |
19196
1db38251aeb2 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19101
diff changeset
  3621
        self byteAt:i put:aChar codePoint.
1db38251aeb2 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19101
diff changeset
  3622
        i := i + 1.
1db38251aeb2 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19101
diff changeset
  3623
        remaining := remaining - 1.
1db38251aeb2 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19101
diff changeset
  3624
        remaining <= 0 ifTrue:[^ aString].
7812
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  3625
    ].
10676
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  3626
    self byteAt:i put:0.
7812
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  3627
    ^ aString
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  3628
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  3629
    "
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  3630
     |bytes|
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  3631
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  3632
     bytes := ExternalBytes new:10.
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  3633
     bytes stringAt:1 put:'hello' size:3.
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  3634
     1 to:bytes size do:[:i |
19196
1db38251aeb2 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19101
diff changeset
  3635
        Transcript showCR:(bytes at:i)
7812
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  3636
     ]
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  3637
    "
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  3638
    "
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  3639
     |bytes|
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  3640
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  3641
     bytes := ByteArray new:10 withAll:16rFF.
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  3642
     bytes stringAt:1 put:'he' size:3.
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  3643
     1 to:bytes size do:[:i |
19196
1db38251aeb2 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19101
diff changeset
  3644
        Transcript showCR:(bytes at:i)
7812
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  3645
     ]
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  3646
    "
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  3647
10676
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  3648
    "
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  3649
     (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
  3650
    "
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  3651
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  3652
7812
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  3653
    "Created: / 21.1.1998 / 17:45:02 / cg"
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  3654
!
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  3655
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3656
stringAt:index size:maxSize
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3657
    "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
  3658
     The index is a smalltalk index (i.e. 1-based)."
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3659
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3660
    |stream c
10676
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  3661
     max "{ Class: SmallInteger }"
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  3662
     start "{ Class: SmallInteger }"|
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3663
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3664
    stream := WriteStream on:(String new:maxSize).
10676
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  3665
    start := index.
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  3666
    max := start + maxSize - 1.
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  3667
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  3668
    start to:max do:[:eachIndex|
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3669
        c := self byteAt:eachIndex.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3670
        c == 0 ifTrue:[
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3671
            ^ stream contents
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3672
        ].
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3673
        stream nextPut:(Character value:c).
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3674
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3675
    ^ stream contents
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3676
10676
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  3677
    "
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  3678
      #[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
  3679
      #[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
  3680
      '1234567890' stringAt:2 size:6
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  3681
    "
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3682
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3683
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3684
zeroByteStringAt:index maximumSize:count
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3685
    "extract a zeroByte-delimited string, given initial index and
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  3686
     maximum number of characters (bytes).
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  3687
     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
  3688
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3689
    |bytes endIndex idx|
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3690
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3691
    endIndex := self indexOf:0 startingAt:index.
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3692
    endIndex == 0 ifTrue:[
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3693
        endIndex := self size + 1
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3694
    ].
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3695
    endIndex := (endIndex min: (index + count)) - 1.
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3696
    bytes := self copyFrom:index to:endIndex.
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3697
    ^ bytes asString
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3698
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3699
    "
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3700
     #[ 1 2 3 4 5 6 7 8 ] zeroByteStringAt:2 maximumSize:10
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3701
     #[ 1 2 3 4 5 0 6 7 8 ] zeroByteStringAt:2 maximumSize:10
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3702
     #[ 1 2 3 4 5 0 6 7 8 ] zeroByteStringAt:2 maximumSize:3
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3703
     #[ 1 2 3 4 5 0 6 7 8 ] zeroByteStringAt:2 maximumSize:4
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3704
    "
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3705
! !
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3706
12951
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  3707
!UninterpretedBytes methodsFor:'converting'!
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  3708
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  3709
asExternalBytes
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  3710
    |sz bytes|
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  3711
14142
7a769e54130d changed:
Stefan Vogel <sv@exept.de>
parents: 14132
diff changeset
  3712
    sz := self byteSize.
12951
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  3713
    bytes := ExternalBytes unprotectedNew:sz.
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  3714
    bytes replaceBytesFrom:1 to:sz with:self startingAt:1.
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  3715
    ^ bytes
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  3716
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  3717
    "
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  3718
      #[1 2 3 4 5 6 7] asExternalBytes
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  3719
      'Hello World' asExternalBytes
14142
7a769e54130d changed:
Stefan Vogel <sv@exept.de>
parents: 14132
diff changeset
  3720
      'Hello World' asUnicodeString asExternalBytes
12951
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  3721
    "
14132
debafd18f04b added: #asUUID
Stefan Vogel <sv@exept.de>
parents: 14131
diff changeset
  3722
!
debafd18f04b added: #asUUID
Stefan Vogel <sv@exept.de>
parents: 14131
diff changeset
  3723
14155
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  3724
asExternalBytesUnprotected
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  3725
    "Like asExternalBytes, but does not register the bytes so
15836
cdf0d7258f9e class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15717
diff changeset
  3726
     bytes are GARBAGE-COLLECTED."
14155
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  3727
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  3728
    |bytes sz|
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  3729
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  3730
    sz := self byteSize.
15836
cdf0d7258f9e class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15717
diff changeset
  3731
    bytes := ExternalBytes unprotectedNew:sz.
14155
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  3732
    bytes replaceFrom:1 to:sz with:self startingAt:1.
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  3733
    ^ bytes
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  3734
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  3735
    "
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  3736
     |x|
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  3737
     x := 'fooBar' asExternalBytesUnprotected.
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  3738
     ObjectMemory garbageCollect
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  3739
    "
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  3740
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  3741
    "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
  3742
    "Modified: / 30-11-2013 / 11:42:21 / cg"
14155
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  3743
!
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  3744
18600
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  3745
asSingleByteString
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  3746
    "return the receiver converted to a 'normal' string.
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  3747
     Raises an error if unrepresentable characters are encountered.
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  3748
     See also: asSingleByteStringIfPossible and asSingleByteStringReplaceInvalidWith:"
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  3749
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  3750
    ^ String fromString:self
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  3751
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  3752
    "
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  3753
     #[60 61 62 63] asSingleByteString
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3754
     #[60 61 62 63] asExternalBytes  asSingleByteString
18969
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  3755
     #[67 68 69 70] asIntegerArray asSingleByteString
18600
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  3756
     (Unicode16String with:(Character value:16rFF)) asSingleByteString
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  3757
     (Unicode16String with:(Character value:16rFFFF)) asSingleByteString
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  3758
    "
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  3759
!
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  3760
18969
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  3761
asSingleByteStringIfPossible
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  3762
    "if possible, return the receiver converted to a 'normal' string.
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  3763
     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
  3764
     If not possible, the (wideString) receiver is returned."
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  3765
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  3766
    self containsNon8BitElements ifTrue:[^ self asString].
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  3767
    ^ self asSingleByteString.
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  3768
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  3769
    "
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  3770
     #[67 68 69 70] asSingleByteStringIfPossible
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  3771
     #[67 68 69 70] asIntegerArray asSingleByteStringIfPossible
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  3772
     'hello' asUnicodeString asSingleByteStringIfPossible
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  3773
    "
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  3774
!
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  3775
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3776
asString
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3777
    "speed up string conversions"
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3778
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3779
    |size cls|
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3780
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3781
    cls := self class.
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3782
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3783
    (cls == ByteArray or:[cls == ImmutableByteArray or:[cls == ExternalBytes]]) ifTrue:[
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3784
        size := self size.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3785
        ^ (String uninitializedNew:size) replaceBytesFrom:1 to:size with:self startingAt:1.
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3786
    ].
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3787
    ^ super asString.
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3788
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3789
    "
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3790
      #[16r41 16r42 16r43] asString
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3791
      #[16r41 16r42 16r43] asExternalBytes asString
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3792
    "
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3793
!
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3794
14132
debafd18f04b added: #asUUID
Stefan Vogel <sv@exept.de>
parents: 14131
diff changeset
  3795
asUUID
debafd18f04b added: #asUUID
Stefan Vogel <sv@exept.de>
parents: 14131
diff changeset
  3796
    ^ UUID fromBytes:self
12951
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  3797
! !
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  3798
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3799
!UninterpretedBytes methodsFor:'encoding & decoding'!
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3800
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3801
utf8Decoded
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3802
    "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
  3803
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3804
    ^ CharacterArray decodeFromUTF8:self.
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3805
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3806
    "
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3807
     #[16rC8 16rA0] utf8Decoded
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3808
     #[16rC8 16rA0] asString utf8Decoded
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3809
     #[16rC8 16rA0] asExternalBytes utf8Decoded
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3810
     (Character value:16r220) utf8Encoded utf8Decoded
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3811
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3812
     (Character value:16r800) utf8Encoded
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3813
     (Character value:16r220) utf8Encoded utf8Decoded
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3814
    "
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3815
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3816
    "test:
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3817
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3818
      |utf8Encoding original readBack|
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3819
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3820
      1 to:16rFFFF do:[:ascii |
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3821
        original := (Character value:ascii) asString.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3822
        utf8Encoding := original utf8Encoded.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3823
        readBack := utf8Encoding utf8Decoded.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3824
        readBack = original ifFalse:[
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3825
            self halt
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3826
        ]
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3827
      ]
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3828
    "
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3829
!
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3830
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3831
utf8DecodedWithTwoByteCharactersReplacedBy:replacementCharacter
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3832
    "Interpreting myself as an UTF-8 representation, decode and return
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3833
     the decoded string. Suppress all 2-byte (above 16rFF) characters,
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3834
     and replace them with replacementCharacter"
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3835
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3836
    |in out c|
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3837
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3838
    self containsNon7BitAscii ifFalse:[
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3839
        ^ self asSingleByteString
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3840
    ].
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3841
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3842
    out := WriteStream on:(String uninitializedNew:self size * 3 // 2).
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3843
    in := self readStream.
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3844
    [in atEnd] whileFalse:[
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3845
        c := Character utf8DecodeFrom:in.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3846
        c codePoint > 16rFF ifTrue:[
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3847
            c := replacementCharacter
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3848
        ].
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3849
        out nextPut:c.
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3850
    ].
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3851
    ^ out contents
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3852
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3853
    "
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3854
     (Character value:16r220) utf8Encoded
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3855
        utf8DecodedWithTwoByteCharactersReplacedBy:(Character space)
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3856
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3857
     (Character value:16r220) utf8Encoded asExternalBytes copyButLast
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3858
        utf8DecodedWithTwoByteCharactersReplacedBy:(Character space)
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3859
    "
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3860
! !
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  3861
4782
04a2ea1ad3a5 added replaceBytes...
Claus Gittinger <cg@exept.de>
parents: 4530
diff changeset
  3862
!UninterpretedBytes methodsFor:'filling & replacing'!
04a2ea1ad3a5 added replaceBytes...
Claus Gittinger <cg@exept.de>
parents: 4530
diff changeset
  3863
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3864
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
  3865
    "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
  3866
     like collection.
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3867
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3868
     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
  3869
     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
  3870
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3871
%{  /* NOCONTEXT */
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3872
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3873
    int nIndex, repNIndex;
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3874
    int startIndex, stopIndex;
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3875
    REGISTER unsigned char *src;
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3876
    REGISTER int repStartIndex;
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3877
    int repStopIndex, count;
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3878
    REGISTER unsigned char *dst;
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3879
    OBJ cls;
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3880
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3881
#ifndef NO_PRIM_BYTEARR
14082
8ee1315d35eb Revert to 1.81
Stefan Vogel <sv@exept.de>
parents: 14081
diff changeset
  3882
    if ((__isBytes(aCollection) || __isExternalBytesLike(aCollection))
14142
7a769e54130d changed:
Stefan Vogel <sv@exept.de>
parents: 14132
diff changeset
  3883
     && (__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
  3884
     && __bothSmallInteger(start, stop)
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3885
     && __isSmallInteger(repStart)) {
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3886
        startIndex = __intVal(start) - 1;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3887
        if (startIndex >= 0) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3888
            dst = (__ByteArrayInstPtr(self)->ba_element) + startIndex;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3889
            nIndex = __byteArraySize(self);
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3890
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3891
            if ((cls = __qClass(self)) != @global(ByteArray)) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3892
                int nInst;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3893
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3894
                nInst = __OBJS2BYTES__(__intVal(__ClassInstPtr(cls)->c_ninstvars));
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3895
                dst += nInst;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3896
                nIndex -= nInst;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3897
            }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3898
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3899
            stopIndex = __intVal(stop) - 1;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3900
            count = stopIndex - startIndex + 1;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3901
            if (count == 0) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3902
                RETURN ( self );
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3903
            }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3904
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3905
            if ((count > 0) && (stopIndex < nIndex)) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3906
                repStartIndex = __intVal(repStart) - 1;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3907
                if (repStartIndex >= 0) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3908
                    if (__isExternalBytesLike(aCollection)) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3909
                        OBJ sz;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3910
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3911
                        src = __externalAddressVal(aCollection);
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3912
                        if (src == 0) goto fallBack;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3913
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3914
                        sz = __externalBytesSize(aCollection);
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3915
                        if (__isSmallInteger(sz)) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3916
                            repNIndex = __smallIntegerVal(sz);
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3917
                        } else {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3918
                            repNIndex = repStopIndex+1; /* always enough */
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3919
                        }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3920
                        src = src + repStartIndex;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3921
                    } else {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3922
                        if (__isStringLike(aCollection)) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3923
                            repNIndex = __stringSize(aCollection);
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3924
                        } else {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3925
                            repNIndex = __qSize(aCollection) - OHDR_SIZE;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3926
                        }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3927
                        src = (__ByteArrayInstPtr(aCollection)->ba_element) + repStartIndex;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3928
                        if ((cls = __qClass(aCollection)) != @global(ByteArray)) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3929
                            int nInst;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3930
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3931
                            nInst = __OBJS2BYTES__(__intVal(__ClassInstPtr(cls)->c_ninstvars));
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3932
                            src += nInst;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3933
                            repNIndex -= nInst;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3934
                        }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3935
                    }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3936
                    repStopIndex = repStartIndex + (stopIndex - startIndex);
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3937
                    if (repStopIndex < repNIndex) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3938
                        if (aCollection == self) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3939
                            /* take care of overlapping copy */
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3940
                            if (src < dst) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3941
                                /* must do a reverse copy */
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3942
                                src += count;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3943
                                dst += count;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3944
                                while (count-- > 0) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3945
                                    *--dst = *--src;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3946
                                }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3947
                                RETURN ( self );
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3948
                            }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3949
                        }
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3950
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3951
# ifdef bcopy4
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3952
                        if (((unsigned INT)src & 3) == ((unsigned INT)dst & 3)) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3953
                            int nW;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3954
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3955
                            /* copy unaligned part */
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3956
                            while (count && ((unsigned INT)src & 3)) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3957
                                *dst++ = *src++;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3958
                                count--;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3959
                            }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3960
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3961
                            if (count > 0) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3962
                                /* copy aligned part */
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3963
                                nW = count >> 2;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3964
                                bcopy4(src, dst, nW);
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3965
                                if ((count = count & 3) != 0) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3966
                                    /* copy any remaining part */
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3967
                                    src += (nW<<2);
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3968
                                    dst += (nW<<2);
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3969
                                    while (count--) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3970
                                        *dst++ = *src++;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3971
                                    }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3972
                                }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3973
                            }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3974
                            RETURN ( self );
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3975
                        }
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3976
# else
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3977
#  if __POINTER_SIZE__ == 8
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3978
                        if (((unsigned INT)src & 7) == ((unsigned INT)dst & 7)) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3979
                            /* copy unaligned part */
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3980
                            while (count && ((unsigned INT)src & 7)) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3981
                                *dst++ = *src++;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3982
                                count--;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3983
                            }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3984
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3985
                            /* copy aligned part */
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3986
                            while (count >= 8) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3987
                                ((unsigned INT *)dst)[0] = ((unsigned INT *)src)[0];
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3988
                                dst += 8;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3989
                                src += 8;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3990
                                count -= 8;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3991
                            }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3992
                            while (count--) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3993
                                *dst++ = *src++;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3994
                            }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3995
                            RETURN ( self );
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3996
                        }
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3997
#  endif /* 64bit */
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3998
# endif /* bcopy4 */
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  3999
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4000
# ifdef FAST_MEMCPY
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4001
                        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
  4002
# else
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4003
#  ifdef __UNROLL_LOOPS__
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4004
                        while (count >= 8) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4005
                            dst[0] = src[0]; dst[1] = src[1];
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4006
                            dst[2] = src[2]; dst[3] = src[3];
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4007
                            dst[4] = src[4]; dst[5] = src[5];
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4008
                            dst[6] = src[6]; dst[7] = src[7];
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4009
                            dst += 8; src += 8;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4010
                            count -= 8;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4011
                        }
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4012
#  endif /* __UNROLL_LOOPS__ */
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4013
                        while (count-- > 0) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4014
                            *dst++ = *src++;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4015
                        }
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4016
# endif
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4017
                        RETURN ( self );
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4018
                    }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4019
                }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4020
            }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4021
        }
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4022
    }
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4023
fallBack: ;
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4024
#endif
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4025
%}.
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4026
    "
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4027
     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
  4028
     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
  4029
    "
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4030
    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
  4031
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4032
    "
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4033
     #[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16]
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4034
        copy
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4035
            replaceFrom:1 to:8
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4036
            with:#[10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160]
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4037
            startingAt:1
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4038
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4039
     #[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16]
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4040
        copy
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4041
            replaceFrom:3 to:10
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4042
            with:#[10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160]
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4043
            startingAt:1
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4044
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4045
     #[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16]
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4046
        copy
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4047
            replaceFrom:3 to:4
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4048
            with:#[10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160]
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4049
            startingAt:1
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4050
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4051
     #[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16]
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4052
        copy
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4053
            replaceFrom:0 to:9
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4054
            with:#[10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160]
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4055
            startingAt:1
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4056
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4057
     #[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16]
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4058
        copy
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4059
            replaceFrom:1 to:10
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4060
            with:#[10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160]
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4061
            startingAt:0
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4062
    "
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4063
!
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4064
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4065
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
  4066
    "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
  4067
     byte-array-like.
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4068
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4069
     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
  4070
     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
  4071
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4072
    ^ self
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4073
        replaceBytesFrom:startIndex
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4074
        to:(startIndex + replacementCollection size - repStartIndex)
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4075
        with:replacementCollection
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4076
        startingAt:repStartIndex
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4077
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4078
    "
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4079
     args:    startIndex            : <integer>
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4080
              replacementCollection : <collection of <bytes> >
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4081
              repStartIndex         : <integer>
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4082
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4083
     returns: self
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4084
    "
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4085
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4086
    "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
  4087
    "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
  4088
!
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4089
13902
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4090
replaceBytesWith:replacementCollection
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4091
    "replace elements from another collection, which must be byte-array-like.
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4092
     Replace stops at whichever collection is smaller.
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4093
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4094
     Notice: This operation modifies the receiver, NOT a copy;
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4095
     therefore the change may affect all others referencing the receiver."
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4096
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4097
    ^ self
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4098
        replaceBytesFrom:1
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4099
        to:(replacementCollection size min:self size)
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4100
        with:replacementCollection
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4101
        startingAt:1
13902
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4102
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4103
    "
15004
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  4104
     (ByteArray new:10) replaceBytesWith:'hello'
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  4105
     (ByteArray new:10) replaceBytesWith:'hello world bla bla bla'
13902
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4106
    "
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4107
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4108
    "Created: / 09-01-2012 / 16:18:10 / cg"
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4109
!
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4110
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4111
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
  4112
    "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
  4113
     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
  4114
     Return the receiver.
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4115
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4116
     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
  4117
     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
  4118
14131
3b0cb7751a71 changed: #replaceFrom:to:with:startingAt:
Claus Gittinger <cg@exept.de>
parents: 14082
diff changeset
  4119
    self class isBytes ifTrue:[
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4120
        ((aCollection class == self class)
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4121
         or:[aCollection isByteCollection]) ifTrue:[
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4122
            ^ self replaceBytesFrom:startIndex to:stopIndex with:aCollection startingAt:repStartIndex
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4123
        ].
7252
82cd08881a2a abstract replaceBytes fallback is required (lead to recursion)
Claus Gittinger <cg@exept.de>
parents: 7218
diff changeset
  4124
    ].
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4125
    ^ 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
  4126
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4127
    "
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4128
     args:    startIndex            : <integer>
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4129
              stopIndex             : <integer>
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4130
              replacementCollection : <collection of <bytes> >
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4131
              repStartIndex         : <integer>
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4132
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4133
     returns: self
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4134
    "
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4135
14131
3b0cb7751a71 changed: #replaceFrom:to:with:startingAt:
Claus Gittinger <cg@exept.de>
parents: 14082
diff changeset
  4136
    "Modified: / 08-05-2012 / 13:23:27 / cg"
4782
04a2ea1ad3a5 added replaceBytes...
Claus Gittinger <cg@exept.de>
parents: 4530
diff changeset
  4137
! !
04a2ea1ad3a5 added replaceBytes...
Claus Gittinger <cg@exept.de>
parents: 4530
diff changeset
  4138
12757
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4139
!UninterpretedBytes methodsFor:'hashing'!
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4140
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4141
computeXorHashFrom:startIndex to:endIndex
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4142
    "compute and answer the SmallInteger-Hash of the bytes
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4143
     from startIndex to endIndex.
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4144
     If endindex = 0 or endIndex > size, hash up the size.
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4145
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4146
     NOTE: startIndex and endIndex are only hints about what should be hashed.
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4147
           In fact, more bytes could be involved in hashing.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4148
           SO ARRAYS MUST BE EQUAL TO HASH TO THE SAME VALUE"
12757
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4149
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4150
    |w|
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4151
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4152
%{
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4153
    if (__bothSmallInteger(startIndex, endIndex)) {
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4154
        unsigned char *cp;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4155
        INT sz;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4156
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4157
        __fetchBytePointerAndSize__(self, &cp, &sz);
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4158
        if (cp) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4159
            INT sidx = ((unsigned INT)__smallIntegerVal(startIndex)) - 1;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4160
            INT eidx = ((unsigned INT)__smallIntegerVal(endIndex)) - 1;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4161
            unsigned char *ep;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4162
            unsigned INT hash = 0, hash2 = 0, carry;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4163
            int i;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4164
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4165
            if (eidx < 0 || eidx >= sz) eidx = sz - 1;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4166
            if (sidx > eidx) sidx = eidx;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4167
            if (sidx < 0) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4168
                RETURN(__mkSmallInteger(0));
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4169
            }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4170
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4171
            ep = cp + eidx;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4172
            cp += sidx;
12757
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4173
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4174
#if 0
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4175
            /*
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4176
             * On LSB-First (little endian) cpus,
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4177
             * this code does not produce the same result
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4178
             * if the same bytes are at different positions
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4179
             */
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4180
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4181
            if ((INT)cp & (sizeof(INT)-1)) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4182
                /* not aligned */
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4183
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4184
                for (i=0; cp <= ep; cp++) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4185
                    hash2 = (hash2 << 8) | *cp;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4186
                    if (++i == sizeof(INT)) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4187
                        hash ^= hash2;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4188
                        i = hash2 = 0;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4189
                    }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4190
                }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4191
            } else {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4192
                /* aligned */
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4193
                for (; cp+sizeof(INT) <= ep; cp += sizeof(INT)) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4194
                    hash ^= *(unsigned INT *)cp;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4195
                }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4196
                for (; cp <= ep; cp++) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4197
                    hash2 = (hash2 << 8) | *cp;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4198
                }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4199
            }
12757
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4200
#else
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4201
            for (i=0; cp <= ep-sizeof(INT); cp += sizeof(INT)) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4202
                hash2 = cp[0];
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4203
                hash2 = (hash2 << 8) | cp[1];
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4204
                hash2 = (hash2 << 8) | cp[2];
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4205
                hash2 = (hash2 << 8) | cp[3];
12757
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4206
#if __POINTER_SIZE__ == 8
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4207
                hash2 = (hash2 << 8) | cp[4];
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4208
                hash2 = (hash2 << 8) | cp[5];
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4209
                hash2 = (hash2 << 8) | cp[6];
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4210
                hash2 = (hash2 << 8) | cp[7];
12757
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4211
#endif
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4212
                /*
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4213
                 * multiply by large prime to scramble bits and
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4214
                 * to avoid a 0 result from
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4215
                 * #[1 2 3 4 1 2 3 4] computeXorHashFrom:1 to:8.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4216
                 */
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4217
                hash ^= (hash * 31415821) ^ hash2;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4218
            }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4219
            for (hash2 = 0; cp <= ep; cp++) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4220
                hash2 = (hash2 << 8) | *cp;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4221
            }
12757
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4222
#endif
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4223
            hash ^= (hash * 31415821) ^ hash2;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4224
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4225
            /*
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4226
             * fold the high bits not fitting into a SmallInteger
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4227
             */
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4228
            carry = hash & ~_MAX_INT;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4229
            if (carry) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4230
                hash = (hash & _MAX_INT) ^ (carry >> 8);
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4231
            }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4232
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4233
            RETURN(__mkSmallInteger(hash));
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4234
        }
12757
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4235
    }
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4236
%}.
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4237
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4238
    ^ self primitiveFailed
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4239
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4240
    "
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4241
     #[1 2 3 4] computeXorHashFrom:1 to:4.
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4242
     #[1 2 3 4] computeXorHashFrom:1 to:32.
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4243
     #[1 2 3 4] computeXorHashFrom:1 to:0.
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4244
     #[1 2 3 4 5] computeXorHashFrom:1 to:4.
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4245
     #[1 2 3 4 1 2 3 4] computeXorHashFrom:1 to:8.
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4246
     #[1 2 3 4 5 6 7 8] computeXorHashFrom:2 to:8.
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4247
     #[2 3 4 5 6 7 8] computeXorHashFrom:1 to:7.
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4248
    "
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4249
! !
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4250
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4251
!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
  4252
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4253
copyReverse
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4254
    "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
  4255
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4256
    ^ self copy reverse
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4257
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4258
    "
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4259
     #[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
  4260
     #[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
  4261
    "
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4262
!
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4263
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4264
swapBytes
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4265
    "swap bytes (of int16s) inplace -
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4266
     Expects that the receiver has an even number of bytes;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4267
     if not, only the pairs excluding the last byte are swapped"
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4268
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4269
    |b1 lastIndex "{ Class: SmallInteger }"|
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4270
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4271
    lastIndex := self size-1.
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4272
    1 to:lastIndex by:2 do:[:idx |
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4273
        b1 := self byteAt:idx.
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4274
        self byteAt:idx put:(self byteAt:idx+1).
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4275
        self byteAt:idx+1 put:b1.
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4276
    ].
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4277
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4278
    "
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4279
     #[1 2 3 4 5] swapBytes
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4280
     #[1 2 3 4] swapBytes
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4281
    "
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4282
! !
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4283
14131
3b0cb7751a71 changed: #replaceFrom:to:with:startingAt:
Claus Gittinger <cg@exept.de>
parents: 14082
diff changeset
  4284
3363
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  4285
!UninterpretedBytes methodsFor:'misc'!
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  4286
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  4287
swapLongAt:byteIndex
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  4288
    "swap the byteOrder of a long.
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  4289
     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
  4290
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  4291
    |t|
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  4292
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  4293
    t := self byteAt:byteIndex.
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  4294
    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
  4295
    self byteAt:(byteIndex + 3) put:t.
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  4296
    t := self byteAt:(byteIndex + 1).
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  4297
    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
  4298
    self byteAt:(byteIndex + 2) put:t
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  4299
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  4300
    "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
  4301
! !
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  4302
18664
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4303
!UninterpretedBytes methodsFor:'printing & storing'!
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4304
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4305
hexPrintOn:aStream
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4306
    "print as hex string, eg: 'FF0243'.
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4307
     This string can be used in #fromHexString: to recreate the byteArray"
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4308
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4309
    self hexPrintOn:aStream withSeparator:nil
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4310
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4311
    "
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4312
      #[1 2 3 4 10 17] hexPrintOn:Transcript
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4313
    "
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4314
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4315
    "
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4316
     |s|
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4317
     s := String streamContents:[:s | #[1 2 3 4 10 17] hexPrintOn:s].
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4318
     ByteArray fromHexString:s
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4319
    "
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4320
!
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4321
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4322
hexPrintOn:aStream withSeparator:aSeparatorStringOrCharacterOrNil
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4323
    "print as hex string with separators, eg: 'FF:02:43'"
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4324
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4325
    |first|
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4326
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4327
    first := true.
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4328
    1 to:self size do:[:idx |
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4329
        aSeparatorStringOrCharacterOrNil notNil ifTrue:[
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4330
            first ifFalse:[
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4331
                aSeparatorStringOrCharacterOrNil printOn:aStream
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4332
            ] ifTrue:[
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4333
                first := false.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4334
            ].
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4335
        ].
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4336
        (self byteAt:idx) printOn:aStream base:16 size:2 fill:$0.
18664
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4337
    ].
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4338
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4339
    "
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4340
      #[1 2 3 4 10 17] hexPrintOn:Transcript withSeparator:$:
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4341
      #[1 2 3 4 10 17] hexPrintOn:Transcript withSeparator:(Character space)
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4342
      #[1 2 3 4 10 17] hexPrintOn:Transcript withSeparator:'-'
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4343
      #[1 2 3 4 10 17] hexPrintOn:Transcript withSeparator:nil
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4344
    "
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4345
!
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4346
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4347
hexPrintString
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4348
    "print as hex string, eg: 'FF0243'.
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4349
     This string can be used in #fromHexString: to recreate the byteArray"
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4350
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4351
    ^ self hexPrintStringWithSeparator:nil
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4352
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4353
    "
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4354
     #[1 2 3 4 10 17] hexPrintString
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4355
     ByteArray fromHexString:#[1 2 3 4 10 17] hexPrintString
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4356
    "
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4357
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4358
    "Modified: / 03-07-2010 / 01:59:19 / cg"
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4359
!
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4360
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4361
hexPrintStringWithSeparator:aSeparatorStringOrCharacterOrNil
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4362
    "print as hex string, eg: 'FF:02:43'."
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4363
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4364
    ^ String
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4365
        streamContents:[:s |
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4366
            self hexPrintOn:s withSeparator:aSeparatorStringOrCharacterOrNil.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4367
        ]
18664
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4368
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4369
    "
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4370
      #[1 2 3 4 10 17] hexPrintStringWithSeparator:$:
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4371
      #[1 2 3 4 10 17] hexPrintStringWithSeparator:Character space
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4372
      #[1 2 3 4 10 17] hexPrintStringWithSeparator:' - '
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4373
      #[1 2 3 4 10 17] hexPrintStringWithSeparator:nil
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4374
    "
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4375
! !
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4376
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4377
!UninterpretedBytes methodsFor:'private'!
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4378
18969
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4379
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
  4380
    "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
  4381
18969
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4382
    |srcIdx "{ Class:SmallInteger }"
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4383
     start "{ Class:SmallInteger }"
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4384
     stop "{ Class:SmallInteger }"|
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4385
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4386
    start := startArg.
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4387
    stop := stopArg.
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4388
    srcIdx := sourceIndex.
18969
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4389
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4390
    start to:stop do:[:dstIdx |
18969
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4391
        self at:dstIdx put:(sourceBytes at:srcIdx).
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4392
        srcIdx := srcIdx + 1
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4393
    ].
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4394
! !
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4395
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4396
!UninterpretedBytes methodsFor:'queries'!
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4397
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4398
containsNon7BitAscii
18969
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4399
    "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
  4400
     (i.e. if it is non-ascii)"
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4401
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4402
    |sz "{ Class:SmallInteger }"|
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4403
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4404
    sz := self size.
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4405
    1 to:sz do:[:idx|
18969
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4406
        (self at:idx) > 16r7F ifTrue:[
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4407
            ^ true.
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4408
        ].
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4409
    ].
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4410
    ^ false.
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4411
!
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4412
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4413
containsNon8BitElements
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4414
    "return true, if the underlying structure contains elements larger than a single byte"
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4415
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4416
    |sz "{ Class:SmallInteger }"|
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4417
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4418
    sz := self size.
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4419
    1 to:sz do:[:idx|
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4420
        (self at:idx) > 16rFF ifTrue:[
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4421
            ^ true.
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4422
        ].
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4423
    ].
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4424
    ^ false.
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4425
!
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4426
7218
b798be6d632f elementBoundsError -> elementBoundsError:
Claus Gittinger <cg@exept.de>
parents: 7197
diff changeset
  4427
defaultElement
b798be6d632f elementBoundsError -> elementBoundsError:
Claus Gittinger <cg@exept.de>
parents: 7197
diff changeset
  4428
    ^ 0
b798be6d632f elementBoundsError -> elementBoundsError:
Claus Gittinger <cg@exept.de>
parents: 7197
diff changeset
  4429
!
b798be6d632f elementBoundsError -> elementBoundsError:
Claus Gittinger <cg@exept.de>
parents: 7197
diff changeset
  4430
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4431
referencesAny:aCollection
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4432
    "redefined to speed up searching when many of my instances are present"
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4433
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4434
%{ /* NOCONTEXT */
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4435
    if (__mkSmallInteger(0) == __ClassInstPtr(__qClass(self))->c_ninstvars) {
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4436
        /* I am only bytes */
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4437
        RETURN(false)
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4438
    }
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4439
%}.
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4440
    ^ super referencesAny:aCollection
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4441
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4442
    "
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4443
        'abc' referencesAny:#()
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4444
    "
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4445
!
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4446
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4447
sizeInBytes
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4448
    "return the number of 8-bit bytes in the receiver.
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4449
     This is needed since subclasse may redefine #size (TwoByteString)"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4450
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4451
    ^ super size
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4452
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4453
    "Created: / 5.3.1998 / 10:41:13 / stefan"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4454
! !
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4455
8986
c2962d45eca0 new: #isByteCollection
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
  4456
!UninterpretedBytes methodsFor:'testing'!
c2962d45eca0 new: #isByteCollection
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
  4457
c2962d45eca0 new: #isByteCollection
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
  4458
isByteCollection
c2962d45eca0 new: #isByteCollection
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
  4459
    "return true, if the receiver has access methods for bytes;
c2962d45eca0 new: #isByteCollection
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
  4460
     true is returned here - the method is redefined from Object."
c2962d45eca0 new: #isByteCollection
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
  4461
c2962d45eca0 new: #isByteCollection
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
  4462
    ^ true
9005
b82aa6bdc487 #isNonByteCollection
Stefan Vogel <sv@exept.de>
parents: 8995
diff changeset
  4463
!
b82aa6bdc487 #isNonByteCollection
Stefan Vogel <sv@exept.de>
parents: 8995
diff changeset
  4464
b82aa6bdc487 #isNonByteCollection
Stefan Vogel <sv@exept.de>
parents: 8995
diff changeset
  4465
isNonByteCollection
b82aa6bdc487 #isNonByteCollection
Stefan Vogel <sv@exept.de>
parents: 8995
diff changeset
  4466
    "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
  4467
     false is returned here - the method is redefined from Collection."
b82aa6bdc487 #isNonByteCollection
Stefan Vogel <sv@exept.de>
parents: 8995
diff changeset
  4468
b82aa6bdc487 #isNonByteCollection
Stefan Vogel <sv@exept.de>
parents: 8995
diff changeset
  4469
    ^ false
8986
c2962d45eca0 new: #isByteCollection
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
  4470
! !
c2962d45eca0 new: #isByteCollection
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
  4471
11009
fb66915c5bb5 changed #acceptVisitor:with: - moved to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 10676
diff changeset
  4472
!UninterpretedBytes methodsFor:'visiting'!
fb66915c5bb5 changed #acceptVisitor:with: - moved to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 10676
diff changeset
  4473
fb66915c5bb5 changed #acceptVisitor:with: - moved to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 10676
diff changeset
  4474
acceptVisitor:aVisitor with:aParameter
16719
19b7ae0bbb49 comment/format only
Claus Gittinger <cg@exept.de>
parents: 16320
diff changeset
  4475
    "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
  4476
fb66915c5bb5 changed #acceptVisitor:with: - moved to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 10676
diff changeset
  4477
    ^ aVisitor visitByteArray:self with:aParameter
fb66915c5bb5 changed #acceptVisitor:with: - moved to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 10676
diff changeset
  4478
! !
fb66915c5bb5 changed #acceptVisitor:with: - moved to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 10676
diff changeset
  4479
695
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
  4480
!UninterpretedBytes class methodsFor:'documentation'!
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
  4481
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
  4482
version
18600
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  4483
    ^ '$Header$'
12253
c933c6fcdeef changed: #fromHexStringWithSeparators:
Claus Gittinger <cg@exept.de>
parents: 11973
diff changeset
  4484
!
c933c6fcdeef changed: #fromHexStringWithSeparators:
Claus Gittinger <cg@exept.de>
parents: 11973
diff changeset
  4485
c933c6fcdeef changed: #fromHexStringWithSeparators:
Claus Gittinger <cg@exept.de>
parents: 11973
diff changeset
  4486
version_CVS
18600
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  4487
    ^ '$Header$'
695
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
  4488
! !
15087
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  4489
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
  4490
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
  4491
UninterpretedBytes initialize!