UninterpretedBytes.st
author Jan Vrany <jan.vrany@labware.com>
Sat, 29 Oct 2022 01:05:05 +0100
branchjv
changeset 25446 98fb817db6de
parent 25420 a18d0d048b1f
permissions -rw-r--r--
Add `Character >> isMathLetter` and `#isMathBinaryOperator`
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
23547
c69c97cec351 Issue #239: Fix all Smalltak/X source files to be in unicode (UTF8 without BOM) and prefixed by "{ Encoding: utf8 }" when any unicode character is present
Patrik Svestka <patrik.svestka@gmail.com>
parents: 23405
diff changeset
     1
"{ Encoding: utf8 }"
c69c97cec351 Issue #239: Fix all Smalltak/X source files to be in unicode (UTF8 without BOM) and prefixed by "{ Encoding: utf8 }" when any unicode character is present
Patrik Svestka <patrik.svestka@gmail.com>
parents: 23405
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
23107
40173e082cbc Copyright updates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23102
diff changeset
     5
 COPYRIGHT (c) 2018 Jan Vrany
25414
dffa84757e23 Add more compatibility methods to `UninterpretedBytes`
Jan Vrany <jan.vrany@labware.com>
parents: 23547
diff changeset
     6
 COPYRIGHT (c) 2021 LabWare
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
     7
              All Rights Reserved
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
     8
a27a279701f8 Initial revision
claus
parents:
diff changeset
     9
 This software is furnished under a license and may be used
a27a279701f8 Initial revision
claus
parents:
diff changeset
    10
 only in accordance with the terms of that license and with the
a27a279701f8 Initial revision
claus
parents:
diff changeset
    11
 inclusion of the above copyright notice.   This software may not
a27a279701f8 Initial revision
claus
parents:
diff changeset
    12
 be provided or otherwise made available to, or used by, any
a27a279701f8 Initial revision
claus
parents:
diff changeset
    13
 other person.  No title to or ownership of the software is
a27a279701f8 Initial revision
claus
parents:
diff changeset
    14
 hereby transferred.
a27a279701f8 Initial revision
claus
parents:
diff changeset
    15
"
6492
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
    16
"{ Package: 'stx:libbasic' }"
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
    17
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
    18
"{ NameSpace: Smalltalk }"
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
    19
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
    20
ArrayedCollection subclass:#UninterpretedBytes
20372
aa0461b19c97 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20177
diff changeset
    21
	instanceVariableNames:''
aa0461b19c97 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20177
diff changeset
    22
	classVariableNames:'IsBigEndian'
aa0461b19c97 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20177
diff changeset
    23
	poolDictionaries:''
aa0461b19c97 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20177
diff changeset
    24
	category:'Collections-Abstract'
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    25
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    26
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    27
!UninterpretedBytes primitiveDefinitions!
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    28
%{
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    29
/*
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    30
 * Notice: I am abstract, and my subclasses may be anything.
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    31
 * Therefore, the code must always handle the fallback case
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    32
 * where the receiver is neither an ExternalBytes nor a ByteArray.
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    33
 * (which are, however, the most common)
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    34
 *
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    35
 * macro to fetch my byte address and size-in-bytes;
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    36
 * convenient for inline-C code.
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    37
 * (yes, C is bad ...)
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
#define __fetchBytePointerAndSize__(o, pPtr, pSize) \
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    40
    {\
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    41
      if (__isNonNilObject(o)) { \
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
    42
        if (__isByteArrayLike(o)) { \
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
    43
          *(pPtr) = (unsigned char *)__ByteArrayInstPtr(o)->ba_element; \
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
    44
          *(pSize) = __byteArraySize(o); \
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
    45
        } else if (__qIsExternalBytesLike(o)) { \
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
    46
          OBJ __sz__ = __externalBytesSize(o); \
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
    47
          if (__isSmallInteger(__sz__)) { \
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
    48
            *(pSize) = __intVal(__sz__); \
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
    49
            *(pPtr) = (unsigned char *)(__externalBytesAddress(o)); \
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
    50
          } else { \
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
    51
            *(pSize) = 0; \
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
    52
            *(pPtr) = (unsigned char *)0; \
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
    53
          } \
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
    54
        } else { \
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
    55
            *(pSize) /* nInstBytes */ = OHDR_SIZE + __OBJS2BYTES__(__intVal(__ClassInstPtr(__qClass(o))->c_ninstvars)); \
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
    56
            *(pPtr) = (char *)(__InstPtr(self)) + *(pSize) /* nInstBytes */; \
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
    57
            *(pSize) = __qSize(self) - *(pSize) /* nInstBytes */; \
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
    58
        } \
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    59
      } else { \
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
    60
        *(pSize) = 0; \
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
    61
        *(pPtr) = (unsigned char *)0; \
3433
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
%}
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    66
! !
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    67
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
    68
!UninterpretedBytes class methodsFor:'documentation'!
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    69
88
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    70
copyright
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    71
"
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    72
 COPYRIGHT (c) 1993 by Claus Gittinger
23107
40173e082cbc Copyright updates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23102
diff changeset
    73
 COPYRIGHT (c) 2018 Jan Vrany
25414
dffa84757e23 Add more compatibility methods to `UninterpretedBytes`
Jan Vrany <jan.vrany@labware.com>
parents: 23547
diff changeset
    74
 COPYRIGHT (c) 2021 LabWare
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
    75
              All Rights Reserved
88
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    76
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    77
 This software is furnished under a license and may be used
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    78
 only in accordance with the terms of that license and with the
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    79
 inclusion of the above copyright notice.   This software may not
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    80
 be provided or otherwise made available to, or used by, any
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    81
 other person.  No title to or ownership of the software is
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    82
 hereby transferred.
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    83
"
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    84
!
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    85
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
    86
documentation
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
    87
"
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
    88
    UninterpretedBytes provides the common protocol for byte-storage
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
    89
    containers; concrete subclasses are
19101
8ccbefbc944d #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19047
diff changeset
    90
        ByteArray (which store the bytes within the Smalltalk object memory)
8ccbefbc944d #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19047
diff changeset
    91
        String    (knows that the bytes represent characters)
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
    92
    and
19101
8ccbefbc944d #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19047
diff changeset
    93
        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
    94
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
    95
    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
    96
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
    97
    [See also:]
19101
8ccbefbc944d #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19047
diff changeset
    98
        ByteArray String ExternalBytes
1294
e26bbb61f6b2 documentation
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
    99
e26bbb61f6b2 documentation
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
   100
    [author:]
19101
8ccbefbc944d #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19047
diff changeset
   101
        Claus Gittinger
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   102
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   103
    [Notice:]
19101
8ccbefbc944d #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19047
diff changeset
   104
        Notice the confusion due to multiple methods with the same
8ccbefbc944d #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19047
diff changeset
   105
        functionality (i.e. 'xxxx:MSB:' vs. 'xxxx:bigEndian:').
8ccbefbc944d #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19047
diff changeset
   106
        The reason is that at the time this class was written,
8ccbefbc944d #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19047
diff changeset
   107
        ST80 did not offer protocol to specify the byteOrder, and
8ccbefbc944d #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19047
diff changeset
   108
        ST/X provided methods ending in 'MSB:' for this.
8ccbefbc944d #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19047
diff changeset
   109
        In the meanwhile, VW added protocol ending in 'bigEndian:',
8ccbefbc944d #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19047
diff changeset
   110
        which has been added here for compatibility.
8ccbefbc944d #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19047
diff changeset
   111
        (certainly a point, where an ansi-standard will help)
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   112
"
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   113
! !
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   114
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   115
!UninterpretedBytes class methodsFor:'initialization'!
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   116
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   117
initialize
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   118
    IsBigEndian := self isBigEndian.
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   119
! !
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   120
3363
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
   121
!UninterpretedBytes class methodsFor:'instance creation'!
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
   122
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   123
from:aByteArray
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   124
    "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
   125
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   126
    |len bytes|
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   127
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   128
    len := aByteArray size.
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   129
    bytes := self new:len.
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   130
    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
   131
    ^ bytes
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
      String from:#[40 41 42]
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   135
      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
   136
    "
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   137
!
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   138
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   139
fromHexString:aString
15717
b05a01005030 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15087
diff changeset
   140
    "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
   141
12551
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   142
    | sz bytes s hi lo |
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   143
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   144
    sz := aString size.
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   145
    sz == 0 ifTrue:[^ self new].
14970
319eeed62505 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 14224
diff changeset
   146
    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
   147
12551
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   148
    bytes := self new: sz // 2.
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   149
    s := aString readStream.
12551
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   150
    1 to: sz // 2 do: [ :idx |
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   151
        hi := s next digitValue.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   152
        lo := s next digitValue.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   153
        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
   154
    ].
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   155
    ^ bytes
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
     ByteArray fromHexString:'1234FEFF'
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   159
     ExternalBytes fromHexString:'1234FEFF'
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   160
    "
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   161
    "
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   162
     |s|
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   163
     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
   164
     ByteArray fromHexString:s
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   165
    "
12551
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   166
    "
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   167
     Time millisecondsToRun:[
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   168
        1000000 timesRepeat:[ ByteArray fromHexString:'1234FEFF1234FEFF1234FEFF1234FEFF' ]
12551
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   169
     ].
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   170
    "
15717
b05a01005030 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15087
diff changeset
   171
b05a01005030 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15087
diff changeset
   172
    "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
   173
!
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   174
11874
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   175
fromHexStringWithSeparators:aString
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   176
    "read a bytearray from a printed string representation, where
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   177
     individual bytes are encoded as two hex digits, optionally separated by whiteSpace.
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   178
     See also fromHexString:, which does something similar, but does not allow for spaces"
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   179
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   180
    ^ self streamContents:[:outStream |
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   181
        |inStream h|
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   182
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   183
        inStream := aString readStream.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   184
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   185
        [
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   186
            inStream skipSeparators.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   187
            inStream atEnd
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   188
        ] whileFalse:[
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   189
            h := inStream next:2.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   190
            outStream nextPut:(Integer readFrom:h base:16).
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   191
        ].
11874
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   192
    ].
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
     ByteArray fromHexString:'1234FEFF'
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   196
     ByteArray fromHexStringWithSeparators:'   12  34 FE FF'
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   197
    "
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   198
!
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   199
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   200
fromPackedString:aString
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   201
    "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
   202
     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
   203
     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
   204
     Every 6 bit packet is encoded as a character in 32..95.
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   205
     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
   206
     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
   207
     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
   208
     ST-80 uses this encoding for Images ...
16798
acfbeccbc226 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16796
diff changeset
   209
     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
   210
     PS: It took a while to figure that one out ...
18633
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   211
     PPS: I don't like it ;-)"
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   212
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   213
    |index    "{ Class: SmallInteger }"
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   214
     dstIndex "{ Class: SmallInteger }"
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   215
     stop     "{ Class: SmallInteger }"
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   216
     sixBits  "{ Class: SmallInteger }"
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   217
     n        "{ Class: SmallInteger }"
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   218
     sz       "{ Class: SmallInteger }"
12551
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   219
     last bytes|
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
    sz := aString size.
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   222
    sz == 0 ifTrue:[^ self new].
12551
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   223
    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
   224
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   225
    stop := sz // 4 * 3.
12551
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   226
    "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
   227
     range 97 .. otherwise, its exact."
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   228
12551
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   229
    last := aString last codePoint.
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   230
    last > 96 ifTrue:[
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   231
        stop := stop - 3 + (last - 96)
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   232
    ].
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   233
    bytes := self new:stop.
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   234
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   235
    index := 1. dstIndex := 1.
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   236
    [dstIndex <= stop] whileTrue:[
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   237
        "/ take 4 characters ...
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   238
        "/ allow a line break before each group of 4
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   239
        sixBits := (aString at:index) codePoint.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   240
        [sixBits < 32] whileTrue:[
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   241
            index := index + 1.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   242
            sixBits := (aString at:index) codePoint.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   243
        ].
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   244
        sixBits := sixBits bitAnd:16r3F.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   245
        n := 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+1) codePoint >= 32.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   248
        sixBits := (aString at:index+1) 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+2) codePoint >= 32.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   252
        sixBits := (aString at:index+2) 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
        "/ self assert:(aString at:index+3) codePoint >= 32.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   256
        sixBits := (aString at:index+3) codePoint bitAnd:16r3F.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   257
        n := (n bitShift:6) + sixBits.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   258
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   259
        index := index + 4.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   260
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   261
        "/ now have 24 bits in n
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   262
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   263
        bytes at:dstIndex put:(n bitShift:-16).
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   264
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   265
        dstIndex < stop ifTrue:[
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   266
            bytes at:dstIndex+1 put:((n bitShift:-8) bitAnd:16rFF).
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   267
            dstIndex+2 <= stop ifTrue:[
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   268
                bytes at:dstIndex+2 put:(n bitAnd:16rFF).
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   269
            ]
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   270
        ].
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   271
        dstIndex := dstIndex + 3.
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   272
    ].
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   273
    ^ bytes
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   274
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   275
    "
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   276
     ByteArray fromPackedString:(#[1 1 1 1] asPackedString)
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   277
     ByteArray fromPackedString:(#[1 1 1 1 1] asPackedString)
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   278
     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
   279
     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
   280
     ByteArray fromPackedString:(#[1 1 1 1 1 1 1 1] asPackedString)
18633
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   281
     ByteArray fromPackedString:((ByteArray new:256) asPackedString)
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   282
     ByteArray fromPackedString:((ByteArray new:128) asPackedString)
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   283
     ByteArray fromPackedString:((ByteArray new:129) asPackedString)
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   284
     ByteArray fromPackedString:((ByteArray new:130) asPackedString)
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   285
     ByteArray fromPackedString:((ByteArray new:131) asPackedString)
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   286
     ByteArray fromPackedString:((ByteArray new:132) asPackedString)
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   287
     ByteArray fromPackedString:((ByteArray new:64) asPackedString)
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   288
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   289
     0 to:256 do:[:l |
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   290
        |orig copy|
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   291
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   292
        0 to:255 do:[:fill |
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   293
            orig := ByteArray new:l withAll:fill.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   294
            copy := ByteArray fromPackedString:(orig asPackedString).
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   295
            self assert:(orig = copy).
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   296
         ]
18633
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   297
     ]
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   298
    "
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   299
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   300
    "Modified: / 6.3.1997 / 15:28:52 / cg"
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   301
    "Modified: / 18.12.1997 / 17:17:11 / stefan"
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   302
!
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   303
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   304
uninitializedNew:anInteger
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   305
    "return a new instance of the receiver with uninitialized
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   306
     (i.e. undefined) contents. The indexed elements have any random
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   307
     value. However, any named instance variables are still nilled.
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   308
     For use, when contents will be set anyway shortly after - this
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   309
     is a bit faster than the regular basicNew:, which clears the bytes.
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   310
     Of course, it only makes a difference for very big ByteArrays, such
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   311
     as used for images/bitmaps.
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
     Notice: if you want to port code using uninitializedNew: to another
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   314
     smalltalk, you have to add an 'uninitializedNew: -> basicNew:'-calling
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   315
     method to the ByteArray class of the other smalltalk."
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   316
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   317
%{  /* NOCONTEXT */
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   318
    OBJ newobj;
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   319
    INT instsize, nInstVars, nindexedinstvars;
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   320
    REGISTER OBJ *op;
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   321
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   322
    if (__isSmallInteger(anInteger)) {
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   323
        nindexedinstvars = __intVal(anInteger);
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   324
        if (nindexedinstvars >= 0) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   325
            if (self == ByteArray) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   326
                /*
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   327
                 * the most common case
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   328
                 */
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   329
                instsize = OHDR_SIZE + nindexedinstvars;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   330
                if (__CanDoQuickNew(instsize)) {        /* OBJECT ALLOCATION */
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   331
                    __qCheckedNew(newobj, instsize);
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   332
                    __InstPtr(newobj)->o_class = self;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   333
                    __qSTORE(newobj, self);
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   334
                    RETURN (newobj );
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   335
                }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   336
            } else {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   337
                /*
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   338
                 * Take care for subclasses like TwoByteString
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   339
                 */
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   340
                switch (__smallIntegerVal(__ClassInstPtr(self)->c_flags) & ARRAYMASK) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   341
                case BYTEARRAY:
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   342
                    break;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   343
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   344
                case WORDARRAY:
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   345
                case SWORDARRAY:
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   346
                    nindexedinstvars *= 2;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   347
                    break;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   348
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   349
                case LONGARRAY:
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   350
                case SLONGARRAY:
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   351
                    nindexedinstvars *= 4;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   352
                    break;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   353
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   354
                default:
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   355
                    /* don't know about this array type, delegate to super */
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   356
                    goto out;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   357
                }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   358
            }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   359
            nInstVars = __intVal(__ClassInstPtr(self)->c_ninstvars);
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   360
            instsize = OHDR_SIZE + __OBJS2BYTES__(nInstVars) + nindexedinstvars;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   361
            __PROTECT_CONTEXT__
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   362
            __qNew(newobj, instsize);   /* OBJECT ALLOCATION */
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   363
            __UNPROTECT_CONTEXT__
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   364
            if (newobj != nil) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   365
                __InstPtr(newobj)->o_class = self;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   366
                __qSTORE(newobj, self);
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   367
                if (nInstVars) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   368
                    /*
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   369
                     * still have to nil out named instvars ...
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   370
                     */
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   371
#if defined(memset4) && defined(FAST_OBJECT_MEMSET4)
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   372
                    memset4(__InstPtr(newobj)->i_instvars, nil, nInstVars);
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   373
#else
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   374
# if defined(FAST_MEMSET) && !defined(NEGATIVE_ADDRESSES)
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   375
                    /*
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   376
                     * knowing that nil is 0
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   377
                     */
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   378
                    memset(__InstPtr(newobj)->i_instvars, 0, instsize - OHDR_SIZE);
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   379
# else
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   380
                    op = __InstPtr(newobj)->i_instvars;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   381
                    while (nInstVars--)
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   382
                        *op++ = nil;
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   383
# endif
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   384
#endif
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   385
                }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   386
                RETURN ( newobj );
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   387
            }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   388
        }
18284
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
out:;
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   391
%}.
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   392
    ^ self basicNew:anInteger
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   393
!
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   394
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   395
with:aByteArray from:start to:stop
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   396
    "return new instance with a copy of aByteArray
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   397
     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
   398
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   399
    |len bytes|
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   400
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   401
    len := stop-start+1.
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   402
    bytes := self new:len.
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   403
    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
   404
    ^ bytes
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   405
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   406
    "
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   407
      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
   408
    "
3363
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
   409
! !
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
   410
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   411
!UninterpretedBytes class methodsFor:'queries'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   412
8893
99996b25482e +isAbstract
Claus Gittinger <cg@exept.de>
parents: 8092
diff changeset
   413
isAbstract
11220
1ed300ff0d21 comment
Claus Gittinger <cg@exept.de>
parents: 11009
diff changeset
   414
    "Return if this class is an abstract class.
1ed300ff0d21 comment
Claus Gittinger <cg@exept.de>
parents: 11009
diff changeset
   415
     True is returned for UninterpretedBytes here; false for subclasses.
19461
7a4d28b76572 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19415
diff changeset
   416
     Abstract subclasses must redefine this again."
11220
1ed300ff0d21 comment
Claus Gittinger <cg@exept.de>
parents: 11009
diff changeset
   417
8893
99996b25482e +isAbstract
Claus Gittinger <cg@exept.de>
parents: 8092
diff changeset
   418
    ^ self == UninterpretedBytes
99996b25482e +isAbstract
Claus Gittinger <cg@exept.de>
parents: 8092
diff changeset
   419
!
99996b25482e +isAbstract
Claus Gittinger <cg@exept.de>
parents: 8092
diff changeset
   420
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   421
isBigEndian
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   422
    "return true, if words/shorts store the most-significant
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   423
     byte first (MSB), false if least-sign.-first (LSB).
4019
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
   424
     I.e. false for vax, intel; true for m68k, sun.
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
   425
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
   426
     Notice: UninterpretedBytes isBigEndian
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   427
             this is inlined both by stc and the jit compiler"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   428
a27a279701f8 Initial revision
claus
parents:
diff changeset
   429
%{  /* NOCONTEXT */
a27a279701f8 Initial revision
claus
parents:
diff changeset
   430
8901
824a89d0b5c7 alpha64 vs. POINTER_SIZE cleanup
Claus Gittinger <cg@exept.de>
parents: 8893
diff changeset
   431
#if defined(__MSBFIRST__)
3936
dd8cd28d4a9b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3459
diff changeset
   432
    RETURN (true);
dd8cd28d4a9b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3459
diff changeset
   433
#else
8901
824a89d0b5c7 alpha64 vs. POINTER_SIZE cleanup
Claus Gittinger <cg@exept.de>
parents: 8893
diff changeset
   434
# if defined(__LSBFIRST__)
4275
9fc4a735a1d3 BFIRST stuff
Claus Gittinger <cg@exept.de>
parents: 4019
diff changeset
   435
    RETURN (false);
9fc4a735a1d3 BFIRST stuff
Claus Gittinger <cg@exept.de>
parents: 4019
diff changeset
   436
# else
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   437
    /*
20816
986549374231 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20595
diff changeset
   438
     * I don't like ifdefs - you always forget some ...
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   439
     * therefore we look into a structure at run-time.
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   440
     * (also, there are CPUs around [mips], where the byteorder
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   441
     *  is programmable, and which come in different flavours)
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   442
     *
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   443
     * NOTICE:
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   444
     *    both the JIT and stc may inline this to a
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   445
     *    constant for systems where this is known.
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   446
     */
a27a279701f8 Initial revision
claus
parents:
diff changeset
   447
    union {
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   448
        unsigned int   u_l;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   449
        char           u_c[sizeof(int)];
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   450
    } u;
a27a279701f8 Initial revision
claus
parents:
diff changeset
   451
a27a279701f8 Initial revision
claus
parents:
diff changeset
   452
    u.u_l = 0x87654321;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   453
    if (u.u_c[0] == 0x21) RETURN (false);
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   454
    RETURN (true);
4275
9fc4a735a1d3 BFIRST stuff
Claus Gittinger <cg@exept.de>
parents: 4019
diff changeset
   455
# endif
3936
dd8cd28d4a9b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3459
diff changeset
   456
#endif
18346
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   457
%}.
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   458
    ^ false     "/ an arbitrary default
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   459
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   460
    "
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   461
     UninterpretedBytes isBigEndian
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   462
    "
3209
eff7ad7f0825 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3207
diff changeset
   463
!
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   464
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   465
isBuiltInClass
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   466
    "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
   467
     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
   468
     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
   469
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   470
    ^ self == UninterpretedBytes
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   471
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
   472
    "Modified: / 23.4.1996 / 15:56:25 / cg"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
   473
    "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
   474
! !
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   475
20961
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   476
!UninterpretedBytes methodsFor:'@ OLE Extensions'!
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   477
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   478
addressAtOffset: index0Based
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   479
    "Answer the bytes starting at index0Based (0 based offset)
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   480
     as anExternalAddress.  Answer nil if there is no address.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   481
     Notice: Offsets are zero relative."
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   482
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   483
    | address |
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   484
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   485
    address := self pointerValueAt: index0Based + 1.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   486
    ^ address = 0
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   487
        ifTrue: [ nil ]
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   488
        ifFalse: [ ExternalAddress newAddress: address  ]
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   489
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   490
    "Modified: / 30-03-2016 / 11:00:19 / cg"
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   491
!
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   492
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   493
addressAtOffset: index0Based put: anExternalAddress
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   494
    "Set the bytes starting at index0Based (0 based offset)
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   495
     from the contents of anExternalAddress.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   496
     Notice: Offsets are zero relative."
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   497
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   498
    |anAddress |
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   499
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   500
    anAddress := anExternalAddress isNil
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   501
        ifTrue:[0]
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   502
        ifFalse:[anExternalAddress address].
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   503
    self pointerAt: index0Based + 1 put: anAddress
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   504
!
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   505
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   506
addressValueAtOffset: index0Based
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   507
    "Answer the pointer-value starting at index0Based (0 based offset)
23405
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
   508
     as unsigned integer.
20961
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   509
     Notice: Offsets are zero relative."
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   510
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   511
    ^ self pointerValueAt: index0Based + 1.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   512
!
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   513
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   514
addressValueAtOffset: index0Based put:anAddress
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   515
    "Set the pointer-value starting at index0Based (0 based offset)
23405
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
   516
     as unsigned integer.
20961
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   517
     Notice: Offsets are zero relative."
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   518
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   519
    self pointerAt: index0Based + 1 put:anAddress.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   520
!
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   521
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   522
byteAtOffset:index0Based
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   523
    "return the byte at index0Based.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   524
     For ByteArray, this is the same as basicAt:
23405
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
   525
     however, for strings or symbols,
20961
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   526
     this returns a numeric byteValue instead of a character.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   527
     Notice: Offsets are zero relative."
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   528
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   529
    ^ self byteAt:(index0Based + 1)
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   530
!
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   531
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   532
byteAtOffset:index0Based put:value
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   533
    "set the byte at index. For ByteArray, this is the same as basicAt:put:.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   534
     However, for Strings, this expects a byteValue to be stored.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   535
     Notice: Offsets are zero relative."
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   536
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   537
    ^ self byteAt:(index0Based + 1) put:value
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   538
!
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   539
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   540
bytesAtOffset: index0Based count: count
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   541
    "Answer a ByteArray with count bytes copied
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   542
     from the receiver starting at index0Based.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   543
     Notice: Offsets are zero relative."
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   544
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   545
    |newBytes |
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   546
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   547
    newBytes := ByteArray new: count.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   548
    newBytes replaceBytesFrom:1 to:count with:self startingAt:(index0Based + 1).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   549
    ^newBytes
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   550
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   551
    "
23405
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
   552
     #[83 0 0 0 0 0 0 0 120 237 14 0 4 0 0 ] bytesAtOffset: 9 count: 3
20961
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   553
    "
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   554
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   555
    "Modified (comment): / 30-03-2016 / 11:24:41 / cg"
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   556
!
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   557
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   558
bytesAtOffset: index0Based put: aByteObject
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   559
    "Store aByteObject at anInteger in the receiver.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   560
     Notice: Offsets are zero relative."
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   561
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   562
    ^ self
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   563
        replaceBytesFrom:(index0Based + 1) to:(index0Based + aByteObject size)
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   564
        with:aByteObject startingAt:1.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   565
!
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   566
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   567
fillFromAddress: anAddress
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   568
    "Fill the receiver by copying mySize bytes from host memory at anAddress.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   569
     Warning: because anAddress might not know, how big it is,
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   570
     the size of the receiver must already be correct.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   571
     (i.e. the receiver must have been allocated from a returned size value)"
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   572
23405
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
   573
    self
20961
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   574
        replaceFrom:1 to:self size
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   575
        with:anAddress asExternalBytes
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   576
        startingAt:1
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   577
!
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   578
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   579
longAtOffset: index0Based
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   580
    "same as longAt:, but with a 0-based offset.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   581
     Notice: Offsets are zero relative."
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   582
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   583
    ^self signedInt32At:(index0Based + 1)
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   584
!
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   585
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   586
longAtOffset: index0Based put: value
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   587
    "same as longAtput::, but with a 0-based offset.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   588
     Notice: Offsets are zero relative."
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   589
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   590
    ^self signedInt32At:index0Based +1 put:value
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   591
!
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   592
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   593
shortAtOffset: index0Based
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   594
    "same as shortAt:, but with a 0-based offset.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   595
     Notice: Offsets are zero relative."
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   596
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   597
    ^self signedInt16At: index0Based + 1
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   598
!
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   599
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   600
shortAtOffset: index0Based put: value
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   601
    "same as shortAt:put:, but with a 0-based offset.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   602
     Notice: Offsets are zero relative."
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   603
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   604
    ^self signedInt16At: index0Based + 1 put: value
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   605
!
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   606
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   607
uLongAtOffset: index0Based
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   608
    "same as unsignedLongAt:, but with a 0-based offset.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   609
     Notice: Offsets are zero relative."
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   610
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   611
    ^ self unsignedInt32At:(index0Based + 1)
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   612
!
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   613
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   614
uLongAtOffset: index0Based put: value
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   615
    "same as unsignedLongAt:put:, but with a 0-based offset.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   616
     Notice: Offsets are zero relative."
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   617
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   618
    ^ self unsignedInt32At:(index0Based + 1) put: value
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   619
!
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   620
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   621
uShortAtOffset: index0Based
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   622
    "same as unsignedShortAt:, but with a 0-based offset.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   623
     Notice: Offsets are zero relative."
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   624
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   625
    ^ self unsignedInt16At:(index0Based + 1)
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   626
!
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   627
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   628
uShortAtOffset: index0Based put: value
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   629
    "same as unsignedShortAt:put:, but with a 0-based offset.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   630
     Notice: Offsets are zero relative."
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   631
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   632
    ^ self unsignedInt16At:(index0Based + 1) put: value
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   633
!
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   634
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   635
unsignedLongAtOffset: index0Based
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   636
    "same as unsignedLongAt:, but with a 0-based offset.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   637
     Notice: Offsets are zero relative."
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   638
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   639
    ^self unsignedInt32At: index0Based + 1
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   640
!
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   641
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   642
unsignedLongAtOffset: index0Based put: value
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   643
    "same as unsignedLongAt:put:, but with a 0-based offset.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   644
     Notice: Offsets are zero relative."
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   645
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   646
    ^self unsignedInt32At: index0Based + 1 put: value
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   647
!
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   648
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   649
unsignedShortAtOffset: index0Based
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   650
    "same as unsignedShortAt:, but with a 0-based offset.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   651
     Notice: Offsets are zero relative."
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   652
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   653
    ^self unsignedInt16At: index0Based + 1
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   654
!
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   655
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   656
unsignedShortAtOffset: index0Based put: value
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   657
    "same as unsignedShortAt:put:, but with a 0-based offset.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   658
     Notice: Offsets are zero relative."
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   659
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   660
    ^self unsignedInt16At:(index0Based + 1) put: value
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   661
! !
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   662
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   663
!UninterpretedBytes methodsFor:'Compatibility'!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   664
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   665
doubleWordAt:index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   666
    "return the 4-bytes starting at index as an (unsigned) Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   667
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   668
     The value is retrieved in the machines natural byte order."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   669
23405
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
   670
    ^ self unsignedInt32At:index MSB:self isBigEndian
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   671
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   672
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   673
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   674
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   675
     b := ByteArray withAll:#(1 2 3 4).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   676
     (b doubleWordAt:1) printStringRadix:16
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   677
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   678
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   679
    "Modified: / 5.3.1998 / 14:57:35 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   680
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   681
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   682
doubleWordAt:index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   683
    "return the 4-bytes starting at index as an (unsigned) Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   684
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   685
     The value is retrieved MSB-first, if the msb-arg is true;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   686
     LSB-first otherwise."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   687
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   688
    ^ self unsignedInt32At:index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   689
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   690
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   691
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   692
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   693
     b := ByteArray withAll:#(1 2 3 4).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   694
     (b doubleWordAt:1 MSB:true) printStringRadix:16.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   695
     (b doubleWordAt:1 MSB:false) printStringRadix:16
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   696
    "
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
doubleWordAt:byteIndex put:anInteger
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   700
    "set the 4-bytes starting at index from the (unsigned) Integer value.
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
     The value should be in the range 0 to 16rFFFFFFFF
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   703
     (for negative values, the stored value is not defined).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   704
     The value is stored in the machines natural byte order."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   705
23405
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
   706
   ^ self unsignedInt32At:byteIndex put:anInteger MSB:self isBigEndian
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   707
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   708
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   709
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   710
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   711
     b doubleWordAt:1 put:16r04030201.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   712
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   713
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   714
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   715
    "Modified: / 5.3.1998 / 14:57:48 / 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
doubleWordAt:byteIndex put:anInteger MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   719
    "set the 4-bytes starting at index from the (unsigned) 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 must be in the range 0 to 16rFFFFFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   722
     The value is stored MSB-first if msb is true; LSB-first otherwise."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   723
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   724
   ^ self unsignedInt32At:byteIndex put:anInteger MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   725
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   726
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   727
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   728
     b := ByteArray new:8.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   729
     b doubleWordAt:1 put:16r04030201 MSB:true.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   730
     b doubleWordAt:5 put:16r04030201 MSB:false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   731
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   732
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   733
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   734
    "Modified: / 21.1.1998 / 17:43:34 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   735
    "Modified: / 5.3.1998 / 11:42:17 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   736
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   737
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   738
doubleWordAtDoubleWordIndex:int32Index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   739
    "return the unsigned long (int32) at index, anInteger.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   740
     Fetching in the machine's natural byte order.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   741
     Indices are 1-based and scaled as appropriate to allow
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   742
     accessing the memory as an array of doubleWord entries.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   743
     (i.e. indices are 1, 2, ...)"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   744
23405
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
   745
    ^ self doubleWordAtDoubleWordIndex:int32Index MSB:self isBigEndian
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   746
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   747
    "Created: / 21.1.1998 / 17:43:53 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   748
    "Modified: / 5.3.1998 / 14:58:06 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   749
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   750
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   751
doubleWordAtDoubleWordIndex:int32Index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   752
    "return the unsigned long (int32) at index, anInteger.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   753
     Fetching is MSB if msb is true, LSB otherwise.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   754
     Indices are 1-based and scaled as appropriate to allow
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   755
     accessing the memory as an array of doubleWord entries.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   756
     (i.e. indices are 1, 2, ...)"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   757
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   758
    ^ self unsignedInt32At:((int32Index - 1) * 4 + 1) MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   759
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   760
    "Created: / 21.1.1998 / 17:44:07 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   761
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   762
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   763
doubleWordAtDoubleWordIndex:int32Index put:anInteger
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   764
    "set the long at index, anInteger.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   765
     Storing in the machines natural byte order.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   766
     Indices are 1-based and scaled as appropriate to allow
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   767
     accessing the memory as an array of doubleWord entries.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   768
     (i.e. indices are 1, 2, ...)"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   769
23405
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
   770
    ^ self doubleWordAtDoubleWordIndex:int32Index put:anInteger MSB:self isBigEndian
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   771
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   772
    "Created: / 21.1.1998 / 17:44:13 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   773
    "Modified: / 5.3.1998 / 14:58:19 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   774
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   775
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   776
doubleWordAtDoubleWordIndex:int32Index put:anInteger MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   777
    "set the long at index, anInteger.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   778
     Storing is MSB if msb is true, LSB otherwise.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   779
     Indices are 1-based and scaled as appropriate to allow
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   780
     accessing the memory as an array of doubleWord entries.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   781
     (i.e. indices are 1, 2, ...)"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   782
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   783
    ^ self unsignedInt32At:((int32Index - 1) * 4 + 1) put:anInteger MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   784
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   785
    "Created: / 21.1.1998 / 17:44:19 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   786
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   787
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   788
int16At:byteIndex
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   789
    "return the 2-bytes starting at index as a signed Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   790
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   791
     The value is retrieved in the machines natural byte order.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   792
     This may be worth a primitive."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   793
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   794
    ^ self signedInt16At:byteIndex
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   795
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   796
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   797
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   798
     b := ByteArray new:2.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   799
     b wordAt:1 put:16rFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   800
     b signedWordAt:1
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   801
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   802
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   803
    "Modified: 1.7.1996 / 21:14:38 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   804
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   805
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   806
int16At:byteIndex MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   807
    "return the 2-bytes starting at index as a signed Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   808
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   809
     The value is retrieved in the machines natural byte order.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   810
     This may be worth a primitive."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   811
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   812
    ^ self signedInt16At:byteIndex MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   813
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|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   816
     b := ByteArray new:2.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   817
     b wordAt:1 put:16rFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   818
     b signedWordAt:1
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   819
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   820
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   821
    "Modified: 1.7.1996 / 21:14:38 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   822
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   823
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   824
int16At:index put:anInteger
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   825
    "set the 2-bytes starting at index from the signed Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   826
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   827
     The stored value must be in the range -32768 .. +32676.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   828
     The value is stored in the machine's natural byteorder"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   829
23405
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
   830
    ^ self signedInt16At:index put:anInteger MSB:self isBigEndian
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   831
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   832
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   833
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   834
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   835
     b shortAt:1 put:1 bigEndian:true.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   836
     b shortAt:3 put:1 bigEndian:false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   837
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   838
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   839
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   840
    "Modified: / 1.7.1996 / 21:12:07 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   841
    "Created: / 5.3.1998 / 11:02:05 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   842
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   843
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   844
int16At:index put:anInteger MSB:bigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   845
    "set the 2-bytes starting at index from the signed Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   846
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   847
     The stored value must be in the range -32768 .. +32676.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   848
     The value is stored in the byteorder given by bigEndian.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   849
     This may be worth a primitive."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   850
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   851
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   852
    ^ self signedInt16At:index put:anInteger MSB:bigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   853
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   854
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   855
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   856
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   857
     b shortAt:1 put:1 bigEndian:true.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   858
     b shortAt:3 put:1 bigEndian:false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   859
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   860
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   861
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   862
    "Modified: / 1.7.1996 / 21:12:07 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   863
    "Created: / 5.3.1998 / 11:02:05 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   864
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   865
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   866
longAt:index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   867
    "return the 4-bytes starting at index as a signed Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   868
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   869
     The value is retrieved in the machines natural byte order,
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   870
     therefore, this should only be used for byte-data which is
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   871
     only used inside this machine.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   872
     To setup data packets which are to be sent to other machines,
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   873
     or stored into a file, always use longAt:MSB: and specify
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   874
     a definite byteOrder."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   875
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   876
    ^ self signedInt32At:index
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
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   880
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   881
     b unsignedLongAt:1 put:16rFFFFFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   882
     (b longAt:1)
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   883
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   884
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   885
    "Modified: / 1.7.1996 / 21:11:28 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   886
    "Modified: / 5.3.1998 / 12:06:28 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   887
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   888
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   889
longAt:index bigEndian:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   890
    "return the 4-bytes starting at index as a signed Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   891
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   892
     Depending on msb, the value is retrieved MSB-first or LSB-first.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   893
     This may be worth a primitive."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   894
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   895
    ^ self signedInt32At:index MSB:msb
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
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   899
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   900
     b unsignedLongAt:1 put:16rFFFFFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   901
     (b longAt:1)
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   902
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   903
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   904
    "Modified: / 1.7.1996 / 21:11:33 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   905
    "Created: / 5.3.1998 / 14:02:03 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   906
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   907
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   908
longAt:index put:value
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   909
    "set the 4-bytes starting at index from the signed Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   910
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   911
     The value is stored in the machine's natural byte order."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   912
23405
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
   913
    ^ self signedInt32At:index put:value MSB:self isBigEndian
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   914
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   915
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   916
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   917
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   918
     b longAt:1 put:-1.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   919
     (b unsignedLongAt:1) printStringRadix:16
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   920
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   921
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   922
    "Modified: / 1.7.1996 / 21:11:39 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   923
    "Created: / 5.3.1998 / 10:57:18 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   924
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   925
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   926
longAt:byteIndex put:anInteger bigEndian:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   927
    "store a signed long (32bit) integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   928
     The index is a smalltalk index (i.e. 1-based)."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   929
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   930
    ^ self signedInt32At:byteIndex put:anInteger MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   931
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   932
    "Created: / 9.5.1998 / 01:10:24 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   933
    "Modified: / 9.5.1998 / 01:13:34 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   934
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   935
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   936
longLongAt:index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   937
    "return the 8-bytes starting at index as a signed Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   938
     The index is a smalltalk index (i.e. 1-based).
23547
c69c97cec351 Issue #239: Fix all Smalltak/X source files to be in unicode (UTF8 without BOM) and prefixed by "{ Encoding: utf8 }" when any unicode character is present
Patrik Svestka <patrik.svestka@gmail.com>
parents: 23405
diff changeset
   939
     The value is retrieved in the machineÄs natural byte order.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   940
     This may be worth a primitive."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   941
23405
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
   942
    ^ self signedInt64At:index MSB:self isBigEndian
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   943
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   944
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   945
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   946
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   947
     b unsignedLongLongAt:1 put:16rFFFFFFFFFFFFFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   948
     (b longLongAt:1)
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   949
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   950
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   951
    "Modified: / 1.7.1996 / 21:11:28 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   952
    "Created: / 5.3.1998 / 14:40:05 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   953
    "Modified: / 5.3.1998 / 14:58:32 / stefan"
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
longLongAt:index bigEndian:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   957
    "return the 8-bytes starting at index as a signed Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   958
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   959
     The value is retrieved in the given byte order.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   960
     This may be worth a primitive."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   961
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   962
    ^ self signedInt64At:index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   963
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   964
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   965
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   966
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   967
     b unsignedLongLongAt:1 put:16rFFFFFFFFFFFFFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   968
     (b longLongAt:1 msb:true)
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   969
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   970
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   971
    "Modified: / 5.3.1998 / 12:06:28 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   972
    "Created: / 5.3.1998 / 14:40:54 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   973
    "Modified: / 9.5.1998 / 01:10:59 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   974
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   975
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   976
longLongAt:byteIndex put:anInteger
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   977
    "store a signed longLong (64bit) integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   978
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   979
     Same as #signedQuadWordAt:put: - for ST80 compatibility."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   980
23405
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
   981
    ^ self signedInt64At:byteIndex put:anInteger MSB:self isBigEndian
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   982
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   983
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   984
longLongAt:byteIndex put:anInteger bigEndian:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   985
    "store a signed longLong (64bit) integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   986
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   987
     Same as #signedQuadWordAt:put: - for ST80 compatibility."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   988
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   989
    ^ self signedInt64At:byteIndex put:anInteger MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   990
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   991
    "Created: / 9.5.1998 / 01:10:24 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   992
    "Modified: / 9.5.1998 / 01:13:34 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   993
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   994
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   995
quadWordAt:index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   996
    "return the 8-bytes starting at index as an (unsigned) Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   997
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   998
     Depending on msb, the value is retrieved MSB or LSB-first."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   999
23405
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  1000
   ^ self unsignedInt64At:index MSB:msb
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1001
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1002
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1003
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1004
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1005
     b := ByteArray withAll:#(1 2 3 4 5 6 7 8).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1006
     (b quadWordAt:1 MSB:false) printStringRadix:16
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1007
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1008
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1009
    "Modified: 5.11.1996 / 14:06:21 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1010
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1011
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1012
quadWordAt:index put:anInteger MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1013
    "set the 8-bytes starting at index from the (unsigned) Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1014
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1015
     The value must be in the range 0 to 16rFFFFFFFFFFFFFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1016
     Depending on msb, the value is stored MSB-first or LSB-first."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1017
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1018
    ^ self unsignedInt64At:index put:anInteger MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1019
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1020
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1021
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1022
     b := ByteArray new:8.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1023
     b quadWordAtIndex:1 put:16r0807060504030201 MSB:false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1024
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1025
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1026
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1027
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1028
shortAt:index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1029
    "return the 2-bytes starting at index as a signed Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1030
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1031
     The value is retrieved in the machines natural byte order.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1032
     This may be worth a primitive.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1033
     This is the ST80 equivalent of #signedWordAt:"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1034
23405
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  1035
    ^ self signedInt16At:index MSB:self isBigEndian
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1036
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1037
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1038
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1039
     b := ByteArray new:2.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1040
     b unsignedShortAt:1 put:16rFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1041
     b shortAt:1
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1042
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1043
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1044
    "Modified: / 1.7.1996 / 21:14:38 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1045
    "Created: / 5.3.1998 / 10:59:57 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1046
    "Modified: / 5.3.1998 / 23:39:38 / stefan"
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
shortAt:index bigEndian:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1050
    "return the 2-bytes starting at index as a signed Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1051
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1052
     The value is retrieved MSB-first, if the msb-arg is true;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1053
     LSB-first otherwise.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1054
     This is the ST80 equivalent of #signedWordAt:"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1055
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  1056
    ^ self signedInt16At:index MSB:msb
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1057
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1058
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1059
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1060
     b := ByteArray new:2.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1061
     b unsignedShortAt:1 put:16rFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1062
     b shortAt:1
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1063
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1064
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1065
    "Modified: / 1.7.1996 / 21:14:38 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1066
    "Created: / 5.3.1998 / 23:41:21 / stefan"
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
shortAt:index put:value
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1070
    "set the 2-bytes starting at index from the signed Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1071
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1072
     The stored value must be in the range -32768 .. +32676.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1073
     The value is stored in the machines natural byteorder.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1074
     This may be worth a primitive.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1075
     This is the ST80 equivalent of #signedWordAt:put:"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1076
23405
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  1077
    ^ self signedInt16At:index put:value MSB:self isBigEndian
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1078
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1079
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1080
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1081
     b := ByteArray new:6.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1082
     b shortAt:1 put:-1.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1083
     b shortAt:3 put:-2.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1084
     b shortAt:5 put:0.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1085
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1086
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1087
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1088
    "Modified: / 1.7.1996 / 21:12:07 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1089
    "Created: / 5.3.1998 / 11:02:05 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1090
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1091
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1092
shortAt:index put:value bigEndian:bigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1093
    "set the 2-bytes starting at index from the signed Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1094
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1095
     The stored value must be in the range -32768 .. +32676.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1096
     The value is stored in the byteorder given by bigEndian.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1097
     This may be worth a primitive."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1098
23405
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  1099
    ^ self signedInt16At:index put:value MSB:self isBigEndian
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1100
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1101
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1102
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1103
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1104
     b shortAt:1 put:1 bigEndian:true.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1105
     b shortAt:3 put:1 bigEndian:false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1106
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1107
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1108
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1109
    "Modified: / 1.7.1996 / 21:12:07 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1110
    "Created: / 5.3.1998 / 11:02:05 / stefan"
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
signedDoubleWordAt:index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1114
    "return the 4-bytes starting at index as a signed 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 machines natural byte order.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1117
     This may be worth a primitive."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1118
23405
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  1119
    ^ self signedInt32At:index MSB:self isBigEndian
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1120
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1121
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1122
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1123
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1124
     b doubleWordAt:1 put:16rFFFFFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1125
     (b signedDoubleWordAt:1)
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1126
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1127
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1128
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1129
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1130
     b signedDoubleWordAt:1 put:-1.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1131
     (b doubleWordAt:1)
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1132
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1133
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1134
    "Modified: 1.7.1996 / 21:11:28 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1135
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1136
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1137
signedDoubleWordAt:index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1138
    "return the 4-bytes starting at index as a (signed) Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1139
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1140
     The value is retrieved MSB-first, if the msb-arg is true;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1141
     LSB-first otherwise."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1142
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1143
    ^ self signedInt32At:index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1144
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|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1147
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1148
     b := ByteArray withAll:#(1 2 3 4).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1149
     (b signedDoubleWordAt:1 MSB:true) printStringRadix:16.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1150
     (b signedDoubleWordAt:1 MSB:false) printStringRadix:16
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1151
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1152
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1153
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1154
signedDoubleWordAt:index put:value
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1155
    "set the 4-bytes starting at index from the signed Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1156
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1157
     The value is stored in the machines natural byte order.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1158
     This may be worth a primitive."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1159
23405
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  1160
    ^ self signedInt32At:index put:value MSB:self isBigEndian
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1161
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1162
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1163
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1164
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1165
     b signedDoubleWordAt:1 put:-1.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1166
     (b doubleWordAt:1) printStringRadix:16
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1167
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1168
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1169
    "Modified: 1.7.1996 / 21:11:39 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1170
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1171
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1172
signedDoubleWordAt:index put:value MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1173
    "set the 4-bytes starting at index from the signed Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1174
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1175
     Depending on msb, the value is stored MSB-first or LSB-first.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1176
     This may be worth a primitive."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1177
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1178
    ^ self signedInt32At:index put:value MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1179
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1180
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1181
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1182
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1183
     b signedDoubleWordAt:1 put:-1.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1184
     (b doubleWordAt:1) printStringRadix:16
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1185
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1186
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1187
    "Modified: 1.7.1996 / 21:11:46 / cg"
15087
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1188
!
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1189
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1190
signedLongAt:index
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1191
    "return the 4-bytes starting at index as a signed Integer.
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1192
     The index is a smalltalk index (i.e. 1-based).
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1193
     The value is retrieved in the machine's natural byte order."
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1194
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1195
    ^ self signedInt32At:index
15087
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1196
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1197
    "
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1198
     |b|
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1199
     b := ByteArray new:4.
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1200
     b unsignedLongAt:1 put:16rFFFFFFFF.
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1201
     b signedLongAt:1
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1202
    "
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1203
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1204
    "Modified: 1.7.1996 / 21:14:38 / cg"
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1205
!
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1206
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1207
signedLongAt:index put:newValue
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1208
    "store a 4-bytes signed value starting at index.
15087
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1209
     The index is a smalltalk index (i.e. 1-based).
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1210
     The value is in the machine's natural byte order."
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1211
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1212
    ^ self signedInt32At:index put:newValue
15087
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1213
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1214
    "
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1215
     |b|
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1216
     b := ByteArray new:4.
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1217
     b signedLongAt:1 put:-1.
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1218
     b unsignedLongAt:1
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1219
    "
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1220
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1221
    "Modified: 1.7.1996 / 21:14:38 / cg"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1222
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1223
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1224
signedWordAt:index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1225
    "return the 2-bytes starting at index as a signed Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1226
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1227
     The value is retrieved in the machines natural byte order.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1228
     This may be worth a primitive."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1229
23405
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  1230
    ^ (self unsignedInt16At:index MSB:self isBigEndian) signExtendedShortValue
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1231
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1232
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1233
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1234
     b := ByteArray new:2.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1235
     b wordAt:1 put:16rFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1236
     b signedWordAt:1
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1237
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1238
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1239
    "Modified: 1.7.1996 / 21:14:38 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1240
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1241
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1242
signedWordAt:index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1243
    "return the 2-bytes starting at index as a signed Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1244
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1245
     The value is retrieved MSB-first if the msb-arg is true,
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1246
     LSB-first otherwise.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1247
     This may be worth a primitive."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1248
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1249
    ^ (self unsignedInt16At:index MSB:msb) signExtendedShortValue
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1250
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1251
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1252
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1253
     b := ByteArray new:2.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1254
     b wordAt:1 put:16r0080.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1255
     b signedWordAt:1 MSB:true.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1256
     b signedWordAt:1 MSB:false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1257
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1258
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1259
    "Modified: 1.7.1996 / 21:15:57 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1260
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1261
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1262
signedWordAt:byteIndex put:anInteger
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1263
    "set the 2-bytes starting at index from the signed Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1264
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1265
     The stored value must be in the range -32768 .. +32676.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1266
     The value is stored in the machine's natural byteorder."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1267
23405
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  1268
    ^ self signedInt16At:byteIndex put:anInteger MSB:self isBigEndian
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1269
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1270
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1271
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1272
     b := ByteArray new:6.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1273
     b shortAt:1 put:-1.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1274
     b shortAt:3 put:-2.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1275
     b shortAt:5 put:0.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1276
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1277
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1278
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1279
    "Modified: / 1.7.1996 / 21:12:07 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1280
    "Modified: / 5.3.1998 / 11:01:30 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1281
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1282
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1283
signedWordAt:byteIndex put:anInteger MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1284
    "set the 2-bytes starting at index from the signed Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1285
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1286
     The stored value must be in the range -32768 .. +32676.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1287
     The value is stored MSB-first, if the msb-arg is true;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1288
     LSB-first otherwise."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1289
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1290
    ^ self signedInt16At:byteIndex put:anInteger MSB:msb
19349
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
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1294
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1295
     b signedWordAt:1 put:-1.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1296
     b signedWordAt:3 put:-2.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1297
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1298
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1299
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1300
    "Modified: 1.7.1996 / 21:12:13 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1301
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1302
25414
dffa84757e23 Add more compatibility methods to `UninterpretedBytes`
Jan Vrany <jan.vrany@labware.com>
parents: 23547
diff changeset
  1303
unsignedByteAt:index
dffa84757e23 Add more compatibility methods to `UninterpretedBytes`
Jan Vrany <jan.vrany@labware.com>
parents: 23547
diff changeset
  1304
    "return the 1 byte at index as an (unsigned) Integer.
dffa84757e23 Add more compatibility methods to `UninterpretedBytes`
Jan Vrany <jan.vrany@labware.com>
parents: 23547
diff changeset
  1305
     The index is a smalltalk index (i.e. 1-based)."
dffa84757e23 Add more compatibility methods to `UninterpretedBytes`
Jan Vrany <jan.vrany@labware.com>
parents: 23547
diff changeset
  1306
dffa84757e23 Add more compatibility methods to `UninterpretedBytes`
Jan Vrany <jan.vrany@labware.com>
parents: 23547
diff changeset
  1307
    ^ self at:index
dffa84757e23 Add more compatibility methods to `UninterpretedBytes`
Jan Vrany <jan.vrany@labware.com>
parents: 23547
diff changeset
  1308
dffa84757e23 Add more compatibility methods to `UninterpretedBytes`
Jan Vrany <jan.vrany@labware.com>
parents: 23547
diff changeset
  1309
    "
dffa84757e23 Add more compatibility methods to `UninterpretedBytes`
Jan Vrany <jan.vrany@labware.com>
parents: 23547
diff changeset
  1310
     |b|
dffa84757e23 Add more compatibility methods to `UninterpretedBytes`
Jan Vrany <jan.vrany@labware.com>
parents: 23547
diff changeset
  1311
dffa84757e23 Add more compatibility methods to `UninterpretedBytes`
Jan Vrany <jan.vrany@labware.com>
parents: 23547
diff changeset
  1312
     b := ByteArray withAll:#(255 2 3 4).
dffa84757e23 Add more compatibility methods to `UninterpretedBytes`
Jan Vrany <jan.vrany@labware.com>
parents: 23547
diff changeset
  1313
     (b unsignedByteAt:1) printStringRadix:16
dffa84757e23 Add more compatibility methods to `UninterpretedBytes`
Jan Vrany <jan.vrany@labware.com>
parents: 23547
diff changeset
  1314
    "
dffa84757e23 Add more compatibility methods to `UninterpretedBytes`
Jan Vrany <jan.vrany@labware.com>
parents: 23547
diff changeset
  1315
dffa84757e23 Add more compatibility methods to `UninterpretedBytes`
Jan Vrany <jan.vrany@labware.com>
parents: 23547
diff changeset
  1316
    "Created: / 13-05-2021 / 11:19:13 / Jan Vrany <jan.vrany@labware.com>"
dffa84757e23 Add more compatibility methods to `UninterpretedBytes`
Jan Vrany <jan.vrany@labware.com>
parents: 23547
diff changeset
  1317
!
dffa84757e23 Add more compatibility methods to `UninterpretedBytes`
Jan Vrany <jan.vrany@labware.com>
parents: 23547
diff changeset
  1318
dffa84757e23 Add more compatibility methods to `UninterpretedBytes`
Jan Vrany <jan.vrany@labware.com>
parents: 23547
diff changeset
  1319
unsignedByteAt:index put: value
dffa84757e23 Add more compatibility methods to `UninterpretedBytes`
Jan Vrany <jan.vrany@labware.com>
parents: 23547
diff changeset
  1320
    ^ self at:index put: value
dffa84757e23 Add more compatibility methods to `UninterpretedBytes`
Jan Vrany <jan.vrany@labware.com>
parents: 23547
diff changeset
  1321
dffa84757e23 Add more compatibility methods to `UninterpretedBytes`
Jan Vrany <jan.vrany@labware.com>
parents: 23547
diff changeset
  1322
    "Created: / 13-05-2021 / 11:20:00 / Jan Vrany <jan.vrany@labware.com>"
dffa84757e23 Add more compatibility methods to `UninterpretedBytes`
Jan Vrany <jan.vrany@labware.com>
parents: 23547
diff changeset
  1323
!
dffa84757e23 Add more compatibility methods to `UninterpretedBytes`
Jan Vrany <jan.vrany@labware.com>
parents: 23547
diff changeset
  1324
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1325
unsignedLongAt:index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1326
    "return the 4-bytes starting at index as an (unsigned) Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1327
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1328
     The value is retrieved in the machine's natural byte order.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1329
     Subclasses may redefine this for better performance.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1330
     Same as doubleWordAt: for protocol completeness"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1331
23405
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  1332
    ^ self unsignedInt32At:index MSB:self isBigEndian
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1333
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1334
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1335
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1336
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1337
     b := ByteArray withAll:#(1 2 3 4).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1338
     (b unsignedLongAt:1) printStringRadix:16
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1339
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1340
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1341
    "Created: / 5.3.1998 / 11:56:53 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1342
    "Modified: / 5.3.1998 / 14:58:48 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1343
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1344
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1345
unsignedLongAt:index bigEndian:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1346
    "return the 4-bytes starting at index as an (unsigned) Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1347
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1348
     The value is retrieved MSB-first, if the msb-arg is true;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1349
     LSB-first otherwise.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1350
     Subclasses may redefine this for better performance.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1351
     Same as doubleWordAt:MSB: for protocol completeness"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1352
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1353
    ^ self unsignedInt32At:index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1354
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1355
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1356
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1357
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1358
     b := ByteArray withAll:#(1 2 3 4).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1359
     (b unsignedLongAt:1 bigEndian:true) printStringRadix:16.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1360
     (b unsignedLongAt:1 bigEndian:false) printStringRadix:16
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1361
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1362
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1363
    "Modified: / 21.1.1998 / 17:42:30 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1364
    "Created: / 5.3.1998 / 11:46:05 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1365
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1366
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1367
unsignedLongAt:index put:value
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1368
    "set the 4-bytes starting at index from the (unsigned) Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1369
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1370
     The value should be in the range 0 to 16rFFFFFFFF
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1371
     (for negative values, the stored value is not defined).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1372
     The value is stored in the machines natural byte order.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1373
     Subclasses may redefine this for better performance.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1374
     Same as doubleWordAt:put: for protocol completeness"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1375
23405
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  1376
    ^ self unsignedInt32At:index put:value MSB:self isBigEndian
19349
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
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1380
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1381
     b unsignedLongAt:1 put:16r04030201.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1382
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1383
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1384
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1385
    "Created: / 5.3.1998 / 11:57:44 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1386
    "Modified: / 5.3.1998 / 14:58:59 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1387
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1388
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1389
unsignedLongAt:index put:aNumber bigEndian:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1390
    "set the 4-bytes starting at index from the (unsigned) Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1391
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1392
     The value must be in the range 0 to 16rFFFFFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1393
     The value is stored MSB-first if msb is true; LSB-first otherwise.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1394
     Subclasses may redefine this for better performance.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1395
     Same as doubleWordAt:put:MSB: for protocol completeness"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1396
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1397
    ^ self unsignedInt32At:index put:aNumber MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1398
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1399
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1400
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1401
     b := ByteArray new:8.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1402
     b unsignedLongAt:1 put:16r04030201 bigEndian:true.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1403
     (b unsignedLongAt:1 bigEndian:false) printStringRadix:16
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1404
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1405
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1406
    "Modified: / 21.1.1998 / 17:43:34 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1407
    "Created: / 5.3.1998 / 11:43:53 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1408
    "Modified: / 5.3.1998 / 11:47:30 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1409
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1410
25414
dffa84757e23 Add more compatibility methods to `UninterpretedBytes`
Jan Vrany <jan.vrany@labware.com>
parents: 23547
diff changeset
  1411
unsignedLongLongAt:index
dffa84757e23 Add more compatibility methods to `UninterpretedBytes`
Jan Vrany <jan.vrany@labware.com>
parents: 23547
diff changeset
  1412
    "return the 8-bytes starting at index as an (unsigned) Integer.
dffa84757e23 Add more compatibility methods to `UninterpretedBytes`
Jan Vrany <jan.vrany@labware.com>
parents: 23547
diff changeset
  1413
     The index is a smalltalk index (i.e. 1-based).
dffa84757e23 Add more compatibility methods to `UninterpretedBytes`
Jan Vrany <jan.vrany@labware.com>
parents: 23547
diff changeset
  1414
     The value is retrieved in the machine's natural byte order.
dffa84757e23 Add more compatibility methods to `UninterpretedBytes`
Jan Vrany <jan.vrany@labware.com>
parents: 23547
diff changeset
  1415
     Subclasses may redefine this for better performance.
dffa84757e23 Add more compatibility methods to `UninterpretedBytes`
Jan Vrany <jan.vrany@labware.com>
parents: 23547
diff changeset
  1416
     Same as doubleWordAt: for protocol completeness"
dffa84757e23 Add more compatibility methods to `UninterpretedBytes`
Jan Vrany <jan.vrany@labware.com>
parents: 23547
diff changeset
  1417
dffa84757e23 Add more compatibility methods to `UninterpretedBytes`
Jan Vrany <jan.vrany@labware.com>
parents: 23547
diff changeset
  1418
    ^ self unsignedInt64At:index MSB:self isBigEndian
dffa84757e23 Add more compatibility methods to `UninterpretedBytes`
Jan Vrany <jan.vrany@labware.com>
parents: 23547
diff changeset
  1419
dffa84757e23 Add more compatibility methods to `UninterpretedBytes`
Jan Vrany <jan.vrany@labware.com>
parents: 23547
diff changeset
  1420
    "
dffa84757e23 Add more compatibility methods to `UninterpretedBytes`
Jan Vrany <jan.vrany@labware.com>
parents: 23547
diff changeset
  1421
     |b|
dffa84757e23 Add more compatibility methods to `UninterpretedBytes`
Jan Vrany <jan.vrany@labware.com>
parents: 23547
diff changeset
  1422
dffa84757e23 Add more compatibility methods to `UninterpretedBytes`
Jan Vrany <jan.vrany@labware.com>
parents: 23547
diff changeset
  1423
     b := ByteArray withAll:#(1 2 3 4 5 6 7 8).
dffa84757e23 Add more compatibility methods to `UninterpretedBytes`
Jan Vrany <jan.vrany@labware.com>
parents: 23547
diff changeset
  1424
     (b unsignedLongLongAt:1) printStringRadix:16
dffa84757e23 Add more compatibility methods to `UninterpretedBytes`
Jan Vrany <jan.vrany@labware.com>
parents: 23547
diff changeset
  1425
    "
dffa84757e23 Add more compatibility methods to `UninterpretedBytes`
Jan Vrany <jan.vrany@labware.com>
parents: 23547
diff changeset
  1426
dffa84757e23 Add more compatibility methods to `UninterpretedBytes`
Jan Vrany <jan.vrany@labware.com>
parents: 23547
diff changeset
  1427
    "Created: / 13-05-2021 / 11:15:34 / Jan Vrany <jan.vrany@labware.com>"
dffa84757e23 Add more compatibility methods to `UninterpretedBytes`
Jan Vrany <jan.vrany@labware.com>
parents: 23547
diff changeset
  1428
!
dffa84757e23 Add more compatibility methods to `UninterpretedBytes`
Jan Vrany <jan.vrany@labware.com>
parents: 23547
diff changeset
  1429
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1430
unsignedLongLongAt:index bigEndian:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1431
    "return the 8-bytes starting at index as an (unsigned) Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1432
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1433
     Depending on msb, the value is retrieved MSB or LSB-first."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1434
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1435
    ^ self unsignedInt64At:index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1436
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1437
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1438
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1439
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1440
     b := ByteArray withAll:#(1 2 3 4 5 6 7 8).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1441
     (b unsignedLongLongAt:1 bigEndian:false) printStringRadix:16
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1442
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1443
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1444
    "Modified: / 5.11.1996 / 14:06:21 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1445
    "Modified: / 5.3.1998 / 14:04:44 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1446
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1447
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1448
unsignedLongLongAt:index put:anInteger
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1449
    "set the 8-bytes starting at index from the (unsigned) Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1450
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1451
     The value must be in the range 0 to 16rFFFFFFFFFFFFFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1452
     The value is stored in natural byte order."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1453
23405
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  1454
    ^ self unsignedInt64At:index put:anInteger MSB:self isBigEndian
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1455
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1456
    "Created: / 5.3.1998 / 14:44:00 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1457
    "Modified: / 5.3.1998 / 15:02:32 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1458
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1459
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1460
unsignedLongLongAt:index put:anInteger bigEndian:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1461
    "set the 8-bytes starting at index from the (unsigned) Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1462
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1463
     The value must be in the range 0 to 16rFFFFFFFFFFFFFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1464
     Depending on msb, the value is stored MSB-first or LSB-first."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1465
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1466
    ^ self unsignedInt64At:index put:anInteger MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1467
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1468
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1469
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1470
     b := ByteArray new:8.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1471
     b unsignedLongLongAt:1 put:16r0807060504030201 bigEndian:false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1472
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1473
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1474
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1475
    "Created: / 5.3.1998 / 14:06:02 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1476
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1477
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1478
unsignedShortAt:index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1479
    "return the 2-bytes starting at index as an (unsigned) Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1480
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1481
     The value is retrieved in the machines natural byte order
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1482
     Subclasses may redefine this for better performance.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1483
     This is the ST80 equivalent of #wordAt:"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1484
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1485
23405
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  1486
    ^ self unsignedInt16At:index MSB:self isBigEndian
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1487
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1488
    "Created: / 5.3.1998 / 11:38:25 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1489
    "Modified: / 5.3.1998 / 14:59:25 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1490
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1491
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1492
unsignedShortAt:index bigEndian:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1493
    "return the 2-bytes starting at index as an (unsigned) Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1494
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1495
     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
  1496
     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
  1497
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1498
    ^ self unsignedInt16At:index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1499
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1500
    "Modified: / 21.1.1998 / 17:46:07 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1501
    "Created: / 5.3.1998 / 11:49:29 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1502
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1503
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1504
unsignedShortAt:index put:value
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1505
    "set the 2-bytes starting at index from the (unsigned) Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1506
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1507
     The stored value must be in the range 0 .. 16rFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1508
     The value is stored in the machines natural byteorder."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1509
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1510
    ^ self unsignedInt16At:index put:value
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1511
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1512
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1513
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1514
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1515
     b unsignedShortAt:1 put:16r0102.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1516
     b unsignedShortAt:3 put:16r0304.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1517
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1518
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1519
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1520
    "Created: / 5.3.1998 / 11:54:52 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1521
    "Modified: / 5.3.1998 / 14:59:38 / stefan"
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
unsignedShortAt:index put:value bigEndian:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1525
    "set the 2-bytes starting at index from the (unsigned) Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1526
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1527
     The stored value must be in the range 0 .. 16rFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1528
     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
  1529
     lower index) if msb is false, MSB-first otherwise"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1530
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1531
    ^ self unsignedInt16At:index put:value MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1532
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1533
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1534
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1535
     b := ByteArray new:8.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1536
     b unsignedShortAt:1 put:16r0102 bigEndian:false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1537
     b unsignedShortAt:3 put:16r0304 bigEndian:false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1538
     b unsignedShortAt:5 put:16r0102 bigEndian:true.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1539
     b unsignedShortAt:7 put:16r0304 bigEndian:true.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1540
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1541
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1542
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1543
    "Modified: / 21.1.1998 / 17:48:15 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1544
    "Modified: / 5.3.1998 / 11:52:28 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1545
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1546
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1547
wordAt:index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1548
    "return the 2-bytes starting at index as an (unsigned) Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1549
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1550
     The value is retrieved in the machines natural byte order
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1551
     Subclasses may redefine this for better performance."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1552
23405
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  1553
    ^ self unsignedInt16At:index MSB:self isBigEndian
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1554
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1555
    "Modified: / 5.3.1998 / 14:59:51 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1556
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1557
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1558
wordAt:index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1559
    "return the 2-bytes starting at index as an (unsigned) Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1560
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1561
     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
  1562
     LSB-first (i.e. low 8-bits at lower byte index) if its false.
23405
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  1563
     Notice:
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1564
        the index is a byte index; thus, this allows for unaligned access to
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1565
        words on any boundary.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1566
     Question: should it be retrieve signed values ? (see ByteArray>>signedWordAt:)"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1567
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1568
    ^ self unsignedInt16At:index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1569
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1570
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1571
wordAt:index put:value
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1572
    "set the 2-bytes starting at index from the (unsigned) Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1573
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1574
     The stored value must be in the range 0 .. 16rFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1575
     The value is stored in the machines natural byteorder.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1576
     Question: should it accept signed values ? (see ByteArray>>signedWordAt:put:)"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1577
23405
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  1578
    ^ self unsignedInt16At:index put:value MSB:self isBigEndian
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1579
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1580
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1581
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1582
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1583
     b wordAt:1 put:16r0102.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1584
     b wordAt:3 put:16r0304.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1585
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1586
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1587
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1588
    "Modified: / 5.3.1998 / 15:00:03 / stefan"
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
wordAt:index put:value MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1592
    "set the 2-bytes starting at index from the (unsigned) Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1593
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1594
     The stored value must be in the range 0 .. 16rFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1595
     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
  1596
     lower index) if msb is false, MSB-first otherwise.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1597
     Question: should it accept signed values ? (see ByteArray>>signedWordAt:put:)"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1598
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1599
    ^ self unsignedInt16At:index put:value MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1600
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1601
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1602
     b := ByteArray new:8.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1603
     b wordAt:1 put:16r0102 MSB:false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1604
     b wordAt:3 put:16r0304 MSB:false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1605
     b wordAt:5 put:16r0102 MSB:true.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1606
     b wordAt:7 put:16r0304 MSB:true.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1607
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1608
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1609
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1610
    "Modified: / 21.1.1998 / 17:48:15 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1611
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1612
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1613
wordAtWordIndex:int16Index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1614
    "return the unsigned short (uint16) at index, anInteger.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1615
     Fetching in the machines natural byte order.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1616
     Indices are 1-based and scaled as appropriate to allow
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1617
     accessing the memory as an array of word entries.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1618
     (i.e. indices are 1, 2, ...)"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1619
23405
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  1620
    ^ self unsignedInt16At:int16Index MSB:self isBigEndian
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1621
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1622
    "Created: / 21.1.1998 / 17:48:26 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1623
    "Modified: / 5.3.1998 / 15:00:16 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1624
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1625
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1626
wordAtWordIndex:int16Index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1627
    "return the unsigned short (uint16) at index, anInteger.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1628
     Fetching is MSB if msb is true, LSB otherwise.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1629
     Indices are 1-based and scaled as appropriate to allow
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1630
     accessing the memory as an array of word entries.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1631
     (i.e. indices are 1, 2, ...)"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1632
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1633
    ^ self unsignedInt16At:((int16Index - 1) * 2 + 1) MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1634
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1635
    "Created: / 21.1.1998 / 17:48:30 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1636
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1637
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1638
wordAtWordIndex:int16Index put:anInteger
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1639
    "set the unsigned short (uint16) at index, anInteger.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1640
     Storing in the machine's natural byte order.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1641
     Indices are 1-based and scaled as appropriate to allow
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1642
     accessing the memory as an array of word entries.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1643
     (i.e. indices are 1, 2, ...)"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1644
23405
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  1645
    ^ self unsignedInt16At:int16Index put:anInteger MSB:self isBigEndian
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1646
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1647
    "Created: / 21.1.1998 / 17:48:34 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1648
    "Modified: / 5.3.1998 / 15:00:27 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1649
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1650
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1651
wordAtWordIndex:int16Index put:anInteger MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1652
    "set the short at index, anInteger.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1653
     Storing is MSB if msb is true, LSB otherwise.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1654
     Indices are 1-based and scaled as appropriate to allow
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1655
     accessing the memory as an array of word entries.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1656
     (i.e. indices are 1, 2, ...)"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1657
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1658
    ^ self unsignedInt16At:((int16Index - 1) * 2 + 1) put:anInteger MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1659
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1660
    "Created: / 21.1.1998 / 17:48:38 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1661
! !
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1662
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1663
!UninterpretedBytes methodsFor:'Compatibility-Squeak'!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1664
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1665
copyFromByteArray:aByteArray
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1666
    "copy as much as possible from aByteArray"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1667
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1668
    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
  1669
! !
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  1670
9185
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1671
!UninterpretedBytes methodsFor:'Compatibility-V''Age'!
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1672
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1673
uint32At:zeroBasedIndex
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1674
    "return the 4-bytes starting at index as (unsigned) Integer.
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1675
     WARNING: The index is a C index (i.e. 0-based).
19301
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1676
     The value is retrieved in the machine's natural byte order.
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1677
     Similar to unsignedInt32At:, except for the index base"
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1678
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1679
    ^ self unsignedInt32At:zeroBasedIndex+1
9185
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1680
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1681
    "
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1682
     |b|
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1683
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1684
     b := ByteArray withAll:#(0 0 0 0).
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1685
     b uint32At:0 put:16r12345678.
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1686
     b uint32At:0.
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1687
     b
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1688
    "
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1689
!
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1690
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1691
uint32At:zeroBasedIndex put:anInteger
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1692
    "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
  1693
     WARNING: The index is a C index (i.e. 0-based).
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1694
     The value is stored in the machine's natural byte order.
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1695
     Similar to unsignedInt32At:put:, except for the index base"
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1696
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1697
    ^ self unsignedInt32At:zeroBasedIndex+1 put:anInteger
9185
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1698
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1699
    "
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1700
     |b|
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1701
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1702
     b := ByteArray withAll:#(0 0 0 0).
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1703
     b uint32At:0 put:16r12345678.
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1704
     b
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1705
    "
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1706
! !
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1707
16796
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1708
!UninterpretedBytes methodsFor:'accessing-arbitrary-long ints'!
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1709
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1710
nativeIntAt:index
23405
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  1711
    "return the 4- or 8-bytes (depending on the native integer/pointer size)
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1712
     starting at index as a signed Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1713
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1714
     The value is retrieved in the machines natural byte order,
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1715
     therefore, this should only be used for byte-data which is
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1716
     only used inside this machine."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1717
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1718
    |w|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1719
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1720
%{
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1721
    /*
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1722
     * handle the most common cases fast ...
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1723
     */
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1724
    if (__isSmallInteger(index)) {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1725
        unsigned char *cp;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1726
        INT sz;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1727
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1728
        __fetchBytePointerAndSize__(self, &cp, &sz);
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1729
        if (cp) {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1730
            unsigned INT idx = ((unsigned INT)__intVal(index)) - 1;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1731
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1732
            if ((idx+(sizeof(INT)-1)) < sz) {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1733
                cp += idx;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1734
#if defined(__i386__)
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1735
                /*
20816
986549374231 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20595
diff changeset
  1736
                 * aligned or not, we don't care (i386 can do both)
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1737
                 */
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1738
                {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1739
                    INT iVal = ((INT *)cp)[0];
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1740
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1741
                    RETURN (__MKINT(iVal));
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1742
                }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1743
#else
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1744
                /*
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1745
                 * aligned
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1746
                 */
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1747
                if (((INT)cp & (sizeof(INT)-1)) == 0) {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1748
                    INT iVal = ((INT *)cp)[0];
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1749
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1750
                    RETURN (__MKINT(iVal));
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1751
                }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1752
#endif
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1753
            }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1754
        }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1755
    }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1756
%}.
19402
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1757
    SmallInteger maxBytes == 8 ifTrue:[
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1758
        ^ self signedInt64At:index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1759
    ].
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1760
    ^ self signedInt32At:index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1761
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1762
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1763
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1764
     b := ByteArray new:8.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1765
     b nativeIntAt:1 put:SmallInteger maxVal.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1766
     b nativeIntAt:1
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1767
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1768
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1769
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1770
nativeIntAt:index put:value
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1771
    "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
  1772
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1773
     The value is stored in the machine's natural byte order."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1774
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1775
%{  /* NOCONTEXT */
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1776
    /*
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1777
     * handle the most common cases fast ...
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1778
     */
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1779
    if (__isSmallInteger(index)) {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1780
        unsigned char *cp;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1781
        INT sz;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1782
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1783
        __fetchBytePointerAndSize__(self, &cp, &sz);
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1784
        if (cp) {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1785
            unsigned INT idx = ((unsigned INT)__intVal(index)) - 1;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1786
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1787
            if ((idx+(sizeof(INT)-1)) < sz) {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1788
                cp += idx;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1789
                /*
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1790
                 * aligned
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1791
                 */
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1792
                if (((INT)cp & (sizeof(INT)-1)) == 0) {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1793
                    INT __v;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1794
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1795
                    if (__isSmallInteger(value)) {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1796
                        // how about a range check?
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1797
                        ((INT *)cp)[0] = (INT)(__intVal(value));
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1798
                        RETURN (value);
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1799
                    }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1800
                    if ((__v = __signedLongIntVal(value)) != 0) {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1801
                        // how about a range check?
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1802
                        ((INT *)cp)[0] = (INT)(__v);
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1803
                        RETURN (value);
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1804
                    }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1805
                }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1806
            }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1807
        }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1808
    }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1809
%}.
19402
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1810
    SmallInteger maxBytes == 8 ifTrue:[
23405
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  1811
        ^ self signedInt64At:index put:value MSB:self isBigEndian
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1812
    ].
23405
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  1813
    ^ self signedInt32At:index put:value MSB:self isBigEndian
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1814
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1815
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1816
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1817
     b := ByteArray new:8.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1818
     b nativeIntAt:1 put:SmallInteger maxVal.
23405
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  1819
     (b nativeIntAt:1)
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1820
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1821
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1822
19402
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1823
signedIntegerAt:index length:len bigEndian:bigEndian
19197
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1824
    "return the n-byte signed integer starting at index.
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1825
     With n=1, this returns the single signed byte's value,
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1826
     n=2, a signed short, n=4 a signed int etc.
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1827
     Useful to extract arbitrary long integers"
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1828
19402
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1829
    |val highByte
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1830
     iIndex "{ Class:SmallInteger }"
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1831
     last "{ Class:SmallInteger }"|
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1832
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1833
    iIndex := index.
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1834
    last := iIndex + len - 1.
19197
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1835
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1836
    val := 0.
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1837
    bigEndian ifTrue:[
19402
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1838
        highByte := self at:iIndex.
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1839
        iIndex to:last do:[:i |
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1840
            val := (val<<8) + (self byteAt:i)
19197
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1841
        ]
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1842
    ] ifFalse:[
19402
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1843
        highByte := self at:last.
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1844
        last to:iIndex by:-1 do:[:i |
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1845
            val := (val<<8) + (self byteAt:i)
19197
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1846
        ]
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1847
    ].
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1848
    (highByte bitTest:16r80) ifTrue:[
19402
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1849
        ^ val - (1 bitShift:(len*8))
23405
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  1850
    ].
19197
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1851
    ^ val
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1852
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1853
    "
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1854
     |b|
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1855
     b := #[ 16r01 16rFF 16r00 16r04 16r05 ].
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1856
     (b signedIntegerAt:2 length:2 bigEndian:false). ' -> 255 (00FF) '.
23405
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  1857
     (b signedIntegerAt:2 length:2 bigEndian:true).  ' -> -256 (FF00) '.
19197
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1858
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1859
     b := #[ 16r01 16r00 16rFF 16r04 16r05 ].
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1860
     (b signedIntegerAt:2 length:2 bigEndian:false). ' -> -256 (FF00) '.
23405
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  1861
     (b signedIntegerAt:2 length:2 bigEndian:true).  ' -> 255 (00FF) '.
19197
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1862
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1863
     b := #[ 16r01 16r7F 16r00 16r04 16r05 ].
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1864
     (b signedIntegerAt:2 length:2 bigEndian:false). ' -> 127 (007F) '.
23405
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  1865
     (b signedIntegerAt:2 length:2 bigEndian:true).  ' -> 32512 (7F00) '.
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  1866
    "
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  1867
19197
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1868
    "
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1869
     |b|
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1870
     b := #[ 16r01 16r02 16r03 16r04 16r05 ].
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1871
     (b signedIntegerAt:2 length:4 bigEndian:false).
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1872
     (b signedIntegerAt:2 length:4 bigEndian:true).
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1873
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1874
     b := #[ 16r01 16r82 16r03 16r04 16r05 ].
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1875
     (b signedIntegerAt:2 length:4 bigEndian:false).
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1876
     (b signedIntegerAt:2 length:4 bigEndian:true).
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1877
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1878
     b := #[ 16r01 16r82 16r03 16r04 16r85 ].
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1879
     (b signedIntegerAt:2 length:4 bigEndian:false).
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1880
     (b signedIntegerAt:2 length:4 bigEndian:true).
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1881
    "
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1882
!
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1883
19402
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1884
unsignedIntegerAt:index length:len bigEndian:bigEndian
16796
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1885
    "return the n-byte unsigned integer starting at index.
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1886
     With n=1, this returns the single byte's value,
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1887
     n=2, an unsigned short, n=4 an unsigned int etc.
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1888
     Useful to extract arbitrary long integers"
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1889
19402
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1890
    |val
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1891
     iIndex "{ Class:SmallInteger }"
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1892
     last "{ Class:SmallInteger }"|
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1893
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1894
    iIndex := index.
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1895
    last := iIndex + len - 1.
16796
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1896
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1897
    val := 0.
18346
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
  1898
    bigEndian ifTrue:[
19402
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1899
        iIndex to:last do:[:i |
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1900
            val := (val<<8) + (self byteAt:i)
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1901
        ]
18346
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
  1902
    ] ifFalse:[
19402
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1903
        last to:iIndex by:-1 do:[:i |
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1904
            val := (val<<8) + (self byteAt:i)
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1905
        ]
16796
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1906
    ].
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1907
    ^ val
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1908
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1909
    "
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1910
     |b|
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1911
     b := #[ 16r01 16r02 16r03 16r04 16r05 ].
18346
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
  1912
     (b unsignedIntegerAt:2 length:4 bigEndian:false).
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
  1913
     (b unsignedIntegerAt:2 length:4 bigEndian:true).
16796
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1914
    "
19301
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1915
!
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1916
19402
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1917
unsignedIntegerAt:index put:newValue length:len bigEndian:bigEndian
19301
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1918
    "store the n-byte unsigned integer starting at index.
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1919
     With n=1, this stores a single byte's value,
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1920
     n=2, an unsigned short, n=4 an unsigned int etc.
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1921
     Useful to replace arbitrary long integers"
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1922
19402
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1923
    |val
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1924
     iIndex "{ Class:SmallInteger }"
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1925
     last "{ Class:SmallInteger }"|
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1926
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1927
    iIndex := index.
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1928
    last := iIndex + len - 1.
19301
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1929
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1930
    val := newValue.
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1931
    bigEndian ifTrue:[
19402
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1932
        iIndex to:last do:[:i |
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1933
            self byteAt:i put:(val bitAnd:16rFF).
19301
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1934
            val := val bitShift:-8.
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1935
        ]
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1936
    ] ifFalse:[
19402
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1937
        last to:iIndex by:-1 do:[:i |
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1938
            self byteAt:i put:(val bitAnd:16rFF).
19301
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1939
            val := val bitShift:-8.
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1940
        ]
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1941
    ].
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1942
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1943
    "
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1944
     |b|
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1945
     b := #[ 16r01 16r02 16r03 16r04 16r05 ] copy.
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1946
     (b unsignedIntegerAt:2 put:16r11223344 length:3 bigEndian:false). b.
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1947
     (b unsignedIntegerAt:2 put:16r11223344 length:3 bigEndian:true). b.
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1948
    "
16796
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1949
! !
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1950
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1951
!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
  1952
4422
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1953
bcdByteAt:index
13724
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  1954
    "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
  1955
     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
  1956
     (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
  1957
4425
a10011c1b6eb bcd support - again.
Claus Gittinger <cg@exept.de>
parents: 4422
diff changeset
  1958
    ^ (self byteAt:index) decodeFromBCD
4422
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1959
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1960
    "
23405
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  1961
     #[ 16r55 ] bcdByteAt:1
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  1962
     #[ 16r99 ] bcdByteAt:1
19352
3c5b0c74be2e #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19351
diff changeset
  1963
     #[ 16rAA ] bcdByteAt:1
4422
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1964
    "
13724
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  1965
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  1966
    "Modified (comment): / 26-09-2011 / 11:57:33 / cg"
4422
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1967
!
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1968
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1969
bcdByteAt:index put:aNumber
13724
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  1970
    "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
  1971
     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
  1972
     (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
  1973
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1974
    (aNumber between:0 and:99) ifFalse:[
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  1975
        self error:'invalid value for BCD encoding'
4422
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1976
    ].
4425
a10011c1b6eb bcd support - again.
Claus Gittinger <cg@exept.de>
parents: 4422
diff changeset
  1977
    ^ self byteAt:index put:aNumber encodeAsBCD
4422
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1978
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1979
    "
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1980
     (((ByteArray new:1) bcdByteAt:1 put:55; yourself) at:1) hexPrintString
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1981
     (((ByteArray new:1) bcdByteAt:1 put:99; yourself) at:1) hexPrintString
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1982
     (((ByteArray new:1) bcdByteAt:1 put:100; yourself) at:1) hexPrintString
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1983
     (((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
  1984
    "
13724
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  1985
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  1986
    "Modified (comment): / 26-09-2011 / 11:57:36 / cg"
4422
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1987
!
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1988
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1989
byteAt:byteIndex
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1990
    "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
  1991
     The index is a smalltalk index (i.e. 1-based)."
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1992
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1993
%{
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1994
    if (__isSmallInteger(byteIndex)) {
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1995
        unsigned char *cp;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1996
        INT sz;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1997
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1998
        __fetchBytePointerAndSize__(self, &cp, &sz);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1999
        if (cp) {
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2000
            unsigned INT idx = ((unsigned INT)__intVal(byteIndex)) - 1;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2001
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2002
            if (idx < sz) {
19830
1e518848efb6 #OTHER by stefan
Stefan Vogel <sv@exept.de>
parents: 19629
diff changeset
  2003
                unsigned char ch = cp[idx] & 0xFF;
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2004
                RETURN (__mkSmallInteger( ch ));
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2005
            }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2006
        }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2007
    }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2008
%}.
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2009
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2010
    ^ self at:byteIndex
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2011
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2012
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2013
     |b|
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2014
     b := ByteArray new:3.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2015
     b at:1 put:16rFF.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2016
     b at:2 put:16r7F.
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2017
     b at:3 put:16r80.
23405
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  2018
     b byteAt:1.
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  2019
     b byteAt:2.
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  2020
     b byteAt:3.
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2021
    "
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2022
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2023
    "Modified: / 01-07-1996 / 21:13:53 / cg"
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2024
    "Modified (comment): / 26-09-2011 / 11:57:14 / cg"
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2025
!
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2026
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2027
byteAt:byteIndex put:anInteger
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2028
    "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
  2029
     The index is a smalltalk index (i.e. 1-based)."
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2030
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2031
%{
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2032
    if (__isSmallInteger(byteIndex) && __isSmallInteger(anInteger)) {
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2033
        unsigned char *cp;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2034
        INT sz;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2035
        INT val = __intVal(anInteger);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2036
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2037
        if ( ((unsigned INT)val) <= 0xFF ) {
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2038
            __fetchBytePointerAndSize__(self, &cp, &sz);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2039
            if (cp) {
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2040
                unsigned INT idx = ((unsigned INT)__intVal(byteIndex)) - 1;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2041
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2042
                if (idx < sz) {
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2043
                    cp[idx] = val & 0xFF;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2044
                    RETURN (anInteger);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2045
                }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2046
            }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2047
        }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2048
    }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2049
%}.
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2050
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2051
    ^ self at:byteIndex put:anInteger
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2052
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2053
    "
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2054
     |b|
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2055
     b := ByteArray new:3.
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2056
     b byteAt:1 put:16rFF.
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2057
     b byteAt:2 put:16r7F.
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2058
     b byteAt:3 put:16r80.
23405
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  2059
     b signedByteAt:1.
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  2060
     b signedByteAt:2.
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  2061
     b signedByteAt:3.
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2062
    "
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2063
!
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2064
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2065
signedByteAt:byteIndex
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2066
    "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
  2067
     The index is a smalltalk index (i.e. 1-based).
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2068
     This may be worth a primitive."
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2069
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2070
%{
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2071
    /*
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2072
     * handle the most common cases fast ...
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2073
     */
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2074
    if (__isSmallInteger(byteIndex)) {
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2075
        unsigned char *cp;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2076
        INT sz;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2077
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2078
        __fetchBytePointerAndSize__(self, &cp, &sz);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2079
        if (cp) {
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2080
            unsigned INT idx = ((unsigned INT)__intVal(byteIndex)) - 1;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2081
            char ch;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2082
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2083
            if (idx < sz) {
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2084
                cp += idx;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2085
                ch = cp[0];
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2086
# ifndef HAS_SIGNED_CHAR
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2087
                if ( (unsigned int)ch >= 0x80 ) {
23405
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  2088
                    ch = ch - 0x100;
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2089
                }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2090
#endif
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2091
                RETURN (__mkSmallInteger( ch ));
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2092
            }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2093
        }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2094
    }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2095
%}.
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2096
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2097
    ^ (self byteAt:byteIndex) signExtendedByteValue
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2098
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2099
    "
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2100
     |b|
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2101
     b := ByteArray new:3.
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2102
     b at:1 put:16rFF.
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2103
     b at:2 put:16r7F.
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2104
     b at:3 put:16r80.
23405
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  2105
     b byteAt:1.
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  2106
     b byteAt:2.
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  2107
     b byteAt:3.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2108
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2109
13724
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  2110
    "Modified: / 01-07-1996 / 21:13:53 / cg"
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  2111
    "Modified (comment): / 26-09-2011 / 11:57:14 / cg"
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2112
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2113
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2114
signedByteAt:index put:aSignedByteValue
13724
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  2115
    "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
  2116
     The index is a smalltalk index (i.e. 1-based).
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2117
     Return the signedByteValue argument.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2118
     This may be worth a primitive."
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2119
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2120
    |b "{ Class: SmallInteger }"|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2121
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2122
    aSignedByteValue >= 0 ifTrue:[
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2123
        b := aSignedByteValue
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2124
    ] ifFalse:[
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2125
        b := 16r100 + aSignedByteValue
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2126
    ].
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2127
    self byteAt:index put:b.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2128
    ^ aSignedByteValue
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2129
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2130
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2131
     |b|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2132
     b := ByteArray new:2.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2133
     b signedByteAt:1 put:-1.
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2134
     b at:1
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2135
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2136
13724
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  2137
    "Modified: / 01-07-1996 / 21:12:37 / cg"
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  2138
    "Modified (comment): / 26-09-2011 / 11:57:18 / cg"
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2139
! !
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2140
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2141
!UninterpretedBytes methodsFor:'accessing-floats & doubles'!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2142
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2143
doubleAt:index
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2144
    "return the 8-bytes starting at index as a Float.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2145
     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
  2146
     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
  2147
     Notice also, that the bytes are expected to be in this machine's
19629
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2148
     float representation and byte order - if the bytearray originated from another
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2149
     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
  2150
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2151
    |newFloat|
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2152
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2153
%{
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2154
    /*
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2155
     * handle the most common cases fast ...
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2156
     */
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2157
    if (__isSmallInteger(index)) {
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2158
        unsigned char *cp;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2159
        INT sz;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2160
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2161
        __fetchBytePointerAndSize__(self, &cp, &sz);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2162
        if (cp) {
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2163
            INT idx = __intVal(index) - 1;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2164
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2165
            if ((idx >= 0) && ((idx+(sizeof(double)-1)) < sz)) {
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2166
                cp += idx;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2167
                /*
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2168
                 * aligned
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2169
                 */
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2170
                if (((INT)cp & (sizeof(double)-1)) == 0) {
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2171
                    double dVal = ((double *)cp)[0];
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2172
                    OBJ f;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2173
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2174
                    __qMKFLOAT(f, dVal);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2175
                    RETURN (f);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2176
                }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2177
            }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2178
        }
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2179
    }
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2180
%}.
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2181
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2182
    newFloat := Float basicNew.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2183
    1 to:8 do:[:destIndex|
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2184
        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
  2185
    ].
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2186
    ^ newFloat.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2187
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2188
    "
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2189
     |b|
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2190
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2191
     b := ByteArray new:20.
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2192
     b doubleAt:1 put:(Float pi).
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2193
     Transcript showCR:b.
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2194
     Transcript showCR:(b doubleAt:1)
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2195
    "
3207
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
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
  2199
    "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
  2200
     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
  2201
     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
  2202
     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
  2203
     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
  2204
     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
  2205
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2206
    |newFloat|
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2207
23405
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  2208
    msb == self isBigEndian ifTrue:[
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2209
        ^ 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
  2210
    ].
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2211
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2212
    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
  2213
    1 to:8 do:[:destIndex|
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2214
        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
  2215
    ].
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2216
    ^ newFloat.
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
    "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
  2219
!
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2220
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2221
doubleAt:index put:aFloat
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2222
    "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
  2223
     starting at index.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2224
     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
  2225
     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
  2226
     Notice also, that the bytes are expected to be in this machine's
19629
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2227
     float representation and byte order - if the bytearray originated from another
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2228
     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
  2229
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2230
    |flt|
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2231
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2232
%{
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2233
    /*
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2234
     * handle the most common cases fast ...
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2235
     */
16320
dcb66fff0a89 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15836
diff changeset
  2236
    if (__isSmallInteger(index)) {
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2237
        unsigned char *cp;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2238
        INT sz;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2239
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2240
        __fetchBytePointerAndSize__(self, &cp, &sz);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2241
        if (cp) {
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2242
            INT idx = __intVal(index) - 1;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2243
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2244
            if ((idx >= 0) && ((idx+(sizeof(double)-1)) < sz)) {
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2245
                cp += idx;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2246
                /*
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2247
                 * aligned
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2248
                 */
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2249
                if (((INT)cp & (sizeof(double)-1)) == 0) {
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2250
                    if (__isFloat(aFloat)) {
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2251
                        ((double *)cp)[0] = __floatVal(aFloat);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2252
                        RETURN (aFloat);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2253
                    }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2254
                    if (__isShortFloat(aFloat)) {
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2255
                        ((double *)cp)[0] = (double)(__shortFloatVal(aFloat));
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2256
                        RETURN (aFloat);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2257
                    }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2258
                    if (__isSmallInteger(aFloat)) {
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2259
                        ((double *)cp)[0] = (double)(__intVal(aFloat));
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2260
                        RETURN (aFloat);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2261
                    }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2262
                }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2263
            }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2264
        }
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2265
    }
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2266
%}.
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2267
16320
dcb66fff0a89 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15836
diff changeset
  2268
    flt := aFloat asFloat.
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2269
    1 to:8 do:[:srcIndex|
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2270
        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
  2271
    ].
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2272
    ^ aFloat
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2273
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2274
3446
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2275
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
  2276
    "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
  2277
     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
  2278
     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
  2279
     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
  2280
     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
  2281
     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
  2282
     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
  2283
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2284
    |flt|
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2285
23405
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  2286
    msb == self isBigEndian ifTrue:[
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2287
        ^ 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
  2288
    ].
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2289
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2290
    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
  2291
    1 to:8 do:[:srcIndex|
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2292
        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
  2293
    ].
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2294
    ^ aFloat
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2295
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2296
    "Created: / 15.5.1998 / 17:22:27 / cg"
3447
Claus Gittinger <cg@exept.de>
parents: 3446
diff changeset
  2297
    "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
  2298
!
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2299
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2300
floatAt:index
3434
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2301
    "return the 4-bytes starting at index as a ShortFloat.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2302
     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
  2303
     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
  2304
     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
  2305
     a float object which keeps an 8-byte double internally.
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2306
     Notice also, that the bytes are expected to be in this machine's
19629
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2307
     float representation and byte order - if the bytearray originated from another
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2308
     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
  2309
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2310
    |newFloat|
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2311
3434
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2312
%{
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2313
    /*
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2314
     * handle the most common cases fast ...
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2315
     */
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2316
    if (__isSmallInteger(index)) {
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2317
        unsigned char *cp;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2318
        INT sz;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2319
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2320
        __fetchBytePointerAndSize__(self, &cp, &sz);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2321
        if (cp) {
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2322
            INT idx = __intVal(index) - 1;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2323
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2324
            if ((idx >= 0) && ((idx+(sizeof(float)-1)) < sz)) {
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2325
                cp += idx;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2326
                /*
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2327
                 * aligned
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2328
                 */
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2329
                if (((INT)cp & (sizeof(float)-1)) == 0) {
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2330
                    float fVal = ((float *)cp)[0];
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2331
                    OBJ f;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2332
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2333
                    __qMKSFLOAT(f, fVal);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2334
                    RETURN (f);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2335
                }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2336
            }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2337
        }
3434
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2338
    }
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2339
%}.
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2340
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2341
    newFloat := ShortFloat basicNew.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2342
    1 to:4 do:[:destIndex|
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2343
        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
  2344
    ].
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2345
    ^ newFloat.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2346
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2347
3446
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2348
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
  2349
    "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
  2350
     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
  2351
     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
  2352
     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
  2353
     a float object which keeps an 8-byte double internally.
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2354
     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
  2355
     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
  2356
     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
  2357
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2358
    |newFloat|
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2359
23405
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  2360
    msb == self isBigEndian ifTrue:[
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2361
        ^ 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
  2362
    ].
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2363
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2364
    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
  2365
    1 to:4 do:[:destIndex|
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2366
        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
  2367
    ].
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2368
    ^ newFloat.
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2369
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2370
    "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
  2371
    "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
  2372
!
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2373
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2374
floatAt:index put:aFloat
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2375
    "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
  2376
     starting at index.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2377
     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
  2378
     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
  2379
     Notice also, that the bytes are expected to be in this machines
19629
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2380
     float representation and byte order - if the bytearray originated from another
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2381
     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
  2382
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2383
    |sflt|
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2384
3434
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2385
%{
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2386
    /*
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2387
     * handle the most common cases fast ...
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2388
     */
16320
dcb66fff0a89 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15836
diff changeset
  2389
    if (__isSmallInteger(index)) {
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2390
        unsigned char *cp;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2391
        INT sz;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2392
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2393
        __fetchBytePointerAndSize__(self, &cp, &sz);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2394
        if (cp) {
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2395
            INT idx = __intVal(index) - 1;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2396
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2397
            if ((idx >= 0) && ((idx+(sizeof(float)-1)) < sz)) {
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2398
                cp += idx;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2399
                /*
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2400
                 * aligned
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2401
                 */
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2402
                if (((INT)cp & (sizeof(float)-1)) == 0) {
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2403
                    if (__isShortFloat(aFloat)) {
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2404
                        ((float *)cp)[0] = __shortFloatVal(aFloat);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2405
                        RETURN (self);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2406
                    }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2407
                    if (__isFloat(aFloat)) {
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2408
                        ((float *)cp)[0] = (float)__floatVal(aFloat);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2409
                        RETURN (self);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2410
                    }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2411
                    if (__isSmallInteger(aFloat)) {
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2412
                        ((float *)cp)[0] = (float)__intVal(aFloat);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2413
                        RETURN (self);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2414
                    }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2415
                    // bail out to smalltalk code
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2416
                }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2417
            }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2418
        }
3434
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2419
    }
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2420
%}.
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2421
16320
dcb66fff0a89 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15836
diff changeset
  2422
    sflt := aFloat asShortFloat.
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2423
    1 to:4 do:[:srcIndex|
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2424
        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
  2425
    ].
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2426
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2427
3446
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2428
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
  2429
    "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
  2430
     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
  2431
     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
  2432
     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
  2433
     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
  2434
     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
  2435
     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
  2436
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2437
    |sflt|
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2438
23405
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  2439
    msb == self isBigEndian ifTrue:[
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2440
        self floatAt:index put:aFloat.
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2441
        ^ self.
3446
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2442
    ].
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2443
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2444
    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
  2445
    1 to:4 do:[:srcIndex|
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2446
        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
  2447
    ].
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2448
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2449
    "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
  2450
!
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2451
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2452
ieeeDoubleAt:index
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2453
    "retrieve the 8 bytes starting at index as a float.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2454
     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
  2455
     The 8 bytes are assumed to be in IEEE floating point single precision
19629
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2456
     number format in the native byte order."
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2457
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2458
    "
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2459
     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
  2460
     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
  2461
     to an IBM 370 or old VAX etc.
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2462
     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
  2463
     no problem.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2464
    "
9258
83c940f349ea isIEEEFormat
Claus Gittinger <cg@exept.de>
parents: 9185
diff changeset
  2465
    Float isIEEEFormat ifFalse:[self error:'unsupported operation'].
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2466
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2467
    ^ self doubleAt:index
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2468
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2469
    "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
  2470
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2471
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2472
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
  2473
    "store the value of the argument, aFloat into the receiver
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2474
     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
  2475
     starting at index. Storage is in IEEE floating point double precision format.
19629
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2476
     (i.e. 8 bytes are stored in the native byte order)."
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2477
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2478
    "
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2479
     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
  2480
     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
  2481
     to an IBM 370 or old VAX etc.
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2482
     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
  2483
     no problem.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2484
    "
9258
83c940f349ea isIEEEFormat
Claus Gittinger <cg@exept.de>
parents: 9185
diff changeset
  2485
    Float isIEEEFormat ifFalse:[self error:'unsupported operation'].
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2486
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2487
    ^ self doubleAt:index put:aFloat
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2488
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2489
    "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
  2490
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2491
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2492
ieeeFloatAt:index
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2493
    "retrieve the 4 bytes starting at index as a float.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2494
     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
  2495
     The 4 bytes are assumed to be in IEEE floating point single precision
19629
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2496
     number format in the native byte order."
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2497
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2498
    "
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2499
     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
  2500
     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
  2501
     to an IBM 370 or old VAX etc.
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2502
     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
  2503
     no problem.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2504
    "
9258
83c940f349ea isIEEEFormat
Claus Gittinger <cg@exept.de>
parents: 9185
diff changeset
  2505
    ShortFloat isIEEEFormat ifFalse:[self error:'unsupported operation'].
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2506
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2507
    ^ self floatAt:index
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2508
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2509
    "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
  2510
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2511
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2512
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
  2513
    "store the value of the argument, aFloat into the receiver
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2514
     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
  2515
     Storage is in IEEE floating point single precision format.
23405
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  2516
     (i.e. 4 bytes are stored in the native byte order).
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  2517
     Since ST/X floats are really doubles,
19629
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2518
     the low- order 4 bytes of the precision are lost."
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2519
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2520
    "
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2521
     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
  2522
     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
  2523
     to an IBM 370 or old VAX etc.
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2524
     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
  2525
     no problem.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2526
    "
9258
83c940f349ea isIEEEFormat
Claus Gittinger <cg@exept.de>
parents: 9185
diff changeset
  2527
    ShortFloat isIEEEFormat ifFalse:[self error:'unsupported operation'].
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2528
16320
dcb66fff0a89 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15836
diff changeset
  2529
    self floatAt:index put:aFloat
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2530
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2531
    "Created: / 5.3.1998 / 10:51:11 / stefan"
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2532
! !
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2533
13724
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  2534
!UninterpretedBytes methodsFor:'accessing-longlongs (64bit)'!
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2535
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2536
signedInt64At:index
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2537
    "return the 8-bytes starting at index as a signed Integer.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2538
     The index is a smalltalk index (i.e. 1-based).
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2539
     The value is retrieved in the machines natural byte order.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2540
     This may be worth a primitive."
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2541
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2542
    |w|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2543
19629
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2544
    w := self unsignedInt64At:index MSB:(UninterpretedBytes isBigEndian).
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2545
    (w > (16r7FFFFFFFFFFFFFFF)) ifTrue:[
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2546
        ^ w - (16r10000000000000000)
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2547
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2548
    ^ w
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2549
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2550
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2551
     |b|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2552
     b := ByteArray new:4.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2553
     b unsignedInt64At:1 put:16rFFFFFFFFFFFFFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2554
     (b signedInt64At:1)
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2555
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2556
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2557
    "Modified: / 1.7.1996 / 21:11:28 / cg"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2558
    "Created: / 5.3.1998 / 14:40:05 / stefan"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2559
    "Modified: / 5.3.1998 / 14:58:32 / stefan"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2560
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2561
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2562
signedInt64At:index MSB:msb
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2563
    "return the 8-bytes starting at index as a signed Integer.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2564
     The index is a smalltalk index (i.e. 1-based).
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2565
     The value is retrieved in the given byte order.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2566
     This may be worth a primitive."
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2567
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2568
    |w|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2569
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2570
    w := self unsignedInt64At:index MSB:msb.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2571
    (w > (16r7FFFFFFFFFFFFFFF)) ifTrue:[
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2572
        ^ w - (16r10000000000000000)
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2573
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2574
    ^ w
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2575
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2576
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2577
     |b|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2578
     b := ByteArray new:4.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2579
     b unsignedLongLongAt:1 put:16rFFFFFFFFFFFFFFFF.
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2580
     (b longLongAt:1 msb:true)
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2581
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2582
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2583
    "Modified: / 5.3.1998 / 12:06:28 / stefan"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2584
    "Created: / 5.3.1998 / 14:40:54 / stefan"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2585
    "Modified: / 9.5.1998 / 01:10:59 / cg"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2586
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2587
23405
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  2588
signedInt64At:byteIndex put:anInteger
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2589
    "store a signed longLong (64bit) integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2590
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2591
     Same as #signedQuadWordAt:put: - for ST80 compatibility."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2592
19629
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2593
    ^ self signedInt64At:byteIndex put:anInteger MSB:(UninterpretedBytes isBigEndian)
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2594
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2595
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2596
signedInt64At:byteIndex put:anInteger MSB:msb
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2597
    "store a signed longLong (64bit) integer.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2598
     The index is a smalltalk index (i.e. 1-based).
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2599
     Same as #signedQuadWordAt:put: - for ST80 compatibility."
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2600
7813
3cc0b75d1684 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7812
diff changeset
  2601
    |v|
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2602
7813
3cc0b75d1684 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7812
diff changeset
  2603
    v := anInteger.
3cc0b75d1684 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7812
diff changeset
  2604
    anInteger < 0 ifTrue:[
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2605
        v := v + 16r10000000000000000
7813
3cc0b75d1684 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7812
diff changeset
  2606
    ].
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2607
    self unsignedInt64At:byteIndex put:v MSB:msb.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2608
    ^ anInteger
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2609
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2610
    "Created: / 9.5.1998 / 01:10:24 / cg"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2611
    "Modified: / 9.5.1998 / 01:13:34 / cg"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2612
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2613
19629
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2614
signedInt64AtLSB:byteIndex
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2615
    "return the 8-bytes starting at index as a signed 64bit Integer.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2616
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2617
     The value is retrieved with least significant byte first"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2618
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2619
    ^ self signedInt64At:byteIndex MSB:false
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2620
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2621
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2622
signedInt64AtLSB:byteIndex put:anInteger
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2623
    "set the 8-bytes starting at index from the signed Integer anInteger.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2624
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2625
     The integer is stored with least significant byte first."
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2626
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2627
    ^ self signedInt64At:byteIndex put:anInteger MSB:false
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2628
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2629
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2630
signedInt64AtMSB:byteIndex
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2631
    "return the 8-bytes starting at index as a signed 64bit Integer.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2632
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2633
     The value is retrieved with most significant byte first"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2634
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2635
    ^ self signedInt64At:byteIndex MSB:true
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2636
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2637
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2638
signedInt64AtMSB:byteIndex put:anInteger
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2639
    "set the 8-bytes starting at index from the signed Integer anInteger.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2640
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2641
     The integer is stored with least significant byte first."
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2642
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2643
    ^ self signedInt64At:byteIndex put:anInteger MSB:true
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2644
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2645
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2646
unsignedInt64At:byteIndex
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2647
    "return the 8-bytes starting at index in the machine's native
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2648
     byteorder as an unsigned integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2649
     The index is a smalltalk index (i.e. 1-based)"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2650
19629
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2651
   ^ self unsignedInt64At:byteIndex MSB:(UninterpretedBytes isBigEndian)
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2652
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2653
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2654
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2655
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2656
     b := ByteArray withAll:#(1 2 3 4 5 6 7 8).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2657
     (b unsignedLongLongAt:1 bigEndian:false) printStringRadix:16
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2658
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2659
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2660
    "Modified: / 5.11.1996 / 14:06:21 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2661
    "Modified: / 5.3.1998 / 14:04:44 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2662
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2663
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2664
unsignedInt64At:byteIndex MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2665
    "return the 8-bytes starting at index as an unsigned integer.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2666
     The index is a smalltalk index (i.e. 1-based).
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2667
     Depending on msb, the value is retrieved MSB or LSB-first."
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2668
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2669
    |l
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2670
     bIdx  "{ Class: SmallInteger }"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2671
     delta "{ Class: SmallInteger }"|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2672
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2673
    l := LargeInteger basicNew numberOfDigits:8.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2674
    msb ifTrue:[
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2675
        bIdx := byteIndex + 7.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2676
        delta := -1
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2677
    ] ifFalse:[
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2678
        bIdx := byteIndex.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2679
        delta := 1
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2680
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2681
    1 to:8 do:[:i |
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2682
        l digitAt:i put:(self byteAt:bIdx).
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2683
        bIdx := bIdx + delta
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2684
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2685
    ^ l compressed
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2686
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2687
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2688
     |b|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2689
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2690
     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
  2691
     (b unsignedLongLongAt:1 bigEndian:false) printStringRadix:16
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2692
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2693
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2694
    "Modified: / 5.11.1996 / 14:06:21 / cg"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2695
    "Modified: / 5.3.1998 / 14:04:44 / stefan"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2696
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2697
23405
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  2698
unsignedInt64At:byteIndex put:anInteger
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2699
    "set the 8-bytes starting at index from the (unsigned) Integer value.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2700
     The index is a smalltalk index (i.e. 1-based).
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2701
     The value must be in the range 0 to 16rFFFFFFFFFFFFFFFF.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2702
     The value is stored in the machine's natural byteorder."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2703
19629
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2704
    ^ self unsignedInt64At:byteIndex put:anInteger MSB:(UninterpretedBytes isBigEndian)
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2705
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2706
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2707
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2708
     b := ByteArray new:10.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2709
     b unsignedInt64At:1 put:16r0807060504030201 MSB:false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2710
     b unsignedInt64At:1 put:16r0807060504030201 MSB:true.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2711
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2712
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2713
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2714
    "Created: / 5.3.1998 / 14:06:02 / stefan"
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2715
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2716
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2717
unsignedInt64At:byteIndex put:anInteger MSB:msb
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2718
    "set the 8-bytes starting at index from the (unsigned) Integer value.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2719
     The index is a smalltalk index (i.e. 1-based).
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2720
     The value must be in the range 0 to 16rFFFFFFFFFFFFFFFF.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2721
     Depending on msb, the value is stored MSB-first or LSB-first."
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2722
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2723
    |bIdx  "{ Class: SmallInteger }"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2724
     delta "{ Class: SmallInteger }"|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2725
23405
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  2726
    ((anInteger < 0)
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  2727
     or:[anInteger class ~~ SmallInteger
20595
9ee758b143e9 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 20373
diff changeset
  2728
         and:[anInteger > 16rFFFFFFFFFFFFFFFF]]) ifTrue:[
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2729
        ^ self elementBoundsError:anInteger
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2730
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2731
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2732
    msb ifTrue:[
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2733
        bIdx := byteIndex + 7.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2734
        delta := -1
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2735
    ] ifFalse:[
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2736
        bIdx := byteIndex.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2737
        delta := 1
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2738
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2739
    1 to:8 do:[:i |
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2740
        self byteAt:bIdx put:(anInteger digitAt:i).
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2741
        bIdx := bIdx + delta.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2742
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2743
    ^ anInteger
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2744
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2745
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2746
     |b|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2747
     b := ByteArray new:8.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2748
     b unsignedLongLongAt:1 put:16r0807060504030201 bigEndian:false.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2749
     b inspect
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2750
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2751
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2752
    "Created: / 5.3.1998 / 14:06:02 / stefan"
19629
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2753
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2754
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2755
unsignedInt64AtLSB:byteIndex
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2756
    "return the 8-bytes starting at index as an unsigned 64bit Integer.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2757
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2758
     The value is retrieved with most significant byte first"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2759
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2760
    ^ self unsignedInt64At:byteIndex MSB:false
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2761
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2762
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2763
unsignedInt64AtLSB:byteIndex put:anInteger
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2764
    "set the 8-bytes starting at index from the unsigned Integer anInteger.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2765
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2766
     The integer is stored with least significant byte first."
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2767
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2768
    ^ self unsignedInt64At:byteIndex put:anInteger MSB:false
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2769
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2770
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2771
unsignedInt64AtMSB:byteIndex
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2772
    "return the 8-bytes starting at index as an unsigned 64bit Integer.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2773
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2774
     The value is retrieved with most significant byte first"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2775
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2776
    ^ self unsignedInt64At:byteIndex MSB:true
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2777
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2778
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2779
unsignedInt64AtMSB:byteIndex put:anInteger
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2780
    "set the 8-bytes starting at index from the unsigned Integer anInteger.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2781
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2782
     The integer is stored with least significant byte first."
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2783
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2784
    ^ self unsignedInt64At:byteIndex put:anInteger MSB:true
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2785
! !
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2786
13724
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  2787
!UninterpretedBytes methodsFor:'accessing-longs (32bit)'!
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2788
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2789
signedInt32At:byteIndex
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2790
    "return the 4-bytes starting at byteIndex as a signed Integer.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2791
     The index is a smalltalk index (i.e. 1-based).
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2792
     The value is retrieved in the machine's natural byte order,
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2793
     therefore, this should only be used for byte-data which is
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2794
     only used inside this machine.
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2795
     To setup binary data packets which are to be sent to other machines,
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2796
     or stored into a file, always use the corresponding xxx:MSB: method
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2797
     and specify a definite byteOrder."
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2798
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2799
    |w|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2800
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2801
%{
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2802
    /*
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2803
     * handle the most common cases fast ...
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2804
     */
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2805
    if (__isSmallInteger(byteIndex)) {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2806
        unsigned char *cp;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2807
        INT sz;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2808
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2809
        __fetchBytePointerAndSize__(self, &cp, &sz);
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2810
        if (cp) {
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2811
            INT idx = __intVal(byteIndex) - 1;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2812
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2813
            if ((idx >= 0) && ((idx+(4-1)) < sz)) {
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2814
                int iVal;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2815
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2816
                cp += idx;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2817
#if defined(__i386__)
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2818
                /*
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2819
                 * aligned or not, we don't care (i386 can do both)
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2820
                 */
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2821
                {
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2822
                    iVal = ((int *)cp)[0];
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2823
                    RETURN (__MKINT(iVal));
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2824
                }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2825
#else
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2826
# if defined(__x86_64__)
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2827
                /*
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2828
                 * aligned or not, we don't care (i386 can do both)
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2829
                 */
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2830
                {
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2831
                    iVal = ((int *)cp)[0];
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2832
                    RETURN (__mkSmallInteger(iVal));
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2833
                }
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2834
# else
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2835
                /*
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2836
                 * aligned ?
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2837
                 */
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2838
                if (((INT)cp & (sizeof(int)-1)) == 0) {
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2839
                    iVal = ((int *)cp)[0];
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2840
                } else {
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2841
#  ifdef __LSBFIRST__
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2842
                    iVal = cp[0] & 0xFF;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2843
                    iVal += (cp[1] & 0xFF)<<8;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2844
                    iVal += (cp[2] & 0xFF)<<16;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2845
                    iVal += (cp[3] & 0xFF)<<24;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2846
#  else
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2847
#   ifdef __MSBFIRST__
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2848
                    iVal = cp[0] & 0xFF;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2849
                    iVal = (iVal<<8)+(cp[1] & 0xFF);
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2850
                    iVal = (iVal<<8)+(cp[2] & 0xFF);
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2851
                    iVal = (iVal<<8)+(cp[3] & 0xFF);
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2852
#   else
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2853
                    {
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2854
                        union {
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2855
                            int i;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2856
                            char c[4];
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2857
                        } u;
23405
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  2858
                        u.c[0] = cp[0];
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  2859
                        u.c[1] = cp[1];
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  2860
                        u.c[2] = cp[2];
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2861
                        u.c[3] = cp[3];
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2862
                        iVal = u.i;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2863
                    }
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2864
#   endif
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2865
#  endif
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2866
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2867
#  if __POINTER_SIZE__ == 8
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2868
                    RETURN (__mkSmallInteger(iVal));
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2869
#  else
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2870
                    RETURN (__MKINT(iVal));
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2871
#  endif
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2872
                }
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2873
# endif
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2874
#endif
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2875
            }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2876
        }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2877
    }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2878
%}.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2879
23405
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  2880
    ^ self signedInt32At:byteIndex MSB:self isBigEndian.
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2881
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2882
    "
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2883
     |b|
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2884
     b := ByteArray new:4.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2885
     b unsignedLongAt:1 put:16rFFFFFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2886
     (b longAt:1)
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2887
    "
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2888
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2889
    "Modified: / 1.7.1996 / 21:11:28 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2890
    "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
  2891
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2892
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2893
signedInt32At:byteIndex MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2894
    "return the 4-bytes starting at byteIndex as a (signed) Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2895
     The byteIndex is a smalltalk index (i.e. 1-based).
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2896
     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
  2897
     LSB-first otherwise."
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2898
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2899
    |val
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2900
     ival "{ Class: SmallInteger }"
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2901
     i    "{ Class: SmallInteger }"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2902
     bHH  "{ Class: SmallInteger }"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2903
     bHL  "{ Class: SmallInteger }"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2904
     bLH  "{ Class: SmallInteger }"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2905
     bLL  "{ Class: SmallInteger }"|
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2906
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2907
%{
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2908
    /*
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2909
     * handle the most common cases fast ...
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2910
     */
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2911
    if (__isSmallInteger(byteIndex)) {
19047
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2912
        unsigned char *cp;
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2913
        INT sz;
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2914
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2915
        __fetchBytePointerAndSize__(self, &cp, &sz);
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2916
        if (cp) {
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2917
            INT idx = __intVal(byteIndex) - 1;
19047
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2918
            int iVal;
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2919
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2920
            cp += idx;
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2921
            if ((idx >= 0) && ((idx+(sizeof(int)-1)) < sz)) {
19047
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2922
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2923
                if (msb == true) {
8901
824a89d0b5c7 alpha64 vs. POINTER_SIZE cleanup
Claus Gittinger <cg@exept.de>
parents: 8893
diff changeset
  2924
#if defined(__MSBFIRST__)
19047
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2925
                    if (((INT)cp & (sizeof(int)-1))== 0) {
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2926
                        /*
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2927
                         * aligned
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2928
                         */
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2929
                        iVal = ((int *)cp)[0];
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2930
                    } else
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2931
#endif
19047
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2932
                    {
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2933
                        iVal = cp[0];
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2934
                        iVal = (iVal << 8) | cp[1];
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2935
                        iVal = (iVal << 8) | cp[2];
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2936
                        iVal = (iVal << 8) | cp[3];
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2937
                    }
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2938
                } else {
8901
824a89d0b5c7 alpha64 vs. POINTER_SIZE cleanup
Claus Gittinger <cg@exept.de>
parents: 8893
diff changeset
  2939
#if defined(__i386__) || (defined(UNALIGNED_FETCH_OK) && defined(__LSBFIRST__))
19047
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2940
                    /*
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2941
                     * aligned or not - we don't care
19047
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2942
                     * (i386 can fetch unaligned)
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2943
                     */
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2944
                    iVal = ((int *)cp)[0];
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2945
#else
8901
824a89d0b5c7 alpha64 vs. POINTER_SIZE cleanup
Claus Gittinger <cg@exept.de>
parents: 8893
diff changeset
  2946
# if defined(__LSBFIRST__)
19047
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2947
                    if (((INT)cp & (sizeof(int)-1))== 0) {
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2948
                        /*
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2949
                         * aligned
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2950
                         */
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2951
                        iVal = ((int *)cp)[0];
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2952
                    } else
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2953
# endif
19047
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2954
                    {
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2955
                        iVal = cp[3];
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2956
                        iVal = (iVal << 8) | cp[2];
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2957
                        iVal = (iVal << 8) | cp[1];
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2958
                        iVal = (iVal << 8) | cp[0];
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2959
                    }
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2960
#endif
19047
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2961
                }
8901
824a89d0b5c7 alpha64 vs. POINTER_SIZE cleanup
Claus Gittinger <cg@exept.de>
parents: 8893
diff changeset
  2962
#if __POINTER_SIZE__ == 8
19047
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2963
                RETURN (__mkSmallInteger(iVal));
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2964
#else
19047
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2965
                RETURN (__MKINT(iVal));
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2966
#endif
19047
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2967
            }
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2968
        }
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2969
    }
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2970
%}.
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2971
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2972
    val := self unsignedInt32At:byteIndex MSB:msb.
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2973
    (val > (16r7FFFFFFF)) ifTrue:[
19047
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2974
        ^ val - (16r100000000)
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2975
    ].
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2976
    ^ val
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2977
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2978
    "
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2979
     |b|
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2980
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2981
     b := ByteArray withAll:#(1 2 3 4).
23405
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  2982
     (b signedInt32At:1 MSB:true) printStringRadix:16.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2983
     (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
  2984
    "
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2985
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2986
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2987
signedInt32At:byteIndex put:anInteger
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2988
    "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
  2989
     The index is a smalltalk index (i.e. 1-based).
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2990
     The integer is stored in the machine's natural byte order."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2991
23405
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  2992
    ^ self signedInt32At:byteIndex put:anInteger MSB:self isBigEndian
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2993
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2994
    "
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2995
     |b|
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2996
     b := ByteArray new:4.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2997
     b longAt:1 put:-1.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2998
     (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
  2999
    "
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3000
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3001
    "Modified: / 1.7.1996 / 21:11:39 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3002
    "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
  3003
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3004
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3005
signedInt32At:byteIndex put:anInteger MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3006
    "set the 4-bytes starting at byteIndex from the signed Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3007
     The byteIndex is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3008
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3009
     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
  3010
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3011
    |v|
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3012
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3013
%{
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3014
    /*
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3015
     * handle the most common case fast ...
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3016
     */
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3017
    if (__isSmallInteger(byteIndex)) {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3018
        unsigned char *cp;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3019
        INT sz;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3020
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3021
        __fetchBytePointerAndSize__(self, &cp, &sz);
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3022
        if (cp) {
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3023
            INT idx = __intVal(byteIndex) - 1;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3024
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3025
            if ((idx >= 0) && ((idx+3) < sz)) {
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3026
                cp += idx;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3027
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3028
                if (__isSmallInteger(anInteger)) {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3029
                    INT __v = __intVal(anInteger);
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3030
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3031
# if __POINTER_SIZE__ == 8
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3032
                    if ((__v < -0x80000000L) || (__v > 0x7FFFFFFF)) {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3033
                        goto badArg;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3034
                    }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3035
# endif
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3036
                    if (((INT)cp & 3) == 0) {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3037
                        /*
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3038
                         * aligned
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3039
                         */
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3040
                        if (
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3041
# ifdef __LSBFIRST__
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3042
                            (msb == false)
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3043
# else
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3044
#  ifdef __MSBFIRST__
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3045
                            (msb == true)
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
                            (0)
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3048
#  endif
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3049
# endif
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3050
                        ) {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3051
                            ((int *)cp)[0] = (int)__v;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3052
                            RETURN (anInteger);
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3053
                        }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3054
                    }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3055
                    if (msb == false) {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3056
                        cp[0] = __v & 0xFF;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3057
                        cp[1] = (__v>>8) & 0xFF;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3058
                        cp[2] = (__v>>16) & 0xFF;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3059
                        cp[3] = (__v>>24) & 0xFF;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3060
                    } else {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3061
                        cp[0] = (__v>>24) & 0xFF;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3062
                        cp[1] = (__v>>16) & 0xFF;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3063
                        cp[2] = (__v>>8) & 0xFF;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3064
                        cp[3] = __v & 0xFF;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3065
                    }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3066
                    RETURN (anInteger);
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3067
                }
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
  badArg: ;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3072
%}.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3073
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3074
    anInteger >= 0 ifTrue:[
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3075
        v := anInteger
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3076
    ] ifFalse:[
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3077
        v := anInteger + 16r100000000
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3078
    ].
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3079
    self unsignedInt32At:byteIndex put:v MSB:msb.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3080
    ^ anInteger
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3081
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3082
    "
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3083
     |b|
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3084
     b := ByteArray new:4.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3085
     b longAt:1 put:-1.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3086
     (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
  3087
    "
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3088
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3089
    "Modified: / 1.7.1996 / 21:11:39 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3090
    "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
  3091
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3092
19629
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3093
signedInt32AtLSB:byteIndex
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3094
    "return the 4-bytes starting at index as a signed 32bit Integer.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3095
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3096
     The value is retrieved with least significant byte first"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3097
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3098
    ^ self signedInt32At:byteIndex MSB:false
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3099
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3100
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3101
signedInt32AtLSB:byteIndex put:anInteger
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3102
    "set the 4-bytes starting at index from the signed Integer anInteger.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3103
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3104
     The integer is stored with least significant byte first."
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3105
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3106
    ^ self signedInt32At:byteIndex put:anInteger MSB:false
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3107
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3108
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3109
signedInt32AtMSB:byteIndex
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3110
    "return the 4-bytes starting at index as a signed 32bit Integer.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3111
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3112
     The value is retrieved with most significant byte first"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3113
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3114
    ^ self signedInt32At:byteIndex MSB:true
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3115
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3116
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3117
signedInt32AtMSB:byteIndex put:anInteger
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3118
    "set the 4-bytes starting at index from the signed Integer anInteger.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3119
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3120
     The integer is stored with most significant byte first."
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3121
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3122
    ^ self signedInt32At:byteIndex put:anInteger MSB:true
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3123
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3124
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3125
unsignedInt32At:byteIndex
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3126
    "return the 4-bytes starting at index as an (unsigned) Integer.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  3127
     The index is a smalltalk index (i.e. 1-based).
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3128
     The value is retrieved in the machine's natural byte order."
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3129
23405
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  3130
    ^ self unsignedInt32At:byteIndex MSB:self isBigEndian
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3131
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3132
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3133
     |b|
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3134
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3135
     b := ByteArray withAll:#(1 2 3 4).
23405
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  3136
     (b unsignedInt32At:1) printStringRadix:16
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3137
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3138
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3139
    "Modified: / 5.3.1998 / 14:57:35 / stefan"
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3140
!
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3141
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3142
unsignedInt32At:byteIndex MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3143
    "return the 4-bytes starting at index as an (unsigned) Integer.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  3144
     The index is a smalltalk index (i.e. 1-based).
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3145
     The value is retrieved MSB-first, if the msb-arg is true;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3146
     LSB-first otherwise."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3147
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3148
    |val
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3149
     ival "{ Class: SmallInteger }"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3150
     i    "{ Class: SmallInteger }"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3151
     bHH  "{ Class: SmallInteger }"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3152
     bHL  "{ Class: SmallInteger }"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3153
     bLH  "{ Class: SmallInteger }"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3154
     bLL  "{ Class: SmallInteger }"|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3155
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3156
%{
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3157
    /*
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3158
     * handle the most common cases fast ...
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3159
     */
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3160
    if (__isSmallInteger(byteIndex)) {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3161
        unsigned char *cp;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3162
        INT sz;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3163
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3164
        __fetchBytePointerAndSize__(self, &cp, &sz);
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3165
        if (cp) {
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3166
            INT idx = __intVal(byteIndex) - 1;
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3167
            unsigned int iVal;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3168
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3169
            if ((idx >= 0) && ((idx+(sizeof(int)-1)) < sz)) {
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3170
                cp += idx;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3171
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3172
                if (msb == true) {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3173
#if defined(__MSBFIRST__)
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3174
                    if (((INT)cp & (sizeof(int)-1))== 0) {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3175
                        /*
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3176
                         * aligned
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3177
                         */
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3178
                        iVal = ((unsigned int *)cp)[0];
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3179
                    } else
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3180
#endif
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3181
                    {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3182
                        iVal = cp[0];
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3183
                        iVal = (iVal << 8) | cp[1];
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3184
                        iVal = (iVal << 8) | cp[2];
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3185
                        iVal = (iVal << 8) | cp[3];
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3186
                    }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3187
                } else {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3188
#if defined(__i386__) || (defined(UNALIGNED_FETCH_OK) && defined(__LSBFIRST__))
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3189
                    /*
20816
986549374231 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20595
diff changeset
  3190
                     * aligned or not - we don't care
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3191
                     * (i386 can fetch unaligned)
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3192
                     */
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3193
                    iVal = ((unsigned int *)cp)[0];
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3194
#else
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3195
# if defined(__LSBFIRST__)
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3196
                    if (((INT)cp & (sizeof(int)-1))== 0) {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3197
                        /*
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3198
                         * aligned
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3199
                         */
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3200
                        iVal = ((unsigned int *)cp)[0];
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3201
                    } else
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3202
# endif
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3203
                    {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3204
                        iVal = cp[3];
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3205
                        iVal = (iVal << 8) | cp[2];
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3206
                        iVal = (iVal << 8) | cp[1];
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3207
                        iVal = (iVal << 8) | cp[0];
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3208
                    }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3209
#endif
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3210
                }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3211
#if __POINTER_SIZE__ == 8
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3212
                RETURN (__mkSmallInteger(iVal));
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3213
#else
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3214
                RETURN (__MKUINT(iVal));
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3215
#endif
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3216
            }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3217
        }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3218
    }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3219
%}.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3220
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3221
    "/ fallBack code - non ByteArray-like receiver
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3222
    "/ or funny byteIndex
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3223
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3224
    i := byteIndex.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3225
    msb ifFalse:[
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3226
        bLL := self byteAt:i.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3227
        bLH := self byteAt:(i+1).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3228
        bHL := self byteAt:(i+2).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3229
        bHH := self byteAt:(i+3).
23405
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  3230
    ] ifTrue:[
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3231
        bHH := self byteAt:i.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3232
        bHL := self byteAt:(i+1).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3233
        bLH := self byteAt:(i+2).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3234
        bLL := self byteAt:(i+3).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3235
    ].
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3236
    ival := (bHH bitShift:8) + bHL.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3237
    ival := (ival bitShift:8) + bLH.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3238
    val := (ival bitShift:8) + bLL.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3239
    ^ val
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3240
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
     |b|
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3243
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3244
     b := ByteArray withAll:#(1 2 3 4).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3245
     (b unsignedInt32At:1 MSB:true) printStringRadix:16.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3246
     (b unsignedInt32At:1 MSB:false) printStringRadix:16
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3247
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3248
!
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3249
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3250
unsignedInt32At:byteIndex put:anInteger
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3251
    "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
  3252
     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
  3253
     The value must be in the range 0 to 16rFFFFFFFF.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3254
     The value is stored in the machine's native byte order"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3255
23405
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  3256
    ^ self unsignedInt32At:byteIndex put:anInteger MSB:self isBigEndian
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3257
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3258
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3259
     |b|
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3260
     b := ByteArray new:8.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3261
     b doubleWordAt:1 put:16r04030201 MSB:true.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3262
     b doubleWordAt:5 put:16r04030201 MSB:false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3263
     b inspect
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3264
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3265
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3266
    "Modified: / 21.1.1998 / 17:43:34 / cg"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3267
    "Modified: / 5.3.1998 / 11:42:17 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3268
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3269
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3270
unsignedInt32At:byteIndex put:anInteger MSB:msb
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3271
    "set the 4-bytes starting at byteIndex from the unsigned Integer value.
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3272
     The byteIndex is a smalltalk index (i.e. 1-based).
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3273
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3274
     This is the ST80 version of #doubleWordAt:put:"
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3275
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3276
    |v i b1 b2 b3 b4|
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3277
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3278
%{
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3279
    /*
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3280
     * handle the most common case fast ...
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3281
     */
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3282
    if (__isSmallInteger(byteIndex)) {
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3283
        unsigned char *cp;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3284
        INT sz;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3285
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3286
        __fetchBytePointerAndSize__(self, &cp, &sz);
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3287
        if (cp) {
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3288
            INT idx = __intVal(byteIndex) - 1;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3289
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3290
            if ((idx >= 0) && ((idx+3) < sz)) {
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3291
                cp += idx;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3292
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3293
                if (__isSmallInteger(anInteger)) {
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3294
                    INT __v = __intVal(anInteger);
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3295
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3296
# if __POINTER_SIZE__ == 8
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3297
                    if ((__v < 0) || (__v > 0xFFFFFFFF)) {
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3298
                        goto badArg;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3299
                    }
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3300
# endif
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3301
                    if (((INT)cp & 3) == 0) {
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3302
                        /*
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3303
                         * aligned
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3304
                         */
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3305
                        if (
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3306
# ifdef __LSBFIRST__
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3307
                            (msb == false)
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3308
# else
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3309
#  ifdef __MSBFIRST__
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3310
                            (msb == true)
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3311
#  else
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3312
                            (0)
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3313
#  endif
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3314
# endif
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3315
                        ) {
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3316
                            ((int *)cp)[0] = (int)__v;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3317
                            RETURN (anInteger);
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3318
                        }
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3319
                    }
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3320
                    if (msb == false) {
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3321
                        cp[0] = __v & 0xFF;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3322
                        cp[1] = (__v>>8) & 0xFF;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3323
                        cp[2] = (__v>>16) & 0xFF;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3324
                        cp[3] = (__v>>24) & 0xFF;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3325
                    } else {
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3326
                        cp[0] = (__v>>24) & 0xFF;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3327
                        cp[1] = (__v>>16) & 0xFF;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3328
                        cp[2] = (__v>>8) & 0xFF;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3329
                        cp[3] = __v & 0xFF;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3330
                    }
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3331
                    RETURN (anInteger);
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3332
                }
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3333
            }
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3334
        }
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3335
    }
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3336
  badArg: ;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3337
%}.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3338
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3339
    ((anInteger < 0) or:[anInteger > 16rFFFFFFFF]) ifTrue:[
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3340
        ^ self elementBoundsError:anInteger
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3341
    ].
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3342
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3343
    i := byteIndex.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3344
    msb ifTrue:[
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3345
        b1 := (anInteger digitAt:4).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3346
        b2 := (anInteger digitAt:3).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3347
        b3 := (anInteger digitAt:2).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3348
        b4 := (anInteger digitAt:1).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3349
    ] ifFalse:[
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3350
        b1 := (anInteger digitAt:1).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3351
        b2 := (anInteger digitAt:2).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3352
        b3 := (anInteger digitAt:3).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3353
        b4 := (anInteger digitAt:4).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3354
    ].
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3355
    self byteAt:i     put:b1.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3356
    self byteAt:(i+1) put:b2.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3357
    self byteAt:(i+2) put:b3.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3358
    self byteAt:(i+3) put:b3.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3359
    ^ anInteger
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3360
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3361
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3362
     |b|
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3363
     b := ByteArray new:4.
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3364
     b signedInt32At:1 put:-1.
23405
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  3365
     (b unsignedInt32At:1) printStringRadix:16
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3366
    "
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3367
    "
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3368
     |b|
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3369
     b := ByteArray new:4.
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3370
     b unsignedInt32At:1 put:16rFFFFFFFF.
23405
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  3371
     (b signedInt32At:1)
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3372
    "
19629
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3373
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3374
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3375
unsignedInt32AtLSB:byteIndex
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3376
    "return the 4-bytes starting at index as an unsigned 32bit Integer.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3377
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3378
     The value is retrieved with least significant byte first"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3379
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3380
    ^ self unsignedInt32At:byteIndex MSB:false
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3381
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3382
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3383
unsignedInt32AtLSB:byteIndex put:anInteger
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3384
    "set the 4-bytes starting at index from the unsigned Integer anInteger.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3385
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3386
     The integer is stored with least significant byte first."
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3387
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3388
    ^ self unsignedInt32At:byteIndex put:anInteger MSB:false
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3389
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3390
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3391
unsignedInt32AtMSB:byteIndex
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3392
    "return the 4-bytes starting at index as an unsigned 32bit Integer.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3393
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3394
     The value is retrieved with most significant byte first"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3395
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3396
    ^ self unsignedInt32At:byteIndex MSB:true
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3397
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3398
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3399
unsignedInt32AtMSB:byteIndex put:anInteger
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3400
    "set the 4-bytes starting at index from the unsigned Integer anInteger.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3401
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3402
     The integer is stored with most significant byte first."
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3403
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3404
    ^ self unsignedInt32At:byteIndex put:anInteger MSB:true
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3405
! !
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3406
20961
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3407
!UninterpretedBytes methodsFor:'accessing-pointers'!
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3408
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3409
pointerAt:byteIndex
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3410
    "get a pointer starting at byteIndex as ExternalAddress.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3411
     The byteIndex is a smalltalk index (i.e. 1-based).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3412
     Only aligned accesses are allowed.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3413
     The pointer is of native cpu's size (4 or 8 bytes)"
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3414
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3415
%{
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3416
    if (__isSmallInteger(byteIndex)) {
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3417
        unsigned char *cp;
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3418
        INT sz;
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3419
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3420
        __fetchBytePointerAndSize__(self, &cp, &sz);
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3421
        if (cp) {
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3422
            INT idx = __smallIntegerVal(byteIndex) - 1;
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3423
            char *pointer;
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3424
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3425
            if ((idx >= 0) && ((idx+(sizeof(pointer)-1)) < sz)) {
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3426
                cp += idx;
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3427
                /*
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3428
                 * aligned
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3429
                 */
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3430
                if (((INT)cp & (sizeof(pointer)-1)) == 0) {
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3431
                    pointer = ((char **)cp)[0];
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3432
                    RETURN (__MKEXTERNALADDRESS(pointer));
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3433
                } else {
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3434
#if 0
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3435
                    printf("cp UNALIGNED (%"_lx_")\n", (INT)cp);
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3436
#endif
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3437
                }
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3438
            } else {
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3439
#if 0
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3440
                printf("idx(%"_ld_")+(sizeof(pointer)-1) (%d) >= sz (%"_ld_")\n",
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3441
                        idx, (int)(sizeof(pointer)-1), sz);
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3442
#endif
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3443
            }
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3444
        } else {
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3445
#if 0
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3446
            printf("cp is NULL\n");
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3447
#endif
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3448
        }
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3449
    } else {
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3450
#if 0
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3451
        printf("bad index\n");
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3452
#endif
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3453
    }
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3454
bad:;
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3455
%}.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3456
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3457
    self primitiveFailed.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3458
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3459
    "
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3460
     |b|
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3461
     b := ByteArray new:(ExternalAddress pointerSize).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3462
     b pointerAt:1 put:(ExternalAddress newAddress:16r12345678).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3463
     Transcript showCR:((b unsignedInt32At:1) printStringRadix:16).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3464
     Transcript showCR:((b pointerAt:1)).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3465
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3466
     |b|
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3467
     b := ByteArray new:(ExternalAddress pointerSize).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3468
     b pointerAt:1 put:(ExternalAddress newAddress:16r12345678abcdef).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3469
     Transcript showCR:((b unsignedInt64At:1) printStringRadix:16).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3470
     Transcript showCR:((b pointerAt:1)).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3471
    "
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3472
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3473
    "Modified (comment): / 14-11-2016 / 17:32:23 / cg"
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3474
!
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3475
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3476
pointerAt:byteIndex put:value
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3477
    "set the pointer starting at byteIndex from the integer or externalAddress value.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3478
     The byteIndex is a smalltalk index (i.e. 1-based).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3479
     Only aligned accesses are allowed.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3480
     The pointer is of native cpu's size (4 or 8 bytes).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3481
     The value may be either an ExternalAddress, ExternalBytes or an Integer"
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3482
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3483
%{
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3484
    OBJ *pointer;
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3485
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3486
    if (__isExternalAddressLike(value)) {
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3487
        pointer = __externalAddressVal(value);
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3488
    } else if (__isExternalBytesLike(value)) {
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3489
        pointer = __externalBytesVal(value);
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3490
        if (pointer == (OBJ *)0)
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3491
            pointer = 0;
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3492
    } else if (value == nil) {
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3493
        pointer = 0;
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3494
    } else if (__isSmallInteger(value)) {
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3495
        pointer = (OBJ *)__intVal(value);
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3496
    } else {
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3497
        if ((pointer = (OBJ *)__unsignedLongIntVal(value)) == 0) {
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3498
            goto bad;
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3499
        }
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3500
    }
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3501
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3502
    if (__isSmallInteger(byteIndex)) {
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3503
        unsigned char *cp;
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3504
        INT sz;
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3505
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3506
        __fetchBytePointerAndSize__(self, &cp, &sz);
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3507
        if (cp) {
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3508
            INT idx = __smallIntegerVal(byteIndex) - 1;
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3509
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3510
            if ((idx >= 0) && ((idx+(sizeof(pointer)-1)) < sz)) {
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3511
                cp += idx;
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3512
                /*
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3513
                 * aligned
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3514
                 */
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3515
                if (((INT)cp & (sizeof(pointer)-1)) == 0) {
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3516
                    ((char **)cp)[0] = (char *) pointer;
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3517
                    RETURN (value);
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3518
                }
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3519
            }
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3520
        }
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3521
    }
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3522
bad:;
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3523
%}.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3524
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3525
    self primitiveFailed.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3526
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3527
    "
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3528
     |b|
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3529
     b := ByteArray new:ExternalAddress pointerSize.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3530
     b pointerAt:1 put:(ExternalAddress newAddress:16r12345678).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3531
     (b unsignedLongAt:1) printStringRadix:16
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3532
    "
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3533
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3534
    "Created: / 05-03-1998 / 10:57:18 / stefan"
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3535
    "Modified (comment): / 14-11-2016 / 17:28:27 / cg"
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3536
!
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3537
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3538
pointerValueAt:byteIndex
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3539
    "get a pointer value starting at byteIndex as unsigned integer.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3540
     The byteIndex is a smalltalk index (i.e. 1-based).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3541
     Only aligned accesses are allowed.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3542
     The pointer is of native cpu's size (4 or 8 bytes).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3543
     This returns an int with sizeof the machines's native pointer (4 or 8 bytes)"
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3544
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3545
%{
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3546
    if (__isSmallInteger(byteIndex)) {
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3547
        unsigned char *cp;
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3548
        INT sz;
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3549
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3550
        __fetchBytePointerAndSize__(self, &cp, &sz);
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3551
        if (cp) {
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3552
            INT idx = __smallIntegerVal(byteIndex) - 1;
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3553
            char *pointer;
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3554
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3555
            if ((idx >= 0) && ((idx+(sizeof(pointer)-1)) < sz)) {
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3556
                cp += idx;
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3557
                /*
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3558
                 * aligned
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3559
                 */
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3560
                if (((INT)cp & (sizeof(pointer)-1)) == 0) {
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3561
                    pointer = ((char **)cp)[0];
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3562
                    RETURN (__MKUINT((INT)(pointer)));
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3563
                } else {
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3564
                    // printf("cp UNALIGNED (%"_lx_")\n", (INT)cp);
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3565
                }
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3566
            } else {
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3567
                // printf("idx(%"_ld_")+(sizeof(pointer)-1) (%d) >= sz (%"_ld_")\n",
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3568
                //        idx, (int)(sizeof(pointer)-1), sz);
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3569
            }
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3570
        } else {
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3571
            // printf("cp is NULL\n");
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3572
        }
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3573
    } else {
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3574
        // printf("bad index\n");
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3575
    }
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3576
bad:;
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3577
%}.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3578
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3579
    self primitiveFailed.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3580
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3581
    "
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3582
     |b|
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3583
     b := ByteArray new:(ExternalAddress pointerSize).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3584
     b pointerAt:1 put:(ExternalAddress newAddress:16r12345678).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3585
     Transcript showCR:((b unsignedLongAt:1) printStringRadix:16).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3586
     Transcript showCR:((b pointerAt:1)).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3587
     Transcript showCR:((b pointerValueAt:1)).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3588
    "
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3589
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3590
    "Modified (comment): / 14-11-2016 / 17:28:33 / cg"
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3591
! !
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3592
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3593
!UninterpretedBytes methodsFor:'accessing-shorts (16bit)'!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3594
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3595
signedInt16At:byteIndex
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3596
    "return the 2-bytes starting at index as a signed Integer.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3597
     The index is a smalltalk index (i.e. 1-based).
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3598
     The value is retrieved in the machine's natural byte order."
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3599
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3600
    ^ (self unsignedInt16At:byteIndex) signExtendedShortValue
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3601
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3602
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3603
     |b|
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3604
     b := ByteArray new:2.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3605
     b wordAt:1 put:16rFFFF.
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3606
     b signedWordAt:1
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3607
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3608
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3609
    "Modified: 1.7.1996 / 21:14:38 / cg"
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3610
!
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3611
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3612
signedInt16At:byteIndex MSB:msb
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3613
    "return the 2-bytes starting at index as a signed Integer.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  3614
     The index is a smalltalk index (i.e. 1-based).
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3615
     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
  3616
     LSB-first (i.e. low 8-bits at lower byte index) if it's false.
23405
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  3617
     Notice:
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3618
        the index is a byte index; thus, this allows for unaligned access to
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3619
        words on any boundary."
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3620
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3621
    |b1 "{ Class: SmallInteger }"
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3622
     b2 "{ Class: SmallInteger }"|
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3623
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3624
%{
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3625
    /*
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3626
     * handle the most common cases fast ...
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3627
     */
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3628
    if (__isSmallInteger(byteIndex)) {
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3629
        unsigned char *cp;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3630
        INT sz;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3631
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3632
        __fetchBytePointerAndSize__(self, &cp, &sz);
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3633
        if (cp) {
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3634
            INT idx = __intVal(byteIndex) - 1;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3635
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3636
            if ((idx >= 0) && ((idx+(2-1)) < sz)) {
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3637
                short sVal;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3638
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3639
                cp += idx;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3640
                if (msb == false) {
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3641
#if defined(__i386__) || (defined(__LSBFIRST__) && defined(UNALIGNED_FETCH_OK))
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3642
                    /*
20816
986549374231 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20595
diff changeset
  3643
                     * aligned or not, we don't care (i386 can do both)
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3644
                     */
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3645
                    sVal = ((short *)cp)[0];
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3646
#else
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3647
                    sVal = (cp[0] & 0xFF) | ((cp[1] & 0xFF) << 8);
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3648
#endif
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3649
                } else {
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3650
                    sVal = ((cp[0] & 0xFF) << 8) | (cp[1] & 0xFF);
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3651
                }
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3652
                RETURN (__mkSmallInteger(sVal));
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3653
            }
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3654
        }
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3655
    }
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3656
%}.
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3657
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3658
    b1 := self byteAt:byteIndex.
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3659
    b2 := self byteAt:(byteIndex + 1).
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3660
    msb ifTrue:[
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3661
        ^ ((b1 bitShift:8) + b2) signExtendedShortValue
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3662
    ].
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3663
    ^ ((b2 bitShift:8) + b1) signExtendedShortValue
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3664
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3665
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3666
signedInt16At:index put:anInteger
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3667
    "set the 2-bytes starting at index from the signed Integer value.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3668
     The index is a smalltalk index (i.e. 1-based).
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3669
     The stored value must be in the range -32768 .. +32676.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3670
     The value is stored in the machine's natural byte order."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3671
23405
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  3672
    ^ self signedInt16At:index put:anInteger MSB:self isBigEndian
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3673
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
     |b|
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3676
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3677
     b signedInt16At:1 put:-2.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3678
     b signedInt16At:3 put:-3.
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3679
     b inspect
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3680
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3681
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3682
    "Modified: 1.7.1996 / 21:12:13 / cg"
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3683
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3684
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3685
signedInt16At:byteIndex put:anInteger MSB:msb
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3686
    "set the 2-bytes starting at byteIndex from the signed integer value.
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3687
     The byteIndex is a smalltalk index (i.e. 1-based).
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3688
     The stored value must be in the range -32768 .. +32676.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3689
     The value is stored MSB-first, if the msb-arg is true;
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3690
     LSB-first otherwise."
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3691
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3692
%{  /* NOCONTEXT */
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3693
    /*
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3694
     * handle the most common case fast ...
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3695
     */
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3696
    if (__isSmallInteger(byteIndex)) {
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3697
        unsigned char *cp;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3698
        INT sz;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3699
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3700
        __fetchBytePointerAndSize__(self, &cp, &sz);
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3701
        if (cp) {
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3702
            INT idx = __intVal(byteIndex) - 1;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3703
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3704
            if ((idx >= 0) && ((idx+1) < sz)) {
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3705
                cp += idx;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3706
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3707
                if (__isSmallInteger(anInteger)) {
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3708
                    INT __v = __intVal(anInteger);
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3709
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3710
                    if ((__v < -0x8000L) || (__v > 0x7FFF)) {
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3711
                        goto badArg;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3712
                    }
23405
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  3713
                    if (msb == false) {
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3714
#if defined(__i386__) || (defined(__LSBFIRST__) && defined(UNALIGNED_FETCH_OK))
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3715
                        ((short *)cp)[0] = (short)__v;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3716
#else
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3717
                        cp[0] = __v & 0xFF;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3718
                        cp[1] = (__v >> 8) & 0xFF;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3719
#endif
23405
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  3720
                    } else {
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3721
                        cp[0] = (__v >> 8) & 0xFF;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3722
                        cp[1] = __v & 0xFF;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3723
                    }
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3724
                    RETURN (anInteger);
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3725
                }
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3726
            }
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3727
        }
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3728
    }
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3729
  badArg: ;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3730
%}.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3731
    anInteger >= 0 ifTrue:[
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3732
        self unsignedInt16At:byteIndex put:anInteger MSB:msb.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3733
    ] ifFalse:[
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3734
        self unsignedInt16At:byteIndex put:(16r10000 + anInteger) MSB:msb.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3735
    ].
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3736
    ^ anInteger
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3737
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3738
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3739
     |b|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3740
     b := ByteArray new:4.
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3741
     b signedInt16At:1 put:-1.
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3742
     b signedInt16At:3 put:-2.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3743
     b inspect
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3744
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3745
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3746
    "Modified: 1.7.1996 / 21:12:13 / cg"
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3747
!
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3748
19629
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3749
signedInt16AtLSB:byteIndex
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3750
    "return the 2-bytes starting at index as a signed Integer.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3751
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3752
     The value is retrieved with least significant byte first"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3753
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3754
    ^ self signedInt16At:byteIndex MSB:false
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3755
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3756
    "
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3757
     |b|
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3758
     b := ByteArray new:2.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3759
     b wordAt:1 put:16rFFFE.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3760
     b signedInt16AtLSB:1.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3761
     b signedInt16AtMSB:1.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3762
    "
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3763
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3764
    "Modified: 1.7.1996 / 21:14:38 / cg"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3765
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3766
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3767
signedInt16AtLSB:index put:anInteger
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3768
    "set the 2-bytes starting at index from the signed Integer value.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3769
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3770
     The stored value must be in the range 0 .. 16rFFFF.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3771
     The value is stored with least significant byte first"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3772
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3773
    ^ self signedInt16At:index put:anInteger MSB:false
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3774
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3775
    "
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3776
     |b|
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3777
     b := ByteArray new:4.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3778
     b signedInt16At:1 put:16r0102.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3779
     b signedInt16At:3 put:16r0304.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3780
     b inspect
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3781
    "
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3782
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3783
    "Created: / 5.3.1998 / 11:54:52 / stefan"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3784
    "Modified: / 5.3.1998 / 14:59:38 / stefan"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3785
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3786
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3787
signedInt16AtMSB:byteIndex
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3788
    "return the 2-bytes starting at index as a signed Integer.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3789
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3790
     The value is retrieved with most significant byte first"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3791
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3792
    ^ self signedInt16At:byteIndex MSB:true
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3793
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3794
    "
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3795
     |b|
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3796
     b := ByteArray new:2.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3797
     b wordAt:1 put:16rFFFE.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3798
     b signedInt16AtLSB:1.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3799
     b signedInt16AtMSB:1.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3800
    "
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3801
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3802
    "Modified: 1.7.1996 / 21:14:38 / cg"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3803
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3804
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3805
signedInt16AtMSB:index put:anInteger
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3806
    "set the 2-bytes starting at index from the signed Integer value.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3807
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3808
     The stored value must be in the range 0 .. 16rFFFF.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3809
     The value is stored with most significant byte first"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3810
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3811
    ^ self signedInt16At:index put:anInteger MSB:true
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3812
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3813
    "
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3814
     |b|
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3815
     b := ByteArray new:4.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3816
     b signedInt16At:1 put:16r0102.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3817
     b signedInt16At:3 put:16r0304.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3818
     b inspect
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3819
    "
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3820
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3821
    "Created: / 5.3.1998 / 11:54:52 / stefan"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3822
    "Modified: / 5.3.1998 / 14:59:38 / stefan"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3823
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3824
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3825
unsignedInt16At:index
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3826
    "return the 2-bytes starting at index as an (unsigned) Integer.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  3827
     The index is a smalltalk index (i.e. 1-based).
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3828
     The value is retrieved in the machine's natural byte order"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3829
23405
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  3830
    ^ self unsignedInt16At:index MSB:self isBigEndian
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3831
!
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3832
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3833
unsignedInt16At:byteIndex MSB:msb
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3834
    "return the 2-bytes starting at index as an (unsigned) Integer.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  3835
     The index is a smalltalk index (i.e. 1-based).
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3836
     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
  3837
     LSB-first (i.e. low 8-bits at lower byte index) if it's false.
23405
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  3838
     Notice:
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3839
        the index is a byte index; thus, this allows for unaligned access to
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3840
        words on any boundary."
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3841
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3842
    |b1 "{ Class: SmallInteger }"
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3843
     b2 "{ Class: SmallInteger }"|
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3844
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3845
%{
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3846
    /*
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3847
     * handle the most common cases fast ...
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3848
     */
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3849
    if (__isSmallInteger(byteIndex)) {
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3850
        unsigned char *cp;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3851
        INT sz;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3852
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3853
        __fetchBytePointerAndSize__(self, &cp, &sz);
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3854
        if (cp) {
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3855
            INT idx = __intVal(byteIndex) - 1;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3856
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3857
            if ((idx >= 0) && ((idx+(2-1)) < sz)) {
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3858
                int iVal;
19506
c729dd175795 #BUGFIX
Claus Gittinger <cg@exept.de>
parents: 19502
diff changeset
  3859
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3860
                cp += idx;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3861
                if (msb == false) {
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3862
#if defined(__i386__) || (defined(__LSBFIRST__) && defined(UNALIGNED_FETCH_OK))
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3863
                    /*
20816
986549374231 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20595
diff changeset
  3864
                     * aligned or not, we don't care (i386 can do both)
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3865
                     */
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3866
                    iVal = ((unsigned short *)cp)[0];
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3867
#else
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3868
                    iVal = (cp[0] & 0xFF) | ((cp[1] & 0xFF) << 8);
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3869
#endif
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3870
                } else {
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3871
                    iVal = ((cp[0] & 0xFF) << 8) | (cp[1] & 0xFF);
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3872
                }
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3873
                RETURN (__mkSmallInteger(iVal));
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3874
            }
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3875
        }
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3876
    }
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3877
%}.
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3878
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3879
    b1 := self byteAt:byteIndex.
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3880
    b2 := self byteAt:(byteIndex + 1).
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3881
    msb ifTrue:[
19046
Claus Gittinger <cg@exept.de>
parents: 18969
diff changeset
  3882
        ^ (b1 bitShift:8) + b2
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3883
    ].
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3884
    ^ (b2 bitShift:8) + b1
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3885
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3886
    "
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3887
     #[ 16rFF 16r00 ] unsignedInt16At:1 MSB:true
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3888
     #[ 16rFF 16r00 ] unsignedInt16At:1 MSB:false
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3889
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3890
     #[ 16rFF 16r00 ] unsignedInt16At:2 MSB:true
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3891
     #[ 16rFF 16r00 ] unsignedInt16At:2 MSB:false
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3892
    "
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3893
!
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3894
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3895
unsignedInt16At:index put:anInteger
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3896
    "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
  3897
     The index is a smalltalk index (i.e. 1-based).
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3898
     The stored value must be in the range 0 .. 16rFFFF.
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3899
     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
  3900
23405
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  3901
    ^ self unsignedInt16At:index put:anInteger MSB:self isBigEndian
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3902
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3903
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3904
     |b|
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3905
     b := ByteArray new:4.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3906
     b unsignedInt16At:1 put:16r0102.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3907
     b unsignedInt16At:3 put:16r0304.
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3908
     b inspect
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3909
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3910
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3911
    "Created: / 5.3.1998 / 11:54:52 / stefan"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3912
    "Modified: / 5.3.1998 / 14:59:38 / stefan"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3913
!
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3914
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3915
unsignedInt16At:byteIndex put:anInteger MSB:msb
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3916
    "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
  3917
     The index is a smalltalk index (i.e. 1-based).
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3918
     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
  3919
     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
  3920
     lower index) if msb is false, MSB-first otherwise"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3921
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3922
    |b1 b2
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3923
     iVal "{ Class: SmallInteger }"|
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3924
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3925
%{  /* NOCONTEXT */
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3926
    /*
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3927
     * handle the most common case fast ...
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3928
     */
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3929
    if (__isSmallInteger(byteIndex)) {
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3930
        unsigned char *cp;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3931
        INT sz;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3932
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3933
        __fetchBytePointerAndSize__(self, &cp, &sz);
19404
Claus Gittinger <cg@exept.de>
parents: 19402
diff changeset
  3934
        // printf("cp=%"_lx_"\n", (INT)cp);
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3935
        if (cp) {
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3936
            INT idx = __intVal(byteIndex) - 1;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3937
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3938
            if ((idx >= 0) && ((idx+1) < sz)) {
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3939
                cp += idx;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3940
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3941
                if (__isSmallInteger(anInteger)) {
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3942
                    INT __v = __intVal(anInteger);
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3943
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3944
                    if (((unsigned INT)__v) > 0xFFFF) {
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3945
                        goto badArg;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3946
                    }
23405
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  3947
                    if (msb == false) {
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3948
#if defined(__i386__) || (defined(__LSBFIRST__) && defined(UNALIGNED_FETCH_OK))
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3949
                        ((unsigned short *)cp)[0] = (unsigned short)__v;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3950
#else
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3951
                        cp[0] = __v & 0xFF;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3952
                        cp[1] = (__v >> 8) & 0xFF;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3953
#endif
23405
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  3954
                    } else {
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3955
                        cp[0] = (__v >> 8) & 0xFF;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3956
                        cp[1] = __v & 0xFF;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3957
                    }
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3958
                    RETURN (anInteger);
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3959
                }
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3960
            }
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3961
        }
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3962
    }
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3963
  badArg: ;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3964
%}.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3965
    iVal := anInteger.
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3966
    ((iVal < 0) or:[iVal > 16rFFFF]) ifTrue:[
19046
Claus Gittinger <cg@exept.de>
parents: 18969
diff changeset
  3967
        ^ self elementBoundsError:iVal
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3968
    ].
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3969
    msb ifTrue:[
19046
Claus Gittinger <cg@exept.de>
parents: 18969
diff changeset
  3970
        b1 := ((iVal bitShift:-8) bitAnd:16rFF).
Claus Gittinger <cg@exept.de>
parents: 18969
diff changeset
  3971
        b2 := (iVal bitAnd:16rFF).
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3972
    ] ifFalse:[
19046
Claus Gittinger <cg@exept.de>
parents: 18969
diff changeset
  3973
        b1 := (iVal bitAnd:16rFF).
Claus Gittinger <cg@exept.de>
parents: 18969
diff changeset
  3974
        b2 := ((iVal bitShift:-8) bitAnd:16rFF).
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3975
    ].
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3976
    self byteAt:byteIndex   put:b1.
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3977
    self byteAt:byteIndex+1 put:b2.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3978
    ^ anInteger
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3979
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3980
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3981
     |b|
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3982
     b := ByteArray new:8.
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3983
     b unsignedInt16At:1 put:16r0102 MSB:false.
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3984
     b unsignedInt16At:3 put:16r0304 MSB:false.
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3985
     b unsignedInt16At:5 put:16r0102 MSB:true.
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3986
     b unsignedInt16At:7 put:16r0304 MSB:true.
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3987
     b inspect
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3988
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3989
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3990
    "Modified: / 21.1.1998 / 17:48:15 / cg"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3991
    "Modified: / 5.3.1998 / 11:52:28 / stefan"
19629
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3992
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3993
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3994
unsignedInt16AtLSB:byteIndex
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3995
    "return the 2-bytes starting at index as an unsigned Integer.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3996
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3997
     The value is retrieved with least significant byte first"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3998
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3999
    ^ self unsignedInt16At:byteIndex MSB:false
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4000
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4001
    "
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4002
     |b|
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4003
     b := ByteArray new:2.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4004
     b wordAt:1 put:16rFFFE.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4005
     b unsignedInt16AtLSB:1.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4006
     b unsignedInt16AtMSB:1.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4007
    "
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4008
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4009
    "Modified: 1.7.1996 / 21:14:38 / cg"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4010
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4011
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4012
unsignedInt16AtLSB:index put:anInteger
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4013
    "set the 2-bytes starting at index from the (unsigned) Integer value.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4014
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4015
     The stored value must be in the range 0 .. 16rFFFF.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4016
     The value is stored with least significant byte first"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4017
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4018
    ^ self unsignedInt16At:index put:anInteger MSB:false
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4019
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4020
    "
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4021
     |b|
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4022
     b := ByteArray new:4.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4023
     b unsignedInt16At:1 put:16r0102.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4024
     b unsignedInt16At:3 put:16r0304.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4025
     b inspect
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4026
    "
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4027
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4028
    "Created: / 5.3.1998 / 11:54:52 / stefan"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4029
    "Modified: / 5.3.1998 / 14:59:38 / stefan"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4030
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4031
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4032
unsignedInt16AtMSB:byteIndex
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4033
    "return the 2-bytes starting at index as an unsigned Integer.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4034
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4035
     The value is retrieved with most significant byte first"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4036
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4037
    ^ self unsignedInt16At:byteIndex MSB:true
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4038
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4039
    "
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4040
     |b|
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4041
     b := ByteArray new:2.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4042
     b wordAt:1 put:16rFFFF.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4043
     b signedWordAt:1
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4044
    "
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4045
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4046
    "Modified: 1.7.1996 / 21:14:38 / cg"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4047
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4048
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4049
unsignedInt16AtMSB:index put:anInteger
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4050
    "set the 2-bytes starting at index from the (unsigned) Integer value.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4051
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4052
     The stored value must be in the range 0 .. 16rFFFF.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4053
     The value is stored with most significant byte first"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4054
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4055
    ^ self unsignedInt16At:index put:anInteger MSB:true
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4056
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4057
    "
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4058
     |b|
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4059
     b := ByteArray new:4.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4060
     b unsignedInt16At:1 put:16r0102.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4061
     b unsignedInt16At:3 put:16r0304.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4062
     b inspect
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4063
    "
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4064
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4065
    "Created: / 5.3.1998 / 11:54:52 / stefan"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4066
    "Modified: / 5.3.1998 / 14:59:38 / stefan"
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4067
! !
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4068
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4069
!UninterpretedBytes methodsFor:'accessing-strings'!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4070
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4071
stringAt:index
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4072
    "return a string starting at index up to the 0-byte.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4073
     The index is a smalltalk index (i.e. 1-based)."
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4074
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4075
    |stream i "{ Class: SmallInteger }" c|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4076
10676
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4077
    stream := WriteStream on:(String new:40).
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4078
    i := index.
10676
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4079
    [(c := self byteAt:i) ~~ 0] whileTrue:[
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4080
        stream nextPut:(Character value:c).
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4081
        i := i + 1.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4082
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4083
    ^ stream contents
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4084
10676
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4085
    "
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  4086
      #[71 72 73 74 75 76 77 0] stringAt:1
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  4087
      #[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
  4088
      '1234567890' stringAt:2
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4089
    "
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4090
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4091
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4092
stringAt:index put:aString
19196
1db38251aeb2 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19101
diff changeset
  4093
    "copy aString to the receiver, starting at index up to
7815
6bd3a60a6f0c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7814
diff changeset
  4094
     (and including) the 0-byte (which is always written).
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4095
     The index is a smalltalk index (i.e. 1-based)."
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4096
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4097
    |i "{ Class: SmallInteger }"|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4098
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4099
    i := index.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4100
    aString do:[:aChar |
19196
1db38251aeb2 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19101
diff changeset
  4101
        self byteAt:i put:aChar codePoint.
1db38251aeb2 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19101
diff changeset
  4102
        i := i + 1.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4103
    ].
10676
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4104
    self byteAt:i put:0.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4105
    ^ aString
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4106
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4107
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4108
     |bytes|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4109
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4110
     bytes := ExternalBytes new:10.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4111
     bytes stringAt:1 put:'hello'.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4112
     1 to:bytes size do:[:i |
19196
1db38251aeb2 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19101
diff changeset
  4113
        Transcript showCR:(bytes at:i)
10676
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4114
     ].
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4115
    "
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4116
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4117
    "
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4118
     (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
  4119
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4120
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4121
    "Created: / 21.1.1998 / 17:45:02 / cg"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4122
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4123
7812
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4124
stringAt:index put:aString size:maxSize
19196
1db38251aeb2 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19101
diff changeset
  4125
    "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
  4126
     or (and including) the 0-byte, whichever is encountered first.
7815
6bd3a60a6f0c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7814
diff changeset
  4127
     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
  4128
     The index is a smalltalk index (i.e. 1-based)."
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4129
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4130
    |remaining "{ Class: SmallInteger }"
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4131
     i         "{ Class: SmallInteger }"|
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4132
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4133
    remaining := maxSize.
7816
827f1cf51862 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7815
diff changeset
  4134
    remaining <= 0 ifTrue:[^ aString].
7812
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4135
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4136
    i := index.
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4137
    aString do:[:aChar |
19196
1db38251aeb2 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19101
diff changeset
  4138
        self byteAt:i put:aChar codePoint.
1db38251aeb2 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19101
diff changeset
  4139
        i := i + 1.
1db38251aeb2 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19101
diff changeset
  4140
        remaining := remaining - 1.
1db38251aeb2 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19101
diff changeset
  4141
        remaining <= 0 ifTrue:[^ aString].
7812
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4142
    ].
10676
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4143
    self byteAt:i put:0.
7812
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4144
    ^ aString
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4145
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4146
    "
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4147
     |bytes|
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4148
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4149
     bytes := ExternalBytes new:10.
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4150
     bytes stringAt:1 put:'hello' size:3.
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4151
     1 to:bytes size do:[:i |
19196
1db38251aeb2 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19101
diff changeset
  4152
        Transcript showCR:(bytes at:i)
7812
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4153
     ]
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4154
    "
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4155
    "
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4156
     |bytes|
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4157
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4158
     bytes := ByteArray new:10 withAll:16rFF.
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4159
     bytes stringAt:1 put:'he' size:3.
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4160
     1 to:bytes size do:[:i |
19196
1db38251aeb2 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19101
diff changeset
  4161
        Transcript showCR:(bytes at:i)
7812
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4162
     ]
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4163
    "
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4164
10676
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4165
    "
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4166
     (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
  4167
    "
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4168
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4169
7812
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4170
    "Created: / 21.1.1998 / 17:45:02 / cg"
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4171
!
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4172
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4173
stringAt:index size:maxSize
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4174
    "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
  4175
     The index is a smalltalk index (i.e. 1-based)."
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4176
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  4177
    |stream c
10676
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4178
     max "{ Class: SmallInteger }"
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4179
     start "{ Class: SmallInteger }"|
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4180
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4181
    stream := WriteStream on:(String new:maxSize).
10676
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4182
    start := index.
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4183
    max := start + maxSize - 1.
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4184
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4185
    start to:max do:[:eachIndex|
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4186
        c := self byteAt:eachIndex.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4187
        c == 0 ifTrue:[
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4188
            ^ stream contents
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4189
        ].
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4190
        stream nextPut:(Character value:c).
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4191
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4192
    ^ stream contents
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4193
10676
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4194
    "
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4195
      #[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
  4196
      #[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
  4197
      '1234567890' stringAt:2 size:6
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4198
    "
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  4199
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  4200
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  4201
zeroByteStringAt:index maximumSize:count
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  4202
    "extract a zeroByte-delimited string, given initial index and
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  4203
     maximum number of characters (bytes).
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  4204
     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
  4205
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4206
    |bytes endIndex idx|
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4207
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4208
    endIndex := self indexOf:0 startingAt:index.
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4209
    endIndex == 0 ifTrue:[
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4210
        endIndex := self size + 1
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4211
    ].
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4212
    endIndex := (endIndex min: (index + count)) - 1.
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4213
    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
  4214
    ^ bytes asString
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  4215
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4216
    "
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4217
     #[ 1 2 3 4 5 6 7 8 ] zeroByteStringAt:2 maximumSize:10
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4218
     #[ 1 2 3 4 5 0 6 7 8 ] zeroByteStringAt:2 maximumSize:10
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4219
     #[ 1 2 3 4 5 0 6 7 8 ] zeroByteStringAt:2 maximumSize:3
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4220
     #[ 1 2 3 4 5 0 6 7 8 ] zeroByteStringAt:2 maximumSize:4
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4221
    "
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  4222
! !
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  4223
12951
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  4224
!UninterpretedBytes methodsFor:'converting'!
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  4225
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  4226
asExternalBytes
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  4227
    |sz bytes|
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  4228
14142
7a769e54130d changed:
Stefan Vogel <sv@exept.de>
parents: 14132
diff changeset
  4229
    sz := self byteSize.
12951
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  4230
    bytes := ExternalBytes unprotectedNew:sz.
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  4231
    bytes replaceBytesFrom:1 to:sz with:self startingAt:1.
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  4232
    ^ bytes
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  4233
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  4234
    "
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  4235
      #[1 2 3 4 5 6 7] asExternalBytes
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  4236
      'Hello World' asExternalBytes
14142
7a769e54130d changed:
Stefan Vogel <sv@exept.de>
parents: 14132
diff changeset
  4237
      'Hello World' asUnicodeString asExternalBytes
12951
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  4238
    "
14132
debafd18f04b added: #asUUID
Stefan Vogel <sv@exept.de>
parents: 14131
diff changeset
  4239
!
debafd18f04b added: #asUUID
Stefan Vogel <sv@exept.de>
parents: 14131
diff changeset
  4240
14155
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4241
asExternalBytesUnprotected
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4242
    "Like asExternalBytes, but does not register the bytes so
15836
cdf0d7258f9e class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15717
diff changeset
  4243
     bytes are GARBAGE-COLLECTED."
14155
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4244
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4245
    |bytes sz|
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4246
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4247
    sz := self byteSize.
15836
cdf0d7258f9e class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15717
diff changeset
  4248
    bytes := ExternalBytes unprotectedNew:sz.
14155
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4249
    bytes replaceFrom:1 to:sz with:self startingAt:1.
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4250
    ^ bytes
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4251
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4252
    "
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4253
     |x|
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4254
     x := 'fooBar' asExternalBytesUnprotected.
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4255
     ObjectMemory garbageCollect
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4256
    "
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4257
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4258
    "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
  4259
    "Modified: / 30-11-2013 / 11:42:21 / cg"
14155
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4260
!
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4261
18600
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  4262
asSingleByteString
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  4263
    "return the receiver converted to a 'normal' string.
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  4264
     Raises an error if unrepresentable characters are encountered.
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  4265
     See also: asSingleByteStringIfPossible and asSingleByteStringReplaceInvalidWith:"
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  4266
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  4267
    ^ String fromString:self
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  4268
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  4269
    "
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  4270
     #[60 61 62 63] asSingleByteString
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4271
     #[60 61 62 63] asExternalBytes  asSingleByteString
18969
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4272
     #[67 68 69 70] asIntegerArray asSingleByteString
18600
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  4273
     (Unicode16String with:(Character value:16rFF)) asSingleByteString
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  4274
     (Unicode16String with:(Character value:16rFFFF)) asSingleByteString
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  4275
    "
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  4276
!
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  4277
18969
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4278
asSingleByteStringIfPossible
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4279
    "if possible, return the receiver converted to a 'normal' string.
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4280
     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
  4281
     If not possible, the (wideString) receiver is returned."
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4282
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4283
    self containsNon8BitElements ifTrue:[^ self asString].
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4284
    ^ self asSingleByteString.
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4285
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4286
    "
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4287
     #[67 68 69 70] asSingleByteStringIfPossible
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4288
     #[67 68 69 70] asIntegerArray asSingleByteStringIfPossible
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4289
     'hello' asUnicodeString asSingleByteStringIfPossible
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4290
    "
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4291
!
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4292
14132
debafd18f04b added: #asUUID
Stefan Vogel <sv@exept.de>
parents: 14131
diff changeset
  4293
asUUID
debafd18f04b added: #asUUID
Stefan Vogel <sv@exept.de>
parents: 14131
diff changeset
  4294
    ^ UUID fromBytes:self
12951
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  4295
! !
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  4296
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4297
!UninterpretedBytes methodsFor:'encoding & decoding'!
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4298
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4299
utf8Decoded
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4300
    "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
  4301
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4302
    ^ CharacterArray decodeFromUTF8:self.
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4303
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4304
    "
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4305
     #[16rC8 16rA0] utf8Decoded
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4306
     #[16rC8 16rA0] asString utf8Decoded
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4307
     #[16rC8 16rA0] asExternalBytes utf8Decoded
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4308
     (Character value:16r220) utf8Encoded utf8Decoded
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4309
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4310
     (Character value:16r800) utf8Encoded
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4311
     (Character value:16r220) utf8Encoded utf8Decoded
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4312
    "
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4313
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4314
    "test:
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4315
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4316
      |utf8Encoding original readBack|
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4317
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4318
      1 to:16rFFFF do:[:ascii |
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4319
        original := (Character value:ascii) asString.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4320
        utf8Encoding := original utf8Encoded.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4321
        readBack := utf8Encoding utf8Decoded.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4322
        readBack = original ifFalse:[
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4323
            self halt
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4324
        ]
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4325
      ]
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4326
    "
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4327
!
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4328
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4329
utf8DecodedWithTwoByteCharactersReplacedBy:replacementCharacter
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4330
    "Interpreting myself as an UTF-8 representation, decode and return
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4331
     the decoded string. Suppress all 2-byte (above 16rFF) characters,
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4332
     and replace them with replacementCharacter"
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4333
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4334
    |in out c|
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4335
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4336
    self containsNon7BitAscii ifFalse:[
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4337
        ^ self asSingleByteString
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4338
    ].
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4339
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4340
    out := WriteStream on:(String uninitializedNew:self size * 3 // 2).
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4341
    in := self readStream.
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4342
    [in atEnd] whileFalse:[
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4343
        c := Character utf8DecodeFrom:in.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4344
        c codePoint > 16rFF ifTrue:[
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4345
            c := replacementCharacter
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4346
        ].
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4347
        out nextPut:c.
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4348
    ].
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4349
    ^ out contents
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4350
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4351
    "
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4352
     (Character value:16r220) utf8Encoded
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4353
        utf8DecodedWithTwoByteCharactersReplacedBy:(Character space)
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4354
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4355
     (Character value:16r220) utf8Encoded asExternalBytes copyButLast
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4356
        utf8DecodedWithTwoByteCharactersReplacedBy:(Character space)
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4357
    "
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4358
! !
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4359
4782
04a2ea1ad3a5 added replaceBytes...
Claus Gittinger <cg@exept.de>
parents: 4530
diff changeset
  4360
!UninterpretedBytes methodsFor:'filling & replacing'!
04a2ea1ad3a5 added replaceBytes...
Claus Gittinger <cg@exept.de>
parents: 4530
diff changeset
  4361
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4362
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
  4363
    "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
  4364
     like collection.
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4365
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4366
     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
  4367
     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
  4368
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4369
%{  /* NOCONTEXT */
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4370
23102
574962856f04 Issue #200: fixed `#basicAt:` / `#basicAt:put:` to work with objects bigger than 2GB
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21387
diff changeset
  4371
    unsigned INT nIndex, repNIndex;
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4372
    int startIndex, stopIndex;
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4373
    REGISTER unsigned char *src;
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4374
    REGISTER int repStartIndex;
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4375
    int repStopIndex, count;
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4376
    REGISTER unsigned char *dst;
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4377
    OBJ cls;
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4378
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4379
#ifndef NO_PRIM_BYTEARR
14082
8ee1315d35eb Revert to 1.81
Stefan Vogel <sv@exept.de>
parents: 14081
diff changeset
  4380
    if ((__isBytes(aCollection) || __isExternalBytesLike(aCollection))
14142
7a769e54130d changed:
Stefan Vogel <sv@exept.de>
parents: 14132
diff changeset
  4381
     && (__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
  4382
     && __bothSmallInteger(start, stop)
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4383
     && __isSmallInteger(repStart)) {
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4384
        startIndex = __intVal(start) - 1;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4385
        if (startIndex >= 0) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4386
            dst = (__ByteArrayInstPtr(self)->ba_element) + startIndex;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4387
            nIndex = __byteArraySize(self);
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4388
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4389
            if ((cls = __qClass(self)) != @global(ByteArray)) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4390
                int nInst;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4391
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4392
                nInst = __OBJS2BYTES__(__intVal(__ClassInstPtr(cls)->c_ninstvars));
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4393
                dst += nInst;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4394
                nIndex -= nInst;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4395
            }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4396
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4397
            stopIndex = __intVal(stop) - 1;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4398
            count = stopIndex - startIndex + 1;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4399
            if (count == 0) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4400
                RETURN ( self );
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4401
            }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4402
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4403
            if ((count > 0) && (stopIndex < nIndex)) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4404
                repStartIndex = __intVal(repStart) - 1;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4405
                if (repStartIndex >= 0) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4406
                    if (__isExternalBytesLike(aCollection)) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4407
                        OBJ sz;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4408
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4409
                        src = __externalAddressVal(aCollection);
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4410
                        if (src == 0) goto fallBack;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4411
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4412
                        sz = __externalBytesSize(aCollection);
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4413
                        if (__isSmallInteger(sz)) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4414
                            repNIndex = __smallIntegerVal(sz);
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4415
                        } else {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4416
                            repNIndex = repStopIndex+1; /* always enough */
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4417
                        }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4418
                        src = src + repStartIndex;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4419
                    } else {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4420
                        if (__isStringLike(aCollection)) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4421
                            repNIndex = __stringSize(aCollection);
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4422
                        } else {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4423
                            repNIndex = __qSize(aCollection) - OHDR_SIZE;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4424
                        }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4425
                        src = (__ByteArrayInstPtr(aCollection)->ba_element) + repStartIndex;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4426
                        if ((cls = __qClass(aCollection)) != @global(ByteArray)) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4427
                            int nInst;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4428
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4429
                            nInst = __OBJS2BYTES__(__intVal(__ClassInstPtr(cls)->c_ninstvars));
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4430
                            src += nInst;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4431
                            repNIndex -= nInst;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4432
                        }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4433
                    }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4434
                    repStopIndex = repStartIndex + (stopIndex - startIndex);
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4435
                    if (repStopIndex < repNIndex) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4436
                        if (aCollection == self) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4437
                            /* take care of overlapping copy */
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4438
                            if (src < dst) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4439
                                /* must do a reverse copy */
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4440
                                src += count;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4441
                                dst += count;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4442
                                while (count-- > 0) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4443
                                    *--dst = *--src;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4444
                                }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4445
                                RETURN ( self );
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4446
                            }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4447
                        }
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4448
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4449
# ifdef bcopy4
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4450
                        if (((unsigned INT)src & 3) == ((unsigned INT)dst & 3)) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4451
                            int nW;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4452
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4453
                            /* copy unaligned part */
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4454
                            while (count && ((unsigned INT)src & 3)) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4455
                                *dst++ = *src++;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4456
                                count--;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4457
                            }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4458
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4459
                            if (count > 0) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4460
                                /* copy aligned part */
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4461
                                nW = count >> 2;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4462
                                bcopy4(src, dst, nW);
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4463
                                if ((count = count & 3) != 0) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4464
                                    /* copy any remaining part */
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4465
                                    src += (nW<<2);
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4466
                                    dst += (nW<<2);
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4467
                                    while (count--) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4468
                                        *dst++ = *src++;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4469
                                    }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4470
                                }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4471
                            }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4472
                            RETURN ( self );
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4473
                        }
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4474
# else
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4475
#  if __POINTER_SIZE__ == 8
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4476
                        if (((unsigned INT)src & 7) == ((unsigned INT)dst & 7)) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4477
                            /* copy unaligned part */
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4478
                            while (count && ((unsigned INT)src & 7)) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4479
                                *dst++ = *src++;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4480
                                count--;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4481
                            }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4482
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4483
                            /* copy aligned part */
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4484
                            while (count >= 8) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4485
                                ((unsigned INT *)dst)[0] = ((unsigned INT *)src)[0];
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4486
                                dst += 8;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4487
                                src += 8;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4488
                                count -= 8;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4489
                            }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4490
                            while (count--) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4491
                                *dst++ = *src++;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4492
                            }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4493
                            RETURN ( self );
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4494
                        }
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4495
#  endif /* 64bit */
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4496
# endif /* bcopy4 */
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4497
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4498
# ifdef FAST_MEMCPY
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4499
                        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
  4500
# else
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4501
#  ifdef __UNROLL_LOOPS__
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4502
                        while (count >= 8) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4503
                            dst[0] = src[0]; dst[1] = src[1];
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4504
                            dst[2] = src[2]; dst[3] = src[3];
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4505
                            dst[4] = src[4]; dst[5] = src[5];
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4506
                            dst[6] = src[6]; dst[7] = src[7];
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4507
                            dst += 8; src += 8;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4508
                            count -= 8;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4509
                        }
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4510
#  endif /* __UNROLL_LOOPS__ */
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4511
                        while (count-- > 0) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4512
                            *dst++ = *src++;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4513
                        }
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4514
# endif
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4515
                        RETURN ( self );
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4516
                    }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4517
                }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4518
            }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4519
        }
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4520
    }
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4521
fallBack: ;
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4522
#endif
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4523
%}.
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4524
    "
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4525
     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
  4526
     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
  4527
    "
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4528
    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
  4529
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4530
    "
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4531
     #[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
  4532
        copy
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4533
            replaceFrom:1 to:8
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4534
            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
  4535
            startingAt:1
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4536
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4537
     #[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
  4538
        copy
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4539
            replaceFrom:3 to:10
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4540
            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
  4541
            startingAt:1
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4542
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4543
     #[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
  4544
        copy
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4545
            replaceFrom:3 to:4
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4546
            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
  4547
            startingAt:1
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4548
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4549
     #[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
  4550
        copy
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4551
            replaceFrom:0 to:9
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4552
            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
  4553
            startingAt:1
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4554
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4555
     #[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
  4556
        copy
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4557
            replaceFrom:1 to:10
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4558
            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
  4559
            startingAt:0
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4560
    "
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4561
!
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4562
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4563
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
  4564
    "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
  4565
     byte-array-like.
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4566
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4567
     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
  4568
     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
  4569
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4570
    ^ self
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4571
        replaceBytesFrom:startIndex
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4572
        to:(startIndex + replacementCollection size - repStartIndex)
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4573
        with:replacementCollection
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4574
        startingAt:repStartIndex
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4575
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4576
    "
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4577
     args:    startIndex            : <integer>
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4578
              replacementCollection : <collection of <bytes> >
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4579
              repStartIndex         : <integer>
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4580
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4581
     returns: self
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4582
    "
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4583
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4584
    "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
  4585
    "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
  4586
!
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4587
13902
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4588
replaceBytesWith:replacementCollection
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4589
    "replace elements from another collection, which must be byte-array-like.
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4590
     Replace stops at whichever collection is smaller.
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4591
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4592
     Notice: This operation modifies the receiver, NOT a copy;
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4593
     therefore the change may affect all others referencing the receiver."
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4594
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4595
    ^ self
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4596
        replaceBytesFrom:1
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4597
        to:(replacementCollection size min:self size)
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4598
        with:replacementCollection
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4599
        startingAt:1
13902
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4600
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4601
    "
15004
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  4602
     (ByteArray new:10) replaceBytesWith:'hello'
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  4603
     (ByteArray new:10) replaceBytesWith:'hello world bla bla bla'
13902
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4604
    "
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4605
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4606
    "Created: / 09-01-2012 / 16:18:10 / cg"
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4607
!
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4608
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4609
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
  4610
    "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
  4611
     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
  4612
     Return the receiver.
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4613
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4614
     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
  4615
     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
  4616
14131
3b0cb7751a71 changed: #replaceFrom:to:with:startingAt:
Claus Gittinger <cg@exept.de>
parents: 14082
diff changeset
  4617
    self class isBytes ifTrue:[
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4618
        ((aCollection class == self class)
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4619
         or:[aCollection isByteCollection]) ifTrue:[
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4620
            ^ self replaceBytesFrom:startIndex to:stopIndex with:aCollection startingAt:repStartIndex
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4621
        ].
7252
82cd08881a2a abstract replaceBytes fallback is required (lead to recursion)
Claus Gittinger <cg@exept.de>
parents: 7218
diff changeset
  4622
    ].
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4623
    ^ 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
  4624
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4625
    "
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4626
     args:    startIndex            : <integer>
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4627
              stopIndex             : <integer>
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4628
              replacementCollection : <collection of <bytes> >
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4629
              repStartIndex         : <integer>
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4630
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4631
     returns: self
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4632
    "
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4633
14131
3b0cb7751a71 changed: #replaceFrom:to:with:startingAt:
Claus Gittinger <cg@exept.de>
parents: 14082
diff changeset
  4634
    "Modified: / 08-05-2012 / 13:23:27 / cg"
4782
04a2ea1ad3a5 added replaceBytes...
Claus Gittinger <cg@exept.de>
parents: 4530
diff changeset
  4635
! !
04a2ea1ad3a5 added replaceBytes...
Claus Gittinger <cg@exept.de>
parents: 4530
diff changeset
  4636
12757
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4637
!UninterpretedBytes methodsFor:'hashing'!
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4638
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4639
computeXorHashFrom:startIndex to:endIndex
20372
aa0461b19c97 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20177
diff changeset
  4640
    "compute and answer the 32bit SmallInteger-Hash of the bytes
12757
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4641
     from startIndex to endIndex.
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4642
     If endindex = 0 or endIndex > size, hash up the size.
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4643
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4644
     NOTE: startIndex and endIndex are only hints about what should be hashed.
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4645
           In fact, more bytes could be involved in hashing.
20372
aa0461b19c97 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20177
diff changeset
  4646
           SO ARRAYS MUST BE EQUAL TO HASH TO THE SAME VALUE.
aa0461b19c97 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20177
diff changeset
  4647
aa0461b19c97 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20177
diff changeset
  4648
    Also NOTE:
aa0461b19c97 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20177
diff changeset
  4649
        used to return a 32bit hash on 32bit machines and a 64bit integer on 64bit cpus.
aa0461b19c97 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20177
diff changeset
  4650
        changed to return the same for all (in case hash values are used for other purposes)."
12757
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4651
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4652
    |w|
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4653
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4654
%{
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4655
    if (__bothSmallInteger(startIndex, endIndex)) {
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4656
        unsigned char *cp;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4657
        INT sz;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4658
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4659
        __fetchBytePointerAndSize__(self, &cp, &sz);
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4660
        if (cp) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4661
            INT sidx = ((unsigned INT)__smallIntegerVal(startIndex)) - 1;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4662
            INT eidx = ((unsigned INT)__smallIntegerVal(endIndex)) - 1;
23405
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  4663
// #           define H_INT INT
20372
aa0461b19c97 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20177
diff changeset
  4664
// #           define _MAX_H_INT _MAX_INT;
23405
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  4665
#           define H_INT int
20372
aa0461b19c97 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20177
diff changeset
  4666
#           define _MAX_H_INT 0x3FFFFFFF
aa0461b19c97 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20177
diff changeset
  4667
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4668
            unsigned char *ep;
20372
aa0461b19c97 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20177
diff changeset
  4669
            unsigned H_INT hash = 0, hash2 = 0, carry;
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4670
            int i;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4671
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4672
            if (eidx < 0 || eidx >= sz) eidx = sz - 1;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4673
            if (sidx > eidx) sidx = eidx;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4674
            if (sidx < 0) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4675
                RETURN(__mkSmallInteger(0));
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4676
            }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4677
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4678
            ep = cp + eidx;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4679
            cp += sidx;
12757
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4680
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4681
#if 0
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4682
            /*
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4683
             * On LSB-First (little endian) cpus,
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4684
             * this code does not produce the same result
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4685
             * if the same bytes are at different positions
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4686
             */
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4687
20372
aa0461b19c97 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20177
diff changeset
  4688
            if ((H_INT)cp & (sizeof(H_INT)-1)) {
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4689
                /* not aligned */
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4690
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4691
                for (i=0; cp <= ep; cp++) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4692
                    hash2 = (hash2 << 8) | *cp;
20372
aa0461b19c97 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20177
diff changeset
  4693
                    if (++i == sizeof(H_INT)) {
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4694
                        hash ^= hash2;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4695
                        i = hash2 = 0;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4696
                    }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4697
                }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4698
            } else {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4699
                /* aligned */
20372
aa0461b19c97 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20177
diff changeset
  4700
                for (; cp+sizeof(H_INT) <= ep; cp += sizeof(H_INT)) {
aa0461b19c97 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20177
diff changeset
  4701
                    hash ^= *(unsigned H_INT *)cp;
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4702
                }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4703
                for (; cp <= ep; cp++) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4704
                    hash2 = (hash2 << 8) | *cp;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4705
                }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4706
            }
12757
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4707
#else
20372
aa0461b19c97 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20177
diff changeset
  4708
            for (i=0; cp <= ep-sizeof(H_INT); cp += sizeof(H_INT)) {
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4709
                hash2 = cp[0];
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4710
                hash2 = (hash2 << 8) | cp[1];
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4711
                hash2 = (hash2 << 8) | cp[2];
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4712
                hash2 = (hash2 << 8) | cp[3];
20373
bce89424b82a #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20372
diff changeset
  4713
# if 0
20372
aa0461b19c97 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20177
diff changeset
  4714
                if (sizeof(H_INT) == 8) {
aa0461b19c97 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20177
diff changeset
  4715
                    hash2 = (hash2 << 8) | cp[4];
aa0461b19c97 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20177
diff changeset
  4716
                    hash2 = (hash2 << 8) | cp[5];
aa0461b19c97 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20177
diff changeset
  4717
                    hash2 = (hash2 << 8) | cp[6];
aa0461b19c97 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20177
diff changeset
  4718
                    hash2 = (hash2 << 8) | cp[7];
aa0461b19c97 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20177
diff changeset
  4719
                }
20373
bce89424b82a #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20372
diff changeset
  4720
# endif
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4721
                /*
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4722
                 * multiply by large prime to scramble bits and
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4723
                 * to avoid a 0 result from
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4724
                 * #[1 2 3 4 1 2 3 4] computeXorHashFrom:1 to:8.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4725
                 */
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4726
                hash ^= (hash * 31415821) ^ hash2;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4727
            }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4728
            for (hash2 = 0; cp <= ep; cp++) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4729
                hash2 = (hash2 << 8) | *cp;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4730
            }
12757
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4731
#endif
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4732
            hash ^= (hash * 31415821) ^ hash2;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4733
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4734
            /*
20372
aa0461b19c97 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20177
diff changeset
  4735
             * fold the high bits not fitting into a H_INT
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4736
             */
20372
aa0461b19c97 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20177
diff changeset
  4737
            carry = hash & ~_MAX_H_INT;
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4738
            if (carry) {
20372
aa0461b19c97 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20177
diff changeset
  4739
                hash = (hash & _MAX_H_INT) ^ (carry >> 8);
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4740
            }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4741
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4742
            RETURN(__mkSmallInteger(hash));
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4743
        }
12757
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4744
    }
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4745
%}.
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4746
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4747
    ^ self primitiveFailed
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4748
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4749
    "
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4750
     #[1 2 3 4] computeXorHashFrom:1 to:4.
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4751
     #[1 2 3 4] computeXorHashFrom:1 to:32.
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4752
     #[1 2 3 4] computeXorHashFrom:1 to:0.
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4753
     #[1 2 3 4 5] computeXorHashFrom:1 to:4.
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4754
     #[1 2 3 4 1 2 3 4] computeXorHashFrom:1 to:8.
23405
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  4755
     #[1 2 3 4 5 6 7 8] computeXorHashFrom:2 to:8.
12757
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4756
     #[2 3 4 5 6 7 8] computeXorHashFrom:1 to:7.
19554
91ec8f105783 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19507
diff changeset
  4757
     #[2 3 4 5 6 7 8] computeXorHashFrom:1 to:8.
91ec8f105783 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19507
diff changeset
  4758
    "
91ec8f105783 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19507
diff changeset
  4759
!
91ec8f105783 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19507
diff changeset
  4760
91ec8f105783 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19507
diff changeset
  4761
hash
91ec8f105783 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19507
diff changeset
  4762
    |sz|
91ec8f105783 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19507
diff changeset
  4763
91ec8f105783 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19507
diff changeset
  4764
    sz := self size.
91ec8f105783 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19507
diff changeset
  4765
    sz <= 32 ifTrue:[
91ec8f105783 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19507
diff changeset
  4766
        ^ self computeXorHashFrom:1 to:sz.
91ec8f105783 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19507
diff changeset
  4767
    ].
23405
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  4768
    ^ (sz bitXor:(self computeXorHashFrom:1 to:16)) bitXor:(self computeXorHashFrom:sz-16 to:sz)
19554
91ec8f105783 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19507
diff changeset
  4769
91ec8f105783 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19507
diff changeset
  4770
    "
91ec8f105783 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19507
diff changeset
  4771
        #[1 2 3 4] hash
91ec8f105783 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19507
diff changeset
  4772
        #[1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4
91ec8f105783 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19507
diff changeset
  4773
          1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 ] hash
91ec8f105783 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19507
diff changeset
  4774
        #[1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4
91ec8f105783 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19507
diff changeset
  4775
          1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1] hash
12757
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4776
    "
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4777
! !
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4778
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4779
!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
  4780
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4781
copyReverse
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4782
    "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
  4783
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4784
    ^ self copy reverse
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4785
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4786
    "
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4787
     #[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
  4788
     #[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
  4789
    "
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4790
!
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4791
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4792
swapBytes
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4793
    "swap bytes (of int16s) inplace -
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4794
     Expects that the receiver has an even number of bytes;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4795
     if not, only the pairs excluding the last byte are swapped"
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4796
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4797
    |b1 lastIndex "{ Class: SmallInteger }"|
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4798
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4799
    lastIndex := self size-1.
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4800
    1 to:lastIndex by:2 do:[:idx |
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4801
        b1 := self byteAt:idx.
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4802
        self byteAt:idx put:(self byteAt:idx+1).
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4803
        self byteAt:idx+1 put:b1.
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4804
    ].
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4805
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4806
    "
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4807
     #[1 2 3 4 5] swapBytes
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4808
     #[1 2 3 4] swapBytes
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4809
    "
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4810
! !
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4811
14131
3b0cb7751a71 changed: #replaceFrom:to:with:startingAt:
Claus Gittinger <cg@exept.de>
parents: 14082
diff changeset
  4812
3363
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  4813
!UninterpretedBytes methodsFor:'misc'!
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  4814
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  4815
swapLongAt:byteIndex
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  4816
    "swap the byteOrder of a long.
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  4817
     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
  4818
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  4819
    |t|
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  4820
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  4821
    t := self byteAt:byteIndex.
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  4822
    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
  4823
    self byteAt:(byteIndex + 3) put:t.
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  4824
    t := self byteAt:(byteIndex + 1).
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  4825
    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
  4826
    self byteAt:(byteIndex + 2) put:t
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  4827
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  4828
    "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
  4829
! !
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  4830
18664
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4831
!UninterpretedBytes methodsFor:'printing & storing'!
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4832
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4833
hexPrintOn:aStream
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4834
    "print as hex string, eg: 'FF0243'.
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4835
     This string can be used in #fromHexString: to recreate the byteArray"
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4836
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4837
    self hexPrintOn:aStream withSeparator:nil
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4838
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4839
    "
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4840
      #[1 2 3 4 10 17] hexPrintOn:Transcript
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4841
    "
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4842
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4843
    "
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4844
     |s|
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4845
     s := String streamContents:[:s | #[1 2 3 4 10 17] hexPrintOn:s].
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4846
     ByteArray fromHexString:s
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4847
    "
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4848
!
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4849
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4850
hexPrintOn:aStream withSeparator:aSeparatorStringOrCharacterOrNil
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4851
    "print as hex string with separators, eg: 'FF:02:43'"
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4852
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4853
    |first|
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4854
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4855
    first := true.
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4856
    1 to:self size do:[:idx |
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4857
        aSeparatorStringOrCharacterOrNil notNil ifTrue:[
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4858
            first ifFalse:[
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4859
                aSeparatorStringOrCharacterOrNil printOn:aStream
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4860
            ] ifTrue:[
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4861
                first := false.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4862
            ].
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4863
        ].
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4864
        (self byteAt:idx) printOn:aStream base:16 size:2 fill:$0.
18664
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4865
    ].
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4866
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4867
    "
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4868
      #[1 2 3 4 10 17] hexPrintOn:Transcript withSeparator:$:
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4869
      #[1 2 3 4 10 17] hexPrintOn:Transcript withSeparator:(Character space)
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4870
      #[1 2 3 4 10 17] hexPrintOn:Transcript withSeparator:'-'
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4871
      #[1 2 3 4 10 17] hexPrintOn:Transcript withSeparator:nil
20177
0eaabd41cd8a #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20176
diff changeset
  4872
      'hello' hexPrintOn:Transcript withSeparator:'.'
18664
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4873
    "
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4874
!
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4875
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4876
hexPrintString
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4877
    "print as hex string, eg: 'FF0243'.
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4878
     This string can be used in #fromHexString: to recreate the byteArray"
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4879
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4880
    ^ self hexPrintStringWithSeparator:nil
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4881
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4882
    "
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4883
     #[1 2 3 4 10 17] hexPrintString
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4884
     ByteArray fromHexString:#[1 2 3 4 10 17] hexPrintString
20176
2e68059772c7 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20139
diff changeset
  4885
     'hello' hexPrintString
18664
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4886
    "
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4887
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4888
    "Modified: / 03-07-2010 / 01:59:19 / cg"
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4889
!
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4890
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4891
hexPrintStringWithSeparator:aSeparatorStringOrCharacterOrNil
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4892
    "print as hex string, eg: 'FF:02:43'."
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4893
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4894
    ^ String
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4895
        streamContents:[:s |
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4896
            self hexPrintOn:s withSeparator:aSeparatorStringOrCharacterOrNil.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4897
        ]
18664
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4898
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4899
    "
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4900
      #[1 2 3 4 10 17] hexPrintStringWithSeparator:$:
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4901
      #[1 2 3 4 10 17] hexPrintStringWithSeparator:Character space
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4902
      #[1 2 3 4 10 17] hexPrintStringWithSeparator:' - '
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4903
      #[1 2 3 4 10 17] hexPrintStringWithSeparator:nil
20176
2e68059772c7 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20139
diff changeset
  4904
      'hello' hexPrintStringWithSeparator:'.'
18664
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4905
    "
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4906
! !
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4907
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4908
!UninterpretedBytes methodsFor:'private'!
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4909
18969
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4910
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
  4911
    "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
  4912
18969
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4913
    |srcIdx "{ Class:SmallInteger }"
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4914
     start "{ Class:SmallInteger }"
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4915
     stop "{ Class:SmallInteger }"|
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4916
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4917
    start := startArg.
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4918
    stop := stopArg.
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4919
    srcIdx := sourceIndex.
18969
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4920
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4921
    start to:stop do:[:dstIdx |
18969
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4922
        self at:dstIdx put:(sourceBytes at:srcIdx).
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4923
        srcIdx := srcIdx + 1
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4924
    ].
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4925
! !
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4926
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4927
!UninterpretedBytes methodsFor:'queries'!
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4928
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4929
containsNon7BitAscii
18969
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4930
    "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
  4931
     (i.e. if it is non-ascii)"
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4932
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4933
    |sz "{ Class:SmallInteger }"|
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4934
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4935
    sz := self size.
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4936
    1 to:sz do:[:idx|
18969
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4937
        (self at:idx) > 16r7F ifTrue:[
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4938
            ^ true.
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4939
        ].
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4940
    ].
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4941
    ^ false.
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4942
!
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4943
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4944
containsNon8BitElements
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4945
    "return true, if the underlying structure contains elements larger than a single byte"
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4946
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4947
    |sz "{ Class:SmallInteger }"|
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4948
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4949
    sz := self size.
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4950
    1 to:sz do:[:idx|
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4951
        (self at:idx) > 16rFF ifTrue:[
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4952
            ^ true.
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4953
        ].
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4954
    ].
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4955
    ^ false.
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4956
!
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4957
7218
b798be6d632f elementBoundsError -> elementBoundsError:
Claus Gittinger <cg@exept.de>
parents: 7197
diff changeset
  4958
defaultElement
b798be6d632f elementBoundsError -> elementBoundsError:
Claus Gittinger <cg@exept.de>
parents: 7197
diff changeset
  4959
    ^ 0
b798be6d632f elementBoundsError -> elementBoundsError:
Claus Gittinger <cg@exept.de>
parents: 7197
diff changeset
  4960
!
b798be6d632f elementBoundsError -> elementBoundsError:
Claus Gittinger <cg@exept.de>
parents: 7197
diff changeset
  4961
21320
8b0aaee195e6 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20961
diff changeset
  4962
isValidUTF8
21323
986051ecf7f2 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21320
diff changeset
  4963
    "returns true, if the receiver contains a valid UTF8 encoded string"
23405
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  4964
21323
986051ecf7f2 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21320
diff changeset
  4965
    |trailing  "{ Class: SmallInteger }"|
986051ecf7f2 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21320
diff changeset
  4966
21320
8b0aaee195e6 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20961
diff changeset
  4967
    trailing := 0.
8b0aaee195e6 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20961
diff changeset
  4968
8b0aaee195e6 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20961
diff changeset
  4969
    1 to:self size do:[:idx |
8b0aaee195e6 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20961
diff changeset
  4970
        |byte "{ Class: SmallInteger }" |
8b0aaee195e6 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20961
diff changeset
  4971
8b0aaee195e6 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20961
diff changeset
  4972
        byte := self byteAt:idx.
8b0aaee195e6 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20961
diff changeset
  4973
        trailing ~~ 0 ifTrue:[
21323
986051ecf7f2 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21320
diff changeset
  4974
            (byte bitAnd:2r11000000) == 2r10000000 ifFalse:[^ false].
21320
8b0aaee195e6 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20961
diff changeset
  4975
            trailing := trailing - 1.
8b0aaee195e6 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20961
diff changeset
  4976
        ] ifFalse:[
8b0aaee195e6 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20961
diff changeset
  4977
            (byte bitAnd:16r80) == 0 ifTrue:[
8b0aaee195e6 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20961
diff changeset
  4978
                "/ continue
8b0aaee195e6 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20961
diff changeset
  4979
            ] ifFalse:[
21323
986051ecf7f2 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21320
diff changeset
  4980
                (byte bitAnd:2r11100000) == 2r11000000 ifTrue:[
986051ecf7f2 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21320
diff changeset
  4981
                    "/ strict: should not be encoded this way (could have used a shorter sequence)
986051ecf7f2 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21320
diff changeset
  4982
                    (byte bitAnd:2r00011110) == 0 ifTrue:[
21320
8b0aaee195e6 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20961
diff changeset
  4983
                        ^ false
23405
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  4984
                    ].
21320
8b0aaee195e6 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20961
diff changeset
  4985
                    trailing := 1.
8b0aaee195e6 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20961
diff changeset
  4986
                ] ifFalse:[
21323
986051ecf7f2 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21320
diff changeset
  4987
                    (byte bitAnd:2r11110000) == 2r11100000 ifTrue:[
986051ecf7f2 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21320
diff changeset
  4988
                        trailing := 2.
21320
8b0aaee195e6 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20961
diff changeset
  4989
                    ] ifFalse:[
21323
986051ecf7f2 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21320
diff changeset
  4990
                        (byte bitAnd:2r11111000) == 2r11110000 ifTrue:[
986051ecf7f2 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21320
diff changeset
  4991
                            trailing := 3.
21320
8b0aaee195e6 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20961
diff changeset
  4992
                        ] ifFalse:[
21323
986051ecf7f2 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21320
diff changeset
  4993
                            (byte bitAnd:2r11111100) == 2r11111000 ifTrue:[
986051ecf7f2 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21320
diff changeset
  4994
                                trailing := 4.
21320
8b0aaee195e6 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20961
diff changeset
  4995
                            ] ifFalse:[
21323
986051ecf7f2 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21320
diff changeset
  4996
                                (byte bitAnd:2r11111110) == 2r11111100 ifTrue:[
986051ecf7f2 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21320
diff changeset
  4997
                                    trailing := 5.
21320
8b0aaee195e6 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20961
diff changeset
  4998
                                ] ifFalse:[
8b0aaee195e6 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20961
diff changeset
  4999
                                    ^ false
23405
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  5000
                                ].
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  5001
                            ].
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  5002
                        ].
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  5003
                    ].
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  5004
                ].
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  5005
            ].
21320
8b0aaee195e6 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20961
diff changeset
  5006
        ].
8b0aaee195e6 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20961
diff changeset
  5007
    ].
8b0aaee195e6 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20961
diff changeset
  5008
    ^ trailing == 0
8b0aaee195e6 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20961
diff changeset
  5009
8b0aaee195e6 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20961
diff changeset
  5010
    "
8b0aaee195e6 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20961
diff changeset
  5011
     'abc' isValidUTF8
23547
c69c97cec351 Issue #239: Fix all Smalltak/X source files to be in unicode (UTF8 without BOM) and prefixed by "{ Encoding: utf8 }" when any unicode character is present
Patrik Svestka <patrik.svestka@gmail.com>
parents: 23405
diff changeset
  5012
     'abcöäü' isValidUTF8
c69c97cec351 Issue #239: Fix all Smalltak/X source files to be in unicode (UTF8 without BOM) and prefixed by "{ Encoding: utf8 }" when any unicode character is present
Patrik Svestka <patrik.svestka@gmail.com>
parents: 23405
diff changeset
  5013
     'abcöäü' utf8Encoded isValidUTF8
21323
986051ecf7f2 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21320
diff changeset
  5014
     (Character value:16r800) utf8Encoded isValidUTF8
986051ecf7f2 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21320
diff changeset
  5015
     (Character value:16r1000) utf8Encoded isValidUTF8
23405
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  5016
21320
8b0aaee195e6 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20961
diff changeset
  5017
     1 to:255 do:[:c1 |
8b0aaee195e6 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20961
diff changeset
  5018
         1 to:255 do:[:c2 |
8b0aaee195e6 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20961
diff changeset
  5019
             1 to:255 do:[:c3 |
8b0aaee195e6 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20961
diff changeset
  5020
                 self assert:(c1 asCharacter , c2 asCharacter , c3 asCharacter) utf8Encoded isValidUTF8
23405
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  5021
             ]
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  5022
         ]
21323
986051ecf7f2 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21320
diff changeset
  5023
     ]
986051ecf7f2 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21320
diff changeset
  5024
986051ecf7f2 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21320
diff changeset
  5025
     |s|
986051ecf7f2 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21320
diff changeset
  5026
     1 to:10000 do:[:c1 |
986051ecf7f2 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21320
diff changeset
  5027
         1 to:255 do:[:c2 |
986051ecf7f2 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21320
diff changeset
  5028
             s := (c1 asCharacter , c2 asCharacter).
986051ecf7f2 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21320
diff changeset
  5029
             self assert:s utf8Encoded isValidUTF8
23405
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  5030
         ]
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  5031
     ]
21320
8b0aaee195e6 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20961
diff changeset
  5032
    "
8b0aaee195e6 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20961
diff changeset
  5033
!
8b0aaee195e6 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20961
diff changeset
  5034
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  5035
referencesAny:aCollection
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  5036
    "redefined to speed up searching when many of my instances are present"
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  5037
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  5038
%{ /* NOCONTEXT */
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  5039
    if (__mkSmallInteger(0) == __ClassInstPtr(__qClass(self))->c_ninstvars) {
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  5040
        /* I am only bytes */
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  5041
        RETURN(false)
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  5042
    }
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  5043
%}.
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  5044
    ^ super referencesAny:aCollection
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  5045
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  5046
    "
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  5047
        'abc' referencesAny:#()
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  5048
    "
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  5049
!
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  5050
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  5051
sizeInBytes
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  5052
    "return the number of 8-bit bytes in the receiver.
25420
a18d0d048b1f Cherry-picked changes from eXept, part 4
Jan Vrany <jan.vrany@labware.com>
parents: 25414
diff changeset
  5053
     This is needed since subclasses may redefine #size (TwoByteString)"
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  5054
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  5055
    ^ super size
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  5056
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  5057
    "Created: / 5.3.1998 / 10:41:13 / stefan"
25420
a18d0d048b1f Cherry-picked changes from eXept, part 4
Jan Vrany <jan.vrany@labware.com>
parents: 25414
diff changeset
  5058
!
a18d0d048b1f Cherry-picked changes from eXept, part 4
Jan Vrany <jan.vrany@labware.com>
parents: 25414
diff changeset
  5059
a18d0d048b1f Cherry-picked changes from eXept, part 4
Jan Vrany <jan.vrany@labware.com>
parents: 25414
diff changeset
  5060
utf8DecodedSize
a18d0d048b1f Cherry-picked changes from eXept, part 4
Jan Vrany <jan.vrany@labware.com>
parents: 25414
diff changeset
  5061
    "return the number of characters needed when this string is
a18d0d048b1f Cherry-picked changes from eXept, part 4
Jan Vrany <jan.vrany@labware.com>
parents: 25414
diff changeset
  5062
     decoded from UTF-8"
a18d0d048b1f Cherry-picked changes from eXept, part 4
Jan Vrany <jan.vrany@labware.com>
parents: 25414
diff changeset
  5063
a18d0d048b1f Cherry-picked changes from eXept, part 4
Jan Vrany <jan.vrany@labware.com>
parents: 25414
diff changeset
  5064
    |sz "{ Class:SmallInteger }"
a18d0d048b1f Cherry-picked changes from eXept, part 4
Jan Vrany <jan.vrany@labware.com>
parents: 25414
diff changeset
  5065
     cnt "{ Class:SmallInteger }"|
a18d0d048b1f Cherry-picked changes from eXept, part 4
Jan Vrany <jan.vrany@labware.com>
parents: 25414
diff changeset
  5066
a18d0d048b1f Cherry-picked changes from eXept, part 4
Jan Vrany <jan.vrany@labware.com>
parents: 25414
diff changeset
  5067
    sz := self size.
a18d0d048b1f Cherry-picked changes from eXept, part 4
Jan Vrany <jan.vrany@labware.com>
parents: 25414
diff changeset
  5068
    cnt := 0.
a18d0d048b1f Cherry-picked changes from eXept, part 4
Jan Vrany <jan.vrany@labware.com>
parents: 25414
diff changeset
  5069
a18d0d048b1f Cherry-picked changes from eXept, part 4
Jan Vrany <jan.vrany@labware.com>
parents: 25414
diff changeset
  5070
    1 to:sz do:[:idx|
a18d0d048b1f Cherry-picked changes from eXept, part 4
Jan Vrany <jan.vrany@labware.com>
parents: 25414
diff changeset
  5071
	"/ count the number of UTF-8 start bytes
a18d0d048b1f Cherry-picked changes from eXept, part 4
Jan Vrany <jan.vrany@labware.com>
parents: 25414
diff changeset
  5072
	((self byteAt:idx) bitAnd:16rC0) ~~ 16r80 ifTrue:[
a18d0d048b1f Cherry-picked changes from eXept, part 4
Jan Vrany <jan.vrany@labware.com>
parents: 25414
diff changeset
  5073
	    cnt := cnt+1.
a18d0d048b1f Cherry-picked changes from eXept, part 4
Jan Vrany <jan.vrany@labware.com>
parents: 25414
diff changeset
  5074
	].
a18d0d048b1f Cherry-picked changes from eXept, part 4
Jan Vrany <jan.vrany@labware.com>
parents: 25414
diff changeset
  5075
    ].
a18d0d048b1f Cherry-picked changes from eXept, part 4
Jan Vrany <jan.vrany@labware.com>
parents: 25414
diff changeset
  5076
    ^ cnt.
a18d0d048b1f Cherry-picked changes from eXept, part 4
Jan Vrany <jan.vrany@labware.com>
parents: 25414
diff changeset
  5077
a18d0d048b1f Cherry-picked changes from eXept, part 4
Jan Vrany <jan.vrany@labware.com>
parents: 25414
diff changeset
  5078
    "
a18d0d048b1f Cherry-picked changes from eXept, part 4
Jan Vrany <jan.vrany@labware.com>
parents: 25414
diff changeset
  5079
     'hello world' asByteArray utf8DecodedSize
a18d0d048b1f Cherry-picked changes from eXept, part 4
Jan Vrany <jan.vrany@labware.com>
parents: 25414
diff changeset
  5080
     'ä' utf8Encoded asByteArray utf8DecodedSize
a18d0d048b1f Cherry-picked changes from eXept, part 4
Jan Vrany <jan.vrany@labware.com>
parents: 25414
diff changeset
  5081
     'äΣΔΨӕἤῴ' utf8Encoded asByteArray utf8DecodedSize
a18d0d048b1f Cherry-picked changes from eXept, part 4
Jan Vrany <jan.vrany@labware.com>
parents: 25414
diff changeset
  5082
    "
a18d0d048b1f Cherry-picked changes from eXept, part 4
Jan Vrany <jan.vrany@labware.com>
parents: 25414
diff changeset
  5083
a18d0d048b1f Cherry-picked changes from eXept, part 4
Jan Vrany <jan.vrany@labware.com>
parents: 25414
diff changeset
  5084
    "Created: / 07-02-2017 / 15:03:07 / stefan"
a18d0d048b1f Cherry-picked changes from eXept, part 4
Jan Vrany <jan.vrany@labware.com>
parents: 25414
diff changeset
  5085
    "Modified: / 07-02-2017 / 19:14:06 / stefan"
a18d0d048b1f Cherry-picked changes from eXept, part 4
Jan Vrany <jan.vrany@labware.com>
parents: 25414
diff changeset
  5086
    "Modified (comment): / 02-01-2018 / 18:30:27 / stefan"
a18d0d048b1f Cherry-picked changes from eXept, part 4
Jan Vrany <jan.vrany@labware.com>
parents: 25414
diff changeset
  5087
    "Modified (comment): / 15-01-2018 / 08:29:10 / mawalch"
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  5088
! !
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  5089
8986
c2962d45eca0 new: #isByteCollection
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
  5090
!UninterpretedBytes methodsFor:'testing'!
c2962d45eca0 new: #isByteCollection
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
  5091
23405
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  5092
isBigEndian
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  5093
    "Return `true`, if words are stored in big-endian mode,
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  5094
     `false` otherwise.
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  5095
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  5096
     Subclasses that need configurable endianity may overrider
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  5097
     this to return approproate value."
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  5098
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  5099
    ^ IsBigEndian
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  5100
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  5101
!
90479596f910 Allow subclasses of `UninterpretedBytes` to define endianity
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23107
diff changeset
  5102
8986
c2962d45eca0 new: #isByteCollection
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
  5103
isByteCollection
c2962d45eca0 new: #isByteCollection
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
  5104
    "return true, if the receiver has access methods for bytes;
c2962d45eca0 new: #isByteCollection
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
  5105
     true is returned here - the method is redefined from Object."
c2962d45eca0 new: #isByteCollection
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
  5106
c2962d45eca0 new: #isByteCollection
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
  5107
    ^ true
9005
b82aa6bdc487 #isNonByteCollection
Stefan Vogel <sv@exept.de>
parents: 8995
diff changeset
  5108
!
b82aa6bdc487 #isNonByteCollection
Stefan Vogel <sv@exept.de>
parents: 8995
diff changeset
  5109
b82aa6bdc487 #isNonByteCollection
Stefan Vogel <sv@exept.de>
parents: 8995
diff changeset
  5110
isNonByteCollection
b82aa6bdc487 #isNonByteCollection
Stefan Vogel <sv@exept.de>
parents: 8995
diff changeset
  5111
    "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
  5112
     false is returned here - the method is redefined from Collection."
b82aa6bdc487 #isNonByteCollection
Stefan Vogel <sv@exept.de>
parents: 8995
diff changeset
  5113
b82aa6bdc487 #isNonByteCollection
Stefan Vogel <sv@exept.de>
parents: 8995
diff changeset
  5114
    ^ false
8986
c2962d45eca0 new: #isByteCollection
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
  5115
! !
c2962d45eca0 new: #isByteCollection
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
  5116
11009
fb66915c5bb5 changed #acceptVisitor:with: - moved to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 10676
diff changeset
  5117
!UninterpretedBytes methodsFor:'visiting'!
fb66915c5bb5 changed #acceptVisitor:with: - moved to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 10676
diff changeset
  5118
fb66915c5bb5 changed #acceptVisitor:with: - moved to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 10676
diff changeset
  5119
acceptVisitor:aVisitor with:aParameter
16719
19b7ae0bbb49 comment/format only
Claus Gittinger <cg@exept.de>
parents: 16320
diff changeset
  5120
    "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
  5121
fb66915c5bb5 changed #acceptVisitor:with: - moved to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 10676
diff changeset
  5122
    ^ aVisitor visitByteArray:self with:aParameter
fb66915c5bb5 changed #acceptVisitor:with: - moved to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 10676
diff changeset
  5123
! !
fb66915c5bb5 changed #acceptVisitor:with: - moved to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 10676
diff changeset
  5124
695
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
  5125
!UninterpretedBytes class methodsFor:'documentation'!
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
  5126
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
  5127
version
18600
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  5128
    ^ '$Header$'
12253
c933c6fcdeef changed: #fromHexStringWithSeparators:
Claus Gittinger <cg@exept.de>
parents: 11973
diff changeset
  5129
!
c933c6fcdeef changed: #fromHexStringWithSeparators:
Claus Gittinger <cg@exept.de>
parents: 11973
diff changeset
  5130
c933c6fcdeef changed: #fromHexStringWithSeparators:
Claus Gittinger <cg@exept.de>
parents: 11973
diff changeset
  5131
version_CVS
18600
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  5132
    ^ '$Header$'
25414
dffa84757e23 Add more compatibility methods to `UninterpretedBytes`
Jan Vrany <jan.vrany@labware.com>
parents: 23547
diff changeset
  5133
!
dffa84757e23 Add more compatibility methods to `UninterpretedBytes`
Jan Vrany <jan.vrany@labware.com>
parents: 23547
diff changeset
  5134
dffa84757e23 Add more compatibility methods to `UninterpretedBytes`
Jan Vrany <jan.vrany@labware.com>
parents: 23547
diff changeset
  5135
version_HG
dffa84757e23 Add more compatibility methods to `UninterpretedBytes`
Jan Vrany <jan.vrany@labware.com>
parents: 23547
diff changeset
  5136
dffa84757e23 Add more compatibility methods to `UninterpretedBytes`
Jan Vrany <jan.vrany@labware.com>
parents: 23547
diff changeset
  5137
    ^ '$Changeset: <not expanded> $'
695
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
  5138
! !
15087
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  5139
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
  5140
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
  5141
UninterpretedBytes initialize!