UninterpretedBytes.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Fri, 22 Apr 2016 08:34:39 +0100
branchjv
changeset 19636 cfa029c95cfc
parent 19559 d35a89d5c0ec
parent 19629 9078f9107270
child 19861 95c7068e30ba
permissions -rw-r--r--
Merge
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
     1
"
a27a279701f8 Initial revision
claus
parents:
diff changeset
     2
 COPYRIGHT (c) 1993 by Claus Gittinger
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
     3
              All Rights Reserved
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
     4
a27a279701f8 Initial revision
claus
parents:
diff changeset
     5
 This software is furnished under a license and may be used
a27a279701f8 Initial revision
claus
parents:
diff changeset
     6
 only in accordance with the terms of that license and with the
a27a279701f8 Initial revision
claus
parents:
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
a27a279701f8 Initial revision
claus
parents:
diff changeset
     8
 be provided or otherwise made available to, or used by, any
a27a279701f8 Initial revision
claus
parents:
diff changeset
     9
 other person.  No title to or ownership of the software is
a27a279701f8 Initial revision
claus
parents:
diff changeset
    10
 hereby transferred.
a27a279701f8 Initial revision
claus
parents:
diff changeset
    11
"
6492
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
    12
"{ Package: 'stx:libbasic' }"
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
    13
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
    14
"{ NameSpace: Smalltalk }"
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
    15
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
    16
ArrayedCollection subclass:#UninterpretedBytes
19402
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
    17
	instanceVariableNames:''
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
    18
	classVariableNames:'IsBigEndian'
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
    19
	poolDictionaries:''
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
    20
	category:'Collections-Abstract'
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    21
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    22
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    23
!UninterpretedBytes primitiveDefinitions!
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    24
%{
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    25
/*
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    26
 * Notice: I am abstract, and my subclasses may be anything.
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    27
 * Therefore, the code must always handle the fallback case
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    28
 * where the receiver is neither an ExternalBytes nor a ByteArray.
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    29
 * (which are, however, the most common)
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    30
 *
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    31
 * macro to fetch my byte address and size-in-bytes;
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    32
 * convenient for inline-C code.
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    33
 * (yes, C is bad ...)
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
#define __fetchBytePointerAndSize__(o, pPtr, pSize) \
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    36
    {\
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    37
      if (__isNonNilObject(o)) { \
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
    38
        if (__isByteArrayLike(o)) { \
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
    39
          *(pPtr) = (unsigned char *)__ByteArrayInstPtr(o)->ba_element; \
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
    40
          *(pSize) = __byteArraySize(o); \
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
    41
        } else if (__qIsExternalBytesLike(o)) { \
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
    42
          OBJ __sz__ = __externalBytesSize(o); \
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
    43
          if (__isSmallInteger(__sz__)) { \
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
    44
            *(pSize) = __intVal(__sz__); \
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
    45
            *(pPtr) = (unsigned char *)(__externalBytesAddress(o)); \
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
    46
          } else { \
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
    47
            *(pSize) = 0; \
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
    48
            *(pPtr) = (unsigned char *)0; \
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
    49
          } \
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) /* nInstBytes */ = OHDR_SIZE + __OBJS2BYTES__(__intVal(__ClassInstPtr(__qClass(o))->c_ninstvars)); \
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
    52
            *(pPtr) = (char *)(__InstPtr(self)) + *(pSize) /* nInstBytes */; \
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
    53
            *(pSize) = __qSize(self) - *(pSize) /* nInstBytes */; \
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
    54
        } \
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    55
      } else { \
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
    56
        *(pSize) = 0; \
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
    57
        *(pPtr) = (unsigned char *)0; \
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    58
      } \
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    59
    }
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    60
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    61
%}
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    62
! !
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    63
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
    64
!UninterpretedBytes class methodsFor:'documentation'!
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    65
88
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    66
copyright
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    67
"
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    68
 COPYRIGHT (c) 1993 by Claus Gittinger
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
    69
              All Rights Reserved
88
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    70
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    71
 This software is furnished under a license and may be used
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    72
 only in accordance with the terms of that license and with the
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    73
 inclusion of the above copyright notice.   This software may not
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    74
 be provided or otherwise made available to, or used by, any
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    75
 other person.  No title to or ownership of the software is
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    76
 hereby transferred.
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    77
"
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    78
!
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    79
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
    80
documentation
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
    81
"
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
    82
    UninterpretedBytes provides the common protocol for byte-storage
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
    83
    containers; concrete subclasses are
19101
8ccbefbc944d #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19047
diff changeset
    84
        ByteArray (which store the bytes within the Smalltalk object memory)
8ccbefbc944d #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19047
diff changeset
    85
        String    (knows that the bytes represent characters)
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
    86
    and
19101
8ccbefbc944d #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19047
diff changeset
    87
        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
    88
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
    89
    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
    90
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
    91
    [See also:]
19101
8ccbefbc944d #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19047
diff changeset
    92
        ByteArray String ExternalBytes
1294
e26bbb61f6b2 documentation
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
    93
e26bbb61f6b2 documentation
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
    94
    [author:]
19101
8ccbefbc944d #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19047
diff changeset
    95
        Claus Gittinger
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    96
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    97
    [Notice:]
19101
8ccbefbc944d #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19047
diff changeset
    98
        Notice the confusion due to multiple methods with the same
8ccbefbc944d #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19047
diff changeset
    99
        functionality (i.e. 'xxxx:MSB:' vs. 'xxxx:bigEndian:').
8ccbefbc944d #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19047
diff changeset
   100
        The reason is that at the time this class was written,
8ccbefbc944d #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19047
diff changeset
   101
        ST80 did not offer protocol to specify the byteOrder, and
8ccbefbc944d #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19047
diff changeset
   102
        ST/X provided methods ending in 'MSB:' for this.
8ccbefbc944d #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19047
diff changeset
   103
        In the meanwhile, VW added protocol ending in 'bigEndian:',
8ccbefbc944d #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19047
diff changeset
   104
        which has been added here for compatibility.
8ccbefbc944d #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19047
diff changeset
   105
        (certainly a point, where an ansi-standard will help)
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   106
"
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   107
! !
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   108
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   109
!UninterpretedBytes class methodsFor:'initialization'!
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   110
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   111
initialize
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   112
    IsBigEndian := self isBigEndian.
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   113
! !
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   114
3363
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
   115
!UninterpretedBytes class methodsFor:'instance creation'!
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
   116
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   117
from:aByteArray
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   118
    "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
   119
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   120
    |len bytes|
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   121
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   122
    len := aByteArray size.
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   123
    bytes := self new:len.
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   124
    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
   125
    ^ bytes
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   126
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
      String from:#[40 41 42]
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   129
      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
   130
    "
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   131
!
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
fromHexString:aString
15717
b05a01005030 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15087
diff changeset
   134
    "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
   135
12551
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   136
    | sz bytes s hi lo |
8995
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
    sz := aString size.
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   139
    sz == 0 ifTrue:[^ self new].
14970
319eeed62505 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 14224
diff changeset
   140
    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
   141
12551
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   142
    bytes := self new: sz // 2.
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   143
    s := aString readStream.
12551
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   144
    1 to: sz // 2 do: [ :idx |
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   145
        hi := s next digitValue.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   146
        lo := s next digitValue.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   147
        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
   148
    ].
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   149
    ^ bytes
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   150
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   151
    "
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   152
     ByteArray fromHexString:'1234FEFF'
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   153
     ExternalBytes fromHexString:'1234FEFF'
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
    "
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   156
     |s|
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   157
     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
   158
     ByteArray fromHexString:s
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   159
    "
12551
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   160
    "
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   161
     Time millisecondsToRun:[
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   162
        1000000 timesRepeat:[ ByteArray fromHexString:'1234FEFF1234FEFF1234FEFF1234FEFF' ]
12551
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   163
     ].
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   164
    "
15717
b05a01005030 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15087
diff changeset
   165
b05a01005030 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15087
diff changeset
   166
    "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
   167
!
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   168
11874
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   169
fromHexStringWithSeparators:aString
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   170
    "read a bytearray from a printed string representation, where
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   171
     individual bytes are encoded as two hex digits, optionally separated by whiteSpace.
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   172
     See also fromHexString:, which does something similar, but does not allow for spaces"
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   173
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   174
    ^ self streamContents:[:outStream |
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   175
        |inStream h|
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   176
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   177
        inStream := aString readStream.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   178
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   179
        [
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   180
            inStream skipSeparators.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   181
            inStream atEnd
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   182
        ] whileFalse:[
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   183
            h := inStream next:2.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   184
            outStream nextPut:(Integer readFrom:h base:16).
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   185
        ].
11874
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   186
    ].
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   187
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   188
    "
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   189
     ByteArray fromHexString:'1234FEFF'
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   190
     ByteArray fromHexStringWithSeparators:'   12  34 FE FF'
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   191
    "
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   192
!
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   193
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   194
fromPackedString:aString
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   195
    "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
   196
     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
   197
     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
   198
     Every 6 bit packet is encoded as a character in 32..95.
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   199
     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
   200
     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
   201
     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
   202
     ST-80 uses this encoding for Images ...
16798
acfbeccbc226 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16796
diff changeset
   203
     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
   204
     PS: It took a while to figure that one out ...
18633
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   205
     PPS: I don't like it ;-)"
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   206
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   207
    |index    "{ Class: SmallInteger }"
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   208
     dstIndex "{ Class: SmallInteger }"
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   209
     stop     "{ Class: SmallInteger }"
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   210
     sixBits  "{ Class: SmallInteger }"
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   211
     n        "{ Class: SmallInteger }"
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   212
     sz       "{ Class: SmallInteger }"
12551
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   213
     last bytes|
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   214
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   215
    sz := aString size.
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   216
    sz == 0 ifTrue:[^ self new].
12551
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   217
    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
   218
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   219
    stop := sz // 4 * 3.
12551
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   220
    "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
   221
     range 97 .. otherwise, its exact."
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   222
12551
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   223
    last := aString last codePoint.
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   224
    last > 96 ifTrue:[
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   225
        stop := stop - 3 + (last - 96)
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   226
    ].
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   227
    bytes := self new:stop.
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   228
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   229
    index := 1. dstIndex := 1.
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   230
    [dstIndex <= stop] whileTrue:[
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   231
        "/ take 4 characters ...
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   232
        "/ allow a line break before each group of 4
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   233
        sixBits := (aString at:index) codePoint.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   234
        [sixBits < 32] whileTrue:[
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   235
            index := index + 1.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   236
            sixBits := (aString at:index) codePoint.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   237
        ].
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   238
        sixBits := sixBits bitAnd:16r3F.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   239
        n := sixBits.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   240
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   241
        "/ self assert:(aString at:index+1) codePoint >= 32.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   242
        sixBits := (aString at:index+1) codePoint bitAnd:16r3F.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   243
        n := (n bitShift:6) + sixBits.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   244
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   245
        "/ self assert:(aString at:index+2) codePoint >= 32.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   246
        sixBits := (aString at:index+2) codePoint bitAnd:16r3F.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   247
        n := (n bitShift:6) + sixBits.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   248
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   249
        "/ self assert:(aString at:index+3) codePoint >= 32.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   250
        sixBits := (aString at:index+3) codePoint bitAnd:16r3F.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   251
        n := (n bitShift:6) + sixBits.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   252
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   253
        index := index + 4.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   254
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   255
        "/ now have 24 bits in n
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   256
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   257
        bytes at:dstIndex put:(n bitShift:-16).
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   258
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   259
        dstIndex < stop ifTrue:[
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   260
            bytes at:dstIndex+1 put:((n bitShift:-8) bitAnd:16rFF).
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   261
            dstIndex+2 <= stop ifTrue:[
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   262
                bytes at:dstIndex+2 put:(n bitAnd:16rFF).
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   263
            ]
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 := dstIndex + 3.
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   266
    ].
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   267
    ^ bytes
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   268
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   269
    "
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   270
     ByteArray fromPackedString:(#[1 1 1 1] asPackedString)
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   271
     ByteArray fromPackedString:(#[1 1 1 1 1] asPackedString)
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   272
     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
   273
     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
   274
     ByteArray fromPackedString:(#[1 1 1 1 1 1 1 1] asPackedString)
18633
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   275
     ByteArray fromPackedString:((ByteArray new:256) asPackedString)
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   276
     ByteArray fromPackedString:((ByteArray new:128) asPackedString)
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   277
     ByteArray fromPackedString:((ByteArray new:129) asPackedString)
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   278
     ByteArray fromPackedString:((ByteArray new:130) asPackedString)
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   279
     ByteArray fromPackedString:((ByteArray new:131) asPackedString)
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   280
     ByteArray fromPackedString:((ByteArray new:132) asPackedString)
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   281
     ByteArray fromPackedString:((ByteArray new:64) asPackedString)
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   282
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   283
     0 to:256 do:[:l |
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   284
        |orig copy|
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   285
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   286
        0 to:255 do:[:fill |
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   287
            orig := ByteArray new:l withAll:fill.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   288
            copy := ByteArray fromPackedString:(orig asPackedString).
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   289
            self assert:(orig = copy).
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   290
         ]
18633
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   291
     ]
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   292
    "
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   293
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   294
    "Modified: / 6.3.1997 / 15:28:52 / cg"
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   295
    "Modified: / 18.12.1997 / 17:17:11 / stefan"
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   296
!
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   297
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   298
uninitializedNew:anInteger
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   299
    "return a new instance of the receiver with uninitialized
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   300
     (i.e. undefined) contents. The indexed elements have any random
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   301
     value. However, any named instance variables are still nilled.
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   302
     For use, when contents will be set anyway shortly after - this
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   303
     is a bit faster than the regular basicNew:, which clears the bytes.
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   304
     Of course, it only makes a difference for very big ByteArrays, such
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   305
     as used for images/bitmaps.
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   306
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   307
     Notice: if you want to port code using uninitializedNew: to another
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   308
     smalltalk, you have to add an 'uninitializedNew: -> basicNew:'-calling
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   309
     method to the ByteArray class of the other smalltalk."
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   310
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   311
%{  /* NOCONTEXT */
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   312
    OBJ newobj;
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   313
    INT instsize, nInstVars, nindexedinstvars;
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   314
    REGISTER OBJ *op;
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   315
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   316
    if (__isSmallInteger(anInteger)) {
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   317
        nindexedinstvars = __intVal(anInteger);
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   318
        if (nindexedinstvars >= 0) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   319
            if (self == ByteArray) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   320
                /*
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   321
                 * the most common case
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   322
                 */
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   323
                instsize = OHDR_SIZE + nindexedinstvars;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   324
                if (__CanDoQuickNew(instsize)) {        /* OBJECT ALLOCATION */
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   325
                    __qCheckedNew(newobj, instsize);
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   326
                    __InstPtr(newobj)->o_class = self;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   327
                    __qSTORE(newobj, self);
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   328
                    RETURN (newobj );
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   329
                }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   330
            } else {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   331
                /*
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   332
                 * Take care for subclasses like TwoByteString
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   333
                 */
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   334
                switch (__smallIntegerVal(__ClassInstPtr(self)->c_flags) & ARRAYMASK) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   335
                case BYTEARRAY:
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   336
                    break;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   337
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   338
                case WORDARRAY:
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   339
                case SWORDARRAY:
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   340
                    nindexedinstvars *= 2;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   341
                    break;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   342
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   343
                case LONGARRAY:
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   344
                case SLONGARRAY:
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   345
                    nindexedinstvars *= 4;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   346
                    break;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   347
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   348
                default:
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   349
                    /* don't know about this array type, delegate to super */
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   350
                    goto out;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   351
                }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   352
            }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   353
            nInstVars = __intVal(__ClassInstPtr(self)->c_ninstvars);
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   354
            instsize = OHDR_SIZE + __OBJS2BYTES__(nInstVars) + nindexedinstvars;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   355
            __PROTECT_CONTEXT__
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   356
            __qNew(newobj, instsize);   /* OBJECT ALLOCATION */
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   357
            __UNPROTECT_CONTEXT__
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   358
            if (newobj != nil) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   359
                __InstPtr(newobj)->o_class = self;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   360
                __qSTORE(newobj, self);
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   361
                if (nInstVars) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   362
                    /*
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   363
                     * still have to nil out named instvars ...
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   364
                     */
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   365
#if defined(memset4) && defined(FAST_OBJECT_MEMSET4)
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   366
                    memset4(__InstPtr(newobj)->i_instvars, nil, nInstVars);
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   367
#else
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   368
# if defined(FAST_MEMSET) && !defined(NEGATIVE_ADDRESSES)
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   369
                    /*
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   370
                     * knowing that nil is 0
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   371
                     */
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   372
                    memset(__InstPtr(newobj)->i_instvars, 0, instsize - OHDR_SIZE);
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   373
# else
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   374
                    op = __InstPtr(newobj)->i_instvars;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   375
                    while (nInstVars--)
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   376
                        *op++ = nil;
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   377
# endif
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   378
#endif
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   379
                }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   380
                RETURN ( newobj );
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   381
            }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   382
        }
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   383
    }
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   384
out:;
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   385
%}.
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   386
    ^ self basicNew:anInteger
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   387
!
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   388
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   389
with:aByteArray from:start to:stop
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   390
    "return new instance with a copy of aByteArray
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   391
     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
   392
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   393
    |len bytes|
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   394
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   395
    len := stop-start+1.
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   396
    bytes := self new:len.
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   397
    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
   398
    ^ bytes
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   399
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
      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
   402
    "
3363
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
   403
! !
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
   404
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   405
!UninterpretedBytes class methodsFor:'queries'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   406
8893
99996b25482e +isAbstract
Claus Gittinger <cg@exept.de>
parents: 8092
diff changeset
   407
isAbstract
11220
1ed300ff0d21 comment
Claus Gittinger <cg@exept.de>
parents: 11009
diff changeset
   408
    "Return if this class is an abstract class.
1ed300ff0d21 comment
Claus Gittinger <cg@exept.de>
parents: 11009
diff changeset
   409
     True is returned for UninterpretedBytes here; false for subclasses.
19461
7a4d28b76572 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19415
diff changeset
   410
     Abstract subclasses must redefine this again."
11220
1ed300ff0d21 comment
Claus Gittinger <cg@exept.de>
parents: 11009
diff changeset
   411
8893
99996b25482e +isAbstract
Claus Gittinger <cg@exept.de>
parents: 8092
diff changeset
   412
    ^ self == UninterpretedBytes
99996b25482e +isAbstract
Claus Gittinger <cg@exept.de>
parents: 8092
diff changeset
   413
!
99996b25482e +isAbstract
Claus Gittinger <cg@exept.de>
parents: 8092
diff changeset
   414
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   415
isBigEndian
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   416
    "return true, if words/shorts store the most-significant
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   417
     byte first (MSB), false if least-sign.-first (LSB).
4019
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
   418
     I.e. false for vax, intel; true for m68k, sun.
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
   419
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
   420
     Notice: UninterpretedBytes isBigEndian
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   421
             this is inlined both by stc and the jit compiler"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   422
a27a279701f8 Initial revision
claus
parents:
diff changeset
   423
%{  /* NOCONTEXT */
a27a279701f8 Initial revision
claus
parents:
diff changeset
   424
8901
824a89d0b5c7 alpha64 vs. POINTER_SIZE cleanup
Claus Gittinger <cg@exept.de>
parents: 8893
diff changeset
   425
#if defined(__MSBFIRST__)
3936
dd8cd28d4a9b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3459
diff changeset
   426
    RETURN (true);
dd8cd28d4a9b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3459
diff changeset
   427
#else
8901
824a89d0b5c7 alpha64 vs. POINTER_SIZE cleanup
Claus Gittinger <cg@exept.de>
parents: 8893
diff changeset
   428
# if defined(__LSBFIRST__)
4275
9fc4a735a1d3 BFIRST stuff
Claus Gittinger <cg@exept.de>
parents: 4019
diff changeset
   429
    RETURN (false);
9fc4a735a1d3 BFIRST stuff
Claus Gittinger <cg@exept.de>
parents: 4019
diff changeset
   430
# else
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   431
    /*
a27a279701f8 Initial revision
claus
parents:
diff changeset
   432
     * I dont like ifdefs - you always forget some ...
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   433
     * therefore we look into a structure at run-time.
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   434
     * (also, there are CPUs around [mips], where the byteorder
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   435
     *  is programmable, and which come in different flavours)
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   436
     *
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   437
     * NOTICE:
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   438
     *    both the JIT and stc may inline this to a
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   439
     *    constant for systems where this is known.
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   440
     */
a27a279701f8 Initial revision
claus
parents:
diff changeset
   441
    union {
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   442
        unsigned int   u_l;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   443
        char           u_c[sizeof(int)];
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   444
    } u;
a27a279701f8 Initial revision
claus
parents:
diff changeset
   445
a27a279701f8 Initial revision
claus
parents:
diff changeset
   446
    u.u_l = 0x87654321;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   447
    if (u.u_c[0] == 0x21) RETURN (false);
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   448
    RETURN (true);
4275
9fc4a735a1d3 BFIRST stuff
Claus Gittinger <cg@exept.de>
parents: 4019
diff changeset
   449
# endif
3936
dd8cd28d4a9b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3459
diff changeset
   450
#endif
18346
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   451
%}.
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   452
    ^ false     "/ an arbitrary default
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   453
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   454
    "
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   455
     UninterpretedBytes isBigEndian
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   456
    "
3209
eff7ad7f0825 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3207
diff changeset
   457
!
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   458
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   459
isBuiltInClass
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   460
    "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
   461
     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
   462
     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
   463
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   464
    ^ self == UninterpretedBytes
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   465
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
   466
    "Modified: / 23.4.1996 / 15:56:25 / cg"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
   467
    "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
   468
! !
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   469
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   470
!UninterpretedBytes methodsFor:'Compatibility'!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   471
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   472
doubleWordAt:index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   473
    "return the 4-bytes starting at index as an (unsigned) Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   474
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   475
     The value is retrieved in the machines natural byte order."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   476
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   477
    ^ self unsignedInt32At:index MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   478
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   479
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   480
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   481
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   482
     b := ByteArray withAll:#(1 2 3 4).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   483
     (b doubleWordAt:1) printStringRadix:16
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   484
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   485
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   486
    "Modified: / 5.3.1998 / 14:57:35 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   487
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   488
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   489
doubleWordAt:index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   490
    "return the 4-bytes starting at index as an (unsigned) Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   491
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   492
     The value is retrieved MSB-first, if the msb-arg is true;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   493
     LSB-first otherwise."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   494
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   495
    ^ self unsignedInt32At:index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   496
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   497
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   498
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   499
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   500
     b := ByteArray withAll:#(1 2 3 4).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   501
     (b doubleWordAt:1 MSB:true) printStringRadix:16.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   502
     (b doubleWordAt:1 MSB:false) printStringRadix:16
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   503
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   504
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   505
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   506
doubleWordAt:byteIndex put:anInteger
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   507
    "set the 4-bytes starting at index from the (unsigned) Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   508
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   509
     The value should be in the range 0 to 16rFFFFFFFF
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   510
     (for negative values, the stored value is not defined).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   511
     The value is stored in the machines natural byte order."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   512
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   513
   ^ self unsignedInt32At:byteIndex put:anInteger MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   514
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   515
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   516
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   517
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   518
     b doubleWordAt:1 put:16r04030201.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   519
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   520
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   521
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   522
    "Modified: / 5.3.1998 / 14:57:48 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   523
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   524
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   525
doubleWordAt:byteIndex put:anInteger MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   526
    "set the 4-bytes starting at index from the (unsigned) Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   527
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   528
     The value must be in the range 0 to 16rFFFFFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   529
     The value is stored MSB-first if msb is true; LSB-first otherwise."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   530
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   531
   ^ self unsignedInt32At:byteIndex put:anInteger MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   532
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   533
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   534
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   535
     b := ByteArray new:8.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   536
     b doubleWordAt:1 put:16r04030201 MSB:true.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   537
     b doubleWordAt:5 put:16r04030201 MSB:false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   538
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   539
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   540
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   541
    "Modified: / 21.1.1998 / 17:43:34 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   542
    "Modified: / 5.3.1998 / 11:42:17 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   543
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   544
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   545
doubleWordAtDoubleWordIndex:int32Index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   546
    "return the unsigned long (int32) at index, anInteger.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   547
     Fetching in the machine's natural byte order.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   548
     Indices are 1-based and scaled as appropriate to allow
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   549
     accessing the memory as an array of doubleWord entries.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   550
     (i.e. indices are 1, 2, ...)"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   551
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   552
    ^ self doubleWordAtDoubleWordIndex:int32Index MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   553
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   554
    "Created: / 21.1.1998 / 17:43:53 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   555
    "Modified: / 5.3.1998 / 14:58:06 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   556
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   557
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   558
doubleWordAtDoubleWordIndex:int32Index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   559
    "return the unsigned long (int32) at index, anInteger.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   560
     Fetching is MSB if msb is true, LSB otherwise.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   561
     Indices are 1-based and scaled as appropriate to allow
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   562
     accessing the memory as an array of doubleWord entries.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   563
     (i.e. indices are 1, 2, ...)"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   564
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   565
    ^ self unsignedInt32At:((int32Index - 1) * 4 + 1) MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   566
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   567
    "Created: / 21.1.1998 / 17:44:07 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   568
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   569
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   570
doubleWordAtDoubleWordIndex:int32Index put:anInteger
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   571
    "set the long at index, anInteger.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   572
     Storing in the machines natural byte order.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   573
     Indices are 1-based and scaled as appropriate to allow
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   574
     accessing the memory as an array of doubleWord entries.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   575
     (i.e. indices are 1, 2, ...)"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   576
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   577
    ^ self doubleWordAtDoubleWordIndex:int32Index put:anInteger MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   578
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   579
    "Created: / 21.1.1998 / 17:44:13 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   580
    "Modified: / 5.3.1998 / 14:58:19 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   581
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   582
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   583
doubleWordAtDoubleWordIndex:int32Index put:anInteger MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   584
    "set the long at index, anInteger.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   585
     Storing is MSB if msb is true, LSB otherwise.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   586
     Indices are 1-based and scaled as appropriate to allow
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   587
     accessing the memory as an array of doubleWord entries.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   588
     (i.e. indices are 1, 2, ...)"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   589
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   590
    ^ self unsignedInt32At:((int32Index - 1) * 4 + 1) put:anInteger MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   591
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   592
    "Created: / 21.1.1998 / 17:44:19 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   593
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   594
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   595
int16At:byteIndex
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   596
    "return the 2-bytes starting at index as a signed Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   597
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   598
     The value is retrieved in the machines natural byte order.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   599
     This may be worth a primitive."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   600
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   601
    ^ self signedInt16At:byteIndex
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   602
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   603
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   604
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   605
     b := ByteArray new:2.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   606
     b wordAt:1 put:16rFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   607
     b signedWordAt:1
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   608
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   609
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   610
    "Modified: 1.7.1996 / 21:14:38 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   611
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   612
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   613
int16At:byteIndex MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   614
    "return the 2-bytes starting at index as a signed Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   615
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   616
     The value is retrieved in the machines natural byte order.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   617
     This may be worth a primitive."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   618
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   619
    ^ self signedInt16At:byteIndex MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   620
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   621
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   622
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   623
     b := ByteArray new:2.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   624
     b wordAt:1 put:16rFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   625
     b signedWordAt:1
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   626
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   627
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   628
    "Modified: 1.7.1996 / 21:14:38 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   629
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   630
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   631
int16At:index put:anInteger
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   632
    "set the 2-bytes starting at index from the signed Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   633
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   634
     The stored value must be in the range -32768 .. +32676.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   635
     The value is stored in the machine's natural byteorder"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   636
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   637
    ^ self signedInt16At:index put:anInteger MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   638
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   639
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   640
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   641
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   642
     b shortAt:1 put:1 bigEndian:true.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   643
     b shortAt:3 put:1 bigEndian:false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   644
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   645
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   646
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   647
    "Modified: / 1.7.1996 / 21:12:07 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   648
    "Created: / 5.3.1998 / 11:02:05 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   649
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   650
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   651
int16At:index put:anInteger MSB:bigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   652
    "set the 2-bytes starting at index from the signed Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   653
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   654
     The stored value must be in the range -32768 .. +32676.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   655
     The value is stored in the byteorder given by bigEndian.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   656
     This may be worth a primitive."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   657
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   658
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   659
    ^ self signedInt16At:index put:anInteger MSB:bigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   660
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   661
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   662
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   663
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   664
     b shortAt:1 put:1 bigEndian:true.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   665
     b shortAt:3 put:1 bigEndian:false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   666
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   667
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   668
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   669
    "Modified: / 1.7.1996 / 21:12:07 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   670
    "Created: / 5.3.1998 / 11:02:05 / stefan"
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
longAt:index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   674
    "return the 4-bytes starting at index as a signed Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   675
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   676
     The value is retrieved in the machines natural byte order,
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   677
     therefore, this should only be used for byte-data which is
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   678
     only used inside this machine.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   679
     To setup data packets which are to be sent to other machines,
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   680
     or stored into a file, always use longAt:MSB: and specify
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   681
     a definite byteOrder."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   682
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   683
    ^ self signedInt32At:index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   684
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   685
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   686
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   687
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   688
     b unsignedLongAt:1 put:16rFFFFFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   689
     (b longAt:1)
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   690
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   691
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   692
    "Modified: / 1.7.1996 / 21:11:28 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   693
    "Modified: / 5.3.1998 / 12:06:28 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   694
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   695
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   696
longAt:index bigEndian:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   697
    "return the 4-bytes starting at index as a signed Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   698
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   699
     Depending on msb, the value is retrieved MSB-first or LSB-first.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   700
     This may be worth a primitive."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   701
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   702
    ^ self signedInt32At:index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   703
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   704
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   705
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   706
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   707
     b unsignedLongAt:1 put:16rFFFFFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   708
     (b longAt:1)
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   709
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   710
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   711
    "Modified: / 1.7.1996 / 21:11:33 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   712
    "Created: / 5.3.1998 / 14:02:03 / stefan"
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
longAt:index put:value
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   716
    "set the 4-bytes starting at index from the signed Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   717
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   718
     The value is stored in the machine's natural byte order."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   719
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   720
    ^ self signedInt32At:index put:value MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   721
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   722
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   723
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   724
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   725
     b longAt:1 put:-1.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   726
     (b unsignedLongAt:1) printStringRadix:16
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   727
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   728
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   729
    "Modified: / 1.7.1996 / 21:11:39 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   730
    "Created: / 5.3.1998 / 10:57:18 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   731
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   732
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   733
longAt:byteIndex put:anInteger bigEndian:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   734
    "store a signed long (32bit) integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   735
     The index is a smalltalk index (i.e. 1-based)."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   736
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   737
    ^ self signedInt32At:byteIndex put:anInteger MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   738
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   739
    "Created: / 9.5.1998 / 01:10:24 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   740
    "Modified: / 9.5.1998 / 01:13:34 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   741
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   742
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   743
longLongAt:index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   744
    "return the 8-bytes starting at index as a signed Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   745
     The index is a smalltalk index (i.e. 1-based).
19506
c729dd175795 #BUGFIX
Claus Gittinger <cg@exept.de>
parents: 19502
diff changeset
   746
     The value is retrieved in the machineÄs natural byte order.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   747
     This may be worth a primitive."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   748
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   749
    ^ self signedInt64At:index MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   750
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   751
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   752
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   753
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   754
     b unsignedLongLongAt:1 put:16rFFFFFFFFFFFFFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   755
     (b longLongAt:1)
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   756
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   757
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   758
    "Modified: / 1.7.1996 / 21:11:28 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   759
    "Created: / 5.3.1998 / 14:40:05 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   760
    "Modified: / 5.3.1998 / 14:58:32 / stefan"
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
longLongAt:index bigEndian:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   764
    "return the 8-bytes starting at index as a signed Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   765
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   766
     The value is retrieved in the given byte order.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   767
     This may be worth a primitive."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   768
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   769
    ^ self signedInt64At:index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   770
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   771
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   772
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   773
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   774
     b unsignedLongLongAt:1 put:16rFFFFFFFFFFFFFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   775
     (b longLongAt:1 msb:true)
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   776
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   777
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   778
    "Modified: / 5.3.1998 / 12:06:28 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   779
    "Created: / 5.3.1998 / 14:40:54 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   780
    "Modified: / 9.5.1998 / 01:10:59 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   781
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   782
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   783
longLongAt:byteIndex put:anInteger
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   784
    "store a signed longLong (64bit) integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   785
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   786
     Same as #signedQuadWordAt:put: - for ST80 compatibility."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   787
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   788
    ^ self signedInt64At:byteIndex put:anInteger MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   789
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   790
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   791
longLongAt:byteIndex put:anInteger bigEndian:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   792
    "store a signed longLong (64bit) integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   793
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   794
     Same as #signedQuadWordAt:put: - for ST80 compatibility."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   795
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   796
    ^ self signedInt64At:byteIndex put:anInteger MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   797
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   798
    "Created: / 9.5.1998 / 01:10:24 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   799
    "Modified: / 9.5.1998 / 01:13:34 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   800
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   801
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   802
quadWordAt:index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   803
    "return the 8-bytes starting at index as an (unsigned) Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   804
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   805
     Depending on msb, the value is retrieved MSB or LSB-first."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   806
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   807
   ^ self unsignedInt64At:index MSB:msb 
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   808
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   809
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   810
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   811
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   812
     b := ByteArray withAll:#(1 2 3 4 5 6 7 8).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   813
     (b quadWordAt:1 MSB:false) printStringRadix:16
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   814
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   815
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   816
    "Modified: 5.11.1996 / 14:06:21 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   817
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   818
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   819
quadWordAt:index put:anInteger MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   820
    "set the 8-bytes starting at index from the (unsigned) Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   821
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   822
     The value must be in the range 0 to 16rFFFFFFFFFFFFFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   823
     Depending on msb, the value is stored MSB-first or LSB-first."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   824
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   825
    ^ self unsignedInt64At:index put:anInteger MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   826
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   827
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   828
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   829
     b := ByteArray new:8.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   830
     b quadWordAtIndex:1 put:16r0807060504030201 MSB:false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   831
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   832
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   833
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   834
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   835
shortAt:index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   836
    "return the 2-bytes starting at index as a signed Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   837
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   838
     The value is retrieved in the machines natural byte order.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   839
     This may be worth a primitive.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   840
     This is the ST80 equivalent of #signedWordAt:"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   841
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   842
    ^ self signedInt16At:index MSB:IsBigEndian
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   843
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   844
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   845
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   846
     b := ByteArray new:2.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   847
     b unsignedShortAt:1 put:16rFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   848
     b shortAt:1
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   849
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   850
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   851
    "Modified: / 1.7.1996 / 21:14:38 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   852
    "Created: / 5.3.1998 / 10:59:57 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   853
    "Modified: / 5.3.1998 / 23:39:38 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   854
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   855
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   856
shortAt:index bigEndian:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   857
    "return the 2-bytes starting at index as a signed Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   858
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   859
     The value is retrieved MSB-first, if the msb-arg is true;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   860
     LSB-first otherwise.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   861
     This is the ST80 equivalent of #signedWordAt:"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   862
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   863
    ^ self signedInt16At:index MSB:msb
19349
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
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   867
     b := ByteArray new:2.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   868
     b unsignedShortAt:1 put:16rFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   869
     b shortAt:1
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   870
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   871
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   872
    "Modified: / 1.7.1996 / 21:14:38 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   873
    "Created: / 5.3.1998 / 23:41:21 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   874
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   875
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   876
shortAt:index put:value
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   877
    "set the 2-bytes starting at index from the signed Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   878
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   879
     The stored value must be in the range -32768 .. +32676.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   880
     The value is stored in the machines natural byteorder.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   881
     This may be worth a primitive.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   882
     This is the ST80 equivalent of #signedWordAt:put:"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   883
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   884
    ^ self signedInt16At:index put:value MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   885
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   886
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   887
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   888
     b := ByteArray new:6.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   889
     b shortAt:1 put:-1.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   890
     b shortAt:3 put:-2.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   891
     b shortAt:5 put:0.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   892
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   893
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   894
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   895
    "Modified: / 1.7.1996 / 21:12:07 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   896
    "Created: / 5.3.1998 / 11:02:05 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   897
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   898
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   899
shortAt:index put:value bigEndian:bigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   900
    "set the 2-bytes starting at index from the signed Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   901
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   902
     The stored value must be in the range -32768 .. +32676.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   903
     The value is stored in the byteorder given by bigEndian.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   904
     This may be worth a primitive."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   905
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   906
    ^ self signedInt16At:index put:value MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   907
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   908
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   909
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   910
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   911
     b shortAt:1 put:1 bigEndian:true.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   912
     b shortAt:3 put:1 bigEndian:false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   913
     b inspect
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
    "Modified: / 1.7.1996 / 21:12:07 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   917
    "Created: / 5.3.1998 / 11:02:05 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   918
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   919
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   920
signedDoubleWordAt:index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   921
    "return the 4-bytes starting at index as a signed Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   922
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   923
     The value is retrieved in the machines natural byte order.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   924
     This may be worth a primitive."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   925
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   926
    ^ self signedInt32At:index MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   927
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   928
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   929
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   930
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   931
     b doubleWordAt:1 put:16rFFFFFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   932
     (b signedDoubleWordAt:1)
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   933
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   934
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   935
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   936
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   937
     b signedDoubleWordAt:1 put:-1.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   938
     (b doubleWordAt:1)
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   939
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   940
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   941
    "Modified: 1.7.1996 / 21:11:28 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   942
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   943
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   944
signedDoubleWordAt:index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   945
    "return the 4-bytes starting at index as a (signed) Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   946
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   947
     The value is retrieved MSB-first, if the msb-arg is true;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   948
     LSB-first otherwise."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   949
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   950
    ^ self signedInt32At:index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   951
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   952
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   953
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   954
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   955
     b := ByteArray withAll:#(1 2 3 4).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   956
     (b signedDoubleWordAt:1 MSB:true) printStringRadix:16.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   957
     (b signedDoubleWordAt:1 MSB:false) printStringRadix:16
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   958
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   959
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   960
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   961
signedDoubleWordAt:index put:value
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   962
    "set the 4-bytes starting at index from the signed Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   963
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   964
     The value is stored in the machines natural byte order.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   965
     This may be worth a primitive."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   966
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   967
    ^ self signedInt32At:index put:value MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   968
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   969
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   970
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   971
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   972
     b signedDoubleWordAt:1 put:-1.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   973
     (b doubleWordAt:1) printStringRadix:16
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
    "Modified: 1.7.1996 / 21:11:39 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   977
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   978
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   979
signedDoubleWordAt:index put:value MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   980
    "set the 4-bytes starting at index from the signed Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   981
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   982
     Depending on msb, the value is stored MSB-first or LSB-first.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   983
     This may be worth a primitive."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   984
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   985
    ^ self signedInt32At:index put:value MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   986
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   987
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   988
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   989
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   990
     b signedDoubleWordAt:1 put:-1.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   991
     (b doubleWordAt:1) printStringRadix:16
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   992
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   993
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   994
    "Modified: 1.7.1996 / 21:11:46 / cg"
15087
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
   995
!
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
   996
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
   997
signedLongAt:index
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
   998
    "return the 4-bytes starting at index as a signed Integer.
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
   999
     The index is a smalltalk index (i.e. 1-based).
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1000
     The value is retrieved in the machine's natural byte order."
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1001
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1002
    ^ self signedInt32At:index
15087
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1003
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1004
    "
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1005
     |b|
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1006
     b := ByteArray new:4.
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1007
     b unsignedLongAt:1 put:16rFFFFFFFF.
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1008
     b signedLongAt:1
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1009
    "
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1010
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1011
    "Modified: 1.7.1996 / 21:14:38 / cg"
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1012
!
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1013
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1014
signedLongAt:index put:newValue
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1015
    "store a 4-bytes signed value starting at index.
15087
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1016
     The index is a smalltalk index (i.e. 1-based).
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1017
     The value is in the machine's natural byte order."
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1018
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1019
    ^ self signedInt32At:index put:newValue
15087
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1020
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1021
    "
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1022
     |b|
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1023
     b := ByteArray new:4.
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1024
     b signedLongAt:1 put:-1.
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1025
     b unsignedLongAt:1
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1026
    "
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1027
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1028
    "Modified: 1.7.1996 / 21:14:38 / cg"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1029
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1030
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1031
signedWordAt:index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1032
    "return the 2-bytes starting at index as a signed Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1033
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1034
     The value is retrieved in the machines natural byte order.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1035
     This may be worth a primitive."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1036
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1037
    ^ (self unsignedInt16At:index MSB:IsBigEndian) signExtendedShortValue
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1038
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1039
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1040
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1041
     b := ByteArray new:2.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1042
     b wordAt:1 put:16rFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1043
     b signedWordAt:1
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1044
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1045
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1046
    "Modified: 1.7.1996 / 21:14:38 / cg"
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
signedWordAt:index MSB: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 may be worth a primitive."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1055
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1056
    ^ (self unsignedInt16At:index MSB:msb) signExtendedShortValue
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 wordAt:1 put:16r0080.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1062
     b signedWordAt:1 MSB:true.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1063
     b signedWordAt:1 MSB:false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1064
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1065
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1066
    "Modified: 1.7.1996 / 21:15:57 / cg"
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
signedWordAt:byteIndex put:anInteger
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 machine's natural byteorder."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1074
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1075
    ^ self signedInt16At:byteIndex put:anInteger MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1076
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1077
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1078
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1079
     b := ByteArray new:6.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1080
     b shortAt:1 put:-1.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1081
     b shortAt:3 put:-2.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1082
     b shortAt:5 put:0.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1083
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1084
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1085
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1086
    "Modified: / 1.7.1996 / 21:12:07 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1087
    "Modified: / 5.3.1998 / 11:01:30 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1088
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1089
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1090
signedWordAt:byteIndex put:anInteger MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1091
    "set the 2-bytes starting at index from the signed Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1092
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1093
     The stored value must be in the range -32768 .. +32676.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1094
     The value is stored MSB-first, if the msb-arg is true;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1095
     LSB-first otherwise."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1096
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1097
    ^ self signedInt16At:byteIndex put:anInteger MSB:msb
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1098
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1099
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1100
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1101
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1102
     b signedWordAt:1 put:-1.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1103
     b signedWordAt:3 put:-2.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1104
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1105
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1106
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1107
    "Modified: 1.7.1996 / 21:12:13 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1108
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1109
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1110
unsignedLongAt:index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1111
    "return the 4-bytes starting at index as an (unsigned) Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1112
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1113
     The value is retrieved in the machine's natural byte order.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1114
     Subclasses may redefine this for better performance.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1115
     Same as doubleWordAt: for protocol completeness"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1116
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1117
    ^ self unsignedInt32At:index MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1118
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1119
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1120
     |b|
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 := ByteArray withAll:#(1 2 3 4).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1123
     (b unsignedLongAt:1) printStringRadix:16
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1124
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1125
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1126
    "Created: / 5.3.1998 / 11:56:53 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1127
    "Modified: / 5.3.1998 / 14:58:48 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1128
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1129
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1130
unsignedLongAt:index bigEndian:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1131
    "return the 4-bytes starting at index as an (unsigned) Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1132
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1133
     The value is retrieved MSB-first, if the msb-arg is true;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1134
     LSB-first otherwise.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1135
     Subclasses may redefine this for better performance.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1136
     Same as doubleWordAt:MSB: for protocol completeness"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1137
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1138
    ^ self unsignedInt32At:index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1139
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1140
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1141
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1142
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1143
     b := ByteArray withAll:#(1 2 3 4).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1144
     (b unsignedLongAt:1 bigEndian:true) printStringRadix:16.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1145
     (b unsignedLongAt:1 bigEndian:false) printStringRadix:16
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1146
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1147
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1148
    "Modified: / 21.1.1998 / 17:42:30 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1149
    "Created: / 5.3.1998 / 11:46:05 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1150
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1151
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1152
unsignedLongAt:index put:value
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1153
    "set the 4-bytes starting at index from the (unsigned) Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1154
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1155
     The value should be in the range 0 to 16rFFFFFFFF
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1156
     (for negative values, the stored value is not defined).
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
     Subclasses may redefine this for better performance.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1159
     Same as doubleWordAt:put: for protocol completeness"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1160
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1161
    ^ self unsignedInt32At:index put:value MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1162
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1163
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1164
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1165
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1166
     b unsignedLongAt:1 put:16r04030201.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1167
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1168
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1169
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1170
    "Created: / 5.3.1998 / 11:57:44 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1171
    "Modified: / 5.3.1998 / 14:58:59 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1172
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1173
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1174
unsignedLongAt:index put:aNumber bigEndian:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1175
    "set the 4-bytes starting at index from the (unsigned) Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1176
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1177
     The value must be in the range 0 to 16rFFFFFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1178
     The value is stored MSB-first if msb is true; LSB-first otherwise.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1179
     Subclasses may redefine this for better performance.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1180
     Same as doubleWordAt:put:MSB: for protocol completeness"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1181
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1182
    ^ self unsignedInt32At:index put:aNumber MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1183
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1184
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1185
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1186
     b := ByteArray new:8.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1187
     b unsignedLongAt:1 put:16r04030201 bigEndian:true.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1188
     (b unsignedLongAt:1 bigEndian:false) printStringRadix:16
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1189
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1190
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1191
    "Modified: / 21.1.1998 / 17:43:34 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1192
    "Created: / 5.3.1998 / 11:43:53 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1193
    "Modified: / 5.3.1998 / 11:47:30 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1194
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1195
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1196
unsignedLongLongAt:index bigEndian:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1197
    "return the 8-bytes starting at index as an (unsigned) Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1198
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1199
     Depending on msb, the value is retrieved MSB or LSB-first."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1200
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1201
    ^ self unsignedInt64At:index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1202
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1203
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1204
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1205
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1206
     b := ByteArray withAll:#(1 2 3 4 5 6 7 8).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1207
     (b unsignedLongLongAt:1 bigEndian:false) printStringRadix:16
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1208
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1209
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1210
    "Modified: / 5.11.1996 / 14:06:21 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1211
    "Modified: / 5.3.1998 / 14:04:44 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1212
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1213
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1214
unsignedLongLongAt:index put:anInteger
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1215
    "set the 8-bytes starting at index from the (unsigned) Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1216
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1217
     The value must be in the range 0 to 16rFFFFFFFFFFFFFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1218
     The value is stored in natural byte order."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1219
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1220
    ^ self unsignedInt64At:index put:anInteger MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1221
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1222
    "Created: / 5.3.1998 / 14:44:00 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1223
    "Modified: / 5.3.1998 / 15:02:32 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1224
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1225
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1226
unsignedLongLongAt:index put:anInteger bigEndian:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1227
    "set the 8-bytes starting at index from the (unsigned) Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1228
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1229
     The value must be in the range 0 to 16rFFFFFFFFFFFFFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1230
     Depending on msb, the value is stored MSB-first or LSB-first."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1231
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1232
    ^ self unsignedInt64At:index put:anInteger MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1233
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1234
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1235
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1236
     b := ByteArray new:8.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1237
     b unsignedLongLongAt:1 put:16r0807060504030201 bigEndian:false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1238
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1239
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1240
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1241
    "Created: / 5.3.1998 / 14:06:02 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1242
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1243
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1244
unsignedShortAt:index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1245
    "return the 2-bytes starting at index as an (unsigned) Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1246
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1247
     The value is retrieved in the machines natural byte order
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1248
     Subclasses may redefine this for better performance.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1249
     This is the ST80 equivalent of #wordAt:"
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
    ^ self unsignedInt16At:index MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1253
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1254
    "Created: / 5.3.1998 / 11:38:25 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1255
    "Modified: / 5.3.1998 / 14:59:25 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1256
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1257
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1258
unsignedShortAt:index bigEndian:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1259
    "return the 2-bytes starting at index as an (unsigned) Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1260
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1261
     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
  1262
     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
  1263
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1264
    ^ self unsignedInt16At:index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1265
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1266
    "Modified: / 21.1.1998 / 17:46:07 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1267
    "Created: / 5.3.1998 / 11:49:29 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1268
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1269
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1270
unsignedShortAt:index put:value
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1271
    "set the 2-bytes starting at index from the (unsigned) Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1272
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1273
     The stored value must be in the range 0 .. 16rFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1274
     The value is stored in the machines natural byteorder."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1275
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1276
    ^ self unsignedInt16At:index put:value
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
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1280
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1281
     b unsignedShortAt:1 put:16r0102.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1282
     b unsignedShortAt:3 put:16r0304.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1283
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1284
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1285
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1286
    "Created: / 5.3.1998 / 11:54:52 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1287
    "Modified: / 5.3.1998 / 14:59:38 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1288
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1289
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1290
unsignedShortAt:index put:value bigEndian:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1291
    "set the 2-bytes starting at index from the (unsigned) Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1292
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1293
     The stored value must be in the range 0 .. 16rFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1294
     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
  1295
     lower index) if msb is false, MSB-first otherwise"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1296
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1297
    ^ self unsignedInt16At:index put:value MSB:msb
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
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1301
     b := ByteArray new:8.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1302
     b unsignedShortAt:1 put:16r0102 bigEndian:false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1303
     b unsignedShortAt:3 put:16r0304 bigEndian:false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1304
     b unsignedShortAt:5 put:16r0102 bigEndian:true.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1305
     b unsignedShortAt:7 put:16r0304 bigEndian:true.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1306
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1307
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1308
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1309
    "Modified: / 21.1.1998 / 17:48:15 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1310
    "Modified: / 5.3.1998 / 11:52:28 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1311
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1312
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1313
wordAt:index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1314
    "return the 2-bytes starting at index as an (unsigned) Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1315
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1316
     The value is retrieved in the machines natural byte order
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1317
     Subclasses may redefine this for better performance."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1318
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1319
    ^ self unsignedInt16At:index MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1320
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1321
    "Modified: / 5.3.1998 / 14:59:51 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1322
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1323
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1324
wordAt:index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1325
    "return the 2-bytes starting at index as an (unsigned) Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1326
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1327
     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
  1328
     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
  1329
     Notice: 
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1330
        the index is a byte index; thus, this allows for unaligned access to
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1331
        words on any boundary.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1332
     Question: should it be retrieve signed values ? (see ByteArray>>signedWordAt:)"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1333
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1334
    ^ self unsignedInt16At:index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1335
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1336
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1337
wordAt:index put:value
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1338
    "set the 2-bytes starting at index from the (unsigned) Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1339
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1340
     The stored value must be in the range 0 .. 16rFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1341
     The value is stored in the machines natural byteorder.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1342
     Question: should it accept signed values ? (see ByteArray>>signedWordAt:put:)"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1343
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1344
    ^ self unsignedInt16At:index put:value MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1345
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1346
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1347
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1348
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1349
     b wordAt:1 put:16r0102.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1350
     b wordAt:3 put:16r0304.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1351
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1352
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1353
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1354
    "Modified: / 5.3.1998 / 15:00:03 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1355
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1356
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1357
wordAt:index put:value MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1358
    "set the 2-bytes starting at index from the (unsigned) Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1359
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1360
     The stored value must be in the range 0 .. 16rFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1361
     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
  1362
     lower index) if msb is false, MSB-first otherwise.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1363
     Question: should it accept signed values ? (see ByteArray>>signedWordAt:put:)"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1364
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1365
    ^ self unsignedInt16At:index put:value MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1366
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1367
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1368
     b := ByteArray new:8.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1369
     b wordAt:1 put:16r0102 MSB:false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1370
     b wordAt:3 put:16r0304 MSB:false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1371
     b wordAt:5 put:16r0102 MSB:true.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1372
     b wordAt:7 put:16r0304 MSB:true.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1373
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1374
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1375
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1376
    "Modified: / 21.1.1998 / 17:48:15 / cg"
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
wordAtWordIndex:int16Index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1380
    "return the unsigned short (uint16) at index, anInteger.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1381
     Fetching in the machines natural byte order.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1382
     Indices are 1-based and scaled as appropriate to allow
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1383
     accessing the memory as an array of word entries.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1384
     (i.e. indices are 1, 2, ...)"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1385
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1386
    ^ self unsignedInt16At:int16Index MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1387
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1388
    "Created: / 21.1.1998 / 17:48:26 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1389
    "Modified: / 5.3.1998 / 15:00:16 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1390
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1391
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1392
wordAtWordIndex:int16Index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1393
    "return the unsigned short (uint16) at index, anInteger.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1394
     Fetching is MSB if msb is true, LSB otherwise.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1395
     Indices are 1-based and scaled as appropriate to allow
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1396
     accessing the memory as an array of word entries.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1397
     (i.e. indices are 1, 2, ...)"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1398
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1399
    ^ self unsignedInt16At:((int16Index - 1) * 2 + 1) MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1400
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1401
    "Created: / 21.1.1998 / 17:48:30 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1402
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1403
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1404
wordAtWordIndex:int16Index put:anInteger
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1405
    "set the unsigned short (uint16) at index, anInteger.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1406
     Storing in the machine's natural byte order.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1407
     Indices are 1-based and scaled as appropriate to allow
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1408
     accessing the memory as an array of word entries.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1409
     (i.e. indices are 1, 2, ...)"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1410
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1411
    ^ self unsignedInt16At:int16Index put:anInteger MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1412
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1413
    "Created: / 21.1.1998 / 17:48:34 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1414
    "Modified: / 5.3.1998 / 15:00:27 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1415
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1416
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1417
wordAtWordIndex:int16Index put:anInteger MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1418
    "set the short at index, anInteger.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1419
     Storing is MSB if msb is true, LSB otherwise.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1420
     Indices are 1-based and scaled as appropriate to allow
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1421
     accessing the memory as an array of word entries.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1422
     (i.e. indices are 1, 2, ...)"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1423
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1424
    ^ self unsignedInt16At:((int16Index - 1) * 2 + 1) put:anInteger MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1425
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1426
    "Created: / 21.1.1998 / 17:48:38 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1427
! !
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1428
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1429
!UninterpretedBytes methodsFor:'Compatibility-Squeak'!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1430
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1431
copyFromByteArray:aByteArray
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1432
    "copy as much as possible from aByteArray"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1433
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1434
    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
  1435
! !
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  1436
9185
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1437
!UninterpretedBytes methodsFor:'Compatibility-V''Age'!
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1438
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1439
uint32At:zeroBasedIndex
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1440
    "return the 4-bytes starting at index as (unsigned) Integer.
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1441
     WARNING: The index is a C index (i.e. 0-based).
19301
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1442
     The value is retrieved in the machine's natural byte order.
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1443
     Similar to unsignedInt32At:, except for the index base"
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1444
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1445
    ^ self unsignedInt32At:zeroBasedIndex+1
9185
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1446
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1447
    "
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1448
     |b|
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1449
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1450
     b := ByteArray withAll:#(0 0 0 0).
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1451
     b uint32At:0 put:16r12345678.
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1452
     b uint32At:0.
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1453
     b
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1454
    "
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1455
!
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1456
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1457
uint32At:zeroBasedIndex put:anInteger
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1458
    "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
  1459
     WARNING: The index is a C index (i.e. 0-based).
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1460
     The value is stored in the machine's natural byte order.
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1461
     Similar to unsignedInt32At:put:, except for the index base"
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1462
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1463
    ^ self unsignedInt32At:zeroBasedIndex+1 put:anInteger
9185
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1464
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1465
    "
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1466
     |b|
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1467
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1468
     b := ByteArray withAll:#(0 0 0 0).
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1469
     b uint32At:0 put:16r12345678.
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1470
     b
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1471
    "
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1472
! !
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1473
16796
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1474
!UninterpretedBytes methodsFor:'accessing-arbitrary-long ints'!
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1475
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1476
nativeIntAt:index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1477
    "return the 4- or 8-bytes (depending on the native integer/pointer size) 
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1478
     starting at index as a signed Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1479
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1480
     The value is retrieved in the machines natural byte order,
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1481
     therefore, this should only be used for byte-data which is
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1482
     only used inside this machine."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1483
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1484
    |w|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1485
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1486
%{
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1487
    /*
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1488
     * handle the most common cases fast ...
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1489
     */
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1490
    if (__isSmallInteger(index)) {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1491
        unsigned char *cp;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1492
        INT sz;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1493
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1494
        __fetchBytePointerAndSize__(self, &cp, &sz);
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1495
        if (cp) {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1496
            unsigned INT idx = ((unsigned INT)__intVal(index)) - 1;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1497
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1498
            if ((idx+(sizeof(INT)-1)) < sz) {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1499
                cp += idx;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1500
#if defined(__i386__)
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1501
                /*
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1502
                 * aligned or not, we dont care (i386 can do both)
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1503
                 */
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1504
                {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1505
                    INT iVal = ((INT *)cp)[0];
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1506
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1507
                    RETURN (__MKINT(iVal));
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1508
                }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1509
#else
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1510
                /*
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1511
                 * aligned
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1512
                 */
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1513
                if (((INT)cp & (sizeof(INT)-1)) == 0) {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1514
                    INT iVal = ((INT *)cp)[0];
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1515
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1516
                    RETURN (__MKINT(iVal));
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1517
                }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1518
#endif
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1519
            }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1520
        }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1521
    }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1522
%}.
19402
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1523
    SmallInteger maxBytes == 8 ifTrue:[
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1524
        ^ self signedInt64At:index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1525
    ].
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1526
    ^ self signedInt32At:index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1527
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1528
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1529
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1530
     b := ByteArray new:8.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1531
     b nativeIntAt:1 put:SmallInteger maxVal.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1532
     b nativeIntAt:1
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1533
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1534
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1535
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1536
nativeIntAt:index put:value
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1537
    "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
  1538
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1539
     The value is stored in the machine's natural byte order."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1540
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1541
%{  /* NOCONTEXT */
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1542
    /*
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1543
     * handle the most common cases fast ...
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1544
     */
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1545
    if (__isSmallInteger(index)) {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1546
        unsigned char *cp;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1547
        INT sz;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1548
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1549
        __fetchBytePointerAndSize__(self, &cp, &sz);
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1550
        if (cp) {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1551
            unsigned INT idx = ((unsigned INT)__intVal(index)) - 1;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1552
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1553
            if ((idx+(sizeof(INT)-1)) < sz) {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1554
                cp += idx;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1555
                /*
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1556
                 * aligned
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1557
                 */
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1558
                if (((INT)cp & (sizeof(INT)-1)) == 0) {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1559
                    INT __v;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1560
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1561
                    if (__isSmallInteger(value)) {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1562
                        // how about a range check?
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1563
                        ((INT *)cp)[0] = (INT)(__intVal(value));
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1564
                        RETURN (value);
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1565
                    }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1566
                    if ((__v = __signedLongIntVal(value)) != 0) {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1567
                        // how about a range check?
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1568
                        ((INT *)cp)[0] = (INT)(__v);
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1569
                        RETURN (value);
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1570
                    }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1571
                }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1572
            }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1573
        }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1574
    }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1575
%}.
19402
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1576
    SmallInteger maxBytes == 8 ifTrue:[
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1577
        ^ self signedInt64At:index put:value MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1578
    ].
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1579
    ^ self signedInt32At:index put:value MSB:IsBigEndian    
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1580
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1581
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1582
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1583
     b := ByteArray new:8.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1584
     b nativeIntAt:1 put:SmallInteger maxVal.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1585
     (b nativeIntAt:1) 
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
19402
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1589
signedIntegerAt:index length:len bigEndian:bigEndian
19197
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1590
    "return the n-byte signed integer starting at index.
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1591
     With n=1, this returns the single signed byte's value,
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1592
     n=2, a signed short, n=4 a signed int etc.
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1593
     Useful to extract arbitrary long integers"
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1594
19402
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1595
    |val highByte
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1596
     iIndex "{ Class:SmallInteger }"
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1597
     last "{ Class:SmallInteger }"|
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1598
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1599
    iIndex := index.
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1600
    last := iIndex + len - 1.
19197
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1601
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1602
    val := 0.
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1603
    bigEndian ifTrue:[
19402
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1604
        highByte := self at:iIndex.
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1605
        iIndex to:last do:[:i |
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1606
            val := (val<<8) + (self byteAt:i)
19197
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1607
        ]
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1608
    ] ifFalse:[
19402
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1609
        highByte := self at:last.
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1610
        last to:iIndex by:-1 do:[:i |
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1611
            val := (val<<8) + (self byteAt:i)
19197
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1612
        ]
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1613
    ].
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1614
    (highByte bitTest:16r80) ifTrue:[
19402
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1615
        ^ val - (1 bitShift:(len*8))
19197
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1616
    ].    
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1617
    ^ val
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1618
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1619
    "
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1620
     |b|
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1621
     b := #[ 16r01 16rFF 16r00 16r04 16r05 ].
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1622
     (b signedIntegerAt:2 length:2 bigEndian:false). ' -> 255 (00FF) '.
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1623
     (b signedIntegerAt:2 length:2 bigEndian:true).  ' -> -256 (FF00) '.   
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1624
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1625
     b := #[ 16r01 16r00 16rFF 16r04 16r05 ].
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1626
     (b signedIntegerAt:2 length:2 bigEndian:false). ' -> -256 (FF00) '.
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1627
     (b signedIntegerAt:2 length:2 bigEndian:true).  ' -> 255 (00FF) '.   
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1628
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1629
     b := #[ 16r01 16r7F 16r00 16r04 16r05 ].
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1630
     (b signedIntegerAt:2 length:2 bigEndian:false). ' -> 127 (007F) '.
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1631
     (b signedIntegerAt:2 length:2 bigEndian:true).  ' -> 32512 (7F00) '.      
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1632
    "
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1633
    
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1634
    "
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1635
     |b|
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1636
     b := #[ 16r01 16r02 16r03 16r04 16r05 ].
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1637
     (b signedIntegerAt:2 length:4 bigEndian:false).
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1638
     (b signedIntegerAt:2 length:4 bigEndian:true).
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1639
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1640
     b := #[ 16r01 16r82 16r03 16r04 16r05 ].
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1641
     (b signedIntegerAt:2 length:4 bigEndian:false).
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1642
     (b signedIntegerAt:2 length:4 bigEndian:true).
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1643
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1644
     b := #[ 16r01 16r82 16r03 16r04 16r85 ].
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1645
     (b signedIntegerAt:2 length:4 bigEndian:false).
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1646
     (b signedIntegerAt:2 length:4 bigEndian:true).
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1647
    "
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1648
!
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1649
19402
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1650
unsignedIntegerAt:index length:len bigEndian:bigEndian
16796
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1651
    "return the n-byte unsigned integer starting at index.
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1652
     With n=1, this returns the single byte's value,
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1653
     n=2, an unsigned short, n=4 an unsigned int etc.
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1654
     Useful to extract arbitrary long integers"
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1655
19402
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1656
    |val
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1657
     iIndex "{ Class:SmallInteger }"
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1658
     last "{ Class:SmallInteger }"|
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1659
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1660
    iIndex := index.
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1661
    last := iIndex + len - 1.
16796
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1662
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1663
    val := 0.
18346
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
  1664
    bigEndian ifTrue:[
19402
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1665
        iIndex to:last do:[:i |
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1666
            val := (val<<8) + (self byteAt:i)
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1667
        ]
18346
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
  1668
    ] ifFalse:[
19402
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1669
        last to:iIndex by:-1 do:[:i |
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1670
            val := (val<<8) + (self byteAt:i)
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1671
        ]
16796
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1672
    ].
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1673
    ^ val
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1674
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1675
    "
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1676
     |b|
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1677
     b := #[ 16r01 16r02 16r03 16r04 16r05 ].
18346
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
  1678
     (b unsignedIntegerAt:2 length:4 bigEndian:false).
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
  1679
     (b unsignedIntegerAt:2 length:4 bigEndian:true).
16796
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1680
    "
19301
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1681
!
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1682
19402
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1683
unsignedIntegerAt:index put:newValue length:len bigEndian:bigEndian
19301
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1684
    "store the n-byte unsigned integer starting at index.
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1685
     With n=1, this stores a single byte's value,
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1686
     n=2, an unsigned short, n=4 an unsigned int etc.
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1687
     Useful to replace arbitrary long integers"
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1688
19402
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1689
    |val
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1690
     iIndex "{ Class:SmallInteger }"
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1691
     last "{ Class:SmallInteger }"|
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1692
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1693
    iIndex := index.
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1694
    last := iIndex + len - 1.
19301
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1695
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1696
    val := newValue.
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1697
    bigEndian ifTrue:[
19402
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1698
        iIndex to:last do:[:i |
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1699
            self byteAt:i put:(val bitAnd:16rFF).
19301
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1700
            val := val bitShift:-8.
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1701
        ]
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1702
    ] ifFalse:[
19402
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1703
        last to:iIndex by:-1 do:[:i |
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1704
            self byteAt:i put:(val bitAnd:16rFF).
19301
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1705
            val := val bitShift:-8.
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1706
        ]
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1707
    ].
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1708
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1709
    "
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1710
     |b|
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1711
     b := #[ 16r01 16r02 16r03 16r04 16r05 ] copy.
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1712
     (b unsignedIntegerAt:2 put:16r11223344 length:3 bigEndian:false). b.
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1713
     (b unsignedIntegerAt:2 put:16r11223344 length:3 bigEndian:true). b.
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1714
    "
16796
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1715
! !
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1716
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1717
!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
  1718
4422
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1719
bcdByteAt:index
13724
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  1720
    "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
  1721
     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
  1722
     (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
  1723
4425
a10011c1b6eb bcd support - again.
Claus Gittinger <cg@exept.de>
parents: 4422
diff changeset
  1724
    ^ (self byteAt:index) decodeFromBCD
4422
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1725
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1726
    "
19352
3c5b0c74be2e #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19351
diff changeset
  1727
     #[ 16r55 ] bcdByteAt:1 
3c5b0c74be2e #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19351
diff changeset
  1728
     #[ 16r99 ] bcdByteAt:1  
3c5b0c74be2e #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19351
diff changeset
  1729
     #[ 16rAA ] bcdByteAt:1
4422
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1730
    "
13724
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  1731
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  1732
    "Modified (comment): / 26-09-2011 / 11:57:33 / cg"
4422
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1733
!
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1734
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1735
bcdByteAt:index put:aNumber
13724
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  1736
    "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
  1737
     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
  1738
     (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
  1739
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1740
    (aNumber between:0 and:99) ifFalse:[
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  1741
        self error:'invalid value for BCD encoding'
4422
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1742
    ].
4425
a10011c1b6eb bcd support - again.
Claus Gittinger <cg@exept.de>
parents: 4422
diff changeset
  1743
    ^ self byteAt:index put:aNumber encodeAsBCD
4422
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1744
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1745
    "
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1746
     (((ByteArray new:1) bcdByteAt:1 put:55; yourself) at:1) hexPrintString
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1747
     (((ByteArray new:1) bcdByteAt:1 put:99; yourself) at:1) hexPrintString
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1748
     (((ByteArray new:1) bcdByteAt:1 put:100; yourself) at:1) hexPrintString
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1749
     (((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
  1750
    "
13724
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  1751
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  1752
    "Modified (comment): / 26-09-2011 / 11:57:36 / cg"
4422
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1753
!
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1754
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1755
byteAt:byteIndex
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1756
    "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
  1757
     The index is a smalltalk index (i.e. 1-based)."
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1758
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1759
%{
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1760
    if (__isSmallInteger(byteIndex)) {
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1761
        unsigned char *cp;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1762
        INT sz;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1763
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1764
        __fetchBytePointerAndSize__(self, &cp, &sz);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1765
        if (cp) {
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1766
            unsigned INT idx = ((unsigned INT)__intVal(byteIndex)) - 1;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1767
            char ch;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1768
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1769
            if (idx < sz) {
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1770
                ch = cp[idx] & 0xFF;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1771
                RETURN (__mkSmallInteger( ch ));
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1772
            }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1773
        }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1774
    }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1775
%}.
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1776
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1777
    ^ self at:byteIndex
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1778
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1779
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1780
     |b|
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1781
     b := ByteArray new:3.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1782
     b at:1 put:16rFF.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1783
     b at:2 put:16r7F.
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1784
     b at:3 put:16r80.
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1785
     b byteAt:1.    
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1786
     b byteAt:2.     
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1787
     b byteAt:3.     
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1788
    "
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1789
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1790
    "Modified: / 01-07-1996 / 21:13:53 / cg"
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1791
    "Modified (comment): / 26-09-2011 / 11:57:14 / cg"
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1792
!
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1793
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1794
byteAt:byteIndex put:anInteger
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1795
    "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
  1796
     The index is a smalltalk index (i.e. 1-based)."
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1797
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1798
%{
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1799
    if (__isSmallInteger(byteIndex) && __isSmallInteger(anInteger)) {
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1800
        unsigned char *cp;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1801
        INT sz;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1802
        INT val = __intVal(anInteger);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1803
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1804
        if ( ((unsigned INT)val) <= 0xFF ) {
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1805
            __fetchBytePointerAndSize__(self, &cp, &sz);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1806
            if (cp) {
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1807
                unsigned INT idx = ((unsigned INT)__intVal(byteIndex)) - 1;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1808
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1809
                if (idx < sz) {
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1810
                    cp[idx] = val & 0xFF;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1811
                    RETURN (anInteger);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1812
                }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1813
            }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1814
        }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1815
    }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1816
%}.
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1817
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1818
    ^ self at:byteIndex put:anInteger
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1819
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1820
    "
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1821
     |b|
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1822
     b := ByteArray new:3.
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1823
     b byteAt:1 put:16rFF.
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1824
     b byteAt:2 put:16r7F.
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1825
     b byteAt:3 put:16r80.
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1826
     b signedByteAt:1.    
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1827
     b signedByteAt:2.     
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1828
     b signedByteAt:3.     
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1829
    "
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1830
!
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1831
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1832
signedByteAt:byteIndex
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1833
    "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
  1834
     The index is a smalltalk index (i.e. 1-based).
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1835
     This may be worth a primitive."
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1836
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1837
%{
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1838
    /*
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1839
     * handle the most common cases fast ...
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1840
     */
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1841
    if (__isSmallInteger(byteIndex)) {
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1842
        unsigned char *cp;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1843
        INT sz;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1844
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1845
        __fetchBytePointerAndSize__(self, &cp, &sz);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1846
        if (cp) {
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1847
            unsigned INT idx = ((unsigned INT)__intVal(byteIndex)) - 1;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1848
            char ch;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1849
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1850
            if (idx < sz) {
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1851
                cp += idx;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1852
                ch = cp[0];
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1853
# ifndef HAS_SIGNED_CHAR
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1854
                if ( (unsigned int)ch >= 0x80 ) {
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1855
                    ch = ch - 0x100;                
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1856
                }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1857
#endif
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1858
                RETURN (__mkSmallInteger( ch ));
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1859
            }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1860
        }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1861
    }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1862
%}.
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1863
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1864
    ^ (self byteAt:byteIndex) signExtendedByteValue
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1865
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1866
    "
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1867
     |b|
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1868
     b := ByteArray new:3.
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1869
     b at:1 put:16rFF.
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1870
     b at:2 put:16r7F.
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1871
     b at:3 put:16r80.
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1872
     b byteAt:1.    
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1873
     b byteAt:2.     
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1874
     b byteAt:3.     
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1875
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1876
13724
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  1877
    "Modified: / 01-07-1996 / 21:13:53 / cg"
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  1878
    "Modified (comment): / 26-09-2011 / 11:57:14 / cg"
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1879
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1880
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1881
signedByteAt:index put:aSignedByteValue
13724
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  1882
    "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
  1883
     The index is a smalltalk index (i.e. 1-based).
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1884
     Return the signedByteValue argument.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1885
     This may be worth a primitive."
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1886
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1887
    |b "{ Class: SmallInteger }"|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1888
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1889
    aSignedByteValue >= 0 ifTrue:[
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1890
        b := aSignedByteValue
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1891
    ] ifFalse:[
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1892
        b := 16r100 + aSignedByteValue
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1893
    ].
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1894
    self byteAt:index put:b.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1895
    ^ aSignedByteValue
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1896
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1897
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1898
     |b|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1899
     b := ByteArray new:2.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1900
     b signedByteAt:1 put:-1.
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1901
     b at:1
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1902
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1903
13724
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  1904
    "Modified: / 01-07-1996 / 21:12:37 / cg"
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  1905
    "Modified (comment): / 26-09-2011 / 11:57:18 / cg"
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1906
! !
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1907
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1908
!UninterpretedBytes methodsFor:'accessing-floats & doubles'!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1909
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1910
doubleAt:index
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1911
    "return the 8-bytes starting at index as a Float.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  1912
     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
  1913
     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
  1914
     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
  1915
     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
  1916
     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
  1917
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1918
    |newFloat|
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1919
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  1920
%{
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  1921
    /*
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  1922
     * handle the most common cases fast ...
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  1923
     */
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  1924
    if (__isSmallInteger(index)) {
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1925
        unsigned char *cp;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1926
        INT sz;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1927
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1928
        __fetchBytePointerAndSize__(self, &cp, &sz);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1929
        if (cp) {
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1930
            INT idx = __intVal(index) - 1;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1931
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1932
            if ((idx >= 0) && ((idx+(sizeof(double)-1)) < sz)) {
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1933
                cp += idx;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1934
                /*
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1935
                 * aligned
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1936
                 */
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1937
                if (((INT)cp & (sizeof(double)-1)) == 0) {
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1938
                    double dVal = ((double *)cp)[0];
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1939
                    OBJ f;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1940
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1941
                    __qMKFLOAT(f, dVal);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1942
                    RETURN (f);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1943
                }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1944
            }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1945
        }
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  1946
    }
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  1947
%}.
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  1948
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1949
    newFloat := Float basicNew.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1950
    1 to:8 do:[:destIndex|
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1951
        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
  1952
    ].
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1953
    ^ newFloat.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  1954
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  1955
    "
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  1956
     |b|
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  1957
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  1958
     b := ByteArray new:20.
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  1959
     b doubleAt:1 put:(Float pi).
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  1960
     Transcript showCR:b.
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  1961
     Transcript showCR:(b doubleAt:1)
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  1962
    "
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1963
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1964
3446
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  1965
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
  1966
    "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
  1967
     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
  1968
     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
  1969
     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
  1970
     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
  1971
     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
  1972
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  1973
    |newFloat|
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  1974
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
  1975
    msb == IsBigEndian ifTrue:[
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1976
        ^ 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
  1977
    ].
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  1978
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  1979
    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
  1980
    1 to:8 do:[:destIndex|
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1981
        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
  1982
    ].
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  1983
    ^ newFloat.
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  1984
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  1985
    "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
  1986
!
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  1987
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1988
doubleAt:index put:aFloat
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1989
    "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
  1990
     starting at index.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  1991
     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
  1992
     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
  1993
     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
  1994
     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
  1995
     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
  1996
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1997
    |flt|
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  1998
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  1999
%{
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2000
    /*
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2001
     * handle the most common cases fast ...
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2002
     */
16320
dcb66fff0a89 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15836
diff changeset
  2003
    if (__isSmallInteger(index)) {
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2004
        unsigned char *cp;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2005
        INT sz;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2006
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2007
        __fetchBytePointerAndSize__(self, &cp, &sz);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2008
        if (cp) {
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2009
            INT idx = __intVal(index) - 1;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2010
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2011
            if ((idx >= 0) && ((idx+(sizeof(double)-1)) < sz)) {
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2012
                cp += idx;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2013
                /*
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2014
                 * aligned
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2015
                 */
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2016
                if (((INT)cp & (sizeof(double)-1)) == 0) {
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2017
                    if (__isFloat(aFloat)) {
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2018
                        ((double *)cp)[0] = __floatVal(aFloat);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2019
                        RETURN (aFloat);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2020
                    }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2021
                    if (__isShortFloat(aFloat)) {
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2022
                        ((double *)cp)[0] = (double)(__shortFloatVal(aFloat));
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2023
                        RETURN (aFloat);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2024
                    }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2025
                    if (__isSmallInteger(aFloat)) {
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2026
                        ((double *)cp)[0] = (double)(__intVal(aFloat));
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2027
                        RETURN (aFloat);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2028
                    }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2029
                }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2030
            }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2031
        }
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2032
    }
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2033
%}.
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2034
16320
dcb66fff0a89 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15836
diff changeset
  2035
    flt := aFloat asFloat.
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2036
    1 to:8 do:[:srcIndex|
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2037
        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
  2038
    ].
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2039
    ^ aFloat
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2040
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2041
3446
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2042
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
  2043
    "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
  2044
     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
  2045
     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
  2046
     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
  2047
     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
  2048
     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
  2049
     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
  2050
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2051
    |flt|
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2052
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
  2053
    msb == IsBigEndian ifTrue:[
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2054
        ^ 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
  2055
    ].
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2056
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2057
    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
  2058
    1 to:8 do:[:srcIndex|
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2059
        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
  2060
    ].
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2061
    ^ aFloat
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2062
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2063
    "Created: / 15.5.1998 / 17:22:27 / cg"
3447
Claus Gittinger <cg@exept.de>
parents: 3446
diff changeset
  2064
    "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
  2065
!
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2066
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2067
floatAt:index
3434
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2068
    "return the 4-bytes starting at index as a ShortFloat.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2069
     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
  2070
     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
  2071
     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
  2072
     a float object which keeps an 8-byte double internally.
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2073
     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
  2074
     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
  2075
     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
  2076
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2077
    |newFloat|
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2078
3434
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2079
%{
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2080
    /*
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2081
     * handle the most common cases fast ...
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2082
     */
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2083
    if (__isSmallInteger(index)) {
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2084
        unsigned char *cp;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2085
        INT sz;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2086
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2087
        __fetchBytePointerAndSize__(self, &cp, &sz);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2088
        if (cp) {
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2089
            INT idx = __intVal(index) - 1;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2090
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2091
            if ((idx >= 0) && ((idx+(sizeof(float)-1)) < sz)) {
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2092
                cp += idx;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2093
                /*
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2094
                 * aligned
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2095
                 */
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2096
                if (((INT)cp & (sizeof(float)-1)) == 0) {
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2097
                    float fVal = ((float *)cp)[0];
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2098
                    OBJ f;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2099
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2100
                    __qMKSFLOAT(f, fVal);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2101
                    RETURN (f);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2102
                }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2103
            }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2104
        }
3434
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2105
    }
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2106
%}.
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2107
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2108
    newFloat := ShortFloat basicNew.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2109
    1 to:4 do:[:destIndex|
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2110
        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
  2111
    ].
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2112
    ^ newFloat.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2113
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2114
3446
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2115
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
  2116
    "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
  2117
     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
  2118
     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
  2119
     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
  2120
     a float object which keeps an 8-byte double internally.
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2121
     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
  2122
     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
  2123
     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
  2124
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2125
    |newFloat|
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2126
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
  2127
    msb == IsBigEndian ifTrue:[
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2128
        ^ 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
  2129
    ].
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2130
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2131
    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
  2132
    1 to:4 do:[:destIndex|
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2133
        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
  2134
    ].
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2135
    ^ newFloat.
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2136
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2137
    "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
  2138
    "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
  2139
!
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2140
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2141
floatAt:index put:aFloat
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2142
    "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
  2143
     starting at index.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2144
     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
  2145
     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
  2146
     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
  2147
     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
  2148
     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
  2149
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2150
    |sflt|
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2151
3434
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2152
%{
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2153
    /*
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2154
     * handle the most common cases fast ...
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2155
     */
16320
dcb66fff0a89 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15836
diff changeset
  2156
    if (__isSmallInteger(index)) {
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2157
        unsigned char *cp;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2158
        INT sz;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2159
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2160
        __fetchBytePointerAndSize__(self, &cp, &sz);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2161
        if (cp) {
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2162
            INT idx = __intVal(index) - 1;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2163
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2164
            if ((idx >= 0) && ((idx+(sizeof(float)-1)) < sz)) {
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2165
                cp += idx;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2166
                /*
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2167
                 * aligned
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2168
                 */
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2169
                if (((INT)cp & (sizeof(float)-1)) == 0) {
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2170
                    if (__isShortFloat(aFloat)) {
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2171
                        ((float *)cp)[0] = __shortFloatVal(aFloat);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2172
                        RETURN (self);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2173
                    }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2174
                    if (__isFloat(aFloat)) {
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2175
                        ((float *)cp)[0] = (float)__floatVal(aFloat);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2176
                        RETURN (self);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2177
                    }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2178
                    if (__isSmallInteger(aFloat)) {
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2179
                        ((float *)cp)[0] = (float)__intVal(aFloat);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2180
                        RETURN (self);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2181
                    }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2182
                    // bail out to smalltalk code
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2183
                }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2184
            }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2185
        }
3434
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2186
    }
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2187
%}.
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2188
16320
dcb66fff0a89 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15836
diff changeset
  2189
    sflt := aFloat asShortFloat.
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2190
    1 to:4 do:[:srcIndex|
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2191
        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
  2192
    ].
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2193
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2194
3446
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2195
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
  2196
    "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
  2197
     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
  2198
     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
  2199
     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
  2200
     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
  2201
     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
  2202
     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
  2203
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2204
    |sflt|
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2205
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
  2206
    msb == IsBigEndian ifTrue:[
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2207
        self floatAt:index put:aFloat.
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2208
        ^ self.
3446
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2209
    ].
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
    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
  2212
    1 to:4 do:[:srcIndex|
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2213
        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
  2214
    ].
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
    "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
  2217
!
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2218
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2219
ieeeDoubleAt:index
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2220
    "retrieve the 8 bytes starting at index as a float.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2221
     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
  2222
     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
  2223
     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
  2224
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2225
    "
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2226
     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
  2227
     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
  2228
     to an IBM 370 or old VAX etc.
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2229
     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
  2230
     no problem.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2231
    "
9258
83c940f349ea isIEEEFormat
Claus Gittinger <cg@exept.de>
parents: 9185
diff changeset
  2232
    Float isIEEEFormat ifFalse:[self error:'unsupported operation'].
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2233
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2234
    ^ self doubleAt:index
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2235
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2236
    "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
  2237
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2238
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2239
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
  2240
    "store the value of the argument, aFloat into the receiver
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2241
     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
  2242
     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
  2243
     (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
  2244
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2245
    "
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2246
     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
  2247
     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
  2248
     to an IBM 370 or old VAX etc.
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2249
     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
  2250
     no problem.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2251
    "
9258
83c940f349ea isIEEEFormat
Claus Gittinger <cg@exept.de>
parents: 9185
diff changeset
  2252
    Float isIEEEFormat ifFalse:[self error:'unsupported operation'].
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2253
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2254
    ^ self doubleAt:index put:aFloat
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2255
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2256
    "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
  2257
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2258
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2259
ieeeFloatAt:index
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2260
    "retrieve the 4 bytes starting at index as a float.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2261
     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
  2262
     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
  2263
     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
  2264
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2265
    "
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2266
     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
  2267
     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
  2268
     to an IBM 370 or old VAX etc.
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2269
     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
  2270
     no problem.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2271
    "
9258
83c940f349ea isIEEEFormat
Claus Gittinger <cg@exept.de>
parents: 9185
diff changeset
  2272
    ShortFloat isIEEEFormat ifFalse:[self error:'unsupported operation'].
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2273
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2274
    ^ self floatAt:index
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2275
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2276
    "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
  2277
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2278
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2279
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
  2280
    "store the value of the argument, aFloat into the receiver
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2281
     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
  2282
     Storage is in IEEE floating point single precision format.
19629
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2283
     (i.e. 4 bytes are stored in the native byte order). 
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2284
     Since ST/X floats are really doubles, 
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2285
     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
  2286
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2287
    "
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2288
     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
  2289
     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
  2290
     to an IBM 370 or old VAX etc.
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2291
     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
  2292
     no problem.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2293
    "
9258
83c940f349ea isIEEEFormat
Claus Gittinger <cg@exept.de>
parents: 9185
diff changeset
  2294
    ShortFloat isIEEEFormat ifFalse:[self error:'unsupported operation'].
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2295
16320
dcb66fff0a89 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15836
diff changeset
  2296
    self floatAt:index put:aFloat
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2297
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2298
    "Created: / 5.3.1998 / 10:51:11 / stefan"
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2299
! !
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2300
13724
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  2301
!UninterpretedBytes methodsFor:'accessing-longlongs (64bit)'!
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2302
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2303
signedInt64At:index
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2304
    "return the 8-bytes starting at index as a signed Integer.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2305
     The index is a smalltalk index (i.e. 1-based).
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2306
     The value is retrieved in the machines natural byte order.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2307
     This may be worth a primitive."
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2308
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2309
    |w|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2310
19629
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2311
    w := self unsignedInt64At:index MSB:(UninterpretedBytes isBigEndian).
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2312
    (w > (16r7FFFFFFFFFFFFFFF)) ifTrue:[
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2313
        ^ w - (16r10000000000000000)
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2314
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2315
    ^ w
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2316
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2317
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2318
     |b|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2319
     b := ByteArray new:4.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2320
     b unsignedInt64At:1 put:16rFFFFFFFFFFFFFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2321
     (b signedInt64At:1)
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2322
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2323
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2324
    "Modified: / 1.7.1996 / 21:11:28 / cg"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2325
    "Created: / 5.3.1998 / 14:40:05 / stefan"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2326
    "Modified: / 5.3.1998 / 14:58:32 / stefan"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2327
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2328
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2329
signedInt64At:index MSB:msb
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2330
    "return the 8-bytes starting at index as a signed Integer.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2331
     The index is a smalltalk index (i.e. 1-based).
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2332
     The value is retrieved in the given byte order.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2333
     This may be worth a primitive."
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2334
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2335
    |w|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2336
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2337
    w := self unsignedInt64At:index MSB:msb.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2338
    (w > (16r7FFFFFFFFFFFFFFF)) ifTrue:[
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2339
        ^ w - (16r10000000000000000)
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2340
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2341
    ^ w
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2342
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2343
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2344
     |b|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2345
     b := ByteArray new:4.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2346
     b unsignedLongLongAt:1 put:16rFFFFFFFFFFFFFFFF.
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2347
     (b longLongAt:1 msb:true)
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2348
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2349
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2350
    "Modified: / 5.3.1998 / 12:06:28 / stefan"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2351
    "Created: / 5.3.1998 / 14:40:54 / stefan"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2352
    "Modified: / 9.5.1998 / 01:10:59 / cg"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2353
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2354
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2355
signedInt64At:byteIndex put:anInteger 
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2356
    "store a signed longLong (64bit) integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2357
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2358
     Same as #signedQuadWordAt:put: - for ST80 compatibility."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2359
19629
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2360
    ^ self signedInt64At:byteIndex put:anInteger MSB:(UninterpretedBytes isBigEndian)
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2361
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2362
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2363
signedInt64At:byteIndex put:anInteger MSB:msb
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2364
    "store a signed longLong (64bit) integer.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2365
     The index is a smalltalk index (i.e. 1-based).
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2366
     Same as #signedQuadWordAt:put: - for ST80 compatibility."
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2367
7813
3cc0b75d1684 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7812
diff changeset
  2368
    |v|
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2369
7813
3cc0b75d1684 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7812
diff changeset
  2370
    v := anInteger.
3cc0b75d1684 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7812
diff changeset
  2371
    anInteger < 0 ifTrue:[
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2372
        v := v + 16r10000000000000000
7813
3cc0b75d1684 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7812
diff changeset
  2373
    ].
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2374
    self unsignedInt64At:byteIndex put:v MSB:msb.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2375
    ^ anInteger
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2376
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2377
    "Created: / 9.5.1998 / 01:10:24 / cg"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2378
    "Modified: / 9.5.1998 / 01:13:34 / cg"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2379
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2380
19629
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2381
signedInt64AtLSB:byteIndex
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2382
    "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
  2383
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2384
     The value is retrieved with least significant byte first"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2385
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2386
    ^ self signedInt64At:byteIndex MSB:false
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2387
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2388
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2389
signedInt64AtLSB:byteIndex put:anInteger
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2390
    "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
  2391
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2392
     The integer is stored with least significant byte first."
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2393
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2394
    ^ self signedInt64At:byteIndex put:anInteger MSB:false
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2395
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2396
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2397
signedInt64AtMSB:byteIndex
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2398
    "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
  2399
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2400
     The value is retrieved with most significant byte first"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2401
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2402
    ^ self signedInt64At:byteIndex MSB:true
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2403
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2404
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2405
signedInt64AtMSB:byteIndex put:anInteger
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2406
    "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
  2407
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2408
     The integer is stored with least significant byte first."
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2409
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2410
    ^ self signedInt64At:byteIndex put:anInteger MSB:true
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2411
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2412
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2413
unsignedInt64At:byteIndex
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2414
    "return the 8-bytes starting at index in the machine's native
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2415
     byteorder as an unsigned integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2416
     The index is a smalltalk index (i.e. 1-based)"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2417
19629
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2418
   ^ self unsignedInt64At:byteIndex MSB:(UninterpretedBytes isBigEndian)
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2419
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2420
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2421
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2422
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2423
     b := ByteArray withAll:#(1 2 3 4 5 6 7 8).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2424
     (b unsignedLongLongAt:1 bigEndian:false) printStringRadix:16
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2425
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2426
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2427
    "Modified: / 5.11.1996 / 14:06:21 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2428
    "Modified: / 5.3.1998 / 14:04:44 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2429
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2430
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2431
unsignedInt64At:byteIndex MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2432
    "return the 8-bytes starting at index as an unsigned integer.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2433
     The index is a smalltalk index (i.e. 1-based).
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2434
     Depending on msb, the value is retrieved MSB or LSB-first."
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2435
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2436
    |l
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2437
     bIdx  "{ Class: SmallInteger }"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2438
     delta "{ Class: SmallInteger }"|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2439
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2440
    l := LargeInteger basicNew numberOfDigits:8.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2441
    msb ifTrue:[
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2442
        bIdx := byteIndex + 7.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2443
        delta := -1
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2444
    ] ifFalse:[
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2445
        bIdx := byteIndex.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2446
        delta := 1
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2447
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2448
    1 to:8 do:[:i |
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2449
        l digitAt:i put:(self byteAt:bIdx).
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2450
        bIdx := bIdx + delta
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2451
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2452
    ^ l compressed
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2453
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2454
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2455
     |b|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2456
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2457
     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
  2458
     (b unsignedLongLongAt:1 bigEndian:false) printStringRadix:16
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2459
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2460
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2461
    "Modified: / 5.11.1996 / 14:06:21 / cg"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2462
    "Modified: / 5.3.1998 / 14:04:44 / stefan"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2463
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2464
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2465
unsignedInt64At:byteIndex put:anInteger 
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2466
    "set the 8-bytes starting at index from the (unsigned) Integer value.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2467
     The index is a smalltalk index (i.e. 1-based).
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2468
     The value must be in the range 0 to 16rFFFFFFFFFFFFFFFF.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2469
     The value is stored in the machine's natural byteorder."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2470
19629
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2471
    ^ self unsignedInt64At:byteIndex put:anInteger MSB:(UninterpretedBytes isBigEndian)
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2472
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2473
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2474
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2475
     b := ByteArray new:10.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2476
     b unsignedInt64At:1 put:16r0807060504030201 MSB:false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2477
     b unsignedInt64At:1 put:16r0807060504030201 MSB:true.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2478
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2479
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2480
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2481
    "Created: / 5.3.1998 / 14:06:02 / stefan"
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2482
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2483
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2484
unsignedInt64At:byteIndex put:anInteger MSB:msb
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2485
    "set the 8-bytes starting at index from the (unsigned) Integer value.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2486
     The index is a smalltalk index (i.e. 1-based).
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2487
     The value must be in the range 0 to 16rFFFFFFFFFFFFFFFF.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2488
     Depending on msb, the value is stored MSB-first or LSB-first."
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2489
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2490
    |bIdx  "{ Class: SmallInteger }"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2491
     delta "{ Class: SmallInteger }"|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2492
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2493
    ((anInteger < 0) or:[anInteger > 16rFFFFFFFFFFFFFFFF]) ifTrue:[
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2494
        ^ self elementBoundsError:anInteger
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2495
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2496
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2497
    msb ifTrue:[
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2498
        bIdx := byteIndex + 7.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2499
        delta := -1
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2500
    ] ifFalse:[
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2501
        bIdx := byteIndex.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2502
        delta := 1
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2503
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2504
    1 to:8 do:[:i |
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2505
        self byteAt:bIdx put:(anInteger digitAt:i).
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2506
        bIdx := bIdx + delta.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2507
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2508
    ^ anInteger
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2509
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2510
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2511
     |b|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2512
     b := ByteArray new:8.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2513
     b unsignedLongLongAt:1 put:16r0807060504030201 bigEndian:false.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2514
     b inspect
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2515
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2516
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2517
    "Created: / 5.3.1998 / 14:06:02 / stefan"
19629
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2518
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2519
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2520
unsignedInt64AtLSB:byteIndex
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2521
    "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
  2522
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2523
     The value is retrieved with most significant byte first"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2524
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2525
    ^ self unsignedInt64At:byteIndex MSB:false
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2526
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2527
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2528
unsignedInt64AtLSB:byteIndex put:anInteger
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2529
    "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
  2530
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2531
     The integer is stored with least significant byte first."
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2532
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2533
    ^ self unsignedInt64At:byteIndex put:anInteger MSB:false
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2534
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2535
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2536
unsignedInt64AtMSB:byteIndex
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2537
    "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
  2538
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2539
     The value is retrieved with most significant byte first"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2540
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2541
    ^ self unsignedInt64At:byteIndex MSB:true
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2542
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2543
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2544
unsignedInt64AtMSB:byteIndex put:anInteger
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2545
    "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
  2546
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2547
     The integer is stored with least significant byte first."
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2548
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2549
    ^ self unsignedInt64At:byteIndex put:anInteger MSB:true
3459
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
13724
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  2552
!UninterpretedBytes methodsFor:'accessing-longs (32bit)'!
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2553
11850
ee84c01dc50d +pointerAt:
Claus Gittinger <cg@exept.de>
parents: 11756
diff changeset
  2554
pointerAt:index
ee84c01dc50d +pointerAt:
Claus Gittinger <cg@exept.de>
parents: 11756
diff changeset
  2555
    "get a pointer starting at index as ExternalAddress.
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2556
     The index is a smalltalk index (i.e. 1-based).
11850
ee84c01dc50d +pointerAt:
Claus Gittinger <cg@exept.de>
parents: 11756
diff changeset
  2557
     Only aligned accesses are allowed."
ee84c01dc50d +pointerAt:
Claus Gittinger <cg@exept.de>
parents: 11756
diff changeset
  2558
ee84c01dc50d +pointerAt:
Claus Gittinger <cg@exept.de>
parents: 11756
diff changeset
  2559
%{
ee84c01dc50d +pointerAt:
Claus Gittinger <cg@exept.de>
parents: 11756
diff changeset
  2560
    if (__isSmallInteger(index)) {
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2561
        unsigned char *cp;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2562
        INT sz;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2563
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2564
        __fetchBytePointerAndSize__(self, &cp, &sz);
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2565
        if (cp) {
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2566
            INT idx = __smallIntegerVal(index) - 1;
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2567
            char *pointer;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2568
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2569
            if ((idx >= 0) && ((idx+(sizeof(pointer)-1)) < sz)) {
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2570
                cp += idx;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2571
                /*
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2572
                 * aligned
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2573
                 */
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2574
                if (((INT)cp & (sizeof(pointer)-1)) == 0) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2575
                    pointer = ((char **)cp)[0];
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2576
                    RETURN (__MKEXTERNALADDRESS(pointer));
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2577
                } else {
15004
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  2578
#if 0
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2579
                    printf("cp UNALIGNED (%"_lx_")\n", (INT)cp);
15004
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  2580
#endif
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2581
                }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2582
            } else {
15004
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  2583
#if 0
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2584
                printf("idx(%"_ld_")+(sizeof(pointer)-1) (%d) >= sz (%"_ld_")\n",
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2585
                        idx, (int)(sizeof(pointer)-1), sz);
15004
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  2586
#endif
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2587
            }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2588
        } else {
15004
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  2589
#if 0
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2590
            printf("cp is NULL\n");
15004
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  2591
#endif
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2592
        }
15004
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  2593
    } else {
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  2594
#if 0
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2595
        printf("bad index\n");
15004
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  2596
#endif
11850
ee84c01dc50d +pointerAt:
Claus Gittinger <cg@exept.de>
parents: 11756
diff changeset
  2597
    }
ee84c01dc50d +pointerAt:
Claus Gittinger <cg@exept.de>
parents: 11756
diff changeset
  2598
bad:;
ee84c01dc50d +pointerAt:
Claus Gittinger <cg@exept.de>
parents: 11756
diff changeset
  2599
%}.
ee84c01dc50d +pointerAt:
Claus Gittinger <cg@exept.de>
parents: 11756
diff changeset
  2600
ee84c01dc50d +pointerAt:
Claus Gittinger <cg@exept.de>
parents: 11756
diff changeset
  2601
    self primitiveFailed.
ee84c01dc50d +pointerAt:
Claus Gittinger <cg@exept.de>
parents: 11756
diff changeset
  2602
ee84c01dc50d +pointerAt:
Claus Gittinger <cg@exept.de>
parents: 11756
diff changeset
  2603
    "
ee84c01dc50d +pointerAt:
Claus Gittinger <cg@exept.de>
parents: 11756
diff changeset
  2604
     |b|
ee84c01dc50d +pointerAt:
Claus Gittinger <cg@exept.de>
parents: 11756
diff changeset
  2605
     b := ByteArray new:(ExternalAddress pointerSize).
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2606
     b pointerAt:1 put:(ExternalAddress newAddress:16r12345678).
11850
ee84c01dc50d +pointerAt:
Claus Gittinger <cg@exept.de>
parents: 11756
diff changeset
  2607
     Transcript showCR:((b unsignedLongAt:1) printStringRadix:16).
ee84c01dc50d +pointerAt:
Claus Gittinger <cg@exept.de>
parents: 11756
diff changeset
  2608
     Transcript showCR:((b pointerAt:1)).
ee84c01dc50d +pointerAt:
Claus Gittinger <cg@exept.de>
parents: 11756
diff changeset
  2609
    "
ee84c01dc50d +pointerAt:
Claus Gittinger <cg@exept.de>
parents: 11756
diff changeset
  2610
!
ee84c01dc50d +pointerAt:
Claus Gittinger <cg@exept.de>
parents: 11756
diff changeset
  2611
6492
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  2612
pointerAt:index put:value
15004
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  2613
    "set the pointer starting at index from the integer or externalAddress value.
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2614
     The index is a smalltalk index (i.e. 1-based).
6492
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  2615
     Only aligned accesses are allowed.
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2616
     The value is either an ExternalAddress, ExternalBytes or an Integer"
6492
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  2617
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  2618
%{
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  2619
    OBJ *pointer;
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  2620
7814
c649ba9fd538 #pointerAt:put: now works for ExternalAddressLike objects
Stefan Vogel <sv@exept.de>
parents: 7813
diff changeset
  2621
    if (__isExternalAddressLike(value)) {
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2622
        pointer = __externalAddressVal(value);
7197
a68adb223592 also handle subclasses of ExternalBytes (Mapped..)
Claus Gittinger <cg@exept.de>
parents: 7193
diff changeset
  2623
    } else if (__isExternalBytesLike(value)) {
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2624
        pointer = __externalBytesVal(value);
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2625
        if (pointer == (OBJ *)0)
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2626
            pointer = 0;
11852
6732161ece56 changed #pointerAt:put:
Claus Gittinger <cg@exept.de>
parents: 11850
diff changeset
  2627
    } else if (value == nil) {
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2628
        pointer = 0;
15004
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  2629
    } else if (__isSmallInteger(value)) {
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2630
        pointer = (OBJ *)__intVal(value);
15004
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  2631
    } else {
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2632
        if ((pointer = (OBJ *)__unsignedLongIntVal(value)) == 0) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2633
            goto bad;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2634
        }
15004
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  2635
    }
6492
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  2636
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  2637
    if (__isSmallInteger(index)) {
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2638
        unsigned char *cp;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2639
        INT sz;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2640
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2641
        __fetchBytePointerAndSize__(self, &cp, &sz);
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2642
        if (cp) {
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2643
            INT idx = __smallIntegerVal(index) - 1;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2644
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2645
            if ((idx >= 0) && ((idx+(sizeof(pointer)-1)) < sz)) {
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2646
                cp += idx;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2647
                /*
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2648
                 * aligned
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2649
                 */
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2650
                if (((INT)cp & (sizeof(pointer)-1)) == 0) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2651
                    ((char **)cp)[0] = (char *) pointer;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2652
                    RETURN (value);
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2653
                }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2654
            }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  2655
        }
6492
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  2656
    }
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  2657
bad:;
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  2658
%}.
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  2659
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  2660
    self primitiveFailed.
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  2661
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  2662
    "
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  2663
     |b|
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  2664
     b := ByteArray new:ExternalAddress pointerSize.
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2665
     b pointerAt:1 put:(ExternalAddress newAddress:16r12345678).
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2666
     (b unsignedLongAt:1) printStringRadix:16
6492
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  2667
    "
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  2668
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  2669
    "Modified: / 1.7.1996 / 21:11:39 / cg"
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  2670
    "Created: / 5.3.1998 / 10:57:18 / stefan"
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  2671
!
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
  2672
19345
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2673
pointerValueAt:index
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2674
    "get a pointer value starting at index as unsigned integer.
19345
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2675
     The index is a smalltalk index (i.e. 1-based).
19502
194e575d35ad #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19461
diff changeset
  2676
     Only aligned accesses are allowed.
194e575d35ad #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19461
diff changeset
  2677
     This returns an int with sizeof the machines's native pointer (4 or 8 bytes)"
19345
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2678
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2679
%{
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2680
    if (__isSmallInteger(index)) {
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2681
        unsigned char *cp;
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2682
        INT sz;
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2683
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2684
        __fetchBytePointerAndSize__(self, &cp, &sz);
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2685
        if (cp) {
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2686
            INT idx = __smallIntegerVal(index) - 1;
19345
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2687
            char *pointer;
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2688
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2689
            if ((idx >= 0) && ((idx+(sizeof(pointer)-1)) < sz)) {
19345
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2690
                cp += idx;
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2691
                /*
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2692
                 * aligned
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2693
                 */
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2694
                if (((INT)cp & (sizeof(pointer)-1)) == 0) {
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2695
                    pointer = ((char **)cp)[0];
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2696
                    RETURN (__MKUINT((INT)(pointer)));
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2697
                } else {
19507
f80b18036ada #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19506
diff changeset
  2698
                    // printf("cp UNALIGNED (%"_lx_")\n", (INT)cp);
19345
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2699
                }
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2700
            } else {
19507
f80b18036ada #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19506
diff changeset
  2701
                // printf("idx(%"_ld_")+(sizeof(pointer)-1) (%d) >= sz (%"_ld_")\n",
f80b18036ada #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19506
diff changeset
  2702
                //        idx, (int)(sizeof(pointer)-1), sz);
19345
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2703
            }
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2704
        } else {
19507
f80b18036ada #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19506
diff changeset
  2705
            // printf("cp is NULL\n");
19345
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2706
        }
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2707
    } else {
19507
f80b18036ada #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19506
diff changeset
  2708
        // printf("bad index\n");
19345
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2709
    }
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2710
bad:;
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2711
%}.
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2712
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2713
    self primitiveFailed.
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2714
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2715
    "
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2716
     |b|
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2717
     b := ByteArray new:(ExternalAddress pointerSize).
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2718
     b pointerAt:1 put:(ExternalAddress newAddress:16r12345678).
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2719
     Transcript showCR:((b unsignedLongAt:1) printStringRadix:16).
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2720
     Transcript showCR:((b pointerAt:1)).
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2721
     Transcript showCR:((b pointerValueAt:1)).
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2722
    "
19502
194e575d35ad #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19461
diff changeset
  2723
194e575d35ad #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19461
diff changeset
  2724
    "Modified (comment): / 30-03-2016 / 11:01:55 / cg"
19345
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2725
!
e2526c51d771 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19301
diff changeset
  2726
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2727
signedInt32At:byteIndex
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2728
    "return the 4-bytes starting at byteIndex as a signed Integer.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2729
     The index is a smalltalk index (i.e. 1-based).
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2730
     The value is retrieved in the machine's natural byte order,
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2731
     therefore, this should only be used for byte-data which is
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2732
     only used inside this machine.
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2733
     To setup binary data packets which are to be sent to other machines,
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2734
     or stored into a file, always use the corresponding xxx:MSB: method
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2735
     and specify a definite byteOrder."
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2736
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2737
    |w|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2738
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2739
%{
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2740
    /*
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2741
     * handle the most common cases fast ...
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2742
     */
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2743
    if (__isSmallInteger(byteIndex)) {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2744
        unsigned char *cp;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2745
        INT sz;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2746
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2747
        __fetchBytePointerAndSize__(self, &cp, &sz);
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2748
        if (cp) {
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2749
            INT idx = __intVal(byteIndex) - 1;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2750
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2751
            if ((idx >= 0) && ((idx+(4-1)) < sz)) {
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2752
                int iVal;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2753
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2754
                cp += idx;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2755
#if defined(__i386__)
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2756
                /*
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2757
                 * aligned or not, we don't care (i386 can do both)
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2758
                 */
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2759
                {
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2760
                    iVal = ((int *)cp)[0];
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2761
                    RETURN (__MKINT(iVal));
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2762
                }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2763
#else
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2764
# if defined(__x86_64__)
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2765
                /*
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2766
                 * aligned or not, we don't care (i386 can do both)
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2767
                 */
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2768
                {
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2769
                    iVal = ((int *)cp)[0];
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2770
                    RETURN (__mkSmallInteger(iVal));
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2771
                }
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2772
# else
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2773
                /*
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2774
                 * aligned ?
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2775
                 */
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2776
                if (((INT)cp & (sizeof(int)-1)) == 0) {
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2777
                    iVal = ((int *)cp)[0];
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2778
                } else {
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2779
#  ifdef __LSBFIRST__
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2780
                    iVal = cp[0] & 0xFF;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2781
                    iVal += (cp[1] & 0xFF)<<8;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2782
                    iVal += (cp[2] & 0xFF)<<16;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2783
                    iVal += (cp[3] & 0xFF)<<24;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2784
#  else
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2785
#   ifdef __MSBFIRST__
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2786
                    iVal = cp[0] & 0xFF;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2787
                    iVal = (iVal<<8)+(cp[1] & 0xFF);
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2788
                    iVal = (iVal<<8)+(cp[2] & 0xFF);
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2789
                    iVal = (iVal<<8)+(cp[3] & 0xFF);
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2790
#   else
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2791
                    {
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2792
                        union {
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2793
                            int i;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2794
                            char c[4];
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2795
                        } u;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2796
                        u.c[0] = cp[0]; 
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2797
                        u.c[1] = cp[1]; 
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2798
                        u.c[2] = cp[2]; 
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2799
                        u.c[3] = cp[3];
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2800
                        iVal = u.i;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2801
                    }
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2802
#   endif
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2803
#  endif
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2804
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2805
#  if __POINTER_SIZE__ == 8
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2806
                    RETURN (__mkSmallInteger(iVal));
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2807
#  else
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2808
                    RETURN (__MKINT(iVal));
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2809
#  endif
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2810
                }
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2811
# endif
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2812
#endif
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2813
            }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2814
        }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2815
    }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2816
%}.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2817
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2818
    ^ self signedInt32At:byteIndex MSB:IsBigEndian.
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2819
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2820
    "
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2821
     |b|
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2822
     b := ByteArray new:4.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2823
     b unsignedLongAt:1 put:16rFFFFFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2824
     (b longAt:1)
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2825
    "
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2826
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2827
    "Modified: / 1.7.1996 / 21:11:28 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2828
    "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
  2829
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2830
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2831
signedInt32At:byteIndex MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2832
    "return the 4-bytes starting at byteIndex as a (signed) Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2833
     The byteIndex is a smalltalk index (i.e. 1-based).
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2834
     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
  2835
     LSB-first otherwise."
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2836
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2837
    |val
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2838
     ival "{ Class: SmallInteger }"
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2839
     i    "{ Class: SmallInteger }"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2840
     bHH  "{ Class: SmallInteger }"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2841
     bHL  "{ Class: SmallInteger }"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2842
     bLH  "{ Class: SmallInteger }"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2843
     bLL  "{ Class: SmallInteger }"|
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2844
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2845
%{
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2846
    /*
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2847
     * handle the most common cases fast ...
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2848
     */
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2849
    if (__isSmallInteger(byteIndex)) {
19047
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2850
        unsigned char *cp;
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2851
        INT sz;
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2852
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2853
        __fetchBytePointerAndSize__(self, &cp, &sz);
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2854
        if (cp) {
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2855
            INT idx = __intVal(byteIndex) - 1;
19047
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2856
            int iVal;
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2857
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2858
            cp += idx;
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2859
            if ((idx >= 0) && ((idx+(sizeof(int)-1)) < sz)) {
19047
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2860
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2861
                if (msb == true) {
8901
824a89d0b5c7 alpha64 vs. POINTER_SIZE cleanup
Claus Gittinger <cg@exept.de>
parents: 8893
diff changeset
  2862
#if defined(__MSBFIRST__)
19047
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2863
                    if (((INT)cp & (sizeof(int)-1))== 0) {
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2864
                        /*
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2865
                         * aligned
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2866
                         */
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2867
                        iVal = ((int *)cp)[0];
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2868
                    } else
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2869
#endif
19047
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2870
                    {
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2871
                        iVal = cp[0];
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2872
                        iVal = (iVal << 8) | cp[1];
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2873
                        iVal = (iVal << 8) | cp[2];
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2874
                        iVal = (iVal << 8) | cp[3];
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2875
                    }
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2876
                } else {
8901
824a89d0b5c7 alpha64 vs. POINTER_SIZE cleanup
Claus Gittinger <cg@exept.de>
parents: 8893
diff changeset
  2877
#if defined(__i386__) || (defined(UNALIGNED_FETCH_OK) && defined(__LSBFIRST__))
19047
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2878
                    /*
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2879
                     * aligned or not - we don't care
19047
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2880
                     * (i386 can fetch unaligned)
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2881
                     */
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2882
                    iVal = ((int *)cp)[0];
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2883
#else
8901
824a89d0b5c7 alpha64 vs. POINTER_SIZE cleanup
Claus Gittinger <cg@exept.de>
parents: 8893
diff changeset
  2884
# if defined(__LSBFIRST__)
19047
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2885
                    if (((INT)cp & (sizeof(int)-1))== 0) {
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2886
                        /*
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2887
                         * aligned
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2888
                         */
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2889
                        iVal = ((int *)cp)[0];
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2890
                    } else
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2891
# endif
19047
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2892
                    {
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2893
                        iVal = cp[3];
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2894
                        iVal = (iVal << 8) | cp[2];
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2895
                        iVal = (iVal << 8) | cp[1];
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2896
                        iVal = (iVal << 8) | cp[0];
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2897
                    }
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2898
#endif
19047
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2899
                }
8901
824a89d0b5c7 alpha64 vs. POINTER_SIZE cleanup
Claus Gittinger <cg@exept.de>
parents: 8893
diff changeset
  2900
#if __POINTER_SIZE__ == 8
19047
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2901
                RETURN (__mkSmallInteger(iVal));
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2902
#else
19047
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2903
                RETURN (__MKINT(iVal));
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2904
#endif
19047
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2905
            }
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2906
        }
4515
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
%}.
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2909
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2910
    val := self unsignedInt32At:byteIndex MSB:msb.
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2911
    (val > (16r7FFFFFFF)) ifTrue:[
19047
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2912
        ^ val - (16r100000000)
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2913
    ].
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2914
    ^ val
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2915
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2916
    "
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2917
     |b|
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2918
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2919
     b := ByteArray withAll:#(1 2 3 4).
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2920
     (b signedInt32At:1 MSB:true) printStringRadix:16.    
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2921
     (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
  2922
    "
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2923
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2924
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2925
signedInt32At:byteIndex put:anInteger
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2926
    "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
  2927
     The index is a smalltalk index (i.e. 1-based).
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2928
     The integer is stored in the machine's natural byte order."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2929
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2930
    ^ self signedInt32At:byteIndex put:anInteger MSB:IsBigEndian
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2931
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2932
    "
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2933
     |b|
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2934
     b := ByteArray new:4.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2935
     b longAt:1 put:-1.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2936
     (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
  2937
    "
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2938
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2939
    "Modified: / 1.7.1996 / 21:11:39 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2940
    "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
  2941
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2942
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2943
signedInt32At:byteIndex put:anInteger MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2944
    "set the 4-bytes starting at byteIndex from the signed Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2945
     The byteIndex is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2946
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2947
     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
  2948
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2949
    |v|
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2950
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2951
%{
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2952
    /*
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2953
     * handle the most common case fast ...
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2954
     */
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2955
    if (__isSmallInteger(byteIndex)) {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2956
        unsigned char *cp;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2957
        INT sz;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2958
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2959
        __fetchBytePointerAndSize__(self, &cp, &sz);
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2960
        if (cp) {
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2961
            INT idx = __intVal(byteIndex) - 1;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2962
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2963
            if ((idx >= 0) && ((idx+3) < sz)) {
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2964
                cp += idx;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2965
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2966
                if (__isSmallInteger(anInteger)) {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2967
                    INT __v = __intVal(anInteger);
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2968
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2969
# if __POINTER_SIZE__ == 8
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2970
                    if ((__v < -0x80000000L) || (__v > 0x7FFFFFFF)) {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2971
                        goto badArg;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2972
                    }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2973
# endif
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2974
                    if (((INT)cp & 3) == 0) {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2975
                        /*
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2976
                         * aligned
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2977
                         */
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2978
                        if (
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2979
# ifdef __LSBFIRST__
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2980
                            (msb == false)
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2981
# else
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2982
#  ifdef __MSBFIRST__
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2983
                            (msb == true)
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2984
#  else
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2985
                            (0)
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2986
#  endif
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2987
# endif
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2988
                        ) {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2989
                            ((int *)cp)[0] = (int)__v;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2990
                            RETURN (anInteger);
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2991
                        }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2992
                    }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2993
                    if (msb == false) {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2994
                        cp[0] = __v & 0xFF;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2995
                        cp[1] = (__v>>8) & 0xFF;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2996
                        cp[2] = (__v>>16) & 0xFF;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2997
                        cp[3] = (__v>>24) & 0xFF;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2998
                    } else {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2999
                        cp[0] = (__v>>24) & 0xFF;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3000
                        cp[1] = (__v>>16) & 0xFF;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3001
                        cp[2] = (__v>>8) & 0xFF;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3002
                        cp[3] = __v & 0xFF;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3003
                    }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3004
                    RETURN (anInteger);
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3005
                }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3006
            }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3007
        }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3008
    }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3009
  badArg: ;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3010
%}.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3011
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3012
    anInteger >= 0 ifTrue:[
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3013
        v := anInteger
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3014
    ] ifFalse:[
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3015
        v := anInteger + 16r100000000
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3016
    ].
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3017
    self unsignedInt32At:byteIndex put:v MSB:msb.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3018
    ^ anInteger
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3019
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3020
    "
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3021
     |b|
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3022
     b := ByteArray new:4.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3023
     b longAt:1 put:-1.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3024
     (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
  3025
    "
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3026
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3027
    "Modified: / 1.7.1996 / 21:11:39 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3028
    "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
  3029
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3030
19629
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3031
signedInt32AtLSB:byteIndex
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3032
    "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
  3033
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3034
     The value is retrieved with least significant byte first"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3035
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3036
    ^ self signedInt32At:byteIndex MSB:false
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3037
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3038
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3039
signedInt32AtLSB:byteIndex put:anInteger
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3040
    "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
  3041
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3042
     The integer is stored with least significant byte first."
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3043
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3044
    ^ self signedInt32At:byteIndex put:anInteger MSB:false
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3045
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3046
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3047
signedInt32AtMSB:byteIndex
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3048
    "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
  3049
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3050
     The value is retrieved with most significant byte first"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3051
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3052
    ^ self signedInt32At:byteIndex MSB:true
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3053
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3054
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3055
signedInt32AtMSB:byteIndex put:anInteger
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3056
    "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
  3057
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3058
     The integer is stored with most significant byte first."
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3059
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3060
    ^ self signedInt32At:byteIndex put:anInteger MSB:true
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3061
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3062
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3063
unsignedInt32At:byteIndex
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3064
    "return the 4-bytes starting at index as an (unsigned) Integer.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  3065
     The index is a smalltalk index (i.e. 1-based).
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3066
     The value is retrieved in the machine's natural byte order."
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3067
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3068
    ^ self unsignedInt32At:byteIndex MSB:IsBigEndian
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3069
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3070
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3071
     |b|
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3072
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3073
     b := ByteArray withAll:#(1 2 3 4).
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3074
     (b unsignedInt32At:1) printStringRadix:16      
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3075
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3076
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3077
    "Modified: / 5.3.1998 / 14:57:35 / stefan"
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3078
!
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3079
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3080
unsignedInt32At:byteIndex MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3081
    "return the 4-bytes starting at index as an (unsigned) Integer.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  3082
     The index is a smalltalk index (i.e. 1-based).
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3083
     The value is retrieved MSB-first, if the msb-arg is true;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3084
     LSB-first otherwise."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3085
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3086
    |val
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3087
     ival "{ Class: SmallInteger }"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3088
     i    "{ Class: SmallInteger }"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3089
     bHH  "{ Class: SmallInteger }"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3090
     bHL  "{ Class: SmallInteger }"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3091
     bLH  "{ Class: SmallInteger }"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3092
     bLL  "{ Class: SmallInteger }"|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3093
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3094
%{
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3095
    /*
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3096
     * handle the most common cases fast ...
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3097
     */
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3098
    if (__isSmallInteger(byteIndex)) {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3099
        unsigned char *cp;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3100
        INT sz;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3101
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3102
        __fetchBytePointerAndSize__(self, &cp, &sz);
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3103
        if (cp) {
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3104
            INT idx = __intVal(byteIndex) - 1;
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3105
            unsigned int iVal;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3106
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3107
            if ((idx >= 0) && ((idx+(sizeof(int)-1)) < sz)) {
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3108
                cp += idx;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3109
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3110
                if (msb == true) {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3111
#if defined(__MSBFIRST__)
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3112
                    if (((INT)cp & (sizeof(int)-1))== 0) {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3113
                        /*
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3114
                         * aligned
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3115
                         */
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3116
                        iVal = ((unsigned int *)cp)[0];
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3117
                    } else
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3118
#endif
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3119
                    {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3120
                        iVal = cp[0];
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3121
                        iVal = (iVal << 8) | cp[1];
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3122
                        iVal = (iVal << 8) | cp[2];
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3123
                        iVal = (iVal << 8) | cp[3];
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3124
                    }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3125
                } else {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3126
#if defined(__i386__) || (defined(UNALIGNED_FETCH_OK) && defined(__LSBFIRST__))
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3127
                    /*
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3128
                     * aligned or not - we dont care
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3129
                     * (i386 can fetch unaligned)
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3130
                     */
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3131
                    iVal = ((unsigned int *)cp)[0];
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3132
#else
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3133
# if defined(__LSBFIRST__)
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3134
                    if (((INT)cp & (sizeof(int)-1))== 0) {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3135
                        /*
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3136
                         * aligned
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3137
                         */
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3138
                        iVal = ((unsigned int *)cp)[0];
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3139
                    } else
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3140
# endif
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3141
                    {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3142
                        iVal = cp[3];
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3143
                        iVal = (iVal << 8) | cp[2];
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3144
                        iVal = (iVal << 8) | cp[1];
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3145
                        iVal = (iVal << 8) | cp[0];
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3146
                    }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3147
#endif
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3148
                }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3149
#if __POINTER_SIZE__ == 8
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3150
                RETURN (__mkSmallInteger(iVal));
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3151
#else
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3152
                RETURN (__MKUINT(iVal));
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3153
#endif
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3154
            }
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
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3159
    "/ fallBack code - non ByteArray-like receiver
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3160
    "/ or funny byteIndex
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3161
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3162
    i := byteIndex.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3163
    msb ifFalse:[
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3164
        bLL := self byteAt:i.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3165
        bLH := self byteAt:(i+1).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3166
        bHL := self byteAt:(i+2).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3167
        bHH := self byteAt:(i+3).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3168
    ] ifTrue:[        
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3169
        bHH := self byteAt:i.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3170
        bHL := self byteAt:(i+1).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3171
        bLH := self byteAt:(i+2).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3172
        bLL := self byteAt:(i+3).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3173
    ].
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3174
    ival := (bHH bitShift:8) + bHL.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3175
    ival := (ival bitShift:8) + bLH.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3176
    val := (ival bitShift:8) + bLL.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3177
    ^ val
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3178
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3179
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3180
     |b|
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3181
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3182
     b := ByteArray withAll:#(1 2 3 4).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3183
     (b unsignedInt32At:1 MSB:true) printStringRadix:16.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3184
     (b unsignedInt32At:1 MSB:false) printStringRadix:16
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3185
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3186
!
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3187
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3188
unsignedInt32At:byteIndex put:anInteger
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3189
    "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
  3190
     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
  3191
     The value must be in the range 0 to 16rFFFFFFFF.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3192
     The value is stored in the machine's native byte order"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3193
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3194
    ^ self unsignedInt32At:byteIndex put:anInteger MSB:IsBigEndian
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3195
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3196
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3197
     |b|
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3198
     b := ByteArray new:8.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3199
     b doubleWordAt:1 put:16r04030201 MSB:true.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3200
     b doubleWordAt:5 put:16r04030201 MSB:false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3201
     b inspect
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3202
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3203
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3204
    "Modified: / 21.1.1998 / 17:43:34 / cg"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3205
    "Modified: / 5.3.1998 / 11:42:17 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3206
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3207
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3208
unsignedInt32At:byteIndex put:anInteger MSB:msb
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3209
    "set the 4-bytes starting at byteIndex from the unsigned Integer value.
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3210
     The byteIndex is a smalltalk index (i.e. 1-based).
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3211
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3212
     This is the ST80 version of #doubleWordAt:put:"
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3213
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3214
    |v i b1 b2 b3 b4|
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3215
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3216
%{
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3217
    /*
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3218
     * handle the most common case fast ...
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3219
     */
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3220
    if (__isSmallInteger(byteIndex)) {
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3221
        unsigned char *cp;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3222
        INT sz;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3223
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3224
        __fetchBytePointerAndSize__(self, &cp, &sz);
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3225
        if (cp) {
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3226
            INT idx = __intVal(byteIndex) - 1;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3227
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3228
            if ((idx >= 0) && ((idx+3) < sz)) {
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3229
                cp += idx;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3230
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3231
                if (__isSmallInteger(anInteger)) {
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3232
                    INT __v = __intVal(anInteger);
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3233
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3234
# if __POINTER_SIZE__ == 8
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3235
                    if ((__v < 0) || (__v > 0xFFFFFFFF)) {
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3236
                        goto badArg;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3237
                    }
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3238
# endif
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3239
                    if (((INT)cp & 3) == 0) {
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3240
                        /*
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3241
                         * aligned
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3242
                         */
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3243
                        if (
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3244
# ifdef __LSBFIRST__
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3245
                            (msb == false)
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3246
# else
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3247
#  ifdef __MSBFIRST__
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3248
                            (msb == true)
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3249
#  else
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3250
                            (0)
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3251
#  endif
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3252
# endif
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3253
                        ) {
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3254
                            ((int *)cp)[0] = (int)__v;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3255
                            RETURN (anInteger);
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3256
                        }
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3257
                    }
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3258
                    if (msb == false) {
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3259
                        cp[0] = __v & 0xFF;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3260
                        cp[1] = (__v>>8) & 0xFF;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3261
                        cp[2] = (__v>>16) & 0xFF;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3262
                        cp[3] = (__v>>24) & 0xFF;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3263
                    } else {
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3264
                        cp[0] = (__v>>24) & 0xFF;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3265
                        cp[1] = (__v>>16) & 0xFF;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3266
                        cp[2] = (__v>>8) & 0xFF;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3267
                        cp[3] = __v & 0xFF;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3268
                    }
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3269
                    RETURN (anInteger);
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3270
                }
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3271
            }
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3272
        }
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3273
    }
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3274
  badArg: ;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3275
%}.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3276
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3277
    ((anInteger < 0) or:[anInteger > 16rFFFFFFFF]) ifTrue:[
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3278
        ^ self elementBoundsError:anInteger
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3279
    ].
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3280
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3281
    i := byteIndex.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3282
    msb ifTrue:[
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3283
        b1 := (anInteger digitAt:4).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3284
        b2 := (anInteger digitAt:3).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3285
        b3 := (anInteger digitAt:2).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3286
        b4 := (anInteger digitAt:1).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3287
    ] ifFalse:[
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3288
        b1 := (anInteger digitAt:1).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3289
        b2 := (anInteger digitAt:2).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3290
        b3 := (anInteger digitAt:3).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3291
        b4 := (anInteger digitAt:4).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3292
    ].
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3293
    self byteAt:i     put:b1.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3294
    self byteAt:(i+1) put:b2.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3295
    self byteAt:(i+2) put:b3.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3296
    self byteAt:(i+3) put:b3.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3297
    ^ anInteger
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3298
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3299
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3300
     |b|
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3301
     b := ByteArray new:4.
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3302
     b signedInt32At:1 put:-1.
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3303
     (b unsignedInt32At:1) printStringRadix:16 
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3304
    "
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3305
    "
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3306
     |b|
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3307
     b := ByteArray new:4.
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3308
     b unsignedInt32At:1 put:16rFFFFFFFF.
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3309
     (b signedInt32At:1) 
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3310
    "
19629
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3311
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3312
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3313
unsignedInt32AtLSB:byteIndex
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3314
    "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
  3315
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3316
     The value is retrieved with least significant byte first"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3317
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3318
    ^ self unsignedInt32At:byteIndex MSB:false
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3319
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3320
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3321
unsignedInt32AtLSB:byteIndex put:anInteger
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3322
    "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
  3323
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3324
     The integer is stored with least significant byte first."
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3325
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3326
    ^ self unsignedInt32At:byteIndex put:anInteger MSB:false
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3327
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3328
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3329
unsignedInt32AtMSB:byteIndex
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3330
    "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
  3331
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3332
     The value is retrieved with most significant byte first"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3333
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3334
    ^ self unsignedInt32At:byteIndex MSB:true
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3335
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3336
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3337
unsignedInt32AtMSB:byteIndex put:anInteger
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3338
    "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
  3339
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3340
     The integer is stored with most significant byte first."
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3341
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3342
    ^ self unsignedInt32At:byteIndex put:anInteger MSB:true
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3343
! !
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3344
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3345
!UninterpretedBytes methodsFor:'accessing-shorts (16bit)'!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3346
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3347
signedInt16At:byteIndex
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3348
    "return the 2-bytes starting at index as a signed Integer.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3349
     The index is a smalltalk index (i.e. 1-based).
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3350
     The value is retrieved in the machine's natural byte order."
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3351
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3352
    ^ (self unsignedInt16At:byteIndex) signExtendedShortValue
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3353
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3354
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3355
     |b|
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3356
     b := ByteArray new:2.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3357
     b wordAt:1 put:16rFFFF.
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3358
     b signedWordAt:1
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3359
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3360
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3361
    "Modified: 1.7.1996 / 21:14:38 / cg"
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3362
!
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3363
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3364
signedInt16At:byteIndex MSB:msb
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3365
    "return the 2-bytes starting at index as a signed Integer.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  3366
     The index is a smalltalk index (i.e. 1-based).
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3367
     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
  3368
     LSB-first (i.e. low 8-bits at lower byte index) if it's false.
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3369
     Notice: 
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3370
        the index is a byte index; thus, this allows for unaligned access to
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3371
        words on any boundary."
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3372
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3373
    |b1 "{ Class: SmallInteger }"
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3374
     b2 "{ Class: SmallInteger }"|
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3375
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3376
%{
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3377
    /*
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3378
     * handle the most common cases fast ...
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3379
     */
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3380
    if (__isSmallInteger(byteIndex)) {
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3381
        unsigned char *cp;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3382
        INT sz;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3383
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3384
        __fetchBytePointerAndSize__(self, &cp, &sz);
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3385
        if (cp) {
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3386
            INT idx = __intVal(byteIndex) - 1;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3387
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3388
            if ((idx >= 0) && ((idx+(2-1)) < sz)) {
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3389
                short sVal;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3390
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3391
                cp += idx;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3392
                if (msb == false) {
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3393
#if defined(__i386__) || (defined(__LSBFIRST__) && defined(UNALIGNED_FETCH_OK))
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3394
                    /*
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3395
                     * aligned or not, we dont care (i386 can do both)
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3396
                     */
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3397
                    sVal = ((short *)cp)[0];
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3398
#else
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3399
                    sVal = (cp[0] & 0xFF) | ((cp[1] & 0xFF) << 8);
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3400
#endif
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3401
                } else {
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3402
                    sVal = ((cp[0] & 0xFF) << 8) | (cp[1] & 0xFF);
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3403
                }
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3404
                RETURN (__mkSmallInteger(sVal));
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3405
            }
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3406
        }
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3407
    }
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3408
%}.
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3409
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3410
    b1 := self byteAt:byteIndex.
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3411
    b2 := self byteAt:(byteIndex + 1).
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3412
    msb ifTrue:[
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3413
        ^ ((b1 bitShift:8) + b2) signExtendedShortValue
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3414
    ].
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3415
    ^ ((b2 bitShift:8) + b1) signExtendedShortValue
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3416
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3417
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3418
signedInt16At:index put:anInteger
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3419
    "set the 2-bytes starting at index from the signed Integer value.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3420
     The index is a smalltalk index (i.e. 1-based).
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3421
     The stored value must be in the range -32768 .. +32676.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3422
     The value is stored in the machine's natural byte order."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3423
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3424
    ^ self signedInt16At:index put:anInteger MSB:IsBigEndian
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3425
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3426
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3427
     |b|
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3428
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3429
     b signedInt16At:1 put:-2.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3430
     b signedInt16At:3 put:-3.
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3431
     b inspect
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3432
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3433
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3434
    "Modified: 1.7.1996 / 21:12:13 / cg"
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3435
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3436
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3437
signedInt16At:byteIndex put:anInteger MSB:msb
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3438
    "set the 2-bytes starting at byteIndex from the signed integer value.
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3439
     The byteIndex is a smalltalk index (i.e. 1-based).
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3440
     The stored value must be in the range -32768 .. +32676.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3441
     The value is stored MSB-first, if the msb-arg is true;
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3442
     LSB-first otherwise."
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3443
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3444
%{  /* NOCONTEXT */
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3445
    /*
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3446
     * handle the most common case fast ...
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3447
     */
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3448
    if (__isSmallInteger(byteIndex)) {
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3449
        unsigned char *cp;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3450
        INT sz;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3451
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3452
        __fetchBytePointerAndSize__(self, &cp, &sz);
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3453
        if (cp) {
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3454
            INT idx = __intVal(byteIndex) - 1;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3455
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3456
            if ((idx >= 0) && ((idx+1) < sz)) {
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3457
                cp += idx;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3458
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3459
                if (__isSmallInteger(anInteger)) {
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3460
                    INT __v = __intVal(anInteger);
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3461
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3462
                    if ((__v < -0x8000L) || (__v > 0x7FFF)) {
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3463
                        goto badArg;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3464
                    }
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3465
                    if (msb == false) { 
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3466
#if defined(__i386__) || (defined(__LSBFIRST__) && defined(UNALIGNED_FETCH_OK))
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3467
                        ((short *)cp)[0] = (short)__v;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3468
#else
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3469
                        cp[0] = __v & 0xFF;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3470
                        cp[1] = (__v >> 8) & 0xFF;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3471
#endif
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3472
                    } else {        
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3473
                        cp[0] = (__v >> 8) & 0xFF;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3474
                        cp[1] = __v & 0xFF;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3475
                    }
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3476
                    RETURN (anInteger);
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3477
                }
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3478
            }
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3479
        }
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3480
    }
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3481
  badArg: ;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3482
%}.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3483
    anInteger >= 0 ifTrue:[
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3484
        self unsignedInt16At:byteIndex put:anInteger MSB:msb.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3485
    ] ifFalse:[
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3486
        self unsignedInt16At:byteIndex put:(16r10000 + anInteger) MSB:msb.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3487
    ].
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3488
    ^ anInteger
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3489
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3490
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3491
     |b|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3492
     b := ByteArray new:4.
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3493
     b signedInt16At:1 put:-1.
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3494
     b signedInt16At:3 put:-2.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3495
     b inspect
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3496
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3497
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3498
    "Modified: 1.7.1996 / 21:12:13 / cg"
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3499
!
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3500
19629
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3501
signedInt16AtLSB:byteIndex
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3502
    "return the 2-bytes starting at index as a signed Integer.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3503
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3504
     The value is retrieved with least significant byte first"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3505
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3506
    ^ self signedInt16At:byteIndex MSB:false
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3507
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3508
    "
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3509
     |b|
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3510
     b := ByteArray new:2.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3511
     b wordAt:1 put:16rFFFE.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3512
     b signedInt16AtLSB:1.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3513
     b signedInt16AtMSB:1.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3514
    "
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3515
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3516
    "Modified: 1.7.1996 / 21:14:38 / cg"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3517
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3518
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3519
signedInt16AtLSB:index put:anInteger
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3520
    "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
  3521
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3522
     The stored value must be in the range 0 .. 16rFFFF.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3523
     The value is stored with least significant byte first"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3524
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3525
    ^ self signedInt16At:index put:anInteger MSB:false
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3526
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3527
    "
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3528
     |b|
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3529
     b := ByteArray new:4.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3530
     b signedInt16At:1 put:16r0102.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3531
     b signedInt16At:3 put:16r0304.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3532
     b inspect
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3533
    "
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3534
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3535
    "Created: / 5.3.1998 / 11:54:52 / stefan"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3536
    "Modified: / 5.3.1998 / 14:59:38 / stefan"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3537
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3538
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3539
signedInt16AtMSB:byteIndex
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3540
    "return the 2-bytes starting at index as a signed Integer.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3541
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3542
     The value is retrieved with most significant byte first"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3543
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3544
    ^ self signedInt16At:byteIndex MSB:true
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3545
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3546
    "
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3547
     |b|
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3548
     b := ByteArray new:2.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3549
     b wordAt:1 put:16rFFFE.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3550
     b signedInt16AtLSB:1.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3551
     b signedInt16AtMSB:1.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3552
    "
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3553
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3554
    "Modified: 1.7.1996 / 21:14:38 / cg"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3555
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3556
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3557
signedInt16AtMSB:index put:anInteger
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3558
    "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
  3559
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3560
     The stored value must be in the range 0 .. 16rFFFF.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3561
     The value is stored with most significant byte first"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3562
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3563
    ^ self signedInt16At:index put:anInteger MSB:true
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3564
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3565
    "
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3566
     |b|
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3567
     b := ByteArray new:4.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3568
     b signedInt16At:1 put:16r0102.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3569
     b signedInt16At:3 put:16r0304.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3570
     b inspect
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3571
    "
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3572
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3573
    "Created: / 5.3.1998 / 11:54:52 / stefan"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3574
    "Modified: / 5.3.1998 / 14:59:38 / stefan"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3575
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3576
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3577
unsignedInt16At:index
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3578
    "return the 2-bytes starting at index as an (unsigned) Integer.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  3579
     The index is a smalltalk index (i.e. 1-based).
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3580
     The value is retrieved in the machine's natural byte order"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3581
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3582
    ^ self unsignedInt16At:index MSB:IsBigEndian
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3583
!
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3584
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3585
unsignedInt16At:byteIndex MSB:msb
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3586
    "return the 2-bytes starting at index as an (unsigned) Integer.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  3587
     The index is a smalltalk index (i.e. 1-based).
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3588
     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
  3589
     LSB-first (i.e. low 8-bits at lower byte index) if it's false.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3590
     Notice: 
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3591
        the index is a byte index; thus, this allows for unaligned access to
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3592
        words on any boundary."
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3593
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3594
    |b1 "{ Class: SmallInteger }"
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3595
     b2 "{ Class: SmallInteger }"|
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3596
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3597
%{
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3598
    /*
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3599
     * handle the most common cases fast ...
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3600
     */
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3601
    if (__isSmallInteger(byteIndex)) {
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3602
        unsigned char *cp;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3603
        INT sz;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3604
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3605
        __fetchBytePointerAndSize__(self, &cp, &sz);
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3606
        if (cp) {
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3607
            INT idx = __intVal(byteIndex) - 1;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3608
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3609
            if ((idx >= 0) && ((idx+(2-1)) < sz)) {
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3610
                int iVal;
19506
c729dd175795 #BUGFIX
Claus Gittinger <cg@exept.de>
parents: 19502
diff changeset
  3611
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3612
                cp += idx;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3613
                if (msb == false) {
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3614
#if defined(__i386__) || (defined(__LSBFIRST__) && defined(UNALIGNED_FETCH_OK))
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3615
                    /*
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3616
                     * aligned or not, we dont care (i386 can do both)
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3617
                     */
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3618
                    iVal = ((unsigned short *)cp)[0];
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3619
#else
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3620
                    iVal = (cp[0] & 0xFF) | ((cp[1] & 0xFF) << 8);
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3621
#endif
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3622
                } else {
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3623
                    iVal = ((cp[0] & 0xFF) << 8) | (cp[1] & 0xFF);
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3624
                }
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3625
                RETURN (__mkSmallInteger(iVal));
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3626
            }
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3627
        }
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3628
    }
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3629
%}.
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3630
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3631
    b1 := self byteAt:byteIndex.
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3632
    b2 := self byteAt:(byteIndex + 1).
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3633
    msb ifTrue:[
19046
Claus Gittinger <cg@exept.de>
parents: 18969
diff changeset
  3634
        ^ (b1 bitShift:8) + b2
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3635
    ].
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3636
    ^ (b2 bitShift:8) + b1
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3637
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3638
    "
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3639
     #[ 16rFF 16r00 ] unsignedInt16At:1 MSB:true
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3640
     #[ 16rFF 16r00 ] unsignedInt16At:1 MSB:false
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3641
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3642
     #[ 16rFF 16r00 ] unsignedInt16At:2 MSB:true
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3643
     #[ 16rFF 16r00 ] unsignedInt16At:2 MSB:false
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3644
    "
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3645
!
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3646
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3647
unsignedInt16At:index put:anInteger
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3648
    "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
  3649
     The index is a smalltalk index (i.e. 1-based).
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3650
     The stored value must be in the range 0 .. 16rFFFF.
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3651
     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
  3652
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3653
    ^ self unsignedInt16At:index put:anInteger MSB:IsBigEndian
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3654
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3655
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3656
     |b|
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3657
     b := ByteArray new:4.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3658
     b unsignedInt16At:1 put:16r0102.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3659
     b unsignedInt16At:3 put:16r0304.
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3660
     b inspect
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3661
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3662
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3663
    "Created: / 5.3.1998 / 11:54:52 / stefan"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3664
    "Modified: / 5.3.1998 / 14:59:38 / stefan"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3665
!
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3666
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3667
unsignedInt16At:byteIndex put:anInteger MSB:msb
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3668
    "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
  3669
     The index is a smalltalk index (i.e. 1-based).
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3670
     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
  3671
     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
  3672
     lower index) if msb is false, MSB-first otherwise"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3673
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3674
    |b1 b2
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3675
     iVal "{ Class: SmallInteger }"|
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3676
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3677
%{  /* NOCONTEXT */
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3678
    /*
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3679
     * handle the most common case fast ...
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3680
     */
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3681
    if (__isSmallInteger(byteIndex)) {
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3682
        unsigned char *cp;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3683
        INT sz;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3684
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3685
        __fetchBytePointerAndSize__(self, &cp, &sz);
19404
Claus Gittinger <cg@exept.de>
parents: 19402
diff changeset
  3686
        // printf("cp=%"_lx_"\n", (INT)cp);
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3687
        if (cp) {
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3688
            INT idx = __intVal(byteIndex) - 1;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3689
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3690
            if ((idx >= 0) && ((idx+1) < sz)) {
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3691
                cp += idx;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3692
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3693
                if (__isSmallInteger(anInteger)) {
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3694
                    INT __v = __intVal(anInteger);
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 (((unsigned INT)__v) > 0xFFFF) {
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3697
                        goto badArg;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3698
                    }
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3699
                    if (msb == false) { 
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3700
#if defined(__i386__) || (defined(__LSBFIRST__) && defined(UNALIGNED_FETCH_OK))
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3701
                        ((unsigned short *)cp)[0] = (unsigned short)__v;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3702
#else
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3703
                        cp[0] = __v & 0xFF;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3704
                        cp[1] = (__v >> 8) & 0xFF;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3705
#endif
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3706
                    } else {        
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3707
                        cp[0] = (__v >> 8) & 0xFF;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3708
                        cp[1] = __v & 0xFF;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3709
                    }
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3710
                    RETURN (anInteger);
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3711
                }
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3712
            }
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3713
        }
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3714
    }
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3715
  badArg: ;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3716
%}.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3717
    iVal := anInteger.
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3718
    ((iVal < 0) or:[iVal > 16rFFFF]) ifTrue:[
19046
Claus Gittinger <cg@exept.de>
parents: 18969
diff changeset
  3719
        ^ self elementBoundsError:iVal
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3720
    ].
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3721
    msb ifTrue:[
19046
Claus Gittinger <cg@exept.de>
parents: 18969
diff changeset
  3722
        b1 := ((iVal bitShift:-8) bitAnd:16rFF).
Claus Gittinger <cg@exept.de>
parents: 18969
diff changeset
  3723
        b2 := (iVal bitAnd:16rFF).
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3724
    ] ifFalse:[
19046
Claus Gittinger <cg@exept.de>
parents: 18969
diff changeset
  3725
        b1 := (iVal bitAnd:16rFF).
Claus Gittinger <cg@exept.de>
parents: 18969
diff changeset
  3726
        b2 := ((iVal bitShift:-8) bitAnd:16rFF).
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3727
    ].
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3728
    self byteAt:byteIndex   put:b1.
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3729
    self byteAt:byteIndex+1 put:b2.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3730
    ^ anInteger
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3731
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3732
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3733
     |b|
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3734
     b := ByteArray new:8.
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3735
     b unsignedInt16At:1 put:16r0102 MSB:false.
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3736
     b unsignedInt16At:3 put:16r0304 MSB:false.
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3737
     b unsignedInt16At:5 put:16r0102 MSB:true.
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3738
     b unsignedInt16At:7 put:16r0304 MSB:true.
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3739
     b inspect
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3740
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3741
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3742
    "Modified: / 21.1.1998 / 17:48:15 / cg"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3743
    "Modified: / 5.3.1998 / 11:52:28 / stefan"
19629
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3744
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3745
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3746
unsignedInt16AtLSB:byteIndex
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3747
    "return the 2-bytes starting at index as an unsigned Integer.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3748
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3749
     The value is retrieved with least significant byte first"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3750
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3751
    ^ self unsignedInt16At:byteIndex MSB:false
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3752
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
     |b|
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3755
     b := ByteArray new:2.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3756
     b wordAt:1 put:16rFFFE.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3757
     b unsignedInt16AtLSB:1.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3758
     b unsignedInt16AtMSB:1.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3759
    "
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3760
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3761
    "Modified: 1.7.1996 / 21:14:38 / cg"
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
unsignedInt16AtLSB:index put:anInteger
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3765
    "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
  3766
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3767
     The stored value must be in the range 0 .. 16rFFFF.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3768
     The value is stored with least significant byte first"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3769
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3770
    ^ self unsignedInt16At:index put:anInteger MSB:false
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3771
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
     |b|
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3774
     b := ByteArray new:4.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3775
     b unsignedInt16At:1 put:16r0102.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3776
     b unsignedInt16At:3 put:16r0304.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3777
     b inspect
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3778
    "
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3779
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3780
    "Created: / 5.3.1998 / 11:54:52 / stefan"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3781
    "Modified: / 5.3.1998 / 14:59:38 / stefan"
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
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3784
unsignedInt16AtMSB:byteIndex
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3785
    "return the 2-bytes starting at index as an unsigned Integer.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3786
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3787
     The value is retrieved with most significant byte first"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3788
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3789
    ^ self unsignedInt16At:byteIndex MSB:true
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3790
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
     |b|
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3793
     b := ByteArray new:2.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3794
     b wordAt:1 put:16rFFFF.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3795
     b signedWordAt:1
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3796
    "
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3797
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3798
    "Modified: 1.7.1996 / 21:14:38 / cg"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3799
!
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
unsignedInt16AtMSB:index put:anInteger
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3802
    "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
  3803
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3804
     The stored value must be in the range 0 .. 16rFFFF.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3805
     The value is stored with most significant byte first"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3806
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3807
    ^ self unsignedInt16At:index put:anInteger MSB:true
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3808
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3809
    "
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3810
     |b|
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3811
     b := ByteArray new:4.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3812
     b unsignedInt16At:1 put:16r0102.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3813
     b unsignedInt16At:3 put:16r0304.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3814
     b inspect
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3815
    "
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3816
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3817
    "Created: / 5.3.1998 / 11:54:52 / stefan"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3818
    "Modified: / 5.3.1998 / 14:59:38 / stefan"
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3819
! !
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3820
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3821
!UninterpretedBytes methodsFor:'accessing-strings'!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3822
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3823
stringAt:index
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3824
    "return a string starting at index up to the 0-byte.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3825
     The index is a smalltalk index (i.e. 1-based)."
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3826
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3827
    |stream i "{ Class: SmallInteger }" c|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3828
10676
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  3829
    stream := WriteStream on:(String new:40).
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3830
    i := index.
10676
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  3831
    [(c := self byteAt:i) ~~ 0] whileTrue:[
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3832
        stream nextPut:(Character value:c).
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3833
        i := i + 1.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3834
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3835
    ^ stream contents
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3836
10676
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  3837
    "
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3838
      #[71 72 73 74 75 76 77 0] stringAt:1
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3839
      #[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
  3840
      '1234567890' stringAt:2
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  3841
    "
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3842
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3843
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3844
stringAt:index put:aString
19196
1db38251aeb2 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19101
diff changeset
  3845
    "copy aString to the receiver, starting at index up to
7815
6bd3a60a6f0c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7814
diff changeset
  3846
     (and including) the 0-byte (which is always written).
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3847
     The index is a smalltalk index (i.e. 1-based)."
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3848
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3849
    |i "{ Class: SmallInteger }"|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3850
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3851
    i := index.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3852
    aString do:[:aChar |
19196
1db38251aeb2 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19101
diff changeset
  3853
        self byteAt:i put:aChar codePoint.
1db38251aeb2 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19101
diff changeset
  3854
        i := i + 1.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3855
    ].
10676
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  3856
    self byteAt:i put:0.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3857
    ^ aString
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3858
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3859
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3860
     |bytes|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3861
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3862
     bytes := ExternalBytes new:10.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3863
     bytes stringAt:1 put:'hello'.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3864
     1 to:bytes size do:[:i |
19196
1db38251aeb2 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19101
diff changeset
  3865
        Transcript showCR:(bytes at:i)
10676
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  3866
     ].
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  3867
    "
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  3868
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  3869
    "
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  3870
     (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
  3871
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3872
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3873
    "Created: / 21.1.1998 / 17:45:02 / cg"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3874
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3875
7812
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  3876
stringAt:index put:aString size:maxSize
19196
1db38251aeb2 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19101
diff changeset
  3877
    "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
  3878
     or (and including) the 0-byte, whichever is encountered first.
7815
6bd3a60a6f0c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7814
diff changeset
  3879
     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
  3880
     The index is a smalltalk index (i.e. 1-based)."
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  3881
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  3882
    |remaining "{ Class: SmallInteger }"
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  3883
     i         "{ Class: SmallInteger }"|
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  3884
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  3885
    remaining := maxSize.
7816
827f1cf51862 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7815
diff changeset
  3886
    remaining <= 0 ifTrue:[^ aString].
7812
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  3887
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  3888
    i := index.
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  3889
    aString do:[:aChar |
19196
1db38251aeb2 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19101
diff changeset
  3890
        self byteAt:i put:aChar codePoint.
1db38251aeb2 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19101
diff changeset
  3891
        i := i + 1.
1db38251aeb2 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19101
diff changeset
  3892
        remaining := remaining - 1.
1db38251aeb2 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19101
diff changeset
  3893
        remaining <= 0 ifTrue:[^ aString].
7812
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  3894
    ].
10676
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  3895
    self byteAt:i put:0.
7812
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  3896
    ^ aString
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  3897
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  3898
    "
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  3899
     |bytes|
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  3900
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  3901
     bytes := ExternalBytes new:10.
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  3902
     bytes stringAt:1 put:'hello' size:3.
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  3903
     1 to:bytes size do:[:i |
19196
1db38251aeb2 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19101
diff changeset
  3904
        Transcript showCR:(bytes at:i)
7812
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  3905
     ]
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  3906
    "
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  3907
    "
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  3908
     |bytes|
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  3909
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  3910
     bytes := ByteArray new:10 withAll:16rFF.
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  3911
     bytes stringAt:1 put:'he' size:3.
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  3912
     1 to:bytes size do:[:i |
19196
1db38251aeb2 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19101
diff changeset
  3913
        Transcript showCR:(bytes at:i)
7812
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  3914
     ]
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  3915
    "
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  3916
10676
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  3917
    "
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  3918
     (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
  3919
    "
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  3920
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  3921
7812
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  3922
    "Created: / 21.1.1998 / 17:45:02 / cg"
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  3923
!
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  3924
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3925
stringAt:index size:maxSize
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3926
    "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
  3927
     The index is a smalltalk index (i.e. 1-based)."
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3928
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3929
    |stream c
10676
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  3930
     max "{ Class: SmallInteger }"
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  3931
     start "{ Class: SmallInteger }"|
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3932
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3933
    stream := WriteStream on:(String new:maxSize).
10676
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  3934
    start := index.
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  3935
    max := start + maxSize - 1.
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  3936
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  3937
    start to:max do:[:eachIndex|
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3938
        c := self byteAt:eachIndex.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3939
        c == 0 ifTrue:[
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3940
            ^ stream contents
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3941
        ].
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  3942
        stream nextPut:(Character value:c).
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3943
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3944
    ^ stream contents
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3945
10676
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  3946
    "
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  3947
      #[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
  3948
      #[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
  3949
      '1234567890' stringAt:2 size:6
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  3950
    "
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3951
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3952
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3953
zeroByteStringAt:index maximumSize:count
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3954
    "extract a zeroByte-delimited string, given initial index and
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  3955
     maximum number of characters (bytes).
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  3956
     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
  3957
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3958
    |bytes endIndex idx|
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3959
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3960
    endIndex := self indexOf:0 startingAt:index.
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3961
    endIndex == 0 ifTrue:[
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3962
        endIndex := self size + 1
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3963
    ].
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3964
    endIndex := (endIndex min: (index + count)) - 1.
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3965
    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
  3966
    ^ bytes asString
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3967
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3968
    "
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3969
     #[ 1 2 3 4 5 6 7 8 ] zeroByteStringAt:2 maximumSize:10
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3970
     #[ 1 2 3 4 5 0 6 7 8 ] zeroByteStringAt:2 maximumSize:10
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3971
     #[ 1 2 3 4 5 0 6 7 8 ] zeroByteStringAt:2 maximumSize:3
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3972
     #[ 1 2 3 4 5 0 6 7 8 ] zeroByteStringAt:2 maximumSize:4
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3973
    "
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3974
! !
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3975
12951
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  3976
!UninterpretedBytes methodsFor:'converting'!
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  3977
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  3978
asExternalBytes
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  3979
    |sz bytes|
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  3980
14142
7a769e54130d changed:
Stefan Vogel <sv@exept.de>
parents: 14132
diff changeset
  3981
    sz := self byteSize.
12951
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  3982
    bytes := ExternalBytes unprotectedNew:sz.
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  3983
    bytes replaceBytesFrom:1 to:sz with:self startingAt:1.
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  3984
    ^ bytes
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  3985
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  3986
    "
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  3987
      #[1 2 3 4 5 6 7] asExternalBytes
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  3988
      'Hello World' asExternalBytes
14142
7a769e54130d changed:
Stefan Vogel <sv@exept.de>
parents: 14132
diff changeset
  3989
      'Hello World' asUnicodeString asExternalBytes
12951
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  3990
    "
14132
debafd18f04b added: #asUUID
Stefan Vogel <sv@exept.de>
parents: 14131
diff changeset
  3991
!
debafd18f04b added: #asUUID
Stefan Vogel <sv@exept.de>
parents: 14131
diff changeset
  3992
14155
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  3993
asExternalBytesUnprotected
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  3994
    "Like asExternalBytes, but does not register the bytes so
15836
cdf0d7258f9e class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15717
diff changeset
  3995
     bytes are GARBAGE-COLLECTED."
14155
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  3996
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  3997
    |bytes sz|
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  3998
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  3999
    sz := self byteSize.
15836
cdf0d7258f9e class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15717
diff changeset
  4000
    bytes := ExternalBytes unprotectedNew:sz.
14155
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4001
    bytes replaceFrom:1 to:sz with:self startingAt:1.
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4002
    ^ bytes
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4003
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4004
    "
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4005
     |x|
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4006
     x := 'fooBar' asExternalBytesUnprotected.
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4007
     ObjectMemory garbageCollect
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4008
    "
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4009
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4010
    "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
  4011
    "Modified: / 30-11-2013 / 11:42:21 / cg"
14155
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4012
!
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4013
18600
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  4014
asSingleByteString
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  4015
    "return the receiver converted to a 'normal' string.
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  4016
     Raises an error if unrepresentable characters are encountered.
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  4017
     See also: asSingleByteStringIfPossible and asSingleByteStringReplaceInvalidWith:"
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  4018
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  4019
    ^ String fromString:self
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  4020
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  4021
    "
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  4022
     #[60 61 62 63] asSingleByteString
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4023
     #[60 61 62 63] asExternalBytes  asSingleByteString
18969
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4024
     #[67 68 69 70] asIntegerArray asSingleByteString
18600
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  4025
     (Unicode16String with:(Character value:16rFF)) asSingleByteString
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  4026
     (Unicode16String with:(Character value:16rFFFF)) asSingleByteString
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  4027
    "
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  4028
!
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  4029
18969
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4030
asSingleByteStringIfPossible
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4031
    "if possible, return the receiver converted to a 'normal' string.
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4032
     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
  4033
     If not possible, the (wideString) receiver is returned."
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4034
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4035
    self containsNon8BitElements ifTrue:[^ self asString].
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4036
    ^ self asSingleByteString.
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4037
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4038
    "
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4039
     #[67 68 69 70] asSingleByteStringIfPossible
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4040
     #[67 68 69 70] asIntegerArray asSingleByteStringIfPossible
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4041
     'hello' asUnicodeString asSingleByteStringIfPossible
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4042
    "
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4043
!
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4044
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4045
asString
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4046
    "speed up string conversions"
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4047
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4048
    |size cls|
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4049
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4050
    cls := self class.
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4051
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4052
    (cls == ByteArray or:[cls == ImmutableByteArray or:[cls == ExternalBytes]]) ifTrue:[
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4053
        size := self size.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4054
        ^ (String uninitializedNew:size) replaceBytesFrom:1 to:size with:self startingAt:1.
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4055
    ].
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4056
    ^ super asString.
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4057
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4058
    "
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4059
      #[16r41 16r42 16r43] asString
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4060
      #[16r41 16r42 16r43] asExternalBytes asString
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4061
    "
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4062
!
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4063
14132
debafd18f04b added: #asUUID
Stefan Vogel <sv@exept.de>
parents: 14131
diff changeset
  4064
asUUID
debafd18f04b added: #asUUID
Stefan Vogel <sv@exept.de>
parents: 14131
diff changeset
  4065
    ^ UUID fromBytes:self
12951
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  4066
! !
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  4067
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4068
!UninterpretedBytes methodsFor:'encoding & decoding'!
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4069
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4070
utf8Decoded
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4071
    "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
  4072
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4073
    ^ CharacterArray decodeFromUTF8:self.
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4074
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4075
    "
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4076
     #[16rC8 16rA0] utf8Decoded
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4077
     #[16rC8 16rA0] asString utf8Decoded
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4078
     #[16rC8 16rA0] asExternalBytes utf8Decoded
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4079
     (Character value:16r220) utf8Encoded utf8Decoded
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4080
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4081
     (Character value:16r800) utf8Encoded
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4082
     (Character value:16r220) utf8Encoded utf8Decoded
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4083
    "
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4084
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4085
    "test:
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4086
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4087
      |utf8Encoding original readBack|
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4088
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4089
      1 to:16rFFFF do:[:ascii |
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4090
        original := (Character value:ascii) asString.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4091
        utf8Encoding := original utf8Encoded.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4092
        readBack := utf8Encoding utf8Decoded.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4093
        readBack = original ifFalse:[
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4094
            self halt
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4095
        ]
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4096
      ]
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4097
    "
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4098
!
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4099
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4100
utf8DecodedWithTwoByteCharactersReplacedBy:replacementCharacter
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4101
    "Interpreting myself as an UTF-8 representation, decode and return
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4102
     the decoded string. Suppress all 2-byte (above 16rFF) characters,
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4103
     and replace them with replacementCharacter"
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4104
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4105
    |in out c|
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4106
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4107
    self containsNon7BitAscii ifFalse:[
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4108
        ^ self asSingleByteString
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4109
    ].
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4110
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4111
    out := WriteStream on:(String uninitializedNew:self size * 3 // 2).
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4112
    in := self readStream.
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4113
    [in atEnd] whileFalse:[
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4114
        c := Character utf8DecodeFrom:in.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4115
        c codePoint > 16rFF ifTrue:[
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4116
            c := replacementCharacter
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4117
        ].
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4118
        out nextPut:c.
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4119
    ].
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4120
    ^ out contents
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4121
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4122
    "
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4123
     (Character value:16r220) utf8Encoded
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4124
        utf8DecodedWithTwoByteCharactersReplacedBy:(Character space)
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4125
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4126
     (Character value:16r220) utf8Encoded asExternalBytes copyButLast
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4127
        utf8DecodedWithTwoByteCharactersReplacedBy:(Character space)
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4128
    "
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4129
! !
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4130
4782
04a2ea1ad3a5 added replaceBytes...
Claus Gittinger <cg@exept.de>
parents: 4530
diff changeset
  4131
!UninterpretedBytes methodsFor:'filling & replacing'!
04a2ea1ad3a5 added replaceBytes...
Claus Gittinger <cg@exept.de>
parents: 4530
diff changeset
  4132
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4133
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
  4134
    "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
  4135
     like collection.
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4136
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4137
     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
  4138
     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
  4139
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4140
%{  /* NOCONTEXT */
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4141
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4142
    int nIndex, repNIndex;
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4143
    int startIndex, stopIndex;
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4144
    REGISTER unsigned char *src;
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4145
    REGISTER int repStartIndex;
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4146
    int repStopIndex, count;
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4147
    REGISTER unsigned char *dst;
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4148
    OBJ cls;
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4149
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4150
#ifndef NO_PRIM_BYTEARR
14082
8ee1315d35eb Revert to 1.81
Stefan Vogel <sv@exept.de>
parents: 14081
diff changeset
  4151
    if ((__isBytes(aCollection) || __isExternalBytesLike(aCollection))
14142
7a769e54130d changed:
Stefan Vogel <sv@exept.de>
parents: 14132
diff changeset
  4152
     && (__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
  4153
     && __bothSmallInteger(start, stop)
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4154
     && __isSmallInteger(repStart)) {
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4155
        startIndex = __intVal(start) - 1;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4156
        if (startIndex >= 0) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4157
            dst = (__ByteArrayInstPtr(self)->ba_element) + startIndex;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4158
            nIndex = __byteArraySize(self);
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4159
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4160
            if ((cls = __qClass(self)) != @global(ByteArray)) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4161
                int nInst;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4162
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4163
                nInst = __OBJS2BYTES__(__intVal(__ClassInstPtr(cls)->c_ninstvars));
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4164
                dst += nInst;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4165
                nIndex -= nInst;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4166
            }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4167
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4168
            stopIndex = __intVal(stop) - 1;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4169
            count = stopIndex - startIndex + 1;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4170
            if (count == 0) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4171
                RETURN ( self );
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4172
            }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4173
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4174
            if ((count > 0) && (stopIndex < nIndex)) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4175
                repStartIndex = __intVal(repStart) - 1;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4176
                if (repStartIndex >= 0) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4177
                    if (__isExternalBytesLike(aCollection)) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4178
                        OBJ sz;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4179
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4180
                        src = __externalAddressVal(aCollection);
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4181
                        if (src == 0) goto fallBack;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4182
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4183
                        sz = __externalBytesSize(aCollection);
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4184
                        if (__isSmallInteger(sz)) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4185
                            repNIndex = __smallIntegerVal(sz);
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4186
                        } else {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4187
                            repNIndex = repStopIndex+1; /* always enough */
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4188
                        }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4189
                        src = src + repStartIndex;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4190
                    } else {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4191
                        if (__isStringLike(aCollection)) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4192
                            repNIndex = __stringSize(aCollection);
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4193
                        } else {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4194
                            repNIndex = __qSize(aCollection) - OHDR_SIZE;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4195
                        }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4196
                        src = (__ByteArrayInstPtr(aCollection)->ba_element) + repStartIndex;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4197
                        if ((cls = __qClass(aCollection)) != @global(ByteArray)) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4198
                            int nInst;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4199
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4200
                            nInst = __OBJS2BYTES__(__intVal(__ClassInstPtr(cls)->c_ninstvars));
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4201
                            src += nInst;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4202
                            repNIndex -= nInst;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4203
                        }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4204
                    }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4205
                    repStopIndex = repStartIndex + (stopIndex - startIndex);
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4206
                    if (repStopIndex < repNIndex) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4207
                        if (aCollection == self) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4208
                            /* take care of overlapping copy */
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4209
                            if (src < dst) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4210
                                /* must do a reverse copy */
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4211
                                src += count;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4212
                                dst += count;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4213
                                while (count-- > 0) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4214
                                    *--dst = *--src;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4215
                                }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4216
                                RETURN ( self );
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4217
                            }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4218
                        }
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4219
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4220
# ifdef bcopy4
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4221
                        if (((unsigned INT)src & 3) == ((unsigned INT)dst & 3)) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4222
                            int nW;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4223
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4224
                            /* copy unaligned part */
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4225
                            while (count && ((unsigned INT)src & 3)) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4226
                                *dst++ = *src++;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4227
                                count--;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4228
                            }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4229
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4230
                            if (count > 0) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4231
                                /* copy aligned part */
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4232
                                nW = count >> 2;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4233
                                bcopy4(src, dst, nW);
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4234
                                if ((count = count & 3) != 0) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4235
                                    /* copy any remaining part */
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4236
                                    src += (nW<<2);
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4237
                                    dst += (nW<<2);
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4238
                                    while (count--) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4239
                                        *dst++ = *src++;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4240
                                    }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4241
                                }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4242
                            }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4243
                            RETURN ( self );
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4244
                        }
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4245
# else
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4246
#  if __POINTER_SIZE__ == 8
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4247
                        if (((unsigned INT)src & 7) == ((unsigned INT)dst & 7)) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4248
                            /* copy unaligned part */
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4249
                            while (count && ((unsigned INT)src & 7)) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4250
                                *dst++ = *src++;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4251
                                count--;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4252
                            }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4253
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4254
                            /* copy aligned part */
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4255
                            while (count >= 8) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4256
                                ((unsigned INT *)dst)[0] = ((unsigned INT *)src)[0];
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4257
                                dst += 8;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4258
                                src += 8;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4259
                                count -= 8;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4260
                            }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4261
                            while (count--) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4262
                                *dst++ = *src++;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4263
                            }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4264
                            RETURN ( self );
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4265
                        }
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4266
#  endif /* 64bit */
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4267
# endif /* bcopy4 */
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4268
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4269
# ifdef FAST_MEMCPY
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4270
                        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
  4271
# else
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4272
#  ifdef __UNROLL_LOOPS__
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4273
                        while (count >= 8) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4274
                            dst[0] = src[0]; dst[1] = src[1];
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4275
                            dst[2] = src[2]; dst[3] = src[3];
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4276
                            dst[4] = src[4]; dst[5] = src[5];
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4277
                            dst[6] = src[6]; dst[7] = src[7];
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4278
                            dst += 8; src += 8;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4279
                            count -= 8;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4280
                        }
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4281
#  endif /* __UNROLL_LOOPS__ */
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4282
                        while (count-- > 0) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4283
                            *dst++ = *src++;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4284
                        }
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4285
# endif
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4286
                        RETURN ( self );
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4287
                    }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4288
                }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4289
            }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4290
        }
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4291
    }
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4292
fallBack: ;
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4293
#endif
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4294
%}.
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4295
    "
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4296
     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
  4297
     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
  4298
    "
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4299
    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
  4300
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4301
    "
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4302
     #[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
  4303
        copy
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4304
            replaceFrom:1 to:8
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4305
            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
  4306
            startingAt:1
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4307
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4308
     #[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
  4309
        copy
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4310
            replaceFrom:3 to:10
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4311
            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
  4312
            startingAt:1
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4313
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4314
     #[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
  4315
        copy
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4316
            replaceFrom:3 to:4
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4317
            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
  4318
            startingAt:1
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4319
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4320
     #[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
  4321
        copy
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4322
            replaceFrom:0 to:9
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4323
            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
  4324
            startingAt:1
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4325
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4326
     #[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
  4327
        copy
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4328
            replaceFrom:1 to:10
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4329
            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
  4330
            startingAt:0
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4331
    "
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4332
!
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4333
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4334
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
  4335
    "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
  4336
     byte-array-like.
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4337
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4338
     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
  4339
     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
  4340
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4341
    ^ self
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4342
        replaceBytesFrom:startIndex
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4343
        to:(startIndex + replacementCollection size - repStartIndex)
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4344
        with:replacementCollection
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4345
        startingAt:repStartIndex
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4346
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4347
    "
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4348
     args:    startIndex            : <integer>
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4349
              replacementCollection : <collection of <bytes> >
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4350
              repStartIndex         : <integer>
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4351
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4352
     returns: self
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4353
    "
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4354
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4355
    "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
  4356
    "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
  4357
!
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4358
13902
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4359
replaceBytesWith:replacementCollection
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4360
    "replace elements from another collection, which must be byte-array-like.
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4361
     Replace stops at whichever collection is smaller.
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4362
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4363
     Notice: This operation modifies the receiver, NOT a copy;
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4364
     therefore the change may affect all others referencing the receiver."
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4365
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4366
    ^ self
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4367
        replaceBytesFrom:1
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4368
        to:(replacementCollection size min:self size)
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4369
        with:replacementCollection
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4370
        startingAt:1
13902
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4371
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4372
    "
15004
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  4373
     (ByteArray new:10) replaceBytesWith:'hello'
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  4374
     (ByteArray new:10) replaceBytesWith:'hello world bla bla bla'
13902
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4375
    "
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4376
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4377
    "Created: / 09-01-2012 / 16:18:10 / cg"
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4378
!
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4379
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4380
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
  4381
    "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
  4382
     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
  4383
     Return the receiver.
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4384
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4385
     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
  4386
     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
  4387
14131
3b0cb7751a71 changed: #replaceFrom:to:with:startingAt:
Claus Gittinger <cg@exept.de>
parents: 14082
diff changeset
  4388
    self class isBytes ifTrue:[
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4389
        ((aCollection class == self class)
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4390
         or:[aCollection isByteCollection]) ifTrue:[
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4391
            ^ self replaceBytesFrom:startIndex to:stopIndex with:aCollection startingAt:repStartIndex
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4392
        ].
7252
82cd08881a2a abstract replaceBytes fallback is required (lead to recursion)
Claus Gittinger <cg@exept.de>
parents: 7218
diff changeset
  4393
    ].
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4394
    ^ 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
  4395
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4396
    "
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4397
     args:    startIndex            : <integer>
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4398
              stopIndex             : <integer>
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4399
              replacementCollection : <collection of <bytes> >
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4400
              repStartIndex         : <integer>
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4401
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4402
     returns: self
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4403
    "
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4404
14131
3b0cb7751a71 changed: #replaceFrom:to:with:startingAt:
Claus Gittinger <cg@exept.de>
parents: 14082
diff changeset
  4405
    "Modified: / 08-05-2012 / 13:23:27 / cg"
4782
04a2ea1ad3a5 added replaceBytes...
Claus Gittinger <cg@exept.de>
parents: 4530
diff changeset
  4406
! !
04a2ea1ad3a5 added replaceBytes...
Claus Gittinger <cg@exept.de>
parents: 4530
diff changeset
  4407
12757
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4408
!UninterpretedBytes methodsFor:'hashing'!
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4409
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4410
computeXorHashFrom:startIndex to:endIndex
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4411
    "compute and answer the SmallInteger-Hash of the bytes
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4412
     from startIndex to endIndex.
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4413
     If endindex = 0 or endIndex > size, hash up the size.
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4414
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4415
     NOTE: startIndex and endIndex are only hints about what should be hashed.
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4416
           In fact, more bytes could be involved in hashing.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4417
           SO ARRAYS MUST BE EQUAL TO HASH TO THE SAME VALUE"
12757
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4418
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4419
    |w|
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4420
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4421
%{
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4422
    if (__bothSmallInteger(startIndex, endIndex)) {
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4423
        unsigned char *cp;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4424
        INT sz;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4425
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4426
        __fetchBytePointerAndSize__(self, &cp, &sz);
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4427
        if (cp) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4428
            INT sidx = ((unsigned INT)__smallIntegerVal(startIndex)) - 1;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4429
            INT eidx = ((unsigned INT)__smallIntegerVal(endIndex)) - 1;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4430
            unsigned char *ep;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4431
            unsigned INT hash = 0, hash2 = 0, carry;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4432
            int i;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4433
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4434
            if (eidx < 0 || eidx >= sz) eidx = sz - 1;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4435
            if (sidx > eidx) sidx = eidx;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4436
            if (sidx < 0) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4437
                RETURN(__mkSmallInteger(0));
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4438
            }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4439
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4440
            ep = cp + eidx;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4441
            cp += sidx;
12757
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4442
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4443
#if 0
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4444
            /*
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4445
             * On LSB-First (little endian) cpus,
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4446
             * this code does not produce the same result
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4447
             * if the same bytes are at different positions
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4448
             */
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4449
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4450
            if ((INT)cp & (sizeof(INT)-1)) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4451
                /* not aligned */
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4452
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4453
                for (i=0; cp <= ep; cp++) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4454
                    hash2 = (hash2 << 8) | *cp;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4455
                    if (++i == sizeof(INT)) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4456
                        hash ^= hash2;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4457
                        i = hash2 = 0;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4458
                    }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4459
                }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4460
            } else {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4461
                /* aligned */
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4462
                for (; cp+sizeof(INT) <= ep; cp += sizeof(INT)) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4463
                    hash ^= *(unsigned INT *)cp;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4464
                }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4465
                for (; cp <= ep; cp++) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4466
                    hash2 = (hash2 << 8) | *cp;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4467
                }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4468
            }
12757
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4469
#else
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4470
            for (i=0; cp <= ep-sizeof(INT); cp += sizeof(INT)) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4471
                hash2 = cp[0];
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4472
                hash2 = (hash2 << 8) | cp[1];
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4473
                hash2 = (hash2 << 8) | cp[2];
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4474
                hash2 = (hash2 << 8) | cp[3];
12757
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4475
#if __POINTER_SIZE__ == 8
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4476
                hash2 = (hash2 << 8) | cp[4];
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4477
                hash2 = (hash2 << 8) | cp[5];
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4478
                hash2 = (hash2 << 8) | cp[6];
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4479
                hash2 = (hash2 << 8) | cp[7];
12757
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4480
#endif
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4481
                /*
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4482
                 * multiply by large prime to scramble bits and
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4483
                 * to avoid a 0 result from
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4484
                 * #[1 2 3 4 1 2 3 4] computeXorHashFrom:1 to:8.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4485
                 */
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4486
                hash ^= (hash * 31415821) ^ hash2;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4487
            }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4488
            for (hash2 = 0; cp <= ep; cp++) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4489
                hash2 = (hash2 << 8) | *cp;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4490
            }
12757
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4491
#endif
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4492
            hash ^= (hash * 31415821) ^ hash2;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4493
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4494
            /*
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4495
             * fold the high bits not fitting into a SmallInteger
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4496
             */
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4497
            carry = hash & ~_MAX_INT;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4498
            if (carry) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4499
                hash = (hash & _MAX_INT) ^ (carry >> 8);
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4500
            }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4501
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4502
            RETURN(__mkSmallInteger(hash));
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4503
        }
12757
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4504
    }
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4505
%}.
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4506
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4507
    ^ self primitiveFailed
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4508
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4509
    "
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4510
     #[1 2 3 4] computeXorHashFrom:1 to:4.
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4511
     #[1 2 3 4] computeXorHashFrom:1 to:32.
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4512
     #[1 2 3 4] computeXorHashFrom:1 to:0.
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4513
     #[1 2 3 4 5] computeXorHashFrom:1 to:4.
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4514
     #[1 2 3 4 1 2 3 4] computeXorHashFrom:1 to:8.
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4515
     #[1 2 3 4 5 6 7 8] computeXorHashFrom:2 to:8.
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4516
     #[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
  4517
     #[2 3 4 5 6 7 8] computeXorHashFrom:1 to:8.
91ec8f105783 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19507
diff changeset
  4518
    "
91ec8f105783 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19507
diff changeset
  4519
!
91ec8f105783 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19507
diff changeset
  4520
91ec8f105783 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19507
diff changeset
  4521
hash
91ec8f105783 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19507
diff changeset
  4522
    |sz|
91ec8f105783 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19507
diff changeset
  4523
91ec8f105783 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19507
diff changeset
  4524
    sz := self size.
91ec8f105783 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19507
diff changeset
  4525
    sz <= 32 ifTrue:[
91ec8f105783 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19507
diff changeset
  4526
        ^ self computeXorHashFrom:1 to:sz.
91ec8f105783 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19507
diff changeset
  4527
    ].
91ec8f105783 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19507
diff changeset
  4528
    ^ (sz bitXor:(self computeXorHashFrom:1 to:16)) bitXor:(self computeXorHashFrom:sz-16 to:sz)   
91ec8f105783 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19507
diff changeset
  4529
91ec8f105783 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19507
diff changeset
  4530
    "
91ec8f105783 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19507
diff changeset
  4531
        #[1 2 3 4] hash
91ec8f105783 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19507
diff changeset
  4532
        #[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
  4533
          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
  4534
        #[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
  4535
          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
  4536
    "
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4537
! !
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4538
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4539
!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
  4540
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4541
copyReverse
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4542
    "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
  4543
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4544
    ^ self copy reverse
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4545
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4546
    "
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4547
     #[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
  4548
     #[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
  4549
    "
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4550
!
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4551
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4552
swapBytes
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4553
    "swap bytes (of int16s) inplace -
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4554
     Expects that the receiver has an even number of bytes;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4555
     if not, only the pairs excluding the last byte are swapped"
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4556
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4557
    |b1 lastIndex "{ Class: SmallInteger }"|
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4558
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4559
    lastIndex := self size-1.
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4560
    1 to:lastIndex by:2 do:[:idx |
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4561
        b1 := self byteAt:idx.
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4562
        self byteAt:idx put:(self byteAt:idx+1).
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4563
        self byteAt:idx+1 put:b1.
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4564
    ].
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4565
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4566
    "
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4567
     #[1 2 3 4 5] swapBytes
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4568
     #[1 2 3 4] swapBytes
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4569
    "
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4570
! !
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4571
14131
3b0cb7751a71 changed: #replaceFrom:to:with:startingAt:
Claus Gittinger <cg@exept.de>
parents: 14082
diff changeset
  4572
3363
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  4573
!UninterpretedBytes methodsFor:'misc'!
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  4574
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  4575
swapLongAt:byteIndex
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  4576
    "swap the byteOrder of a long.
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  4577
     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
  4578
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  4579
    |t|
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  4580
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  4581
    t := self byteAt:byteIndex.
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  4582
    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
  4583
    self byteAt:(byteIndex + 3) put:t.
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  4584
    t := self byteAt:(byteIndex + 1).
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  4585
    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
  4586
    self byteAt:(byteIndex + 2) put:t
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  4587
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  4588
    "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
  4589
! !
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  4590
18664
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4591
!UninterpretedBytes methodsFor:'printing & storing'!
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4592
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4593
hexPrintOn:aStream
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4594
    "print as hex string, eg: 'FF0243'.
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4595
     This string can be used in #fromHexString: to recreate the byteArray"
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4596
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4597
    self hexPrintOn:aStream withSeparator:nil
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4598
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4599
    "
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4600
      #[1 2 3 4 10 17] hexPrintOn:Transcript
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4601
    "
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4602
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4603
    "
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4604
     |s|
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4605
     s := String streamContents:[:s | #[1 2 3 4 10 17] hexPrintOn:s].
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4606
     ByteArray fromHexString:s
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4607
    "
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4608
!
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4609
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4610
hexPrintOn:aStream withSeparator:aSeparatorStringOrCharacterOrNil
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4611
    "print as hex string with separators, eg: 'FF:02:43'"
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4612
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4613
    |first|
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4614
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4615
    first := true.
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4616
    1 to:self size do:[:idx |
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4617
        aSeparatorStringOrCharacterOrNil notNil ifTrue:[
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4618
            first ifFalse:[
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4619
                aSeparatorStringOrCharacterOrNil printOn:aStream
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4620
            ] ifTrue:[
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4621
                first := false.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4622
            ].
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4623
        ].
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4624
        (self byteAt:idx) printOn:aStream base:16 size:2 fill:$0.
18664
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4625
    ].
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4626
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4627
    "
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4628
      #[1 2 3 4 10 17] hexPrintOn:Transcript withSeparator:$:
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4629
      #[1 2 3 4 10 17] hexPrintOn:Transcript withSeparator:(Character space)
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4630
      #[1 2 3 4 10 17] hexPrintOn:Transcript withSeparator:'-'
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4631
      #[1 2 3 4 10 17] hexPrintOn:Transcript withSeparator:nil
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4632
    "
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4633
!
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4634
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4635
hexPrintString
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4636
    "print as hex string, eg: 'FF0243'.
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4637
     This string can be used in #fromHexString: to recreate the byteArray"
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4638
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4639
    ^ self hexPrintStringWithSeparator:nil
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4640
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4641
    "
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4642
     #[1 2 3 4 10 17] hexPrintString
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4643
     ByteArray fromHexString:#[1 2 3 4 10 17] hexPrintString
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4644
    "
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4645
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4646
    "Modified: / 03-07-2010 / 01:59:19 / cg"
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4647
!
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4648
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4649
hexPrintStringWithSeparator:aSeparatorStringOrCharacterOrNil
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4650
    "print as hex string, eg: 'FF:02:43'."
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4651
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4652
    ^ String
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4653
        streamContents:[:s |
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4654
            self hexPrintOn:s withSeparator:aSeparatorStringOrCharacterOrNil.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4655
        ]
18664
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4656
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4657
    "
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4658
      #[1 2 3 4 10 17] hexPrintStringWithSeparator:$:
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4659
      #[1 2 3 4 10 17] hexPrintStringWithSeparator:Character space
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4660
      #[1 2 3 4 10 17] hexPrintStringWithSeparator:' - '
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4661
      #[1 2 3 4 10 17] hexPrintStringWithSeparator:nil
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4662
    "
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4663
! !
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4664
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4665
!UninterpretedBytes methodsFor:'private'!
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4666
18969
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4667
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
  4668
    "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
  4669
18969
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4670
    |srcIdx "{ Class:SmallInteger }"
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4671
     start "{ Class:SmallInteger }"
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4672
     stop "{ Class:SmallInteger }"|
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4673
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4674
    start := startArg.
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4675
    stop := stopArg.
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4676
    srcIdx := sourceIndex.
18969
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4677
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4678
    start to:stop do:[:dstIdx |
18969
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4679
        self at:dstIdx put:(sourceBytes at:srcIdx).
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4680
        srcIdx := srcIdx + 1
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4681
    ].
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4682
! !
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4683
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4684
!UninterpretedBytes methodsFor:'queries'!
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4685
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4686
containsNon7BitAscii
18969
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4687
    "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
  4688
     (i.e. if it is non-ascii)"
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4689
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4690
    |sz "{ Class:SmallInteger }"|
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4691
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4692
    sz := self size.
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4693
    1 to:sz do:[:idx|
18969
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4694
        (self at:idx) > 16r7F ifTrue:[
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4695
            ^ true.
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4696
        ].
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4697
    ].
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4698
    ^ false.
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4699
!
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4700
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4701
containsNon8BitElements
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4702
    "return true, if the underlying structure contains elements larger than a single byte"
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4703
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4704
    |sz "{ Class:SmallInteger }"|
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4705
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4706
    sz := self size.
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4707
    1 to:sz do:[:idx|
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4708
        (self at:idx) > 16rFF ifTrue:[
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4709
            ^ true.
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4710
        ].
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4711
    ].
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4712
    ^ false.
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4713
!
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4714
7218
b798be6d632f elementBoundsError -> elementBoundsError:
Claus Gittinger <cg@exept.de>
parents: 7197
diff changeset
  4715
defaultElement
b798be6d632f elementBoundsError -> elementBoundsError:
Claus Gittinger <cg@exept.de>
parents: 7197
diff changeset
  4716
    ^ 0
b798be6d632f elementBoundsError -> elementBoundsError:
Claus Gittinger <cg@exept.de>
parents: 7197
diff changeset
  4717
!
b798be6d632f elementBoundsError -> elementBoundsError:
Claus Gittinger <cg@exept.de>
parents: 7197
diff changeset
  4718
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4719
referencesAny:aCollection
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4720
    "redefined to speed up searching when many of my instances are present"
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4721
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4722
%{ /* NOCONTEXT */
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4723
    if (__mkSmallInteger(0) == __ClassInstPtr(__qClass(self))->c_ninstvars) {
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4724
        /* I am only bytes */
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4725
        RETURN(false)
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4726
    }
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4727
%}.
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4728
    ^ super referencesAny:aCollection
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4729
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4730
    "
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4731
        'abc' referencesAny:#()
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4732
    "
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4733
!
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4734
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4735
sizeInBytes
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4736
    "return the number of 8-bit bytes in the receiver.
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4737
     This is needed since subclasse may redefine #size (TwoByteString)"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4738
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4739
    ^ super size
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4740
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4741
    "Created: / 5.3.1998 / 10:41:13 / stefan"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4742
! !
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4743
8986
c2962d45eca0 new: #isByteCollection
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
  4744
!UninterpretedBytes methodsFor:'testing'!
c2962d45eca0 new: #isByteCollection
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
  4745
c2962d45eca0 new: #isByteCollection
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
  4746
isByteCollection
c2962d45eca0 new: #isByteCollection
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
  4747
    "return true, if the receiver has access methods for bytes;
c2962d45eca0 new: #isByteCollection
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
  4748
     true is returned here - the method is redefined from Object."
c2962d45eca0 new: #isByteCollection
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
  4749
c2962d45eca0 new: #isByteCollection
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
  4750
    ^ true
9005
b82aa6bdc487 #isNonByteCollection
Stefan Vogel <sv@exept.de>
parents: 8995
diff changeset
  4751
!
b82aa6bdc487 #isNonByteCollection
Stefan Vogel <sv@exept.de>
parents: 8995
diff changeset
  4752
b82aa6bdc487 #isNonByteCollection
Stefan Vogel <sv@exept.de>
parents: 8995
diff changeset
  4753
isNonByteCollection
b82aa6bdc487 #isNonByteCollection
Stefan Vogel <sv@exept.de>
parents: 8995
diff changeset
  4754
    "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
  4755
     false is returned here - the method is redefined from Collection."
b82aa6bdc487 #isNonByteCollection
Stefan Vogel <sv@exept.de>
parents: 8995
diff changeset
  4756
b82aa6bdc487 #isNonByteCollection
Stefan Vogel <sv@exept.de>
parents: 8995
diff changeset
  4757
    ^ false
8986
c2962d45eca0 new: #isByteCollection
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
  4758
! !
c2962d45eca0 new: #isByteCollection
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
  4759
11009
fb66915c5bb5 changed #acceptVisitor:with: - moved to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 10676
diff changeset
  4760
!UninterpretedBytes methodsFor:'visiting'!
fb66915c5bb5 changed #acceptVisitor:with: - moved to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 10676
diff changeset
  4761
fb66915c5bb5 changed #acceptVisitor:with: - moved to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 10676
diff changeset
  4762
acceptVisitor:aVisitor with:aParameter
16719
19b7ae0bbb49 comment/format only
Claus Gittinger <cg@exept.de>
parents: 16320
diff changeset
  4763
    "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
  4764
fb66915c5bb5 changed #acceptVisitor:with: - moved to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 10676
diff changeset
  4765
    ^ aVisitor visitByteArray:self with:aParameter
fb66915c5bb5 changed #acceptVisitor:with: - moved to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 10676
diff changeset
  4766
! !
fb66915c5bb5 changed #acceptVisitor:with: - moved to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 10676
diff changeset
  4767
695
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
  4768
!UninterpretedBytes class methodsFor:'documentation'!
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
  4769
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
  4770
version
18600
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  4771
    ^ '$Header$'
12253
c933c6fcdeef changed: #fromHexStringWithSeparators:
Claus Gittinger <cg@exept.de>
parents: 11973
diff changeset
  4772
!
c933c6fcdeef changed: #fromHexStringWithSeparators:
Claus Gittinger <cg@exept.de>
parents: 11973
diff changeset
  4773
c933c6fcdeef changed: #fromHexStringWithSeparators:
Claus Gittinger <cg@exept.de>
parents: 11973
diff changeset
  4774
version_CVS
18600
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  4775
    ^ '$Header$'
695
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
  4776
! !
15087
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  4777
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
  4778
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
  4779
UninterpretedBytes initialize!