UninterpretedBytes.st
author Claus Gittinger <cg@exept.de>
Mon, 14 Nov 2016 17:33:01 +0100
changeset 20961 a8e7825ad3c0
parent 20960 bdad938cfe9d
child 21024 8734987eb5c7
child 21320 8b0aaee195e6
permissions -rw-r--r--
#DOCUMENTATION by cg class: UninterpretedBytes changed: #pointerAt: #pointerAt:put: #pointerValueAt: category of: #pointerAt: #pointerAt:put: #pointerValueAt:
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
20961
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
     1
"{ Encoding: utf8 }"
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
     2
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
     3
"
a27a279701f8 Initial revision
claus
parents:
diff changeset
     4
 COPYRIGHT (c) 1993 by Claus Gittinger
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
     5
              All Rights Reserved
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
     6
a27a279701f8 Initial revision
claus
parents:
diff changeset
     7
 This software is furnished under a license and may be used
a27a279701f8 Initial revision
claus
parents:
diff changeset
     8
 only in accordance with the terms of that license and with the
a27a279701f8 Initial revision
claus
parents:
diff changeset
     9
 inclusion of the above copyright notice.   This software may not
a27a279701f8 Initial revision
claus
parents:
diff changeset
    10
 be provided or otherwise made available to, or used by, any
a27a279701f8 Initial revision
claus
parents:
diff changeset
    11
 other person.  No title to or ownership of the software is
a27a279701f8 Initial revision
claus
parents:
diff changeset
    12
 hereby transferred.
a27a279701f8 Initial revision
claus
parents:
diff changeset
    13
"
6492
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
    14
"{ Package: 'stx:libbasic' }"
61c212c8b3fb #pointerAt:put:
Stefan Vogel <sv@exept.de>
parents: 4782
diff changeset
    15
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
    16
"{ NameSpace: Smalltalk }"
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
    17
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
    18
ArrayedCollection subclass:#UninterpretedBytes
20372
aa0461b19c97 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20177
diff changeset
    19
	instanceVariableNames:''
aa0461b19c97 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20177
diff changeset
    20
	classVariableNames:'IsBigEndian'
aa0461b19c97 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20177
diff changeset
    21
	poolDictionaries:''
aa0461b19c97 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20177
diff changeset
    22
	category:'Collections-Abstract'
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    23
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    24
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    25
!UninterpretedBytes primitiveDefinitions!
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    26
%{
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    27
/*
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    28
 * Notice: I am abstract, and my subclasses may be anything.
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    29
 * Therefore, the code must always handle the fallback case
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    30
 * where the receiver is neither an ExternalBytes nor a ByteArray.
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    31
 * (which are, however, the most common)
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    32
 *
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    33
 * macro to fetch my byte address and size-in-bytes;
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    34
 * convenient for inline-C code.
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    35
 * (yes, C is bad ...)
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    36
 */
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    37
#define __fetchBytePointerAndSize__(o, pPtr, pSize) \
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    38
    {\
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    39
      if (__isNonNilObject(o)) { \
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
    40
        if (__isByteArrayLike(o)) { \
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
    41
          *(pPtr) = (unsigned char *)__ByteArrayInstPtr(o)->ba_element; \
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
    42
          *(pSize) = __byteArraySize(o); \
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
    43
        } else if (__qIsExternalBytesLike(o)) { \
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
    44
          OBJ __sz__ = __externalBytesSize(o); \
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
    45
          if (__isSmallInteger(__sz__)) { \
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
    46
            *(pSize) = __intVal(__sz__); \
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
    47
            *(pPtr) = (unsigned char *)(__externalBytesAddress(o)); \
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
    48
          } else { \
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
    49
            *(pSize) = 0; \
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
    50
            *(pPtr) = (unsigned char *)0; \
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
    51
          } \
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
    52
        } else { \
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
    53
            *(pSize) /* nInstBytes */ = OHDR_SIZE + __OBJS2BYTES__(__intVal(__ClassInstPtr(__qClass(o))->c_ninstvars)); \
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
    54
            *(pPtr) = (char *)(__InstPtr(self)) + *(pSize) /* nInstBytes */; \
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
    55
            *(pSize) = __qSize(self) - *(pSize) /* nInstBytes */; \
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
    56
        } \
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    57
      } else { \
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
    58
        *(pSize) = 0; \
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
    59
        *(pPtr) = (unsigned char *)0; \
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    60
      } \
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    61
    }
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    62
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    63
%}
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    64
! !
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    65
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
    66
!UninterpretedBytes class methodsFor:'documentation'!
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    67
88
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    68
copyright
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    69
"
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    70
 COPYRIGHT (c) 1993 by Claus Gittinger
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
    71
              All Rights Reserved
88
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    72
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    73
 This software is furnished under a license and may be used
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    74
 only in accordance with the terms of that license and with the
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    75
 inclusion of the above copyright notice.   This software may not
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    76
 be provided or otherwise made available to, or used by, any
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    77
 other person.  No title to or ownership of the software is
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    78
 hereby transferred.
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    79
"
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    80
!
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    81
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
    82
documentation
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
    83
"
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
    84
    UninterpretedBytes provides the common protocol for byte-storage
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
    85
    containers; concrete subclasses are
19101
8ccbefbc944d #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19047
diff changeset
    86
        ByteArray (which store the bytes within the Smalltalk object memory)
8ccbefbc944d #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19047
diff changeset
    87
        String    (knows that the bytes represent characters)
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
    88
    and
19101
8ccbefbc944d #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19047
diff changeset
    89
        ExternalBytes (which store the bytes in the malloc-heap).
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
    90
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
    91
    UninterpretedBytes itself is abstract, so no instances of it can be created.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
    92
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
    93
    [See also:]
19101
8ccbefbc944d #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19047
diff changeset
    94
        ByteArray String ExternalBytes
1294
e26bbb61f6b2 documentation
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
    95
e26bbb61f6b2 documentation
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
    96
    [author:]
19101
8ccbefbc944d #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19047
diff changeset
    97
        Claus Gittinger
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    98
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
    99
    [Notice:]
19101
8ccbefbc944d #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19047
diff changeset
   100
        Notice the confusion due to multiple methods with the same
8ccbefbc944d #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19047
diff changeset
   101
        functionality (i.e. 'xxxx:MSB:' vs. 'xxxx:bigEndian:').
8ccbefbc944d #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19047
diff changeset
   102
        The reason is that at the time this class was written,
8ccbefbc944d #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19047
diff changeset
   103
        ST80 did not offer protocol to specify the byteOrder, and
8ccbefbc944d #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19047
diff changeset
   104
        ST/X provided methods ending in 'MSB:' for this.
8ccbefbc944d #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19047
diff changeset
   105
        In the meanwhile, VW added protocol ending in 'bigEndian:',
8ccbefbc944d #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19047
diff changeset
   106
        which has been added here for compatibility.
8ccbefbc944d #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19047
diff changeset
   107
        (certainly a point, where an ansi-standard will help)
68
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   108
"
59faa75185ba *** empty log message ***
claus
parents: 63
diff changeset
   109
! !
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   110
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   111
!UninterpretedBytes class methodsFor:'initialization'!
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   112
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   113
initialize
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   114
    IsBigEndian := self isBigEndian.
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   115
! !
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   116
3363
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
   117
!UninterpretedBytes class methodsFor:'instance creation'!
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
   118
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   119
from:aByteArray
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   120
    "return new instance which is a copy of aByteArray"
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   121
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   122
    |len bytes|
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   123
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   124
    len := aByteArray size.
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   125
    bytes := self new:len.
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   126
    bytes replaceBytesFrom:1 to:len with:aByteArray startingAt:1.
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   127
    ^ bytes
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   128
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   129
    "
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   130
      String from:#[40 41 42]
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   131
      String with:#[40 41 42 43 44 45 46 47 48 49 50] from:2 to:5
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   132
    "
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   133
!
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   134
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   135
fromHexString:aString
15717
b05a01005030 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15087
diff changeset
   136
    "decode a byteArray from a hex string (as generated by hexPrintOn:)"
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   137
12551
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   138
    | sz bytes s hi lo |
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   139
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   140
    sz := aString size.
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   141
    sz == 0 ifTrue:[^ self new].
14970
319eeed62505 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 14224
diff changeset
   142
    sz odd ifTrue:[ ConversionError raiseWith:aString errorString:'invalid hex string (odd size)' ].
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   143
12551
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   144
    bytes := self new: sz // 2.
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   145
    s := aString readStream.
12551
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   146
    1 to: sz // 2 do: [ :idx |
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   147
        hi := s next digitValue.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   148
        lo := s next digitValue.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   149
        bytes at:idx put: ((hi bitShift:4) bitOr: lo)
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   150
    ].
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   151
    ^ bytes
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   152
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   153
    "
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   154
     ByteArray fromHexString:'1234FEFF'
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   155
     ExternalBytes fromHexString:'1234FEFF'
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   156
    "
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   157
    "
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   158
     |s|
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   159
     s := String streamContents:[:s | #[1 2 3] hexPrintOn:s].
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   160
     ByteArray fromHexString:s
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   161
    "
12551
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   162
    "
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   163
     Time millisecondsToRun:[
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   164
        1000000 timesRepeat:[ ByteArray fromHexString:'1234FEFF1234FEFF1234FEFF1234FEFF' ]
12551
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   165
     ].
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   166
    "
15717
b05a01005030 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15087
diff changeset
   167
b05a01005030 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15087
diff changeset
   168
    "Modified (comment): / 28-08-2013 / 20:40:04 / cg"
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   169
!
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   170
11874
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   171
fromHexStringWithSeparators:aString
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   172
    "read a bytearray from a printed string representation, where
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   173
     individual bytes are encoded as two hex digits, optionally separated by whiteSpace.
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   174
     See also fromHexString:, which does something similar, but does not allow for spaces"
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   175
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   176
    ^ self streamContents:[:outStream |
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   177
        |inStream h|
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   178
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   179
        inStream := aString readStream.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   180
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   181
        [
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   182
            inStream skipSeparators.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   183
            inStream atEnd
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   184
        ] whileFalse:[
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   185
            h := inStream next:2.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   186
            outStream nextPut:(Integer readFrom:h base:16).
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   187
        ].
11874
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   188
    ].
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   189
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   190
    "
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   191
     ByteArray fromHexString:'1234FEFF'
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   192
     ByteArray fromHexStringWithSeparators:'   12  34 FE FF'
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   193
    "
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   194
!
aebca3972774 +fromHexStringWithSeparators
Claus Gittinger <cg@exept.de>
parents: 11852
diff changeset
   195
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   196
fromPackedString:aString
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   197
    "ST-80 compatibility: decode a byteArray from a packed string in which
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   198
     6bits are encoded per character. The argument, aString must be a multiple
18633
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   199
     of 4 in size (since 24 is the lcm of 6 and 8).
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   200
     Every 6 bit packet is encoded as a character in 32..95.
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   201
     Characters below 32 are ignored (so line breaks can be inserted at any place).
18649
e9d831015328 fix: signedLongIntVal returns an INT
Claus Gittinger <cg@exept.de>
parents: 18633
diff changeset
   202
     An addition final byte defines how many bytes of the last triple are valid.
18633
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   203
     This is somewhat like the radix-encoding used in good old PDP11 times ;-)
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   204
     ST-80 uses this encoding for Images ...
16798
acfbeccbc226 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16796
diff changeset
   205
     This is a base64 encoding, very similar (but not equal) to the algorithm used in RFC1421.
18346
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   206
     PS: It took a while to figure that one out ...
18633
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   207
     PPS: I don't like it ;-)"
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   208
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   209
    |index    "{ Class: SmallInteger }"
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   210
     dstIndex "{ Class: SmallInteger }"
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   211
     stop     "{ Class: SmallInteger }"
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   212
     sixBits  "{ Class: SmallInteger }"
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   213
     n        "{ Class: SmallInteger }"
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   214
     sz       "{ Class: SmallInteger }"
12551
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   215
     last bytes|
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   216
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   217
    sz := aString size.
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   218
    sz == 0 ifTrue:[^ self new].
12551
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   219
    sz := sz - (aString count:[:ch | ch codePoint < 32]).
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   220
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   221
    stop := sz // 4 * 3.
12551
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   222
    "the size modulo 3 is encoded in the last character, if it is in the
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   223
     range 97 .. otherwise, its exact."
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   224
12551
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   225
    last := aString last codePoint.
55186abb1c0d changed:
Claus Gittinger <cg@exept.de>
parents: 12253
diff changeset
   226
    last > 96 ifTrue:[
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   227
        stop := stop - 3 + (last - 96)
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   228
    ].
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   229
    bytes := self new:stop.
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   230
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   231
    index := 1. dstIndex := 1.
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   232
    [dstIndex <= stop] whileTrue:[
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   233
        "/ take 4 characters ...
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   234
        "/ allow a line break before each group of 4
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   235
        sixBits := (aString at:index) codePoint.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   236
        [sixBits < 32] whileTrue:[
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   237
            index := index + 1.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   238
            sixBits := (aString at:index) codePoint.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   239
        ].
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   240
        sixBits := sixBits bitAnd:16r3F.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   241
        n := sixBits.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   242
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   243
        "/ self assert:(aString at:index+1) codePoint >= 32.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   244
        sixBits := (aString at:index+1) codePoint bitAnd:16r3F.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   245
        n := (n bitShift:6) + sixBits.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   246
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   247
        "/ self assert:(aString at:index+2) codePoint >= 32.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   248
        sixBits := (aString at:index+2) codePoint bitAnd:16r3F.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   249
        n := (n bitShift:6) + sixBits.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   250
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   251
        "/ self assert:(aString at:index+3) codePoint >= 32.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   252
        sixBits := (aString at:index+3) codePoint bitAnd:16r3F.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   253
        n := (n bitShift:6) + sixBits.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   254
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   255
        index := index + 4.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   256
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   257
        "/ now have 24 bits in n
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   258
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   259
        bytes at:dstIndex put:(n bitShift:-16).
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   260
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   261
        dstIndex < stop ifTrue:[
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   262
            bytes at:dstIndex+1 put:((n bitShift:-8) bitAnd:16rFF).
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   263
            dstIndex+2 <= stop ifTrue:[
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   264
                bytes at:dstIndex+2 put:(n bitAnd:16rFF).
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   265
            ]
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   266
        ].
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   267
        dstIndex := dstIndex + 3.
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   268
    ].
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   269
    ^ bytes
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   270
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   271
    "
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   272
     ByteArray fromPackedString:(#[1 1 1 1] asPackedString)
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   273
     ByteArray fromPackedString:(#[1 1 1 1 1] asPackedString)
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   274
     ByteArray fromPackedString:(#[1 1 1 1 1 1] asPackedString)
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   275
     ByteArray fromPackedString:(#[1 1 1 1 1 1 1] asPackedString)
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   276
     ByteArray fromPackedString:(#[1 1 1 1 1 1 1 1] asPackedString)
18633
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   277
     ByteArray fromPackedString:((ByteArray new:256) asPackedString)
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   278
     ByteArray fromPackedString:((ByteArray new:128) asPackedString)
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   279
     ByteArray fromPackedString:((ByteArray new:129) asPackedString)
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   280
     ByteArray fromPackedString:((ByteArray new:130) asPackedString)
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   281
     ByteArray fromPackedString:((ByteArray new:131) asPackedString)
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   282
     ByteArray fromPackedString:((ByteArray new:132) asPackedString)
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   283
     ByteArray fromPackedString:((ByteArray new:64) asPackedString)
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   284
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   285
     0 to:256 do:[:l |
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   286
        |orig copy|
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   287
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   288
        0 to:255 do:[:fill |
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   289
            orig := ByteArray new:l withAll:fill.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   290
            copy := ByteArray fromPackedString:(orig asPackedString).
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   291
            self assert:(orig = copy).
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   292
         ]
18633
3173e69ba4a4 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18616
diff changeset
   293
     ]
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   294
    "
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   295
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   296
    "Modified: / 6.3.1997 / 15:28:52 / cg"
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   297
    "Modified: / 18.12.1997 / 17:17:11 / stefan"
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   298
!
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   299
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   300
uninitializedNew:anInteger
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   301
    "return a new instance of the receiver with uninitialized
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   302
     (i.e. undefined) contents. The indexed elements have any random
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   303
     value. However, any named instance variables are still nilled.
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   304
     For use, when contents will be set anyway shortly after - this
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   305
     is a bit faster than the regular basicNew:, which clears the bytes.
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   306
     Of course, it only makes a difference for very big ByteArrays, such
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   307
     as used for images/bitmaps.
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   308
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   309
     Notice: if you want to port code using uninitializedNew: to another
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   310
     smalltalk, you have to add an 'uninitializedNew: -> basicNew:'-calling
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   311
     method to the ByteArray class of the other smalltalk."
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   312
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   313
%{  /* NOCONTEXT */
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   314
    OBJ newobj;
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   315
    INT instsize, nInstVars, nindexedinstvars;
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   316
    REGISTER OBJ *op;
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   317
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   318
    if (__isSmallInteger(anInteger)) {
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   319
        nindexedinstvars = __intVal(anInteger);
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   320
        if (nindexedinstvars >= 0) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   321
            if (self == ByteArray) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   322
                /*
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   323
                 * the most common case
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   324
                 */
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   325
                instsize = OHDR_SIZE + nindexedinstvars;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   326
                if (__CanDoQuickNew(instsize)) {        /* OBJECT ALLOCATION */
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   327
                    __qCheckedNew(newobj, instsize);
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   328
                    __InstPtr(newobj)->o_class = self;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   329
                    __qSTORE(newobj, self);
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   330
                    RETURN (newobj );
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   331
                }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   332
            } else {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   333
                /*
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   334
                 * Take care for subclasses like TwoByteString
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   335
                 */
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   336
                switch (__smallIntegerVal(__ClassInstPtr(self)->c_flags) & ARRAYMASK) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   337
                case BYTEARRAY:
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   338
                    break;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   339
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   340
                case WORDARRAY:
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   341
                case SWORDARRAY:
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   342
                    nindexedinstvars *= 2;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   343
                    break;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   344
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   345
                case LONGARRAY:
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   346
                case SLONGARRAY:
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   347
                    nindexedinstvars *= 4;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   348
                    break;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   349
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   350
                default:
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   351
                    /* don't know about this array type, delegate to super */
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   352
                    goto out;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   353
                }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   354
            }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   355
            nInstVars = __intVal(__ClassInstPtr(self)->c_ninstvars);
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   356
            instsize = OHDR_SIZE + __OBJS2BYTES__(nInstVars) + nindexedinstvars;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   357
            __PROTECT_CONTEXT__
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   358
            __qNew(newobj, instsize);   /* OBJECT ALLOCATION */
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   359
            __UNPROTECT_CONTEXT__
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   360
            if (newobj != nil) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   361
                __InstPtr(newobj)->o_class = self;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   362
                __qSTORE(newobj, self);
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   363
                if (nInstVars) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   364
                    /*
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   365
                     * still have to nil out named instvars ...
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   366
                     */
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   367
#if defined(memset4) && defined(FAST_OBJECT_MEMSET4)
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   368
                    memset4(__InstPtr(newobj)->i_instvars, nil, nInstVars);
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   369
#else
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   370
# if defined(FAST_MEMSET) && !defined(NEGATIVE_ADDRESSES)
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   371
                    /*
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   372
                     * knowing that nil is 0
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   373
                     */
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   374
                    memset(__InstPtr(newobj)->i_instvars, 0, instsize - OHDR_SIZE);
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   375
# else
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   376
                    op = __InstPtr(newobj)->i_instvars;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   377
                    while (nInstVars--)
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   378
                        *op++ = nil;
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   379
# endif
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   380
#endif
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   381
                }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   382
                RETURN ( newobj );
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   383
            }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   384
        }
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   385
    }
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   386
out:;
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   387
%}.
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   388
    ^ self basicNew:anInteger
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   389
!
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
   390
8995
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   391
with:aByteArray from:start to:stop
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   392
    "return new instance with a copy of aByteArray
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   393
     beginning at index start up to and including index stop"
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   394
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   395
    |len bytes|
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   396
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   397
    len := stop-start+1.
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   398
    bytes := self new:len.
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   399
    bytes replaceBytesFrom:1 to:len with:aByteArray startingAt:start.
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   400
    ^ bytes
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   401
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   402
    "
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   403
      String with:#[40 41 42 43 44 45 46 47 48 49 50] from:2 to:5
ab9905b339bb Moved some methods from ByteArray -> UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 8986
diff changeset
   404
    "
3363
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
   405
! !
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
   406
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   407
!UninterpretedBytes class methodsFor:'queries'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   408
8893
99996b25482e +isAbstract
Claus Gittinger <cg@exept.de>
parents: 8092
diff changeset
   409
isAbstract
11220
1ed300ff0d21 comment
Claus Gittinger <cg@exept.de>
parents: 11009
diff changeset
   410
    "Return if this class is an abstract class.
1ed300ff0d21 comment
Claus Gittinger <cg@exept.de>
parents: 11009
diff changeset
   411
     True is returned for UninterpretedBytes here; false for subclasses.
19461
7a4d28b76572 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19415
diff changeset
   412
     Abstract subclasses must redefine this again."
11220
1ed300ff0d21 comment
Claus Gittinger <cg@exept.de>
parents: 11009
diff changeset
   413
8893
99996b25482e +isAbstract
Claus Gittinger <cg@exept.de>
parents: 8092
diff changeset
   414
    ^ self == UninterpretedBytes
99996b25482e +isAbstract
Claus Gittinger <cg@exept.de>
parents: 8092
diff changeset
   415
!
99996b25482e +isAbstract
Claus Gittinger <cg@exept.de>
parents: 8092
diff changeset
   416
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   417
isBigEndian
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   418
    "return true, if words/shorts store the most-significant
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   419
     byte first (MSB), false if least-sign.-first (LSB).
4019
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
   420
     I.e. false for vax, intel; true for m68k, sun.
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
   421
c9284ca27a4a tuned some doubleWordAt methods;
Claus Gittinger <cg@exept.de>
parents: 3936
diff changeset
   422
     Notice: UninterpretedBytes isBigEndian
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   423
             this is inlined both by stc and the jit compiler"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   424
a27a279701f8 Initial revision
claus
parents:
diff changeset
   425
%{  /* NOCONTEXT */
a27a279701f8 Initial revision
claus
parents:
diff changeset
   426
8901
824a89d0b5c7 alpha64 vs. POINTER_SIZE cleanup
Claus Gittinger <cg@exept.de>
parents: 8893
diff changeset
   427
#if defined(__MSBFIRST__)
3936
dd8cd28d4a9b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3459
diff changeset
   428
    RETURN (true);
dd8cd28d4a9b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3459
diff changeset
   429
#else
8901
824a89d0b5c7 alpha64 vs. POINTER_SIZE cleanup
Claus Gittinger <cg@exept.de>
parents: 8893
diff changeset
   430
# if defined(__LSBFIRST__)
4275
9fc4a735a1d3 BFIRST stuff
Claus Gittinger <cg@exept.de>
parents: 4019
diff changeset
   431
    RETURN (false);
9fc4a735a1d3 BFIRST stuff
Claus Gittinger <cg@exept.de>
parents: 4019
diff changeset
   432
# else
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   433
    /*
20816
986549374231 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20595
diff changeset
   434
     * I don't like ifdefs - you always forget some ...
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   435
     * therefore we look into a structure at run-time.
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   436
     * (also, there are CPUs around [mips], where the byteorder
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   437
     *  is programmable, and which come in different flavours)
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   438
     *
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   439
     * NOTICE:
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
   440
     *    both the JIT and stc may inline this to a
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   441
     *    constant for systems where this is known.
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   442
     */
a27a279701f8 Initial revision
claus
parents:
diff changeset
   443
    union {
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   444
        unsigned int   u_l;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
   445
        char           u_c[sizeof(int)];
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   446
    } u;
a27a279701f8 Initial revision
claus
parents:
diff changeset
   447
a27a279701f8 Initial revision
claus
parents:
diff changeset
   448
    u.u_l = 0x87654321;
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   449
    if (u.u_c[0] == 0x21) RETURN (false);
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   450
    RETURN (true);
4275
9fc4a735a1d3 BFIRST stuff
Claus Gittinger <cg@exept.de>
parents: 4019
diff changeset
   451
# endif
3936
dd8cd28d4a9b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3459
diff changeset
   452
#endif
18346
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   453
%}.
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   454
    ^ false     "/ an arbitrary default
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
   455
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   456
    "
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   457
     UninterpretedBytes isBigEndian
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
   458
    "
3209
eff7ad7f0825 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3207
diff changeset
   459
!
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   460
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   461
isBuiltInClass
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   462
    "return true if this class is known by the run-time-system.
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
   463
     Here, true is returned, since UninterpretedBytes is the superclass of
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   464
     some builtIn classes (ByteArray & ExternalBytes)"
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   465
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   466
    ^ self == UninterpretedBytes
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   467
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
   468
    "Modified: / 23.4.1996 / 15:56:25 / cg"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
   469
    "Modified: / 5.3.1998 / 14:56:22 / stefan"
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   470
! !
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
   471
20961
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   472
!UninterpretedBytes methodsFor:'@ OLE Extensions'!
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   473
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   474
addressAtOffset: index0Based
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   475
    "Answer the bytes starting at index0Based (0 based offset)
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   476
     as anExternalAddress.  Answer nil if there is no address.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   477
     Notice: Offsets are zero relative."
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   478
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   479
    | address |
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   480
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   481
    address := self pointerValueAt: index0Based + 1.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   482
    ^ address = 0
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   483
        ifTrue: [ nil ]
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   484
        ifFalse: [ ExternalAddress newAddress: address  ]
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   485
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   486
    "Modified: / 30-03-2016 / 11:00:19 / cg"
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   487
!
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   488
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   489
addressAtOffset: index0Based put: anExternalAddress
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   490
    "Set the bytes starting at index0Based (0 based offset)
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   491
     from the contents of anExternalAddress.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   492
     Notice: Offsets are zero relative."
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   493
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   494
    |anAddress |
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   495
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   496
    anAddress := anExternalAddress isNil
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   497
        ifTrue:[0]
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   498
        ifFalse:[anExternalAddress address].
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   499
    self pointerAt: index0Based + 1 put: anAddress
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   500
!
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   501
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   502
addressValueAtOffset: index0Based
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   503
    "Answer the pointer-value starting at index0Based (0 based offset)
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   504
     as unsigned integer.  
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   505
     Notice: Offsets are zero relative."
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   506
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   507
    ^ self pointerValueAt: index0Based + 1.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   508
!
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   509
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   510
addressValueAtOffset: index0Based put:anAddress
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   511
    "Set the pointer-value starting at index0Based (0 based offset)
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   512
     as unsigned integer.  
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   513
     Notice: Offsets are zero relative."
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   514
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   515
    self pointerAt: index0Based + 1 put:anAddress.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   516
!
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   517
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   518
byteAtOffset:index0Based
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   519
    "return the byte at index0Based.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   520
     For ByteArray, this is the same as basicAt:
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   521
     however, for strings or symbols, 
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   522
     this returns a numeric byteValue instead of a character.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   523
     Notice: Offsets are zero relative."
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   524
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   525
    ^ self byteAt:(index0Based + 1)
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   526
!
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   527
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   528
byteAtOffset:index0Based put:value
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   529
    "set the byte at index. For ByteArray, this is the same as basicAt:put:.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   530
     However, for Strings, this expects a byteValue to be stored.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   531
     Notice: Offsets are zero relative."
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   532
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   533
    ^ self byteAt:(index0Based + 1) put:value
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   534
!
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   535
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   536
bytesAtOffset: index0Based count: count
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   537
    "Answer a ByteArray with count bytes copied
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   538
     from the receiver starting at index0Based.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   539
     Notice: Offsets are zero relative."
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   540
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   541
    |newBytes |
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   542
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   543
    newBytes := ByteArray new: count.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   544
    newBytes replaceBytesFrom:1 to:count with:self startingAt:(index0Based + 1).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   545
    ^newBytes
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   546
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   547
    "
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   548
     #[83 0 0 0 0 0 0 0 120 237 14 0 4 0 0 ] bytesAtOffset: 9 count: 3 
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   549
    "
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   550
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   551
    "Modified (comment): / 30-03-2016 / 11:24:41 / cg"
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   552
!
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   553
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   554
bytesAtOffset: index0Based put: aByteObject
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   555
    "Store aByteObject at anInteger in the receiver.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   556
     Notice: Offsets are zero relative."
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   557
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   558
    ^ self
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   559
        replaceBytesFrom:(index0Based + 1) to:(index0Based + aByteObject size)
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   560
        with:aByteObject startingAt:1.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   561
!
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   562
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   563
fillFromAddress: anAddress
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   564
    "Fill the receiver by copying mySize bytes from host memory at anAddress.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   565
     Warning: because anAddress might not know, how big it is,
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   566
     the size of the receiver must already be correct.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   567
     (i.e. the receiver must have been allocated from a returned size value)"
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   568
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   569
    self 
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   570
        replaceFrom:1 to:self size
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   571
        with:anAddress asExternalBytes
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   572
        startingAt:1
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   573
!
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   574
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   575
longAtOffset: index0Based
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   576
    "same as longAt:, but with a 0-based offset.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   577
     Notice: Offsets are zero relative."
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   578
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   579
    ^self signedInt32At:(index0Based + 1)
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   580
!
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   581
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   582
longAtOffset: index0Based put: value
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   583
    "same as longAtput::, but with a 0-based offset.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   584
     Notice: Offsets are zero relative."
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   585
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   586
    ^self signedInt32At:index0Based +1 put:value
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   587
!
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   588
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   589
shortAtOffset: index0Based
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   590
    "same as shortAt:, but with a 0-based offset.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   591
     Notice: Offsets are zero relative."
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   592
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   593
    ^self signedInt16At: index0Based + 1
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   594
!
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   595
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   596
shortAtOffset: index0Based put: value
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   597
    "same as shortAt:put:, but with a 0-based offset.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   598
     Notice: Offsets are zero relative."
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   599
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   600
    ^self signedInt16At: index0Based + 1 put: value
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   601
!
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   602
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   603
uLongAtOffset: index0Based
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   604
    "same as unsignedLongAt:, but with a 0-based offset.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   605
     Notice: Offsets are zero relative."
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   606
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   607
    ^ self unsignedInt32At:(index0Based + 1)
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   608
!
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   609
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   610
uLongAtOffset: index0Based put: value
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   611
    "same as unsignedLongAt:put:, but with a 0-based offset.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   612
     Notice: Offsets are zero relative."
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   613
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   614
    ^ self unsignedInt32At:(index0Based + 1) put: value
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   615
!
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   616
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   617
uShortAtOffset: index0Based
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   618
    "same as unsignedShortAt:, but with a 0-based offset.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   619
     Notice: Offsets are zero relative."
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   620
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   621
    ^ self unsignedInt16At:(index0Based + 1)
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   622
!
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   623
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   624
uShortAtOffset: index0Based put: value
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   625
    "same as unsignedShortAt:put:, but with a 0-based offset.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   626
     Notice: Offsets are zero relative."
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   627
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   628
    ^ self unsignedInt16At:(index0Based + 1) put: value
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   629
!
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   630
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   631
unsignedLongAtOffset: index0Based
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   632
    "same as unsignedLongAt:, but with a 0-based offset.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   633
     Notice: Offsets are zero relative."
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   634
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   635
    ^self unsignedInt32At: index0Based + 1
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   636
!
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   637
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   638
unsignedLongAtOffset: index0Based put: value
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   639
    "same as unsignedLongAt:put:, but with a 0-based offset.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   640
     Notice: Offsets are zero relative."
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   641
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   642
    ^self unsignedInt32At: index0Based + 1 put: value
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   643
!
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   644
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   645
unsignedShortAtOffset: index0Based
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   646
    "same as unsignedShortAt:, but with a 0-based offset.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   647
     Notice: Offsets are zero relative."
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   648
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   649
    ^self unsignedInt16At: index0Based + 1
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   650
!
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   651
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   652
unsignedShortAtOffset: index0Based put: value
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   653
    "same as unsignedShortAt:put:, but with a 0-based offset.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   654
     Notice: Offsets are zero relative."
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   655
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   656
    ^self unsignedInt16At:(index0Based + 1) put: value
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   657
! !
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   658
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   659
!UninterpretedBytes methodsFor:'Compatibility'!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   660
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   661
doubleWordAt:index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   662
    "return the 4-bytes starting at index as an (unsigned) Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   663
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   664
     The value is retrieved in the machines natural byte order."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   665
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   666
    ^ self unsignedInt32At:index MSB:IsBigEndian
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
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   670
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   671
     b := ByteArray withAll:#(1 2 3 4).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   672
     (b doubleWordAt:1) printStringRadix:16
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   673
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   674
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   675
    "Modified: / 5.3.1998 / 14:57:35 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   676
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   677
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   678
doubleWordAt:index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   679
    "return the 4-bytes starting at index as an (unsigned) Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   680
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   681
     The value is retrieved MSB-first, if the msb-arg is true;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   682
     LSB-first otherwise."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   683
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   684
    ^ self unsignedInt32At:index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   685
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   686
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   687
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   688
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   689
     b := ByteArray withAll:#(1 2 3 4).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   690
     (b doubleWordAt:1 MSB:true) printStringRadix:16.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   691
     (b doubleWordAt:1 MSB:false) printStringRadix:16
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   692
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   693
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   694
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   695
doubleWordAt:byteIndex put:anInteger
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   696
    "set the 4-bytes starting at index from the (unsigned) Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   697
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   698
     The value should be in the range 0 to 16rFFFFFFFF
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   699
     (for negative values, the stored value is not defined).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   700
     The value is stored in the machines natural byte order."
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 unsignedInt32At:byteIndex put:anInteger MSB:IsBigEndian
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 doubleWordAt:1 put:16r04030201.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   708
     b inspect
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: / 5.3.1998 / 14:57:48 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   712
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   713
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   714
doubleWordAt:byteIndex put:anInteger MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   715
    "set the 4-bytes starting at index from the (unsigned) Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   716
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   717
     The value must be in the range 0 to 16rFFFFFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   718
     The value is stored MSB-first if msb is true; LSB-first otherwise."
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 unsignedInt32At:byteIndex put:anInteger MSB:msb
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:8.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   725
     b doubleWordAt:1 put:16r04030201 MSB:true.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   726
     b doubleWordAt:5 put:16r04030201 MSB:false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   727
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   728
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   729
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   730
    "Modified: / 21.1.1998 / 17:43:34 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   731
    "Modified: / 5.3.1998 / 11:42:17 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   732
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   733
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   734
doubleWordAtDoubleWordIndex:int32Index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   735
    "return the unsigned long (int32) at index, anInteger.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   736
     Fetching in the machine's natural byte order.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   737
     Indices are 1-based and scaled as appropriate to allow
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   738
     accessing the memory as an array of doubleWord entries.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   739
     (i.e. indices are 1, 2, ...)"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   740
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   741
    ^ self doubleWordAtDoubleWordIndex:int32Index MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   742
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   743
    "Created: / 21.1.1998 / 17:43:53 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   744
    "Modified: / 5.3.1998 / 14:58:06 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   745
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   746
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   747
doubleWordAtDoubleWordIndex:int32Index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   748
    "return the unsigned long (int32) at index, anInteger.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   749
     Fetching is MSB if msb is true, LSB otherwise.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   750
     Indices are 1-based and scaled as appropriate to allow
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   751
     accessing the memory as an array of doubleWord entries.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   752
     (i.e. indices are 1, 2, ...)"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   753
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   754
    ^ self unsignedInt32At:((int32Index - 1) * 4 + 1) MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   755
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   756
    "Created: / 21.1.1998 / 17:44:07 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   757
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   758
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   759
doubleWordAtDoubleWordIndex:int32Index put:anInteger
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   760
    "set the long at index, anInteger.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   761
     Storing in the machines natural byte order.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   762
     Indices are 1-based and scaled as appropriate to allow
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   763
     accessing the memory as an array of doubleWord entries.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   764
     (i.e. indices are 1, 2, ...)"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   765
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   766
    ^ self doubleWordAtDoubleWordIndex:int32Index put:anInteger MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   767
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   768
    "Created: / 21.1.1998 / 17:44:13 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   769
    "Modified: / 5.3.1998 / 14:58:19 / stefan"
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
doubleWordAtDoubleWordIndex:int32Index put:anInteger MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   773
    "set the long at index, anInteger.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   774
     Storing is MSB if msb is true, LSB otherwise.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   775
     Indices are 1-based and scaled as appropriate to allow
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   776
     accessing the memory as an array of doubleWord entries.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   777
     (i.e. indices are 1, 2, ...)"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   778
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   779
    ^ self unsignedInt32At:((int32Index - 1) * 4 + 1) put:anInteger MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   780
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   781
    "Created: / 21.1.1998 / 17:44:19 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   782
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   783
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   784
int16At:byteIndex
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   785
    "return the 2-bytes starting at index as a signed Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   786
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   787
     The value is retrieved in the machines natural byte order.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   788
     This may be worth a primitive."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   789
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   790
    ^ self signedInt16At:byteIndex
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   791
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   792
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   793
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   794
     b := ByteArray new:2.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   795
     b wordAt:1 put:16rFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   796
     b signedWordAt:1
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   797
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   798
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   799
    "Modified: 1.7.1996 / 21:14:38 / 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
int16At:byteIndex MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   803
    "return the 2-bytes starting at index as a signed 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
     The value is retrieved in the machines natural byte order.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   806
     This may be worth a primitive."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   807
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   808
    ^ self signedInt16At:byteIndex MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   809
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   810
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   811
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   812
     b := ByteArray new:2.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   813
     b wordAt:1 put:16rFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   814
     b signedWordAt:1
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   815
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   816
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   817
    "Modified: 1.7.1996 / 21:14:38 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   818
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   819
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   820
int16At:index put:anInteger
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   821
    "set the 2-bytes starting at index from the signed Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   822
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   823
     The stored value must be in the range -32768 .. +32676.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   824
     The value is stored in the machine's natural byteorder"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   825
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   826
    ^ self signedInt16At:index put:anInteger MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   827
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   828
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   829
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   830
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   831
     b shortAt:1 put:1 bigEndian:true.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   832
     b shortAt:3 put:1 bigEndian:false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   833
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   834
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   835
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   836
    "Modified: / 1.7.1996 / 21:12:07 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   837
    "Created: / 5.3.1998 / 11:02:05 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   838
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   839
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   840
int16At:index put:anInteger MSB:bigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   841
    "set the 2-bytes starting at index from the signed Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   842
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   843
     The stored value must be in the range -32768 .. +32676.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   844
     The value is stored in the byteorder given by bigEndian.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   845
     This may be worth a primitive."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   846
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   847
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   848
    ^ self signedInt16At:index put:anInteger MSB:bigEndian
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
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   852
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   853
     b shortAt:1 put:1 bigEndian:true.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   854
     b shortAt:3 put:1 bigEndian:false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   855
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   856
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   857
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   858
    "Modified: / 1.7.1996 / 21:12:07 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   859
    "Created: / 5.3.1998 / 11:02:05 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   860
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   861
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   862
longAt:index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   863
    "return the 4-bytes starting at index as a signed Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   864
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   865
     The value is retrieved in the machines natural byte order,
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   866
     therefore, this should only be used for byte-data which is
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   867
     only used inside this machine.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   868
     To setup data packets which are to be sent to other machines,
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   869
     or stored into a file, always use longAt:MSB: and specify
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   870
     a definite byteOrder."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   871
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   872
    ^ self signedInt32At:index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   873
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   874
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   875
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   876
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   877
     b unsignedLongAt:1 put:16rFFFFFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   878
     (b longAt:1)
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   879
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   880
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   881
    "Modified: / 1.7.1996 / 21:11:28 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   882
    "Modified: / 5.3.1998 / 12:06:28 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   883
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   884
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   885
longAt:index bigEndian:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   886
    "return the 4-bytes starting at index as a signed Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   887
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   888
     Depending on msb, the value is retrieved MSB-first or LSB-first.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   889
     This may be worth a primitive."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   890
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   891
    ^ self signedInt32At:index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   892
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   893
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   894
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   895
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   896
     b unsignedLongAt:1 put:16rFFFFFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   897
     (b longAt:1)
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   898
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   899
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   900
    "Modified: / 1.7.1996 / 21:11:33 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   901
    "Created: / 5.3.1998 / 14:02:03 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   902
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   903
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   904
longAt:index put:value
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   905
    "set the 4-bytes starting at index from the signed Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   906
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   907
     The value is stored in the machine's natural byte order."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   908
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   909
    ^ self signedInt32At:index put:value MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   910
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   911
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   912
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   913
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   914
     b longAt:1 put:-1.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   915
     (b unsignedLongAt:1) printStringRadix:16
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   916
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   917
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   918
    "Modified: / 1.7.1996 / 21:11:39 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   919
    "Created: / 5.3.1998 / 10:57:18 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   920
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   921
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   922
longAt:byteIndex put:anInteger bigEndian:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   923
    "store a signed long (32bit) integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   924
     The index is a smalltalk index (i.e. 1-based)."
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:byteIndex put:anInteger MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   927
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   928
    "Created: / 9.5.1998 / 01:10:24 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   929
    "Modified: / 9.5.1998 / 01:13:34 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   930
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   931
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   932
longLongAt:index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   933
    "return the 8-bytes starting at index as a signed Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   934
     The index is a smalltalk index (i.e. 1-based).
20961
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
   935
     The value is retrieved in the machineÄs natural byte order.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   936
     This may be worth a primitive."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   937
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   938
    ^ self signedInt64At:index MSB:IsBigEndian
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
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   942
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   943
     b unsignedLongLongAt:1 put:16rFFFFFFFFFFFFFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   944
     (b longLongAt:1)
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   945
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   946
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   947
    "Modified: / 1.7.1996 / 21:11:28 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   948
    "Created: / 5.3.1998 / 14:40:05 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   949
    "Modified: / 5.3.1998 / 14:58:32 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   950
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   951
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   952
longLongAt:index bigEndian:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   953
    "return the 8-bytes starting at index as a signed Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   954
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   955
     The value is retrieved in the given byte order.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   956
     This may be worth a primitive."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   957
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   958
    ^ self signedInt64At:index MSB:msb
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
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   962
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   963
     b unsignedLongLongAt:1 put:16rFFFFFFFFFFFFFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   964
     (b longLongAt:1 msb:true)
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   965
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   966
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   967
    "Modified: / 5.3.1998 / 12:06:28 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   968
    "Created: / 5.3.1998 / 14:40:54 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   969
    "Modified: / 9.5.1998 / 01:10:59 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   970
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   971
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   972
longLongAt:byteIndex put:anInteger
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   973
    "store a signed longLong (64bit) integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   974
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   975
     Same as #signedQuadWordAt:put: - for ST80 compatibility."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   976
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   977
    ^ self signedInt64At:byteIndex put:anInteger MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   978
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   979
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   980
longLongAt:byteIndex put:anInteger bigEndian:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   981
    "store a signed longLong (64bit) integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   982
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   983
     Same as #signedQuadWordAt:put: - for ST80 compatibility."
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 signedInt64At:byteIndex put:anInteger 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
    "Created: / 9.5.1998 / 01:10:24 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   988
    "Modified: / 9.5.1998 / 01:13:34 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   989
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   990
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   991
quadWordAt:index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   992
    "return the 8-bytes starting at index as an (unsigned) Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   993
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   994
     Depending on msb, the value is retrieved MSB or LSB-first."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   995
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   996
   ^ self unsignedInt64At:index MSB:msb 
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   997
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   998
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
   999
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1000
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1001
     b := ByteArray withAll:#(1 2 3 4 5 6 7 8).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1002
     (b quadWordAt:1 MSB:false) printStringRadix:16
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1003
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1004
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1005
    "Modified: 5.11.1996 / 14:06:21 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1006
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1007
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1008
quadWordAt:index put:anInteger MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1009
    "set the 8-bytes starting at index from the (unsigned) Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1010
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1011
     The value must be in the range 0 to 16rFFFFFFFFFFFFFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1012
     Depending on msb, the value is stored MSB-first or LSB-first."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1013
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1014
    ^ self unsignedInt64At:index put:anInteger MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1015
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1016
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1017
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1018
     b := ByteArray new:8.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1019
     b quadWordAtIndex:1 put:16r0807060504030201 MSB:false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1020
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1021
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1022
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1023
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1024
shortAt:index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1025
    "return the 2-bytes starting at index as a signed Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1026
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1027
     The value is retrieved in the machines natural byte order.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1028
     This may be worth a primitive.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1029
     This is the ST80 equivalent of #signedWordAt:"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1030
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  1031
    ^ self signedInt16At:index MSB:IsBigEndian
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1032
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1033
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1034
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1035
     b := ByteArray new:2.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1036
     b unsignedShortAt:1 put:16rFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1037
     b shortAt:1
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
    "Modified: / 1.7.1996 / 21:14:38 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1041
    "Created: / 5.3.1998 / 10:59:57 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1042
    "Modified: / 5.3.1998 / 23:39:38 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1043
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1044
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1045
shortAt:index bigEndian:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1046
    "return the 2-bytes starting at index as a signed Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1047
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1048
     The value is retrieved MSB-first, if the msb-arg is true;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1049
     LSB-first otherwise.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1050
     This is the ST80 equivalent of #signedWordAt:"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1051
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  1052
    ^ self signedInt16At:index MSB:msb
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1053
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1054
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1055
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1056
     b := ByteArray new:2.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1057
     b unsignedShortAt:1 put:16rFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1058
     b shortAt:1
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1059
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1060
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1061
    "Modified: / 1.7.1996 / 21:14:38 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1062
    "Created: / 5.3.1998 / 23:41:21 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1063
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1064
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1065
shortAt:index put:value
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1066
    "set the 2-bytes starting at index from the signed Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1067
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1068
     The stored value must be in the range -32768 .. +32676.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1069
     The value is stored in the machines natural byteorder.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1070
     This may be worth a primitive.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1071
     This is the ST80 equivalent of #signedWordAt:put:"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1072
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1073
    ^ self signedInt16At:index put:value MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1074
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1075
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1076
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1077
     b := ByteArray new:6.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1078
     b shortAt:1 put:-1.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1079
     b shortAt:3 put:-2.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1080
     b shortAt:5 put:0.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1081
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1082
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1083
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1084
    "Modified: / 1.7.1996 / 21:12:07 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1085
    "Created: / 5.3.1998 / 11:02:05 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1086
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1087
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1088
shortAt:index put:value bigEndian:bigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1089
    "set the 2-bytes starting at index from the signed Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1090
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1091
     The stored value must be in the range -32768 .. +32676.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1092
     The value is stored in the byteorder given by bigEndian.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1093
     This may be worth a primitive."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1094
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1095
    ^ self signedInt16At:index put:value MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1096
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1097
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1098
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1099
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1100
     b shortAt:1 put:1 bigEndian:true.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1101
     b shortAt:3 put:1 bigEndian:false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1102
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1103
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1104
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1105
    "Modified: / 1.7.1996 / 21:12:07 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1106
    "Created: / 5.3.1998 / 11:02:05 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1107
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1108
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1109
signedDoubleWordAt:index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1110
    "return the 4-bytes starting at index as a signed Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1111
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1112
     The value is retrieved in the machines natural byte order.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1113
     This may be worth a primitive."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1114
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1115
    ^ self signedInt32At:index MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1116
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1117
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1118
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1119
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1120
     b doubleWordAt:1 put:16rFFFFFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1121
     (b signedDoubleWordAt:1)
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1122
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1123
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1124
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1125
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1126
     b signedDoubleWordAt:1 put:-1.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1127
     (b doubleWordAt:1)
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
    "Modified: 1.7.1996 / 21:11:28 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1131
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1132
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1133
signedDoubleWordAt:index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1134
    "return the 4-bytes starting at index as a (signed) Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1135
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1136
     The value is retrieved MSB-first, if the msb-arg is true;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1137
     LSB-first otherwise."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1138
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1139
    ^ self signedInt32At:index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1140
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1141
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1142
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1143
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1144
     b := ByteArray withAll:#(1 2 3 4).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1145
     (b signedDoubleWordAt:1 MSB:true) printStringRadix:16.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1146
     (b signedDoubleWordAt:1 MSB:false) printStringRadix:16
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1147
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1148
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1149
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1150
signedDoubleWordAt:index put:value
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1151
    "set the 4-bytes starting at index from the signed Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1152
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1153
     The value is stored in the machines natural byte order.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1154
     This may be worth a primitive."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1155
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1156
    ^ self signedInt32At:index put:value MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1157
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1158
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1159
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1160
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1161
     b signedDoubleWordAt:1 put:-1.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1162
     (b doubleWordAt:1) printStringRadix:16
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1163
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1164
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1165
    "Modified: 1.7.1996 / 21:11:39 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1166
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1167
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1168
signedDoubleWordAt:index put:value MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1169
    "set the 4-bytes starting at index from the signed Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1170
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1171
     Depending on msb, the value is stored MSB-first or LSB-first.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1172
     This may be worth a primitive."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1173
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1174
    ^ self signedInt32At:index put:value MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1175
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1176
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1177
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1178
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1179
     b signedDoubleWordAt:1 put:-1.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1180
     (b doubleWordAt:1) printStringRadix:16
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1181
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1182
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1183
    "Modified: 1.7.1996 / 21:11:46 / cg"
15087
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1184
!
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1185
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1186
signedLongAt:index
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1187
    "return the 4-bytes starting at index as a signed Integer.
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1188
     The index is a smalltalk index (i.e. 1-based).
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1189
     The value is retrieved in the machine's natural byte order."
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1190
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1191
    ^ self signedInt32At:index
15087
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1192
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1193
    "
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1194
     |b|
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1195
     b := ByteArray new:4.
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1196
     b unsignedLongAt:1 put:16rFFFFFFFF.
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1197
     b signedLongAt:1
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1198
    "
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1199
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1200
    "Modified: 1.7.1996 / 21:14:38 / cg"
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1201
!
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1202
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1203
signedLongAt:index put:newValue
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1204
    "store a 4-bytes signed value starting at index.
15087
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1205
     The index is a smalltalk index (i.e. 1-based).
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1206
     The value is in the machine's natural byte order."
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1207
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1208
    ^ self signedInt32At:index put:newValue
15087
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1209
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1210
    "
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1211
     |b|
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1212
     b := ByteArray new:4.
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1213
     b signedLongAt:1 put:-1.
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1214
     b unsignedLongAt:1
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1215
    "
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1216
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  1217
    "Modified: 1.7.1996 / 21:14:38 / cg"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1218
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1219
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1220
signedWordAt:index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1221
    "return the 2-bytes starting at index as a signed Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1222
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1223
     The value is retrieved in the machines natural byte order.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1224
     This may be worth a primitive."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1225
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1226
    ^ (self unsignedInt16At:index MSB:IsBigEndian) signExtendedShortValue
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1227
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1228
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1229
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1230
     b := ByteArray new:2.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1231
     b wordAt:1 put:16rFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1232
     b signedWordAt:1
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
    "Modified: 1.7.1996 / 21:14:38 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1236
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1237
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1238
signedWordAt:index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1239
    "return the 2-bytes starting at index as a signed Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1240
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1241
     The value is retrieved MSB-first if the msb-arg is true,
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1242
     LSB-first otherwise.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1243
     This may be worth a primitive."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1244
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1245
    ^ (self unsignedInt16At:index MSB:msb) signExtendedShortValue
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1246
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1247
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1248
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1249
     b := ByteArray new:2.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1250
     b wordAt:1 put:16r0080.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1251
     b signedWordAt:1 MSB:true.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1252
     b signedWordAt:1 MSB:false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1253
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1254
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1255
    "Modified: 1.7.1996 / 21:15:57 / cg"
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
signedWordAt:byteIndex put:anInteger
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1259
    "set the 2-bytes starting at index from the signed Integer value.
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 stored value must be in the range -32768 .. +32676.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1262
     The value is stored in the machine's natural byteorder."
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 signedInt16At:byteIndex put:anInteger MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1265
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1266
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1267
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1268
     b := ByteArray new:6.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1269
     b shortAt:1 put:-1.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1270
     b shortAt:3 put:-2.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1271
     b shortAt:5 put:0.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1272
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1273
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1274
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1275
    "Modified: / 1.7.1996 / 21:12:07 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1276
    "Modified: / 5.3.1998 / 11:01:30 / stefan"
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
signedWordAt:byteIndex put:anInteger MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1280
    "set the 2-bytes starting at index from the signed Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1281
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1282
     The stored value must be in the range -32768 .. +32676.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1283
     The value is stored MSB-first, if the msb-arg is true;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1284
     LSB-first otherwise."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1285
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1286
    ^ self signedInt16At:byteIndex put:anInteger MSB:msb
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1287
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1288
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1289
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1290
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1291
     b signedWordAt:1 put:-1.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1292
     b signedWordAt:3 put:-2.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1293
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1294
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1295
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1296
    "Modified: 1.7.1996 / 21:12:13 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1297
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1298
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1299
unsignedLongAt:index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1300
    "return the 4-bytes starting at index as an (unsigned) Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1301
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1302
     The value is retrieved in the machine's natural byte order.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1303
     Subclasses may redefine this for better performance.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1304
     Same as doubleWordAt: for protocol completeness"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1305
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1306
    ^ self unsignedInt32At:index MSB:IsBigEndian
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
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1310
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1311
     b := ByteArray withAll:#(1 2 3 4).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1312
     (b unsignedLongAt:1) printStringRadix:16
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1313
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1314
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1315
    "Created: / 5.3.1998 / 11:56:53 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1316
    "Modified: / 5.3.1998 / 14:58:48 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1317
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1318
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1319
unsignedLongAt:index bigEndian:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1320
    "return the 4-bytes starting at index as an (unsigned) Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1321
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1322
     The value is retrieved MSB-first, if the msb-arg is true;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1323
     LSB-first otherwise.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1324
     Subclasses may redefine this for better performance.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1325
     Same as doubleWordAt:MSB: for protocol completeness"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1326
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1327
    ^ self unsignedInt32At:index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1328
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1329
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1330
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1331
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1332
     b := ByteArray withAll:#(1 2 3 4).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1333
     (b unsignedLongAt:1 bigEndian:true) printStringRadix:16.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1334
     (b unsignedLongAt:1 bigEndian:false) printStringRadix:16
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
    "Modified: / 21.1.1998 / 17:42:30 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1338
    "Created: / 5.3.1998 / 11:46:05 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1339
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1340
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1341
unsignedLongAt:index put:value
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1342
    "set the 4-bytes starting at index from the (unsigned) Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1343
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1344
     The value should be in the range 0 to 16rFFFFFFFF
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1345
     (for negative values, the stored value is not defined).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1346
     The value is stored in the machines natural byte order.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1347
     Subclasses may redefine this for better performance.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1348
     Same as doubleWordAt:put: for protocol completeness"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1350
    ^ self unsignedInt32At:index put:value MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1351
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1352
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1353
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1354
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1355
     b unsignedLongAt:1 put:16r04030201.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1356
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1357
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1358
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1359
    "Created: / 5.3.1998 / 11:57:44 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1360
    "Modified: / 5.3.1998 / 14:58:59 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1361
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1362
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1363
unsignedLongAt:index put:aNumber bigEndian:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1364
    "set the 4-bytes starting at index from the (unsigned) Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1365
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1366
     The value must be in the range 0 to 16rFFFFFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1367
     The value is stored MSB-first if msb is true; LSB-first otherwise.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1368
     Subclasses may redefine this for better performance.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1369
     Same as doubleWordAt:put:MSB: for protocol completeness"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1370
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1371
    ^ self unsignedInt32At:index put:aNumber MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1372
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1373
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1374
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1375
     b := ByteArray new:8.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1376
     b unsignedLongAt:1 put:16r04030201 bigEndian:true.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1377
     (b unsignedLongAt:1 bigEndian:false) printStringRadix:16
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1378
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1379
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1380
    "Modified: / 21.1.1998 / 17:43:34 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1381
    "Created: / 5.3.1998 / 11:43:53 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1382
    "Modified: / 5.3.1998 / 11:47:30 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1383
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1384
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1385
unsignedLongLongAt:index bigEndian:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1386
    "return the 8-bytes starting at index as an (unsigned) Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1387
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1388
     Depending on msb, the value is retrieved MSB or LSB-first."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1389
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1390
    ^ self unsignedInt64At:index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1391
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1392
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1393
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1394
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1395
     b := ByteArray withAll:#(1 2 3 4 5 6 7 8).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1396
     (b unsignedLongLongAt:1 bigEndian:false) printStringRadix:16
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1397
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1398
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1399
    "Modified: / 5.11.1996 / 14:06:21 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1400
    "Modified: / 5.3.1998 / 14:04:44 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1401
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1402
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1403
unsignedLongLongAt:index put:anInteger
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1404
    "set the 8-bytes starting at index from the (unsigned) Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1405
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1406
     The value must be in the range 0 to 16rFFFFFFFFFFFFFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1407
     The value is stored in natural byte order."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1408
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1409
    ^ self unsignedInt64At:index put:anInteger MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1410
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1411
    "Created: / 5.3.1998 / 14:44:00 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1412
    "Modified: / 5.3.1998 / 15:02:32 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1413
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1414
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1415
unsignedLongLongAt:index put:anInteger bigEndian:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1416
    "set the 8-bytes starting at index from the (unsigned) Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1417
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1418
     The value must be in the range 0 to 16rFFFFFFFFFFFFFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1419
     Depending on msb, the value is stored MSB-first or LSB-first."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1420
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1421
    ^ self unsignedInt64At:index put:anInteger MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1422
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1423
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1424
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1425
     b := ByteArray new:8.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1426
     b unsignedLongLongAt:1 put:16r0807060504030201 bigEndian:false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1427
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1428
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1429
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1430
    "Created: / 5.3.1998 / 14:06:02 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1431
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1432
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1433
unsignedShortAt:index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1434
    "return the 2-bytes starting at index as an (unsigned) Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1435
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1436
     The value is retrieved in the machines natural byte order
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1437
     Subclasses may redefine this for better performance.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1438
     This is the ST80 equivalent of #wordAt:"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1439
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1440
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1441
    ^ self unsignedInt16At:index MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1442
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1443
    "Created: / 5.3.1998 / 11:38:25 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1444
    "Modified: / 5.3.1998 / 14:59:25 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1445
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1446
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1447
unsignedShortAt:index bigEndian:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1448
    "return the 2-bytes starting at index as an (unsigned) Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1449
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1450
     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
  1451
     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
  1452
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1453
    ^ self unsignedInt16At:index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1454
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1455
    "Modified: / 21.1.1998 / 17:46:07 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1456
    "Created: / 5.3.1998 / 11:49:29 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1457
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1458
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1459
unsignedShortAt:index put:value
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1460
    "set the 2-bytes starting at index from the (unsigned) Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1461
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1462
     The stored value must be in the range 0 .. 16rFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1463
     The value is stored in the machines natural byteorder."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1464
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1465
    ^ self unsignedInt16At:index put:value
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1466
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1467
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1468
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1469
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1470
     b unsignedShortAt:1 put:16r0102.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1471
     b unsignedShortAt:3 put:16r0304.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1472
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1473
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1474
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1475
    "Created: / 5.3.1998 / 11:54:52 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1476
    "Modified: / 5.3.1998 / 14:59:38 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1477
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1478
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1479
unsignedShortAt:index put:value bigEndian:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1480
    "set the 2-bytes starting at index from the (unsigned) Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1481
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1482
     The stored value must be in the range 0 .. 16rFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1483
     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
  1484
     lower index) if msb is false, MSB-first otherwise"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1485
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1486
    ^ self unsignedInt16At:index put:value MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1487
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1488
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1489
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1490
     b := ByteArray new:8.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1491
     b unsignedShortAt:1 put:16r0102 bigEndian:false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1492
     b unsignedShortAt:3 put:16r0304 bigEndian:false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1493
     b unsignedShortAt:5 put:16r0102 bigEndian:true.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1494
     b unsignedShortAt:7 put:16r0304 bigEndian:true.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1495
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1496
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1497
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1498
    "Modified: / 21.1.1998 / 17:48:15 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1499
    "Modified: / 5.3.1998 / 11:52:28 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1500
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1501
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1502
wordAt:index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1503
    "return the 2-bytes starting at index as an (unsigned) Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1504
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1505
     The value is retrieved in the machines natural byte order
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1506
     Subclasses may redefine this for better performance."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1507
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1508
    ^ self unsignedInt16At:index MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1509
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1510
    "Modified: / 5.3.1998 / 14:59:51 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1511
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1512
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1513
wordAt:index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1514
    "return the 2-bytes starting at index as an (unsigned) Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1515
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1516
     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
  1517
     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
  1518
     Notice: 
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1519
        the index is a byte index; thus, this allows for unaligned access to
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1520
        words on any boundary.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1521
     Question: should it be retrieve signed values ? (see ByteArray>>signedWordAt:)"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1522
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1523
    ^ self unsignedInt16At:index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1524
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1525
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1526
wordAt:index put:value
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1527
    "set the 2-bytes starting at index from the (unsigned) Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1528
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1529
     The stored value must be in the range 0 .. 16rFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1530
     The value is stored in the machines natural byteorder.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1531
     Question: should it accept signed values ? (see ByteArray>>signedWordAt:put:)"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1532
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1533
    ^ self unsignedInt16At:index put:value MSB:IsBigEndian
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
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1537
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1538
     b wordAt:1 put:16r0102.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1539
     b wordAt:3 put:16r0304.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1540
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1541
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1542
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1543
    "Modified: / 5.3.1998 / 15:00:03 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1544
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1545
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1546
wordAt:index put:value MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1547
    "set the 2-bytes starting at index from the (unsigned) Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1548
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1549
     The stored value must be in the range 0 .. 16rFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1550
     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
  1551
     lower index) if msb is false, MSB-first otherwise.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1552
     Question: should it accept signed values ? (see ByteArray>>signedWordAt:put:)"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1553
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1554
    ^ self unsignedInt16At:index put:value MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1555
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1556
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1557
     b := ByteArray new:8.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1558
     b wordAt:1 put:16r0102 MSB:false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1559
     b wordAt:3 put:16r0304 MSB:false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1560
     b wordAt:5 put:16r0102 MSB:true.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1561
     b wordAt:7 put:16r0304 MSB:true.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1562
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1563
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1564
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1565
    "Modified: / 21.1.1998 / 17:48:15 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1566
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1567
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1568
wordAtWordIndex:int16Index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1569
    "return the unsigned short (uint16) at index, anInteger.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1570
     Fetching in the machines natural byte order.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1571
     Indices are 1-based and scaled as appropriate to allow
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1572
     accessing the memory as an array of word entries.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1573
     (i.e. indices are 1, 2, ...)"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1574
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1575
    ^ self unsignedInt16At:int16Index MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1576
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1577
    "Created: / 21.1.1998 / 17:48:26 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1578
    "Modified: / 5.3.1998 / 15:00:16 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1579
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1580
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1581
wordAtWordIndex:int16Index MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1582
    "return the unsigned short (uint16) at index, anInteger.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1583
     Fetching is MSB if msb is true, LSB otherwise.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1584
     Indices are 1-based and scaled as appropriate to allow
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1585
     accessing the memory as an array of word entries.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1586
     (i.e. indices are 1, 2, ...)"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1587
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1588
    ^ self unsignedInt16At:((int16Index - 1) * 2 + 1) MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1589
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1590
    "Created: / 21.1.1998 / 17:48:30 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1591
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1592
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1593
wordAtWordIndex:int16Index put:anInteger
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1594
    "set the unsigned short (uint16) at index, anInteger.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1595
     Storing in the machine's natural byte order.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1596
     Indices are 1-based and scaled as appropriate to allow
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1597
     accessing the memory as an array of word entries.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1598
     (i.e. indices are 1, 2, ...)"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1599
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1600
    ^ self unsignedInt16At:int16Index put:anInteger MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1601
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1602
    "Created: / 21.1.1998 / 17:48:34 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1603
    "Modified: / 5.3.1998 / 15:00:27 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1604
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1605
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1606
wordAtWordIndex:int16Index put:anInteger MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1607
    "set the short at index, anInteger.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1608
     Storing is MSB if msb is true, LSB otherwise.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1609
     Indices are 1-based and scaled as appropriate to allow
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1610
     accessing the memory as an array of word entries.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1611
     (i.e. indices are 1, 2, ...)"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1612
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1613
    ^ self unsignedInt16At:((int16Index - 1) * 2 + 1) put:anInteger MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1614
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1615
    "Created: / 21.1.1998 / 17:48:38 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1616
! !
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1617
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1618
!UninterpretedBytes methodsFor:'Compatibility-Squeak'!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1619
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1620
copyFromByteArray:aByteArray
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1621
    "copy as much as possible from aByteArray"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1622
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1623
    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
  1624
! !
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  1625
9185
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1626
!UninterpretedBytes methodsFor:'Compatibility-V''Age'!
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1627
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1628
uint32At:zeroBasedIndex
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1629
    "return the 4-bytes starting at index as (unsigned) Integer.
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1630
     WARNING: The index is a C index (i.e. 0-based).
19301
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1631
     The value is retrieved in the machine's natural byte order.
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1632
     Similar to unsignedInt32At:, except for the index base"
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1633
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1634
    ^ self unsignedInt32At:zeroBasedIndex+1
9185
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1635
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1636
    "
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1637
     |b|
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1638
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1639
     b := ByteArray withAll:#(0 0 0 0).
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1640
     b uint32At:0 put:16r12345678.
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1641
     b uint32At:0.
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1642
     b
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1643
    "
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1644
!
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1645
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1646
uint32At:zeroBasedIndex put:anInteger
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1647
    "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
  1648
     WARNING: The index is a C index (i.e. 0-based).
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1649
     The value is stored in the machine's natural byte order.
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1650
     Similar to unsignedInt32At:put:, except for the index base"
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1651
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  1652
    ^ self unsignedInt32At:zeroBasedIndex+1 put:anInteger
9185
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1653
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1654
    "
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1655
     |b|
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1656
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1657
     b := ByteArray withAll:#(0 0 0 0).
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1658
     b uint32At:0 put:16r12345678.
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1659
     b
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1660
    "
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1661
! !
283bfee8b9ab V'Age compat.
Claus Gittinger <cg@exept.de>
parents: 9005
diff changeset
  1662
16796
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1663
!UninterpretedBytes methodsFor:'accessing-arbitrary-long ints'!
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1664
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1665
nativeIntAt:index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1666
    "return the 4- or 8-bytes (depending on the native integer/pointer size) 
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1667
     starting at index as a signed Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1668
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1669
     The value is retrieved in the machines natural byte order,
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1670
     therefore, this should only be used for byte-data which is
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1671
     only used inside this machine."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1672
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1673
    |w|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1674
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1675
%{
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1676
    /*
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1677
     * handle the most common cases fast ...
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1678
     */
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1679
    if (__isSmallInteger(index)) {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1680
        unsigned char *cp;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1681
        INT sz;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1682
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1683
        __fetchBytePointerAndSize__(self, &cp, &sz);
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1684
        if (cp) {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1685
            unsigned INT idx = ((unsigned INT)__intVal(index)) - 1;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1686
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1687
            if ((idx+(sizeof(INT)-1)) < sz) {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1688
                cp += idx;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1689
#if defined(__i386__)
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1690
                /*
20816
986549374231 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20595
diff changeset
  1691
                 * aligned or not, we don't care (i386 can do both)
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1692
                 */
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1693
                {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1694
                    INT iVal = ((INT *)cp)[0];
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1695
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1696
                    RETURN (__MKINT(iVal));
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1697
                }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1698
#else
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1699
                /*
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1700
                 * aligned
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1701
                 */
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1702
                if (((INT)cp & (sizeof(INT)-1)) == 0) {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1703
                    INT iVal = ((INT *)cp)[0];
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1704
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1705
                    RETURN (__MKINT(iVal));
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1706
                }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1707
#endif
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1708
            }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1709
        }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1710
    }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1711
%}.
19402
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1712
    SmallInteger maxBytes == 8 ifTrue:[
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1713
        ^ self signedInt64At:index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1714
    ].
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1715
    ^ self signedInt32At:index
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1716
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1717
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1718
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1719
     b := ByteArray new:8.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1720
     b nativeIntAt:1 put:SmallInteger maxVal.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1721
     b nativeIntAt:1
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1722
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1723
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1724
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1725
nativeIntAt:index put:value
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1726
    "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
  1727
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1728
     The value is stored in the machine's natural byte order."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1729
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1730
%{  /* NOCONTEXT */
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1731
    /*
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1732
     * handle the most common cases fast ...
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1733
     */
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1734
    if (__isSmallInteger(index)) {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1735
        unsigned char *cp;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1736
        INT sz;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1737
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1738
        __fetchBytePointerAndSize__(self, &cp, &sz);
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1739
        if (cp) {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1740
            unsigned INT idx = ((unsigned INT)__intVal(index)) - 1;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1741
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1742
            if ((idx+(sizeof(INT)-1)) < sz) {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1743
                cp += idx;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1744
                /*
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1745
                 * aligned
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1746
                 */
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1747
                if (((INT)cp & (sizeof(INT)-1)) == 0) {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1748
                    INT __v;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1749
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1750
                    if (__isSmallInteger(value)) {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1751
                        // how about a range check?
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1752
                        ((INT *)cp)[0] = (INT)(__intVal(value));
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1753
                        RETURN (value);
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1754
                    }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1755
                    if ((__v = __signedLongIntVal(value)) != 0) {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1756
                        // how about a range check?
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1757
                        ((INT *)cp)[0] = (INT)(__v);
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1758
                        RETURN (value);
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1759
                    }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1760
                }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1761
            }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1762
        }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1763
    }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1764
%}.
19402
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1765
    SmallInteger maxBytes == 8 ifTrue:[
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1766
        ^ self signedInt64At:index put:value MSB:IsBigEndian
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1767
    ].
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1768
    ^ self signedInt32At:index put:value MSB:IsBigEndian    
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1769
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1770
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1771
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1772
     b := ByteArray new:8.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1773
     b nativeIntAt:1 put:SmallInteger maxVal.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1774
     (b nativeIntAt:1) 
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1775
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1776
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  1777
19402
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1778
signedIntegerAt:index length:len bigEndian:bigEndian
19197
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1779
    "return the n-byte signed integer starting at index.
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1780
     With n=1, this returns the single signed byte's value,
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1781
     n=2, a signed short, n=4 a signed int etc.
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1782
     Useful to extract arbitrary long integers"
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1783
19402
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1784
    |val highByte
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1785
     iIndex "{ Class:SmallInteger }"
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1786
     last "{ Class:SmallInteger }"|
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1787
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1788
    iIndex := index.
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1789
    last := iIndex + len - 1.
19197
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1790
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1791
    val := 0.
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1792
    bigEndian ifTrue:[
19402
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1793
        highByte := self at:iIndex.
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1794
        iIndex to:last do:[:i |
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1795
            val := (val<<8) + (self byteAt:i)
19197
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1796
        ]
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1797
    ] ifFalse:[
19402
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1798
        highByte := self at:last.
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1799
        last to:iIndex by:-1 do:[:i |
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1800
            val := (val<<8) + (self byteAt:i)
19197
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1801
        ]
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1802
    ].
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1803
    (highByte bitTest:16r80) ifTrue:[
19402
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1804
        ^ val - (1 bitShift:(len*8))
19197
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1805
    ].    
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1806
    ^ val
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1807
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1808
    "
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1809
     |b|
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1810
     b := #[ 16r01 16rFF 16r00 16r04 16r05 ].
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1811
     (b signedIntegerAt:2 length:2 bigEndian:false). ' -> 255 (00FF) '.
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1812
     (b signedIntegerAt:2 length:2 bigEndian:true).  ' -> -256 (FF00) '.   
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1813
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1814
     b := #[ 16r01 16r00 16rFF 16r04 16r05 ].
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1815
     (b signedIntegerAt:2 length:2 bigEndian:false). ' -> -256 (FF00) '.
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1816
     (b signedIntegerAt:2 length:2 bigEndian:true).  ' -> 255 (00FF) '.   
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1817
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1818
     b := #[ 16r01 16r7F 16r00 16r04 16r05 ].
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1819
     (b signedIntegerAt:2 length:2 bigEndian:false). ' -> 127 (007F) '.
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1820
     (b signedIntegerAt:2 length:2 bigEndian:true).  ' -> 32512 (7F00) '.      
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1821
    "
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1822
    
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1823
    "
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1824
     |b|
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1825
     b := #[ 16r01 16r02 16r03 16r04 16r05 ].
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1826
     (b signedIntegerAt:2 length:4 bigEndian:false).
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1827
     (b signedIntegerAt:2 length:4 bigEndian:true).
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1828
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1829
     b := #[ 16r01 16r82 16r03 16r04 16r05 ].
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1830
     (b signedIntegerAt:2 length:4 bigEndian:false).
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1831
     (b signedIntegerAt:2 length:4 bigEndian:true).
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1832
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1833
     b := #[ 16r01 16r82 16r03 16r04 16r85 ].
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1834
     (b signedIntegerAt:2 length:4 bigEndian:false).
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1835
     (b signedIntegerAt:2 length:4 bigEndian:true).
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1836
    "
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1837
!
641f64b6c686 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19196
diff changeset
  1838
19402
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1839
unsignedIntegerAt:index length:len bigEndian:bigEndian
16796
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1840
    "return the n-byte unsigned integer starting at index.
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1841
     With n=1, this returns the single byte's value,
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1842
     n=2, an unsigned short, n=4 an unsigned int etc.
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1843
     Useful to extract arbitrary long integers"
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1844
19402
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1845
    |val
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1846
     iIndex "{ Class:SmallInteger }"
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1847
     last "{ Class:SmallInteger }"|
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1848
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1849
    iIndex := index.
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1850
    last := iIndex + len - 1.
16796
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1851
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1852
    val := 0.
18346
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
  1853
    bigEndian ifTrue:[
19402
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1854
        iIndex to:last do:[:i |
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1855
            val := (val<<8) + (self byteAt:i)
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1856
        ]
18346
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
  1857
    ] ifFalse:[
19402
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1858
        last to:iIndex by:-1 do:[:i |
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1859
            val := (val<<8) + (self byteAt:i)
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1860
        ]
16796
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1861
    ].
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1862
    ^ val
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1863
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1864
    "
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1865
     |b|
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1866
     b := #[ 16r01 16r02 16r03 16r04 16r05 ].
18346
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
  1867
     (b unsignedIntegerAt:2 length:4 bigEndian:false).
c73f81214ed9 isBigEndian fallBack
Claus Gittinger <cg@exept.de>
parents: 18284
diff changeset
  1868
     (b unsignedIntegerAt:2 length:4 bigEndian:true).
16796
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1869
    "
19301
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1870
!
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1871
19402
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1872
unsignedIntegerAt:index put:newValue length:len bigEndian:bigEndian
19301
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1873
    "store the n-byte unsigned integer starting at index.
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1874
     With n=1, this stores a single byte's value,
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1875
     n=2, an unsigned short, n=4 an unsigned int etc.
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1876
     Useful to replace arbitrary long integers"
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1877
19402
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1878
    |val
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1879
     iIndex "{ Class:SmallInteger }"
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1880
     last "{ Class:SmallInteger }"|
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1881
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1882
    iIndex := index.
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1883
    last := iIndex + len - 1.
19301
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1884
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1885
    val := newValue.
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1886
    bigEndian ifTrue:[
19402
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1887
        iIndex to:last do:[:i |
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1888
            self byteAt:i put:(val bitAnd:16rFF).
19301
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1889
            val := val bitShift:-8.
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1890
        ]
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1891
    ] ifFalse:[
19402
b80de983fbdb #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19368
diff changeset
  1892
        last to:iIndex by:-1 do:[:i |
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1893
            self byteAt:i put:(val bitAnd:16rFF).
19301
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1894
            val := val bitShift:-8.
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1895
        ]
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1896
    ].
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1897
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1898
    "
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1899
     |b|
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1900
     b := #[ 16r01 16r02 16r03 16r04 16r05 ] copy.
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1901
     (b unsignedIntegerAt:2 put:16r11223344 length:3 bigEndian:false). b.
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1902
     (b unsignedIntegerAt:2 put:16r11223344 length:3 bigEndian:true). b.
21b0b9bf3a74 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19197
diff changeset
  1903
    "
16796
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1904
! !
133b05124446 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 16719
diff changeset
  1905
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1906
!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
  1907
4422
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1908
bcdByteAt:index
13724
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  1909
    "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
  1910
     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
  1911
     (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
  1912
4425
a10011c1b6eb bcd support - again.
Claus Gittinger <cg@exept.de>
parents: 4422
diff changeset
  1913
    ^ (self byteAt:index) decodeFromBCD
4422
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1914
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1915
    "
19352
3c5b0c74be2e #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19351
diff changeset
  1916
     #[ 16r55 ] bcdByteAt:1 
3c5b0c74be2e #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19351
diff changeset
  1917
     #[ 16r99 ] bcdByteAt:1  
3c5b0c74be2e #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19351
diff changeset
  1918
     #[ 16rAA ] bcdByteAt:1
4422
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1919
    "
13724
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  1920
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  1921
    "Modified (comment): / 26-09-2011 / 11:57:33 / cg"
4422
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1922
!
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1923
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1924
bcdByteAt:index put:aNumber
13724
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  1925
    "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
  1926
     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
  1927
     (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
  1928
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1929
    (aNumber between:0 and:99) ifFalse:[
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  1930
        self error:'invalid value for BCD encoding'
4422
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1931
    ].
4425
a10011c1b6eb bcd support - again.
Claus Gittinger <cg@exept.de>
parents: 4422
diff changeset
  1932
    ^ self byteAt:index put:aNumber encodeAsBCD
4422
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1933
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1934
    "
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1935
     (((ByteArray new:1) bcdByteAt:1 put:55; yourself) at:1) hexPrintString
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1936
     (((ByteArray new:1) bcdByteAt:1 put:99; yourself) at:1) hexPrintString
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1937
     (((ByteArray new:1) bcdByteAt:1 put:100; yourself) at:1) hexPrintString
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  1938
     (((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
  1939
    "
13724
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  1940
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  1941
    "Modified (comment): / 26-09-2011 / 11:57:36 / cg"
4422
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1942
!
831fcf6d9b38 added bcd support.
Claus Gittinger <cg@exept.de>
parents: 4312
diff changeset
  1943
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1944
byteAt:byteIndex
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1945
    "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
  1946
     The index is a smalltalk index (i.e. 1-based)."
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1947
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1948
%{
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1949
    if (__isSmallInteger(byteIndex)) {
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1950
        unsigned char *cp;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1951
        INT sz;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1952
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1953
        __fetchBytePointerAndSize__(self, &cp, &sz);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1954
        if (cp) {
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1955
            unsigned INT idx = ((unsigned INT)__intVal(byteIndex)) - 1;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1956
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1957
            if (idx < sz) {
19830
1e518848efb6 #OTHER by stefan
Stefan Vogel <sv@exept.de>
parents: 19629
diff changeset
  1958
                unsigned char ch = cp[idx] & 0xFF;
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1959
                RETURN (__mkSmallInteger( ch ));
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1960
            }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1961
        }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1962
    }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1963
%}.
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1964
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1965
    ^ self at:byteIndex
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1966
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1967
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1968
     |b|
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1969
     b := ByteArray new:3.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1970
     b at:1 put:16rFF.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  1971
     b at:2 put:16r7F.
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1972
     b at:3 put:16r80.
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1973
     b byteAt:1.    
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1974
     b byteAt:2.     
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1975
     b byteAt:3.     
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1976
    "
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1977
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1978
    "Modified: / 01-07-1996 / 21:13:53 / cg"
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1979
    "Modified (comment): / 26-09-2011 / 11:57:14 / cg"
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1980
!
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1981
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1982
byteAt:byteIndex put:anInteger
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1983
    "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
  1984
     The index is a smalltalk index (i.e. 1-based)."
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1985
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1986
%{
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1987
    if (__isSmallInteger(byteIndex) && __isSmallInteger(anInteger)) {
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1988
        unsigned char *cp;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1989
        INT sz;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1990
        INT val = __intVal(anInteger);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1991
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1992
        if ( ((unsigned INT)val) <= 0xFF ) {
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1993
            __fetchBytePointerAndSize__(self, &cp, &sz);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1994
            if (cp) {
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1995
                unsigned INT idx = ((unsigned INT)__intVal(byteIndex)) - 1;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1996
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1997
                if (idx < sz) {
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1998
                    cp[idx] = val & 0xFF;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  1999
                    RETURN (anInteger);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2000
                }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2001
            }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2002
        }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2003
    }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2004
%}.
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2005
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2006
    ^ self at:byteIndex put:anInteger
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2007
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2008
    "
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2009
     |b|
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2010
     b := ByteArray new:3.
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2011
     b byteAt:1 put:16rFF.
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2012
     b byteAt:2 put:16r7F.
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2013
     b byteAt:3 put:16r80.
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2014
     b signedByteAt:1.    
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2015
     b signedByteAt:2.     
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2016
     b signedByteAt:3.     
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2017
    "
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2018
!
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2019
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2020
signedByteAt:byteIndex
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2021
    "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
  2022
     The index is a smalltalk index (i.e. 1-based).
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2023
     This may be worth a primitive."
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2024
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2025
%{
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2026
    /*
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2027
     * handle the most common cases fast ...
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2028
     */
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2029
    if (__isSmallInteger(byteIndex)) {
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2030
        unsigned char *cp;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2031
        INT sz;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2032
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2033
        __fetchBytePointerAndSize__(self, &cp, &sz);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2034
        if (cp) {
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2035
            unsigned INT idx = ((unsigned INT)__intVal(byteIndex)) - 1;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2036
            char ch;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2037
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2038
            if (idx < sz) {
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2039
                cp += idx;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2040
                ch = cp[0];
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2041
# ifndef HAS_SIGNED_CHAR
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2042
                if ( (unsigned int)ch >= 0x80 ) {
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2043
                    ch = ch - 0x100;                
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2044
                }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2045
#endif
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2046
                RETURN (__mkSmallInteger( ch ));
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2047
            }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2048
        }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2049
    }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2050
%}.
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2051
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2052
    ^ (self byteAt:byteIndex) signExtendedByteValue
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2053
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2054
    "
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2055
     |b|
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2056
     b := ByteArray new:3.
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2057
     b at:1 put:16rFF.
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2058
     b at:2 put:16r7F.
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2059
     b at:3 put:16r80.
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2060
     b byteAt:1.    
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2061
     b byteAt:2.     
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2062
     b byteAt:3.     
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2063
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2064
13724
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  2065
    "Modified: / 01-07-1996 / 21:13:53 / cg"
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  2066
    "Modified (comment): / 26-09-2011 / 11:57:14 / cg"
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2067
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2068
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2069
signedByteAt:index put:aSignedByteValue
13724
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  2070
    "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
  2071
     The index is a smalltalk index (i.e. 1-based).
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2072
     Return the signedByteValue argument.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2073
     This may be worth a primitive."
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2074
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2075
    |b "{ Class: SmallInteger }"|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2076
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2077
    aSignedByteValue >= 0 ifTrue:[
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2078
        b := aSignedByteValue
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2079
    ] ifFalse:[
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2080
        b := 16r100 + aSignedByteValue
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2081
    ].
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2082
    self byteAt:index put:b.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2083
    ^ aSignedByteValue
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2084
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2085
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2086
     |b|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2087
     b := ByteArray new:2.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2088
     b signedByteAt:1 put:-1.
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2089
     b at:1
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2090
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2091
13724
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  2092
    "Modified: / 01-07-1996 / 21:12:37 / cg"
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  2093
    "Modified (comment): / 26-09-2011 / 11:57:18 / cg"
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2094
! !
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2095
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2096
!UninterpretedBytes methodsFor:'accessing-floats & doubles'!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2097
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2098
doubleAt:index
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2099
    "return the 8-bytes starting at index as a Float.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2100
     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
  2101
     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
  2102
     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
  2103
     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
  2104
     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
  2105
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2106
    |newFloat|
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2107
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2108
%{
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2109
    /*
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2110
     * handle the most common cases fast ...
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2111
     */
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2112
    if (__isSmallInteger(index)) {
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2113
        unsigned char *cp;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2114
        INT sz;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2115
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2116
        __fetchBytePointerAndSize__(self, &cp, &sz);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2117
        if (cp) {
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2118
            INT idx = __intVal(index) - 1;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2119
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2120
            if ((idx >= 0) && ((idx+(sizeof(double)-1)) < sz)) {
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2121
                cp += idx;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2122
                /*
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2123
                 * aligned
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2124
                 */
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2125
                if (((INT)cp & (sizeof(double)-1)) == 0) {
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2126
                    double dVal = ((double *)cp)[0];
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2127
                    OBJ f;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2128
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2129
                    __qMKFLOAT(f, dVal);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2130
                    RETURN (f);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2131
                }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2132
            }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2133
        }
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2134
    }
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2135
%}.
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2136
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2137
    newFloat := Float basicNew.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2138
    1 to:8 do:[:destIndex|
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2139
        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
  2140
    ].
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2141
    ^ newFloat.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2142
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2143
    "
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2144
     |b|
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2145
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2146
     b := ByteArray new:20.
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2147
     b doubleAt:1 put:(Float pi).
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2148
     Transcript showCR:b.
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2149
     Transcript showCR:(b doubleAt:1)
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2150
    "
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2151
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2152
3446
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2153
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
  2154
    "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
  2155
     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
  2156
     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
  2157
     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
  2158
     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
  2159
     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
  2160
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2161
    |newFloat|
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2162
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
  2163
    msb == IsBigEndian ifTrue:[
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2164
        ^ 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
  2165
    ].
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2166
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2167
    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
  2168
    1 to:8 do:[:destIndex|
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2169
        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
  2170
    ].
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2171
    ^ newFloat.
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2172
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2173
    "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
  2174
!
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2175
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2176
doubleAt:index put:aFloat
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2177
    "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
  2178
     starting at index.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2179
     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
  2180
     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
  2181
     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
  2182
     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
  2183
     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
  2184
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2185
    |flt|
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2186
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2187
%{
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2188
    /*
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2189
     * handle the most common cases fast ...
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2190
     */
16320
dcb66fff0a89 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15836
diff changeset
  2191
    if (__isSmallInteger(index)) {
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2192
        unsigned char *cp;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2193
        INT sz;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2194
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2195
        __fetchBytePointerAndSize__(self, &cp, &sz);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2196
        if (cp) {
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2197
            INT idx = __intVal(index) - 1;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2198
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2199
            if ((idx >= 0) && ((idx+(sizeof(double)-1)) < sz)) {
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2200
                cp += idx;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2201
                /*
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2202
                 * aligned
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2203
                 */
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2204
                if (((INT)cp & (sizeof(double)-1)) == 0) {
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2205
                    if (__isFloat(aFloat)) {
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2206
                        ((double *)cp)[0] = __floatVal(aFloat);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2207
                        RETURN (aFloat);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2208
                    }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2209
                    if (__isShortFloat(aFloat)) {
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2210
                        ((double *)cp)[0] = (double)(__shortFloatVal(aFloat));
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2211
                        RETURN (aFloat);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2212
                    }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2213
                    if (__isSmallInteger(aFloat)) {
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2214
                        ((double *)cp)[0] = (double)(__intVal(aFloat));
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2215
                        RETURN (aFloat);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2216
                    }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2217
                }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2218
            }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2219
        }
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2220
    }
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2221
%}.
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2222
16320
dcb66fff0a89 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15836
diff changeset
  2223
    flt := aFloat asFloat.
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2224
    1 to:8 do:[:srcIndex|
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2225
        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
  2226
    ].
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2227
    ^ aFloat
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2228
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2229
3446
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2230
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
  2231
    "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
  2232
     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
  2233
     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
  2234
     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
  2235
     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
  2236
     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
  2237
     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
  2238
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2239
    |flt|
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2240
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
  2241
    msb == IsBigEndian ifTrue:[
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2242
        ^ 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
  2243
    ].
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2244
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2245
    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
  2246
    1 to:8 do:[:srcIndex|
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2247
        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
  2248
    ].
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2249
    ^ aFloat
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2250
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2251
    "Created: / 15.5.1998 / 17:22:27 / cg"
3447
Claus Gittinger <cg@exept.de>
parents: 3446
diff changeset
  2252
    "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
  2253
!
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2254
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2255
floatAt:index
3434
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2256
    "return the 4-bytes starting at index as a ShortFloat.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2257
     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
  2258
     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
  2259
     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
  2260
     a float object which keeps an 8-byte double internally.
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2261
     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
  2262
     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
  2263
     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
  2264
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2265
    |newFloat|
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2266
3434
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2267
%{
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2268
    /*
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2269
     * handle the most common cases fast ...
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2270
     */
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2271
    if (__isSmallInteger(index)) {
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2272
        unsigned char *cp;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2273
        INT sz;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2274
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2275
        __fetchBytePointerAndSize__(self, &cp, &sz);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2276
        if (cp) {
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2277
            INT idx = __intVal(index) - 1;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2278
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2279
            if ((idx >= 0) && ((idx+(sizeof(float)-1)) < sz)) {
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2280
                cp += idx;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2281
                /*
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2282
                 * aligned
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2283
                 */
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2284
                if (((INT)cp & (sizeof(float)-1)) == 0) {
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2285
                    float fVal = ((float *)cp)[0];
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2286
                    OBJ f;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2287
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2288
                    __qMKSFLOAT(f, fVal);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2289
                    RETURN (f);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2290
                }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2291
            }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2292
        }
3434
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2293
    }
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2294
%}.
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2295
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2296
    newFloat := ShortFloat basicNew.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2297
    1 to:4 do:[:destIndex|
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2298
        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
  2299
    ].
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2300
    ^ newFloat.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2301
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2302
3446
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2303
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
  2304
    "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
  2305
     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
  2306
     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
  2307
     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
  2308
     a float object which keeps an 8-byte double internally.
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2309
     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
  2310
     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
  2311
     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
  2312
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2313
    |newFloat|
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2314
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
  2315
    msb == IsBigEndian ifTrue:[
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2316
        ^ 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
  2317
    ].
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2318
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2319
    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
  2320
    1 to:4 do:[:destIndex|
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2321
        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
  2322
    ].
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2323
    ^ newFloat.
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2324
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2325
    "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
  2326
    "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
  2327
!
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2328
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2329
floatAt:index put:aFloat
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2330
    "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
  2331
     starting at index.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2332
     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
  2333
     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
  2334
     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
  2335
     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
  2336
     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
  2337
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2338
    |sflt|
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2339
3434
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2340
%{
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2341
    /*
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2342
     * handle the most common cases fast ...
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2343
     */
16320
dcb66fff0a89 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15836
diff changeset
  2344
    if (__isSmallInteger(index)) {
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2345
        unsigned char *cp;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2346
        INT sz;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2347
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2348
        __fetchBytePointerAndSize__(self, &cp, &sz);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2349
        if (cp) {
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2350
            INT idx = __intVal(index) - 1;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2351
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2352
            if ((idx >= 0) && ((idx+(sizeof(float)-1)) < sz)) {
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2353
                cp += idx;
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2354
                /*
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2355
                 * aligned
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2356
                 */
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2357
                if (((INT)cp & (sizeof(float)-1)) == 0) {
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2358
                    if (__isShortFloat(aFloat)) {
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2359
                        ((float *)cp)[0] = __shortFloatVal(aFloat);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2360
                        RETURN (self);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2361
                    }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2362
                    if (__isFloat(aFloat)) {
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2363
                        ((float *)cp)[0] = (float)__floatVal(aFloat);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2364
                        RETURN (self);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2365
                    }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2366
                    if (__isSmallInteger(aFloat)) {
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2367
                        ((float *)cp)[0] = (float)__intVal(aFloat);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2368
                        RETURN (self);
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2369
                    }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2370
                    // bail out to smalltalk code
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2371
                }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2372
            }
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2373
        }
3434
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2374
    }
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2375
%}.
d04ff3256ebb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3433
diff changeset
  2376
16320
dcb66fff0a89 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15836
diff changeset
  2377
    sflt := aFloat asShortFloat.
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2378
    1 to:4 do:[:srcIndex|
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2379
        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
  2380
    ].
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2381
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2382
3446
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2383
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
  2384
    "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
  2385
     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
  2386
     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
  2387
     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
  2388
     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
  2389
     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
  2390
     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
  2391
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2392
    |sflt|
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2393
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
  2394
    msb == IsBigEndian ifTrue:[
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2395
        self floatAt:index put:aFloat.
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2396
        ^ self.
3446
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2397
    ].
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2398
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2399
    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
  2400
    1 to:4 do:[:srcIndex|
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2401
        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
  2402
    ].
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2403
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2404
    "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
  2405
!
1a8c314b5d7d added #floatAt:MSB: , #floatAt:put:MSB: , #doubleAt:MSB: and #doubleAt:put:MSB:
Claus Gittinger <cg@exept.de>
parents: 3444
diff changeset
  2406
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2407
ieeeDoubleAt:index
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2408
    "retrieve the 8 bytes starting at index as a float.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2409
     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
  2410
     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
  2411
     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
  2412
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2413
    "
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2414
     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
  2415
     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
  2416
     to an IBM 370 or old VAX etc.
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2417
     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
  2418
     no problem.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2419
    "
9258
83c940f349ea isIEEEFormat
Claus Gittinger <cg@exept.de>
parents: 9185
diff changeset
  2420
    Float isIEEEFormat ifFalse:[self error:'unsupported operation'].
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2421
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2422
    ^ self doubleAt:index
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2423
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2424
    "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
  2425
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2426
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2427
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
  2428
    "store the value of the argument, aFloat into the receiver
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2429
     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
  2430
     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
  2431
     (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
  2432
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2433
    "
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2434
     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
  2435
     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
  2436
     to an IBM 370 or old VAX etc.
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2437
     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
  2438
     no problem.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2439
    "
9258
83c940f349ea isIEEEFormat
Claus Gittinger <cg@exept.de>
parents: 9185
diff changeset
  2440
    Float isIEEEFormat ifFalse:[self error:'unsupported operation'].
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2441
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2442
    ^ self doubleAt:index put:aFloat
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2443
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2444
    "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
  2445
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2446
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2447
ieeeFloatAt:index
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2448
    "retrieve the 4 bytes starting at index as a float.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2449
     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
  2450
     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
  2451
     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
  2452
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2453
    "
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2454
     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
  2455
     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
  2456
     to an IBM 370 or old VAX etc.
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2457
     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
  2458
     no problem.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2459
    "
9258
83c940f349ea isIEEEFormat
Claus Gittinger <cg@exept.de>
parents: 9185
diff changeset
  2460
    ShortFloat isIEEEFormat ifFalse:[self error:'unsupported operation'].
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2461
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2462
    ^ self floatAt:index
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2463
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2464
    "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
  2465
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2466
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2467
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
  2468
    "store the value of the argument, aFloat into the receiver
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2469
     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
  2470
     Storage is in IEEE floating point single precision format.
19629
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2471
     (i.e. 4 bytes are stored in the native byte order). 
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2472
     Since ST/X floats are really doubles, 
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2473
     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
  2474
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2475
    "
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2476
     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
  2477
     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
  2478
     to an IBM 370 or old VAX etc.
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2479
     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
  2480
     no problem.
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2481
    "
9258
83c940f349ea isIEEEFormat
Claus Gittinger <cg@exept.de>
parents: 9185
diff changeset
  2482
    ShortFloat isIEEEFormat ifFalse:[self error:'unsupported operation'].
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2483
16320
dcb66fff0a89 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15836
diff changeset
  2484
    self floatAt:index put:aFloat
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2485
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  2486
    "Created: / 5.3.1998 / 10:51:11 / stefan"
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2487
! !
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2488
13724
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  2489
!UninterpretedBytes methodsFor:'accessing-longlongs (64bit)'!
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2490
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2491
signedInt64At:index
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2492
    "return the 8-bytes starting at index as a signed Integer.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2493
     The index is a smalltalk index (i.e. 1-based).
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2494
     The value is retrieved in the machines natural byte order.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2495
     This may be worth a primitive."
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
    |w|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2498
19629
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2499
    w := self unsignedInt64At:index MSB:(UninterpretedBytes isBigEndian).
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2500
    (w > (16r7FFFFFFFFFFFFFFF)) ifTrue:[
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2501
        ^ w - (16r10000000000000000)
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2502
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2503
    ^ w
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2504
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2505
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2506
     |b|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2507
     b := ByteArray new:4.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2508
     b unsignedInt64At:1 put:16rFFFFFFFFFFFFFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2509
     (b signedInt64At:1)
3459
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
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2512
    "Modified: / 1.7.1996 / 21:11:28 / cg"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2513
    "Created: / 5.3.1998 / 14:40:05 / stefan"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2514
    "Modified: / 5.3.1998 / 14:58:32 / stefan"
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
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2517
signedInt64At:index MSB:msb
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2518
    "return the 8-bytes starting at index as a signed Integer.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2519
     The index is a smalltalk index (i.e. 1-based).
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2520
     The value is retrieved in the given byte order.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2521
     This may be worth a primitive."
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2522
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2523
    |w|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2524
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2525
    w := self unsignedInt64At:index MSB:msb.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2526
    (w > (16r7FFFFFFFFFFFFFFF)) ifTrue:[
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2527
        ^ w - (16r10000000000000000)
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2528
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2529
    ^ w
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2530
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2531
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2532
     |b|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2533
     b := ByteArray new:4.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2534
     b unsignedLongLongAt:1 put:16rFFFFFFFFFFFFFFFF.
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2535
     (b longLongAt:1 msb:true)
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2536
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2537
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2538
    "Modified: / 5.3.1998 / 12:06:28 / stefan"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2539
    "Created: / 5.3.1998 / 14:40:54 / stefan"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2540
    "Modified: / 9.5.1998 / 01:10:59 / cg"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2541
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2542
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2543
signedInt64At:byteIndex put:anInteger 
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2544
    "store a signed longLong (64bit) integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2545
     The index is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2546
     Same as #signedQuadWordAt:put: - for ST80 compatibility."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2547
19629
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2548
    ^ self signedInt64At:byteIndex put:anInteger MSB:(UninterpretedBytes isBigEndian)
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2549
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2550
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2551
signedInt64At:byteIndex put:anInteger MSB:msb
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2552
    "store a signed longLong (64bit) integer.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2553
     The index is a smalltalk index (i.e. 1-based).
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2554
     Same as #signedQuadWordAt:put: - for ST80 compatibility."
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2555
7813
3cc0b75d1684 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7812
diff changeset
  2556
    |v|
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2557
7813
3cc0b75d1684 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7812
diff changeset
  2558
    v := anInteger.
3cc0b75d1684 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7812
diff changeset
  2559
    anInteger < 0 ifTrue:[
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2560
        v := v + 16r10000000000000000
7813
3cc0b75d1684 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7812
diff changeset
  2561
    ].
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2562
    self unsignedInt64At:byteIndex put:v MSB:msb.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2563
    ^ anInteger
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2564
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2565
    "Created: / 9.5.1998 / 01:10:24 / cg"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2566
    "Modified: / 9.5.1998 / 01:13:34 / cg"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2567
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2568
19629
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2569
signedInt64AtLSB:byteIndex
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2570
    "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
  2571
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2572
     The value is retrieved with least significant byte first"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2573
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2574
    ^ self signedInt64At:byteIndex MSB:false
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2575
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2576
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2577
signedInt64AtLSB:byteIndex put:anInteger
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2578
    "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
  2579
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2580
     The integer is stored with least significant byte first."
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2581
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2582
    ^ self signedInt64At:byteIndex put:anInteger MSB:false
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2583
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2584
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2585
signedInt64AtMSB:byteIndex
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2586
    "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
  2587
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2588
     The value is retrieved with most significant byte first"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2589
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2590
    ^ self signedInt64At:byteIndex MSB:true
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2591
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2592
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2593
signedInt64AtMSB:byteIndex put:anInteger
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2594
    "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
  2595
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2596
     The integer is stored with least significant byte first."
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2597
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2598
    ^ self signedInt64At:byteIndex put:anInteger MSB:true
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2599
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2600
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2601
unsignedInt64At:byteIndex
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2602
    "return the 8-bytes starting at index in the machine's native
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2603
     byteorder as an unsigned integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2604
     The index is a smalltalk index (i.e. 1-based)"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2605
19629
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2606
   ^ self unsignedInt64At:byteIndex MSB:(UninterpretedBytes isBigEndian)
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2607
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2608
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2609
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2610
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2611
     b := ByteArray withAll:#(1 2 3 4 5 6 7 8).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2612
     (b unsignedLongLongAt:1 bigEndian:false) printStringRadix:16
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2613
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2614
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2615
    "Modified: / 5.11.1996 / 14:06:21 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2616
    "Modified: / 5.3.1998 / 14:04:44 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2617
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2618
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2619
unsignedInt64At:byteIndex MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2620
    "return the 8-bytes starting at index as an unsigned integer.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2621
     The index is a smalltalk index (i.e. 1-based).
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2622
     Depending on msb, the value is retrieved MSB or LSB-first."
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2623
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2624
    |l
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2625
     bIdx  "{ Class: SmallInteger }"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2626
     delta "{ Class: SmallInteger }"|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2627
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2628
    l := LargeInteger basicNew numberOfDigits:8.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2629
    msb ifTrue:[
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2630
        bIdx := byteIndex + 7.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2631
        delta := -1
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2632
    ] ifFalse:[
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2633
        bIdx := byteIndex.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2634
        delta := 1
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2635
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2636
    1 to:8 do:[:i |
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2637
        l digitAt:i put:(self byteAt:bIdx).
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2638
        bIdx := bIdx + delta
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2639
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2640
    ^ l compressed
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2641
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2642
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2643
     |b|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2644
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2645
     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
  2646
     (b unsignedLongLongAt:1 bigEndian:false) printStringRadix:16
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2647
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2648
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2649
    "Modified: / 5.11.1996 / 14:06:21 / cg"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2650
    "Modified: / 5.3.1998 / 14:04:44 / stefan"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2651
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2652
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2653
unsignedInt64At:byteIndex put:anInteger 
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2654
    "set the 8-bytes starting at index from the (unsigned) Integer value.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2655
     The index is a smalltalk index (i.e. 1-based).
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2656
     The value must be in the range 0 to 16rFFFFFFFFFFFFFFFF.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2657
     The value is stored in the machine's natural byteorder."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2658
19629
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2659
    ^ self unsignedInt64At:byteIndex put:anInteger MSB:(UninterpretedBytes isBigEndian)
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2660
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2661
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2662
     |b|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2663
     b := ByteArray new:10.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2664
     b unsignedInt64At:1 put:16r0807060504030201 MSB:false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2665
     b unsignedInt64At:1 put:16r0807060504030201 MSB:true.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2666
     b inspect
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2667
    "
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2668
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2669
    "Created: / 5.3.1998 / 14:06:02 / stefan"
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2670
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2671
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2672
unsignedInt64At:byteIndex put:anInteger MSB:msb
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2673
    "set the 8-bytes starting at index from the (unsigned) Integer value.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2674
     The index is a smalltalk index (i.e. 1-based).
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2675
     The value must be in the range 0 to 16rFFFFFFFFFFFFFFFF.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2676
     Depending on msb, the value is stored MSB-first or LSB-first."
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2677
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2678
    |bIdx  "{ Class: SmallInteger }"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2679
     delta "{ Class: SmallInteger }"|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2680
20595
9ee758b143e9 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 20373
diff changeset
  2681
    ((anInteger < 0) 
9ee758b143e9 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 20373
diff changeset
  2682
     or:[anInteger class ~~ SmallInteger 
9ee758b143e9 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 20373
diff changeset
  2683
         and:[anInteger > 16rFFFFFFFFFFFFFFFF]]) ifTrue:[
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2684
        ^ self elementBoundsError:anInteger
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2685
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2686
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2687
    msb ifTrue:[
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2688
        bIdx := byteIndex + 7.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2689
        delta := -1
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2690
    ] ifFalse:[
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2691
        bIdx := byteIndex.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2692
        delta := 1
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2693
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2694
    1 to:8 do:[:i |
19351
07dede3d264c #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19349
diff changeset
  2695
        self byteAt:bIdx put:(anInteger digitAt:i).
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2696
        bIdx := bIdx + delta.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2697
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2698
    ^ anInteger
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2699
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2700
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2701
     |b|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2702
     b := ByteArray new:8.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2703
     b unsignedLongLongAt:1 put:16r0807060504030201 bigEndian:false.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2704
     b inspect
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2705
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2706
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2707
    "Created: / 5.3.1998 / 14:06:02 / stefan"
19629
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2708
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2709
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2710
unsignedInt64AtLSB:byteIndex
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2711
    "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
  2712
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2713
     The value is retrieved with most significant byte first"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2714
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2715
    ^ self unsignedInt64At:byteIndex MSB:false
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2716
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2717
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2718
unsignedInt64AtLSB:byteIndex put:anInteger
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2719
    "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
  2720
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2721
     The integer is stored with least significant byte first."
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2722
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2723
    ^ self unsignedInt64At:byteIndex put:anInteger MSB:false
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2724
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2725
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2726
unsignedInt64AtMSB:byteIndex
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2727
    "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
  2728
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2729
     The value is retrieved with most significant byte first"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2730
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2731
    ^ self unsignedInt64At:byteIndex MSB:true
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2732
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2733
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2734
unsignedInt64AtMSB:byteIndex put:anInteger
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2735
    "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
  2736
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2737
     The integer is stored with least significant byte first."
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2738
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  2739
    ^ self unsignedInt64At:byteIndex put:anInteger MSB:true
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2740
! !
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2741
13724
69a4c9dc2f22 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 13576
diff changeset
  2742
!UninterpretedBytes methodsFor:'accessing-longs (32bit)'!
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  2743
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2744
signedInt32At:byteIndex
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2745
    "return the 4-bytes starting at byteIndex as a signed Integer.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  2746
     The index is a smalltalk index (i.e. 1-based).
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2747
     The value is retrieved in the machine's natural byte order,
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2748
     therefore, this should only be used for byte-data which is
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2749
     only used inside this machine.
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2750
     To setup binary data packets which are to be sent to other machines,
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2751
     or stored into a file, always use the corresponding xxx:MSB: method
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2752
     and specify a definite byteOrder."
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2753
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2754
    |w|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2755
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2756
%{
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2757
    /*
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2758
     * handle the most common cases fast ...
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2759
     */
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2760
    if (__isSmallInteger(byteIndex)) {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2761
        unsigned char *cp;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2762
        INT sz;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2763
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2764
        __fetchBytePointerAndSize__(self, &cp, &sz);
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2765
        if (cp) {
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2766
            INT idx = __intVal(byteIndex) - 1;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2767
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2768
            if ((idx >= 0) && ((idx+(4-1)) < sz)) {
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2769
                int iVal;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2770
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2771
                cp += idx;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2772
#if defined(__i386__)
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2773
                /*
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2774
                 * aligned or not, we don't care (i386 can do both)
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
                {
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2777
                    iVal = ((int *)cp)[0];
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2778
                    RETURN (__MKINT(iVal));
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2779
                }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2780
#else
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2781
# if defined(__x86_64__)
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2782
                /*
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2783
                 * aligned or not, we don't care (i386 can do both)
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2784
                 */
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2785
                {
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2786
                    iVal = ((int *)cp)[0];
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2787
                    RETURN (__mkSmallInteger(iVal));
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2788
                }
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2789
# else
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2790
                /*
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2791
                 * aligned ?
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2792
                 */
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2793
                if (((INT)cp & (sizeof(int)-1)) == 0) {
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2794
                    iVal = ((int *)cp)[0];
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2795
                } else {
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2796
#  ifdef __LSBFIRST__
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2797
                    iVal = cp[0] & 0xFF;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2798
                    iVal += (cp[1] & 0xFF)<<8;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2799
                    iVal += (cp[2] & 0xFF)<<16;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2800
                    iVal += (cp[3] & 0xFF)<<24;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2801
#  else
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2802
#   ifdef __MSBFIRST__
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2803
                    iVal = cp[0] & 0xFF;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2804
                    iVal = (iVal<<8)+(cp[1] & 0xFF);
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2805
                    iVal = (iVal<<8)+(cp[2] & 0xFF);
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2806
                    iVal = (iVal<<8)+(cp[3] & 0xFF);
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2807
#   else
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2808
                    {
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2809
                        union {
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2810
                            int i;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2811
                            char c[4];
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2812
                        } u;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2813
                        u.c[0] = cp[0]; 
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2814
                        u.c[1] = cp[1]; 
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2815
                        u.c[2] = cp[2]; 
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2816
                        u.c[3] = cp[3];
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2817
                        iVal = u.i;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2818
                    }
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2819
#   endif
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2820
#  endif
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2821
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2822
#  if __POINTER_SIZE__ == 8
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2823
                    RETURN (__mkSmallInteger(iVal));
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2824
#  else
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2825
                    RETURN (__MKINT(iVal));
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2826
#  endif
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2827
                }
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2828
# endif
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2829
#endif
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2830
            }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2831
        }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2832
    }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2833
%}.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2834
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2835
    ^ 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
  2836
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2837
    "
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2838
     |b|
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2839
     b := ByteArray new:4.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2840
     b unsignedLongAt:1 put:16rFFFFFFFF.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2841
     (b longAt:1)
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2842
    "
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2843
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2844
    "Modified: / 1.7.1996 / 21:11:28 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2845
    "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
  2846
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2847
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2848
signedInt32At:byteIndex MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2849
    "return the 4-bytes starting at byteIndex as a (signed) Integer.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2850
     The byteIndex is a smalltalk index (i.e. 1-based).
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2851
     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
  2852
     LSB-first otherwise."
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2853
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  2854
    |val
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2855
     ival "{ Class: SmallInteger }"
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2856
     i    "{ Class: SmallInteger }"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2857
     bHH  "{ Class: SmallInteger }"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2858
     bHL  "{ Class: SmallInteger }"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2859
     bLH  "{ Class: SmallInteger }"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2860
     bLL  "{ Class: SmallInteger }"|
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2861
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2862
%{
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2863
    /*
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2864
     * handle the most common cases fast ...
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2865
     */
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2866
    if (__isSmallInteger(byteIndex)) {
19047
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2867
        unsigned char *cp;
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2868
        INT sz;
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2869
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2870
        __fetchBytePointerAndSize__(self, &cp, &sz);
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2871
        if (cp) {
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2872
            INT idx = __intVal(byteIndex) - 1;
19047
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2873
            int iVal;
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2874
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2875
            cp += idx;
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2876
            if ((idx >= 0) && ((idx+(sizeof(int)-1)) < sz)) {
19047
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2877
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2878
                if (msb == true) {
8901
824a89d0b5c7 alpha64 vs. POINTER_SIZE cleanup
Claus Gittinger <cg@exept.de>
parents: 8893
diff changeset
  2879
#if defined(__MSBFIRST__)
19047
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2880
                    if (((INT)cp & (sizeof(int)-1))== 0) {
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2881
                        /*
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2882
                         * aligned
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2883
                         */
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2884
                        iVal = ((int *)cp)[0];
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2885
                    } else
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2886
#endif
19047
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2887
                    {
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2888
                        iVal = cp[0];
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2889
                        iVal = (iVal << 8) | cp[1];
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2890
                        iVal = (iVal << 8) | cp[2];
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2891
                        iVal = (iVal << 8) | cp[3];
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2892
                    }
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2893
                } else {
8901
824a89d0b5c7 alpha64 vs. POINTER_SIZE cleanup
Claus Gittinger <cg@exept.de>
parents: 8893
diff changeset
  2894
#if defined(__i386__) || (defined(UNALIGNED_FETCH_OK) && defined(__LSBFIRST__))
19047
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2895
                    /*
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2896
                     * aligned or not - we don't care
19047
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2897
                     * (i386 can fetch unaligned)
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2898
                     */
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2899
                    iVal = ((int *)cp)[0];
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2900
#else
8901
824a89d0b5c7 alpha64 vs. POINTER_SIZE cleanup
Claus Gittinger <cg@exept.de>
parents: 8893
diff changeset
  2901
# if defined(__LSBFIRST__)
19047
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2902
                    if (((INT)cp & (sizeof(int)-1))== 0) {
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2903
                        /*
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2904
                         * aligned
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2905
                         */
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2906
                        iVal = ((int *)cp)[0];
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2907
                    } else
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2908
# endif
19047
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2909
                    {
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2910
                        iVal = cp[3];
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2911
                        iVal = (iVal << 8) | cp[2];
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2912
                        iVal = (iVal << 8) | cp[1];
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2913
                        iVal = (iVal << 8) | cp[0];
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2914
                    }
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2915
#endif
19047
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2916
                }
8901
824a89d0b5c7 alpha64 vs. POINTER_SIZE cleanup
Claus Gittinger <cg@exept.de>
parents: 8893
diff changeset
  2917
#if __POINTER_SIZE__ == 8
19047
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2918
                RETURN (__mkSmallInteger(iVal));
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2919
#else
19047
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2920
                RETURN (__MKINT(iVal));
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2921
#endif
19047
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2922
            }
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2923
        }
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2924
    }
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2925
%}.
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2926
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2927
    val := self unsignedInt32At:byteIndex MSB:msb.
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2928
    (val > (16r7FFFFFFF)) ifTrue:[
19047
Claus Gittinger <cg@exept.de>
parents: 19046
diff changeset
  2929
        ^ val - (16r100000000)
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2930
    ].
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2931
    ^ val
3207
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
    "
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2934
     |b|
4515
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2935
1310283ed45d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4425
diff changeset
  2936
     b := ByteArray withAll:#(1 2 3 4).
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2937
     (b signedInt32At:1 MSB:true) printStringRadix:16.    
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2938
     (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
  2939
    "
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2940
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2941
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2942
signedInt32At:byteIndex put:anInteger
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2943
    "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
  2944
     The index is a smalltalk index (i.e. 1-based).
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2945
     The integer is stored in the machine's natural byte order."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2946
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2947
    ^ 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
  2948
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2949
    "
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2950
     |b|
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2951
     b := ByteArray new:4.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2952
     b longAt:1 put:-1.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2953
     (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
  2954
    "
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2955
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2956
    "Modified: / 1.7.1996 / 21:11:39 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2957
    "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
  2958
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2959
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2960
signedInt32At:byteIndex put:anInteger MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2961
    "set the 4-bytes starting at byteIndex from the signed Integer value.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2962
     The byteIndex is a smalltalk index (i.e. 1-based).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2963
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2964
     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
  2965
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2966
    |v|
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  2967
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2968
%{
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2969
    /*
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2970
     * handle the most common case fast ...
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2971
     */
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2972
    if (__isSmallInteger(byteIndex)) {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2973
        unsigned char *cp;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2974
        INT sz;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2975
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2976
        __fetchBytePointerAndSize__(self, &cp, &sz);
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2977
        if (cp) {
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2978
            INT idx = __intVal(byteIndex) - 1;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2979
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  2980
            if ((idx >= 0) && ((idx+3) < sz)) {
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2981
                cp += idx;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2982
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2983
                if (__isSmallInteger(anInteger)) {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2984
                    INT __v = __intVal(anInteger);
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2985
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2986
# if __POINTER_SIZE__ == 8
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2987
                    if ((__v < -0x80000000L) || (__v > 0x7FFFFFFF)) {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2988
                        goto badArg;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2989
                    }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2990
# endif
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2991
                    if (((INT)cp & 3) == 0) {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2992
                        /*
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2993
                         * aligned
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2994
                         */
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2995
                        if (
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2996
# ifdef __LSBFIRST__
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  2997
                            (msb == false)
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
#  ifdef __MSBFIRST__
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3000
                            (msb == true)
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3001
#  else
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3002
                            (0)
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3003
#  endif
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3004
# endif
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3005
                        ) {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3006
                            ((int *)cp)[0] = (int)__v;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3007
                            RETURN (anInteger);
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3008
                        }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3009
                    }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3010
                    if (msb == false) {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3011
                        cp[0] = __v & 0xFF;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3012
                        cp[1] = (__v>>8) & 0xFF;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3013
                        cp[2] = (__v>>16) & 0xFF;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3014
                        cp[3] = (__v>>24) & 0xFF;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3015
                    } else {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3016
                        cp[0] = (__v>>24) & 0xFF;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3017
                        cp[1] = (__v>>16) & 0xFF;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3018
                        cp[2] = (__v>>8) & 0xFF;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3019
                        cp[3] = __v & 0xFF;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3020
                    }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3021
                    RETURN (anInteger);
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3022
                }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3023
            }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3024
        }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3025
    }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3026
  badArg: ;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3027
%}.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3028
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3029
    anInteger >= 0 ifTrue:[
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3030
        v := anInteger
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3031
    ] ifFalse:[
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3032
        v := anInteger + 16r100000000
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3033
    ].
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3034
    self unsignedInt32At:byteIndex put:v MSB:msb.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3035
    ^ anInteger
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3036
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3037
    "
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3038
     |b|
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3039
     b := ByteArray new:4.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3040
     b longAt:1 put:-1.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3041
     (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
  3042
    "
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3043
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3044
    "Modified: / 1.7.1996 / 21:11:39 / cg"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3045
    "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
  3046
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  3047
19629
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3048
signedInt32AtLSB:byteIndex
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3049
    "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
  3050
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3051
     The value is retrieved with least significant byte first"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3052
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3053
    ^ self signedInt32At:byteIndex MSB:false
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
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3056
signedInt32AtLSB:byteIndex put:anInteger
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3057
    "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
  3058
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3059
     The integer is stored with least significant byte first."
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3060
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3061
    ^ self signedInt32At:byteIndex put:anInteger MSB:false
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3062
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3063
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3064
signedInt32AtMSB:byteIndex
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3065
    "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
  3066
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3067
     The value is retrieved with most significant byte first"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3068
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3069
    ^ self signedInt32At:byteIndex MSB:true
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3070
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3071
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3072
signedInt32AtMSB:byteIndex put:anInteger
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3073
    "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
  3074
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3075
     The integer is stored with most significant byte first."
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3076
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3077
    ^ self signedInt32At:byteIndex put:anInteger MSB:true
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3078
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3079
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3080
unsignedInt32At:byteIndex
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
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).
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3083
     The value is retrieved in the machine's natural byte order."
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3084
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3085
    ^ self unsignedInt32At:byteIndex MSB:IsBigEndian
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3086
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3087
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3088
     |b|
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3089
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3090
     b := ByteArray withAll:#(1 2 3 4).
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3091
     (b unsignedInt32At:1) printStringRadix:16      
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3092
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3093
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3094
    "Modified: / 5.3.1998 / 14:57:35 / stefan"
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3095
!
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3096
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3097
unsignedInt32At:byteIndex MSB:msb
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3098
    "return the 4-bytes starting at index as an (unsigned) Integer.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  3099
     The index is a smalltalk index (i.e. 1-based).
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3100
     The value is retrieved MSB-first, if the msb-arg is true;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3101
     LSB-first otherwise."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3102
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3103
    |val
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3104
     ival "{ Class: SmallInteger }"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3105
     i    "{ Class: SmallInteger }"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3106
     bHH  "{ Class: SmallInteger }"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3107
     bHL  "{ Class: SmallInteger }"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3108
     bLH  "{ Class: SmallInteger }"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3109
     bLL  "{ Class: SmallInteger }"|
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3110
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3111
%{
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3112
    /*
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3113
     * handle the most common cases fast ...
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3114
     */
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3115
    if (__isSmallInteger(byteIndex)) {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3116
        unsigned char *cp;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3117
        INT sz;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3118
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3119
        __fetchBytePointerAndSize__(self, &cp, &sz);
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3120
        if (cp) {
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3121
            INT idx = __intVal(byteIndex) - 1;
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3122
            unsigned int iVal;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3123
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3124
            if ((idx >= 0) && ((idx+(sizeof(int)-1)) < sz)) {
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3125
                cp += idx;
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3126
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3127
                if (msb == true) {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3128
#if defined(__MSBFIRST__)
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3129
                    if (((INT)cp & (sizeof(int)-1))== 0) {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3130
                        /*
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3131
                         * aligned
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3132
                         */
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3133
                        iVal = ((unsigned int *)cp)[0];
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3134
                    } else
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3135
#endif
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3136
                    {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3137
                        iVal = cp[0];
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3138
                        iVal = (iVal << 8) | cp[1];
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3139
                        iVal = (iVal << 8) | cp[2];
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3140
                        iVal = (iVal << 8) | cp[3];
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3141
                    }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3142
                } else {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3143
#if defined(__i386__) || (defined(UNALIGNED_FETCH_OK) && defined(__LSBFIRST__))
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3144
                    /*
20816
986549374231 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20595
diff changeset
  3145
                     * aligned or not - we don't care
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3146
                     * (i386 can fetch unaligned)
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3147
                     */
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3148
                    iVal = ((unsigned int *)cp)[0];
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3149
#else
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3150
# if defined(__LSBFIRST__)
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3151
                    if (((INT)cp & (sizeof(int)-1))== 0) {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3152
                        /*
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3153
                         * aligned
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3154
                         */
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3155
                        iVal = ((unsigned int *)cp)[0];
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3156
                    } else
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3157
# endif
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3158
                    {
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3159
                        iVal = cp[3];
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3160
                        iVal = (iVal << 8) | cp[2];
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3161
                        iVal = (iVal << 8) | cp[1];
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3162
                        iVal = (iVal << 8) | cp[0];
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3163
                    }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3164
#endif
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3165
                }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3166
#if __POINTER_SIZE__ == 8
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3167
                RETURN (__mkSmallInteger(iVal));
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3168
#else
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3169
                RETURN (__MKUINT(iVal));
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3170
#endif
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3171
            }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3172
        }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3173
    }
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3174
%}.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3175
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3176
    "/ fallBack code - non ByteArray-like receiver
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3177
    "/ or funny byteIndex
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3178
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3179
    i := byteIndex.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3180
    msb ifFalse:[
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3181
        bLL := self byteAt:i.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3182
        bLH := self byteAt:(i+1).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3183
        bHL := self byteAt:(i+2).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3184
        bHH := self byteAt:(i+3).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3185
    ] ifTrue:[        
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3186
        bHH := self byteAt:i.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3187
        bHL := self byteAt:(i+1).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3188
        bLH := self byteAt:(i+2).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3189
        bLL := self byteAt:(i+3).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3190
    ].
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3191
    ival := (bHH bitShift:8) + bHL.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3192
    ival := (ival bitShift:8) + bLH.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3193
    val := (ival bitShift:8) + bLL.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3194
    ^ val
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|
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3198
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3199
     b := ByteArray withAll:#(1 2 3 4).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3200
     (b unsignedInt32At:1 MSB:true) printStringRadix:16.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3201
     (b unsignedInt32At:1 MSB:false) printStringRadix:16
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
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3205
unsignedInt32At:byteIndex put:anInteger
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3206
    "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
  3207
     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
  3208
     The value must be in the range 0 to 16rFFFFFFFF.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3209
     The value is stored in the machine's native byte order"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3210
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3211
    ^ self unsignedInt32At:byteIndex put:anInteger MSB:IsBigEndian
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3212
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3213
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3214
     |b|
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3215
     b := ByteArray new:8.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3216
     b doubleWordAt:1 put:16r04030201 MSB:true.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3217
     b doubleWordAt:5 put:16r04030201 MSB:false.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3218
     b inspect
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3219
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3220
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3221
    "Modified: / 21.1.1998 / 17:43:34 / cg"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3222
    "Modified: / 5.3.1998 / 11:42:17 / stefan"
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3223
!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3224
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3225
unsignedInt32At:byteIndex put:anInteger MSB:msb
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3226
    "set the 4-bytes starting at byteIndex from the unsigned Integer value.
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3227
     The byteIndex is a smalltalk index (i.e. 1-based).
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3228
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3229
     This is the ST80 version of #doubleWordAt:put:"
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3230
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3231
    |v i b1 b2 b3 b4|
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3232
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3233
%{
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3234
    /*
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3235
     * handle the most common case fast ...
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3236
     */
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3237
    if (__isSmallInteger(byteIndex)) {
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3238
        unsigned char *cp;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3239
        INT sz;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3240
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3241
        __fetchBytePointerAndSize__(self, &cp, &sz);
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3242
        if (cp) {
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3243
            INT idx = __intVal(byteIndex) - 1;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3244
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3245
            if ((idx >= 0) && ((idx+3) < sz)) {
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3246
                cp += idx;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3247
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3248
                if (__isSmallInteger(anInteger)) {
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3249
                    INT __v = __intVal(anInteger);
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3250
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3251
# if __POINTER_SIZE__ == 8
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3252
                    if ((__v < 0) || (__v > 0xFFFFFFFF)) {
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3253
                        goto badArg;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3254
                    }
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3255
# endif
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3256
                    if (((INT)cp & 3) == 0) {
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3257
                        /*
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3258
                         * aligned
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3259
                         */
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3260
                        if (
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3261
# ifdef __LSBFIRST__
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3262
                            (msb == false)
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
#  ifdef __MSBFIRST__
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3265
                            (msb == true)
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3266
#  else
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3267
                            (0)
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3268
#  endif
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3269
# endif
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3270
                        ) {
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3271
                            ((int *)cp)[0] = (int)__v;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3272
                            RETURN (anInteger);
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3273
                        }
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3274
                    }
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3275
                    if (msb == false) {
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3276
                        cp[0] = __v & 0xFF;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3277
                        cp[1] = (__v>>8) & 0xFF;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3278
                        cp[2] = (__v>>16) & 0xFF;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3279
                        cp[3] = (__v>>24) & 0xFF;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3280
                    } else {
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3281
                        cp[0] = (__v>>24) & 0xFF;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3282
                        cp[1] = (__v>>16) & 0xFF;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3283
                        cp[2] = (__v>>8) & 0xFF;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3284
                        cp[3] = __v & 0xFF;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3285
                    }
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3286
                    RETURN (anInteger);
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3287
                }
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3288
            }
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3289
        }
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3290
    }
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3291
  badArg: ;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3292
%}.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3293
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3294
    ((anInteger < 0) or:[anInteger > 16rFFFFFFFF]) ifTrue:[
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3295
        ^ self elementBoundsError:anInteger
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3296
    ].
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3297
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3298
    i := byteIndex.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3299
    msb ifTrue:[
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3300
        b1 := (anInteger digitAt:4).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3301
        b2 := (anInteger digitAt:3).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3302
        b3 := (anInteger digitAt:2).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3303
        b4 := (anInteger digitAt:1).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3304
    ] ifFalse:[
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3305
        b1 := (anInteger digitAt:1).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3306
        b2 := (anInteger digitAt:2).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3307
        b3 := (anInteger digitAt:3).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3308
        b4 := (anInteger digitAt:4).
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3309
    ].
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3310
    self byteAt:i     put:b1.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3311
    self byteAt:(i+1) put:b2.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3312
    self byteAt:(i+2) put:b3.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3313
    self byteAt:(i+3) put:b3.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3314
    ^ anInteger
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3315
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3316
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3317
     |b|
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3318
     b := ByteArray new:4.
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3319
     b signedInt32At:1 put:-1.
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3320
     (b unsignedInt32At:1) printStringRadix:16 
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3321
    "
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3322
    "
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3323
     |b|
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3324
     b := ByteArray new:4.
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3325
     b unsignedInt32At:1 put:16rFFFFFFFF.
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3326
     (b signedInt32At:1) 
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3327
    "
19629
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
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3330
unsignedInt32AtLSB:byteIndex
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3331
    "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
  3332
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3333
     The value is retrieved with least significant byte first"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3334
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3335
    ^ self unsignedInt32At:byteIndex MSB:false
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
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3338
unsignedInt32AtLSB:byteIndex put:anInteger
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3339
    "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
  3340
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3341
     The integer is stored with least significant byte first."
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3342
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3343
    ^ self unsignedInt32At:byteIndex put:anInteger MSB:false
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3344
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3345
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3346
unsignedInt32AtMSB:byteIndex
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3347
    "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
  3348
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3349
     The value is retrieved with most significant byte first"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3350
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3351
    ^ self unsignedInt32At:byteIndex MSB:true
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3352
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3353
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3354
unsignedInt32AtMSB:byteIndex put:anInteger
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3355
    "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
  3356
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3357
     The integer is stored with most significant byte first."
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3358
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3359
    ^ self unsignedInt32At:byteIndex put:anInteger MSB:true
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3360
! !
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3361
20961
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3362
!UninterpretedBytes methodsFor:'accessing-pointers'!
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3363
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3364
pointerAt:byteIndex
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3365
    "get a pointer starting at byteIndex as ExternalAddress.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3366
     The byteIndex is a smalltalk index (i.e. 1-based).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3367
     Only aligned accesses are allowed.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3368
     The pointer is of native cpu's size (4 or 8 bytes)"
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3369
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3370
%{
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3371
    if (__isSmallInteger(byteIndex)) {
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3372
        unsigned char *cp;
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3373
        INT sz;
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3374
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3375
        __fetchBytePointerAndSize__(self, &cp, &sz);
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3376
        if (cp) {
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3377
            INT idx = __smallIntegerVal(byteIndex) - 1;
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3378
            char *pointer;
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3379
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3380
            if ((idx >= 0) && ((idx+(sizeof(pointer)-1)) < sz)) {
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3381
                cp += idx;
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3382
                /*
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3383
                 * aligned
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3384
                 */
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3385
                if (((INT)cp & (sizeof(pointer)-1)) == 0) {
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3386
                    pointer = ((char **)cp)[0];
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3387
                    RETURN (__MKEXTERNALADDRESS(pointer));
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3388
                } else {
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3389
#if 0
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3390
                    printf("cp UNALIGNED (%"_lx_")\n", (INT)cp);
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3391
#endif
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3392
                }
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3393
            } else {
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3394
#if 0
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3395
                printf("idx(%"_ld_")+(sizeof(pointer)-1) (%d) >= sz (%"_ld_")\n",
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3396
                        idx, (int)(sizeof(pointer)-1), sz);
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3397
#endif
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3398
            }
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3399
        } else {
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3400
#if 0
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3401
            printf("cp is NULL\n");
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3402
#endif
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3403
        }
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3404
    } else {
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3405
#if 0
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3406
        printf("bad index\n");
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3407
#endif
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3408
    }
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3409
bad:;
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3410
%}.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3411
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3412
    self primitiveFailed.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3413
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3414
    "
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3415
     |b|
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3416
     b := ByteArray new:(ExternalAddress pointerSize).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3417
     b pointerAt:1 put:(ExternalAddress newAddress:16r12345678).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3418
     Transcript showCR:((b unsignedInt32At:1) printStringRadix:16).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3419
     Transcript showCR:((b pointerAt:1)).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3420
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3421
     |b|
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3422
     b := ByteArray new:(ExternalAddress pointerSize).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3423
     b pointerAt:1 put:(ExternalAddress newAddress:16r12345678abcdef).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3424
     Transcript showCR:((b unsignedInt64At:1) printStringRadix:16).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3425
     Transcript showCR:((b pointerAt:1)).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3426
    "
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3427
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3428
    "Modified (comment): / 14-11-2016 / 17:32:23 / cg"
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3429
!
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3430
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3431
pointerAt:byteIndex put:value
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3432
    "set the pointer starting at byteIndex from the integer or externalAddress value.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3433
     The byteIndex is a smalltalk index (i.e. 1-based).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3434
     Only aligned accesses are allowed.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3435
     The pointer is of native cpu's size (4 or 8 bytes).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3436
     The value may be either an ExternalAddress, ExternalBytes or an Integer"
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3437
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3438
%{
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3439
    OBJ *pointer;
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3440
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3441
    if (__isExternalAddressLike(value)) {
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3442
        pointer = __externalAddressVal(value);
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3443
    } else if (__isExternalBytesLike(value)) {
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3444
        pointer = __externalBytesVal(value);
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3445
        if (pointer == (OBJ *)0)
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3446
            pointer = 0;
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3447
    } else if (value == nil) {
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3448
        pointer = 0;
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3449
    } else if (__isSmallInteger(value)) {
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3450
        pointer = (OBJ *)__intVal(value);
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3451
    } else {
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3452
        if ((pointer = (OBJ *)__unsignedLongIntVal(value)) == 0) {
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3453
            goto bad;
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3454
        }
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3455
    }
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3456
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3457
    if (__isSmallInteger(byteIndex)) {
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3458
        unsigned char *cp;
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3459
        INT sz;
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3460
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3461
        __fetchBytePointerAndSize__(self, &cp, &sz);
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3462
        if (cp) {
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3463
            INT idx = __smallIntegerVal(byteIndex) - 1;
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3464
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3465
            if ((idx >= 0) && ((idx+(sizeof(pointer)-1)) < sz)) {
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3466
                cp += idx;
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3467
                /*
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3468
                 * aligned
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3469
                 */
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3470
                if (((INT)cp & (sizeof(pointer)-1)) == 0) {
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3471
                    ((char **)cp)[0] = (char *) pointer;
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3472
                    RETURN (value);
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3473
                }
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3474
            }
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3475
        }
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3476
    }
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3477
bad:;
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3478
%}.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3479
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3480
    self primitiveFailed.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3481
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3482
    "
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3483
     |b|
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3484
     b := ByteArray new:ExternalAddress pointerSize.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3485
     b pointerAt:1 put:(ExternalAddress newAddress:16r12345678).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3486
     (b unsignedLongAt:1) printStringRadix:16
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3487
    "
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3488
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3489
    "Created: / 05-03-1998 / 10:57:18 / stefan"
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3490
    "Modified (comment): / 14-11-2016 / 17:28:27 / cg"
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3491
!
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3492
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3493
pointerValueAt:byteIndex
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3494
    "get a pointer value starting at byteIndex as unsigned integer.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3495
     The byteIndex is a smalltalk index (i.e. 1-based).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3496
     Only aligned accesses are allowed.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3497
     The pointer is of native cpu's size (4 or 8 bytes).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3498
     This returns an int with sizeof the machines's native pointer (4 or 8 bytes)"
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3499
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3500
%{
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3501
    if (__isSmallInteger(byteIndex)) {
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3502
        unsigned char *cp;
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3503
        INT sz;
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3504
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3505
        __fetchBytePointerAndSize__(self, &cp, &sz);
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3506
        if (cp) {
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3507
            INT idx = __smallIntegerVal(byteIndex) - 1;
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3508
            char *pointer;
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3509
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3510
            if ((idx >= 0) && ((idx+(sizeof(pointer)-1)) < sz)) {
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3511
                cp += idx;
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3512
                /*
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3513
                 * aligned
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3514
                 */
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3515
                if (((INT)cp & (sizeof(pointer)-1)) == 0) {
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3516
                    pointer = ((char **)cp)[0];
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3517
                    RETURN (__MKUINT((INT)(pointer)));
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3518
                } else {
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3519
                    // printf("cp UNALIGNED (%"_lx_")\n", (INT)cp);
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3520
                }
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3521
            } else {
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3522
                // printf("idx(%"_ld_")+(sizeof(pointer)-1) (%d) >= sz (%"_ld_")\n",
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3523
                //        idx, (int)(sizeof(pointer)-1), sz);
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3524
            }
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3525
        } else {
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3526
            // printf("cp is NULL\n");
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3527
        }
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3528
    } else {
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3529
        // printf("bad index\n");
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3530
    }
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3531
bad:;
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3532
%}.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3533
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3534
    self primitiveFailed.
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3535
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3536
    "
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3537
     |b|
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3538
     b := ByteArray new:(ExternalAddress pointerSize).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3539
     b pointerAt:1 put:(ExternalAddress newAddress:16r12345678).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3540
     Transcript showCR:((b unsignedLongAt:1) printStringRadix:16).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3541
     Transcript showCR:((b pointerAt:1)).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3542
     Transcript showCR:((b pointerValueAt:1)).
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3543
    "
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3544
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3545
    "Modified (comment): / 14-11-2016 / 17:28:33 / cg"
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3546
! !
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  3547
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3548
!UninterpretedBytes methodsFor:'accessing-shorts (16bit)'!
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3549
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3550
signedInt16At:byteIndex
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3551
    "return the 2-bytes starting at index as a signed Integer.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3552
     The index is a smalltalk index (i.e. 1-based).
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3553
     The value is retrieved in the machine's natural byte order."
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3554
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3555
    ^ (self unsignedInt16At:byteIndex) signExtendedShortValue
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3556
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3557
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3558
     |b|
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3559
     b := ByteArray new:2.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3560
     b wordAt:1 put:16rFFFF.
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3561
     b signedWordAt:1
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3562
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3563
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3564
    "Modified: 1.7.1996 / 21:14:38 / cg"
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3565
!
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3566
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3567
signedInt16At:byteIndex MSB:msb
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3568
    "return the 2-bytes starting at index as a signed Integer.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  3569
     The index is a smalltalk index (i.e. 1-based).
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3570
     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
  3571
     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
  3572
     Notice: 
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3573
        the index is a byte index; thus, this allows for unaligned access to
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3574
        words on any boundary."
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3575
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3576
    |b1 "{ Class: SmallInteger }"
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3577
     b2 "{ Class: SmallInteger }"|
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3578
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3579
%{
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3580
    /*
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3581
     * handle the most common cases fast ...
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3582
     */
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3583
    if (__isSmallInteger(byteIndex)) {
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3584
        unsigned char *cp;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3585
        INT sz;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3586
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3587
        __fetchBytePointerAndSize__(self, &cp, &sz);
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3588
        if (cp) {
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3589
            INT idx = __intVal(byteIndex) - 1;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3590
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3591
            if ((idx >= 0) && ((idx+(2-1)) < sz)) {
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3592
                short sVal;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3593
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3594
                cp += idx;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3595
                if (msb == false) {
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3596
#if defined(__i386__) || (defined(__LSBFIRST__) && defined(UNALIGNED_FETCH_OK))
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3597
                    /*
20816
986549374231 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20595
diff changeset
  3598
                     * aligned or not, we don't care (i386 can do both)
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3599
                     */
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3600
                    sVal = ((short *)cp)[0];
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3601
#else
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3602
                    sVal = (cp[0] & 0xFF) | ((cp[1] & 0xFF) << 8);
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3603
#endif
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3604
                } else {
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3605
                    sVal = ((cp[0] & 0xFF) << 8) | (cp[1] & 0xFF);
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3606
                }
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3607
                RETURN (__mkSmallInteger(sVal));
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3608
            }
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3609
        }
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3610
    }
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3611
%}.
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3612
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3613
    b1 := self byteAt:byteIndex.
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3614
    b2 := self byteAt:(byteIndex + 1).
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3615
    msb ifTrue:[
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3616
        ^ ((b1 bitShift:8) + b2) signExtendedShortValue
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3617
    ].
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3618
    ^ ((b2 bitShift:8) + b1) signExtendedShortValue
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3619
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3620
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3621
signedInt16At:index put:anInteger
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3622
    "set the 2-bytes starting at index from the signed Integer value.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3623
     The index is a smalltalk index (i.e. 1-based).
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3624
     The stored value must be in the range -32768 .. +32676.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3625
     The value is stored in the machine's natural byte order."
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3626
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3627
    ^ self signedInt16At:index put:anInteger MSB:IsBigEndian
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3628
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3629
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3630
     |b|
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3631
     b := ByteArray new:4.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3632
     b signedInt16At:1 put:-2.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3633
     b signedInt16At:3 put:-3.
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3634
     b inspect
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
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3637
    "Modified: 1.7.1996 / 21:12:13 / cg"
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3638
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3639
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3640
signedInt16At:byteIndex put:anInteger MSB:msb
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3641
    "set the 2-bytes starting at byteIndex from the signed integer value.
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3642
     The byteIndex is a smalltalk index (i.e. 1-based).
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3643
     The stored value must be in the range -32768 .. +32676.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3644
     The value is stored MSB-first, if the msb-arg is true;
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3645
     LSB-first otherwise."
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3646
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3647
%{  /* NOCONTEXT */
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3648
    /*
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3649
     * handle the most common case fast ...
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3650
     */
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3651
    if (__isSmallInteger(byteIndex)) {
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3652
        unsigned char *cp;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3653
        INT sz;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3654
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3655
        __fetchBytePointerAndSize__(self, &cp, &sz);
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3656
        if (cp) {
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3657
            INT idx = __intVal(byteIndex) - 1;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3658
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3659
            if ((idx >= 0) && ((idx+1) < sz)) {
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3660
                cp += idx;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3661
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3662
                if (__isSmallInteger(anInteger)) {
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3663
                    INT __v = __intVal(anInteger);
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3664
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3665
                    if ((__v < -0x8000L) || (__v > 0x7FFF)) {
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3666
                        goto badArg;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3667
                    }
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3668
                    if (msb == false) { 
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3669
#if defined(__i386__) || (defined(__LSBFIRST__) && defined(UNALIGNED_FETCH_OK))
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3670
                        ((short *)cp)[0] = (short)__v;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3671
#else
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3672
                        cp[0] = __v & 0xFF;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3673
                        cp[1] = (__v >> 8) & 0xFF;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3674
#endif
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3675
                    } else {        
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3676
                        cp[0] = (__v >> 8) & 0xFF;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3677
                        cp[1] = __v & 0xFF;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3678
                    }
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3679
                    RETURN (anInteger);
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3680
                }
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3681
            }
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3682
        }
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3683
    }
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3684
  badArg: ;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3685
%}.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3686
    anInteger >= 0 ifTrue:[
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3687
        self unsignedInt16At:byteIndex put:anInteger MSB:msb.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3688
    ] ifFalse:[
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3689
        self unsignedInt16At:byteIndex put:(16r10000 + anInteger) MSB:msb.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3690
    ].
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3691
    ^ anInteger
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3692
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3693
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3694
     |b|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3695
     b := ByteArray new:4.
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3696
     b signedInt16At:1 put:-1.
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3697
     b signedInt16At:3 put:-2.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3698
     b inspect
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3699
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3700
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  3701
    "Modified: 1.7.1996 / 21:12:13 / cg"
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3702
!
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3703
19629
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3704
signedInt16AtLSB:byteIndex
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3705
    "return the 2-bytes starting at index as a signed Integer.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3706
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3707
     The value is retrieved with least significant byte first"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3708
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3709
    ^ self signedInt16At:byteIndex MSB:false
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3710
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3711
    "
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3712
     |b|
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3713
     b := ByteArray new:2.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3714
     b wordAt:1 put:16rFFFE.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3715
     b signedInt16AtLSB:1.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3716
     b signedInt16AtMSB:1.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3717
    "
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3718
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3719
    "Modified: 1.7.1996 / 21:14:38 / cg"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3720
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3721
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3722
signedInt16AtLSB:index put:anInteger
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3723
    "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
  3724
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3725
     The stored value must be in the range 0 .. 16rFFFF.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3726
     The value is stored with least significant byte first"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3727
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3728
    ^ self signedInt16At:index put:anInteger MSB:false
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3729
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3730
    "
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3731
     |b|
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3732
     b := ByteArray new:4.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3733
     b signedInt16At:1 put:16r0102.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3734
     b signedInt16At:3 put:16r0304.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3735
     b inspect
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3736
    "
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3737
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3738
    "Created: / 5.3.1998 / 11:54:52 / stefan"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3739
    "Modified: / 5.3.1998 / 14:59:38 / stefan"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3740
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3741
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3742
signedInt16AtMSB:byteIndex
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3743
    "return the 2-bytes starting at index as a signed Integer.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3744
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3745
     The value is retrieved with most significant byte first"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3746
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3747
    ^ self signedInt16At:byteIndex MSB:true
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3748
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3749
    "
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3750
     |b|
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3751
     b := ByteArray new:2.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3752
     b wordAt:1 put:16rFFFE.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3753
     b signedInt16AtLSB:1.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3754
     b signedInt16AtMSB:1.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3755
    "
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3756
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3757
    "Modified: 1.7.1996 / 21:14:38 / cg"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3758
!
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
signedInt16AtMSB:index put:anInteger
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3761
    "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
  3762
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3763
     The stored value must be in the range 0 .. 16rFFFF.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3764
     The value is stored with most significant byte first"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3765
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3766
    ^ self signedInt16At:index put:anInteger MSB:true
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3767
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3768
    "
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3769
     |b|
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3770
     b := ByteArray new:4.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3771
     b signedInt16At:1 put:16r0102.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3772
     b signedInt16At:3 put:16r0304.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3773
     b inspect
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3774
    "
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3775
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3776
    "Created: / 5.3.1998 / 11:54:52 / stefan"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3777
    "Modified: / 5.3.1998 / 14:59:38 / stefan"
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
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3780
unsignedInt16At:index
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3781
    "return the 2-bytes starting at index as an (unsigned) Integer.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  3782
     The index is a smalltalk index (i.e. 1-based).
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3783
     The value is retrieved in the machine's natural byte order"
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3784
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3785
    ^ self unsignedInt16At:index MSB:IsBigEndian
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3786
!
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3787
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3788
unsignedInt16At:byteIndex MSB:msb
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3789
    "return the 2-bytes starting at index as an (unsigned) Integer.
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  3790
     The index is a smalltalk index (i.e. 1-based).
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3791
     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
  3792
     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
  3793
     Notice: 
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3794
        the index is a byte index; thus, this allows for unaligned access to
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3795
        words on any boundary."
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3796
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3797
    |b1 "{ Class: SmallInteger }"
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3798
     b2 "{ Class: SmallInteger }"|
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3799
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3800
%{
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3801
    /*
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3802
     * handle the most common cases fast ...
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3803
     */
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3804
    if (__isSmallInteger(byteIndex)) {
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3805
        unsigned char *cp;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3806
        INT sz;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3807
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3808
        __fetchBytePointerAndSize__(self, &cp, &sz);
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3809
        if (cp) {
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3810
            INT idx = __intVal(byteIndex) - 1;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3811
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3812
            if ((idx >= 0) && ((idx+(2-1)) < sz)) {
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3813
                int iVal;
19506
c729dd175795 #BUGFIX
Claus Gittinger <cg@exept.de>
parents: 19502
diff changeset
  3814
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3815
                cp += idx;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3816
                if (msb == false) {
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3817
#if defined(__i386__) || (defined(__LSBFIRST__) && defined(UNALIGNED_FETCH_OK))
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3818
                    /*
20816
986549374231 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20595
diff changeset
  3819
                     * aligned or not, we don't care (i386 can do both)
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3820
                     */
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3821
                    iVal = ((unsigned short *)cp)[0];
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3822
#else
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3823
                    iVal = (cp[0] & 0xFF) | ((cp[1] & 0xFF) << 8);
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3824
#endif
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3825
                } else {
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3826
                    iVal = ((cp[0] & 0xFF) << 8) | (cp[1] & 0xFF);
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3827
                }
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3828
                RETURN (__mkSmallInteger(iVal));
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3829
            }
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3830
        }
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3831
    }
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3832
%}.
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3833
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3834
    b1 := self byteAt:byteIndex.
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3835
    b2 := self byteAt:(byteIndex + 1).
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3836
    msb ifTrue:[
19046
Claus Gittinger <cg@exept.de>
parents: 18969
diff changeset
  3837
        ^ (b1 bitShift:8) + b2
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3838
    ].
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3839
    ^ (b2 bitShift:8) + b1
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3840
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3841
    "
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3842
     #[ 16rFF 16r00 ] unsignedInt16At:1 MSB:true
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3843
     #[ 16rFF 16r00 ] unsignedInt16At:1 MSB:false
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3844
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3845
     #[ 16rFF 16r00 ] unsignedInt16At:2 MSB:true
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3846
     #[ 16rFF 16r00 ] unsignedInt16At:2 MSB:false
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3847
    "
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3848
!
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3849
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3850
unsignedInt16At:index put:anInteger
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3851
    "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
  3852
     The index is a smalltalk index (i.e. 1-based).
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3853
     The stored value must be in the range 0 .. 16rFFFF.
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3854
     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
  3855
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3856
    ^ self unsignedInt16At:index put:anInteger MSB:IsBigEndian
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3857
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3858
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3859
     |b|
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3860
     b := ByteArray new:4.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3861
     b unsignedInt16At:1 put:16r0102.
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3862
     b unsignedInt16At:3 put:16r0304.
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3863
     b inspect
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3864
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3865
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3866
    "Created: / 5.3.1998 / 11:54:52 / stefan"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3867
    "Modified: / 5.3.1998 / 14:59:38 / stefan"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3868
!
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3869
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3870
unsignedInt16At:byteIndex put:anInteger MSB:msb
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3871
    "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
  3872
     The index is a smalltalk index (i.e. 1-based).
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3873
     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
  3874
     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
  3875
     lower index) if msb is false, MSB-first otherwise"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3876
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3877
    |b1 b2
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3878
     iVal "{ Class: SmallInteger }"|
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3879
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3880
%{  /* NOCONTEXT */
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3881
    /*
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3882
     * handle the most common case fast ...
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3883
     */
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3884
    if (__isSmallInteger(byteIndex)) {
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3885
        unsigned char *cp;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3886
        INT sz;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3887
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3888
        __fetchBytePointerAndSize__(self, &cp, &sz);
19404
Claus Gittinger <cg@exept.de>
parents: 19402
diff changeset
  3889
        // printf("cp=%"_lx_"\n", (INT)cp);
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3890
        if (cp) {
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3891
            INT idx = __intVal(byteIndex) - 1;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3892
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  3893
            if ((idx >= 0) && ((idx+1) < sz)) {
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3894
                cp += idx;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3895
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3896
                if (__isSmallInteger(anInteger)) {
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3897
                    INT __v = __intVal(anInteger);
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3898
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3899
                    if (((unsigned INT)__v) > 0xFFFF) {
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3900
                        goto badArg;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3901
                    }
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3902
                    if (msb == false) { 
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3903
#if defined(__i386__) || (defined(__LSBFIRST__) && defined(UNALIGNED_FETCH_OK))
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3904
                        ((unsigned short *)cp)[0] = (unsigned short)__v;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3905
#else
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3906
                        cp[0] = __v & 0xFF;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3907
                        cp[1] = (__v >> 8) & 0xFF;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3908
#endif
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3909
                    } else {        
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3910
                        cp[0] = (__v >> 8) & 0xFF;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3911
                        cp[1] = __v & 0xFF;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3912
                    }
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3913
                    RETURN (anInteger);
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3914
                }
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3915
            }
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3916
        }
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3917
    }
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3918
  badArg: ;
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3919
%}.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3920
    iVal := anInteger.
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3921
    ((iVal < 0) or:[iVal > 16rFFFF]) ifTrue:[
19046
Claus Gittinger <cg@exept.de>
parents: 18969
diff changeset
  3922
        ^ self elementBoundsError:iVal
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3923
    ].
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3924
    msb ifTrue:[
19046
Claus Gittinger <cg@exept.de>
parents: 18969
diff changeset
  3925
        b1 := ((iVal bitShift:-8) bitAnd:16rFF).
Claus Gittinger <cg@exept.de>
parents: 18969
diff changeset
  3926
        b2 := (iVal bitAnd:16rFF).
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3927
    ] ifFalse:[
19046
Claus Gittinger <cg@exept.de>
parents: 18969
diff changeset
  3928
        b1 := (iVal bitAnd:16rFF).
Claus Gittinger <cg@exept.de>
parents: 18969
diff changeset
  3929
        b2 := ((iVal bitShift:-8) bitAnd:16rFF).
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3930
    ].
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3931
    self byteAt:byteIndex   put:b1.
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3932
    self byteAt:byteIndex+1 put:b2.
19349
d10a0648ff0f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19345
diff changeset
  3933
    ^ anInteger
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3934
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3935
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3936
     |b|
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3937
     b := ByteArray new:8.
19366
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3938
     b unsignedInt16At:1 put:16r0102 MSB:false.
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3939
     b unsignedInt16At:3 put:16r0304 MSB:false.
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3940
     b unsignedInt16At:5 put:16r0102 MSB:true.
82606b52b3a0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19352
diff changeset
  3941
     b unsignedInt16At:7 put:16r0304 MSB:true.
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  3942
     b inspect
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3943
    "
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3944
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3945
    "Modified: / 21.1.1998 / 17:48:15 / cg"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  3946
    "Modified: / 5.3.1998 / 11:52:28 / stefan"
19629
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3947
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3948
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3949
unsignedInt16AtLSB:byteIndex
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3950
    "return the 2-bytes starting at index as an unsigned Integer.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3951
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3952
     The value is retrieved with least significant byte first"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3953
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3954
    ^ self unsignedInt16At:byteIndex MSB:false
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3955
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3956
    "
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3957
     |b|
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3958
     b := ByteArray new:2.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3959
     b wordAt:1 put:16rFFFE.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3960
     b unsignedInt16AtLSB:1.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3961
     b unsignedInt16AtMSB:1.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3962
    "
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3963
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3964
    "Modified: 1.7.1996 / 21:14:38 / cg"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3965
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3966
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3967
unsignedInt16AtLSB:index put:anInteger
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3968
    "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
  3969
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3970
     The stored value must be in the range 0 .. 16rFFFF.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3971
     The value is stored with least significant byte first"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3972
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3973
    ^ self unsignedInt16At:index put:anInteger MSB:false
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3974
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3975
    "
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3976
     |b|
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3977
     b := ByteArray new:4.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3978
     b unsignedInt16At:1 put:16r0102.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3979
     b unsignedInt16At:3 put:16r0304.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3980
     b inspect
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3981
    "
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3982
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3983
    "Created: / 5.3.1998 / 11:54:52 / stefan"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3984
    "Modified: / 5.3.1998 / 14:59:38 / stefan"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3985
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3986
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3987
unsignedInt16AtMSB:byteIndex
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3988
    "return the 2-bytes starting at index as an unsigned Integer.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3989
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3990
     The value is retrieved with most significant byte first"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3991
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3992
    ^ self unsignedInt16At:byteIndex MSB:true
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3993
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3994
    "
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3995
     |b|
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3996
     b := ByteArray new:2.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3997
     b wordAt:1 put:16rFFFF.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3998
     b signedWordAt:1
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  3999
    "
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4000
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4001
    "Modified: 1.7.1996 / 21:14:38 / cg"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4002
!
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4003
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4004
unsignedInt16AtMSB:index put:anInteger
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4005
    "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
  4006
     The index is a smalltalk index (i.e. 1-based).
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4007
     The stored value must be in the range 0 .. 16rFFFF.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4008
     The value is stored with most significant byte first"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4009
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4010
    ^ self unsignedInt16At:index put:anInteger MSB:true
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4011
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4012
    "
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4013
     |b|
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4014
     b := ByteArray new:4.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4015
     b unsignedInt16At:1 put:16r0102.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4016
     b unsignedInt16At:3 put:16r0304.
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4017
     b inspect
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4018
    "
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4019
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4020
    "Created: / 5.3.1998 / 11:54:52 / stefan"
9078f9107270 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19554
diff changeset
  4021
    "Modified: / 5.3.1998 / 14:59:38 / stefan"
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4022
! !
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4023
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4024
!UninterpretedBytes methodsFor:'accessing-strings'!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4025
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4026
stringAt:index
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4027
    "return a string starting at index up to the 0-byte.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4028
     The index is a smalltalk index (i.e. 1-based)."
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4029
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4030
    |stream i "{ Class: SmallInteger }" c|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4031
10676
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4032
    stream := WriteStream on:(String new:40).
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4033
    i := index.
10676
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4034
    [(c := self byteAt:i) ~~ 0] whileTrue:[
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4035
        stream nextPut:(Character value:c).
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4036
        i := i + 1.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4037
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4038
    ^ stream contents
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4039
10676
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4040
    "
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  4041
      #[71 72 73 74 75 76 77 0] stringAt:1
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  4042
      #[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
  4043
      '1234567890' stringAt:2
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4044
    "
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4045
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4046
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4047
stringAt:index put:aString
19196
1db38251aeb2 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19101
diff changeset
  4048
    "copy aString to the receiver, starting at index up to
7815
6bd3a60a6f0c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7814
diff changeset
  4049
     (and including) the 0-byte (which is always written).
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4050
     The index is a smalltalk index (i.e. 1-based)."
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4051
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4052
    |i "{ Class: SmallInteger }"|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4053
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4054
    i := index.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4055
    aString do:[:aChar |
19196
1db38251aeb2 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19101
diff changeset
  4056
        self byteAt:i put:aChar codePoint.
1db38251aeb2 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19101
diff changeset
  4057
        i := i + 1.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4058
    ].
10676
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4059
    self byteAt:i put:0.
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4060
    ^ aString
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4061
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4062
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4063
     |bytes|
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4064
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4065
     bytes := ExternalBytes new:10.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4066
     bytes stringAt:1 put:'hello'.
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4067
     1 to:bytes size do:[:i |
19196
1db38251aeb2 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19101
diff changeset
  4068
        Transcript showCR:(bytes at:i)
10676
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4069
     ].
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4070
    "
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4071
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4072
    "
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4073
     (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
  4074
    "
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4075
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4076
    "Created: / 21.1.1998 / 17:45:02 / cg"
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4077
!
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4078
7812
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4079
stringAt:index put:aString size:maxSize
19196
1db38251aeb2 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19101
diff changeset
  4080
    "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
  4081
     or (and including) the 0-byte, whichever is encountered first.
7815
6bd3a60a6f0c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7814
diff changeset
  4082
     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
  4083
     The index is a smalltalk index (i.e. 1-based)."
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4084
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4085
    |remaining "{ Class: SmallInteger }"
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4086
     i         "{ Class: SmallInteger }"|
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4087
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4088
    remaining := maxSize.
7816
827f1cf51862 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7815
diff changeset
  4089
    remaining <= 0 ifTrue:[^ aString].
7812
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4090
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4091
    i := index.
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4092
    aString do:[:aChar |
19196
1db38251aeb2 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19101
diff changeset
  4093
        self byteAt:i put:aChar codePoint.
1db38251aeb2 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19101
diff changeset
  4094
        i := i + 1.
1db38251aeb2 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19101
diff changeset
  4095
        remaining := remaining - 1.
1db38251aeb2 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19101
diff changeset
  4096
        remaining <= 0 ifTrue:[^ aString].
7812
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4097
    ].
10676
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4098
    self byteAt:i put:0.
7812
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4099
    ^ aString
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4100
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4101
    "
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4102
     |bytes|
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4103
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4104
     bytes := ExternalBytes new:10.
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4105
     bytes stringAt:1 put:'hello' size:3.
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4106
     1 to:bytes size do:[:i |
19196
1db38251aeb2 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19101
diff changeset
  4107
        Transcript showCR:(bytes at:i)
7812
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4108
     ]
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4109
    "
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4110
    "
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4111
     |bytes|
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4112
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4113
     bytes := ByteArray new:10 withAll:16rFF.
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4114
     bytes stringAt:1 put:'he' size:3.
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4115
     1 to:bytes size do:[:i |
19196
1db38251aeb2 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19101
diff changeset
  4116
        Transcript showCR:(bytes at:i)
7812
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4117
     ]
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4118
    "
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4119
10676
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4120
    "
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4121
     (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
  4122
    "
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4123
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4124
7812
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4125
    "Created: / 21.1.1998 / 17:45:02 / cg"
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4126
!
d28a83264959 stringAt:put:size:
Claus Gittinger <cg@exept.de>
parents: 7252
diff changeset
  4127
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4128
stringAt:index size:maxSize
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4129
    "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
  4130
     The index is a smalltalk index (i.e. 1-based)."
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4131
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  4132
    |stream c
10676
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4133
     max "{ Class: SmallInteger }"
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4134
     start "{ Class: SmallInteger }"|
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4135
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4136
    stream := WriteStream on:(String new:maxSize).
10676
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4137
    start := index.
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4138
    max := start + maxSize - 1.
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4139
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4140
    start to:max do:[:eachIndex|
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4141
        c := self byteAt:eachIndex.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4142
        c == 0 ifTrue:[
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4143
            ^ stream contents
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4144
        ].
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4145
        stream nextPut:(Character value:c).
3459
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4146
    ].
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4147
    ^ stream contents
6cb151c3950c category changes
Claus Gittinger <cg@exept.de>
parents: 3447
diff changeset
  4148
10676
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4149
    "
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4150
      #[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
  4151
      #[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
  4152
      '1234567890' stringAt:2 size:6
252a445bf47d #stringAt:* now works on Strings, too
Stefan Vogel <sv@exept.de>
parents: 10675
diff changeset
  4153
    "
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  4154
!
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  4155
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  4156
zeroByteStringAt:index maximumSize:count
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  4157
    "extract a zeroByte-delimited string, given initial index and
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  4158
     maximum number of characters (bytes).
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  4159
     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
  4160
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4161
    |bytes endIndex idx|
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4162
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4163
    endIndex := self indexOf:0 startingAt:index.
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4164
    endIndex == 0 ifTrue:[
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4165
        endIndex := self size + 1
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4166
    ].
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4167
    endIndex := (endIndex min: (index + count)) - 1.
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4168
    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
  4169
    ^ bytes asString
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  4170
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4171
    "
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4172
     #[ 1 2 3 4 5 6 7 8 ] zeroByteStringAt:2 maximumSize:10
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4173
     #[ 1 2 3 4 5 0 6 7 8 ] zeroByteStringAt:2 maximumSize:10
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4174
     #[ 1 2 3 4 5 0 6 7 8 ] zeroByteStringAt:2 maximumSize:3
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4175
     #[ 1 2 3 4 5 0 6 7 8 ] zeroByteStringAt:2 maximumSize:4
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4176
    "
3207
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  4177
! !
a6e3c98e2a8e merged common protocol of ByteArray and ExternalBytes into this class.
Claus Gittinger <cg@exept.de>
parents: 1294
diff changeset
  4178
12951
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  4179
!UninterpretedBytes methodsFor:'converting'!
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  4180
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  4181
asExternalBytes
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  4182
    |sz bytes|
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  4183
14142
7a769e54130d changed:
Stefan Vogel <sv@exept.de>
parents: 14132
diff changeset
  4184
    sz := self byteSize.
12951
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  4185
    bytes := ExternalBytes unprotectedNew:sz.
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  4186
    bytes replaceBytesFrom:1 to:sz with:self startingAt:1.
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  4187
    ^ bytes
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  4188
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  4189
    "
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  4190
      #[1 2 3 4 5 6 7] asExternalBytes
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  4191
      'Hello World' asExternalBytes
14142
7a769e54130d changed:
Stefan Vogel <sv@exept.de>
parents: 14132
diff changeset
  4192
      'Hello World' asUnicodeString asExternalBytes
12951
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  4193
    "
14132
debafd18f04b added: #asUUID
Stefan Vogel <sv@exept.de>
parents: 14131
diff changeset
  4194
!
debafd18f04b added: #asUUID
Stefan Vogel <sv@exept.de>
parents: 14131
diff changeset
  4195
14155
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4196
asExternalBytesUnprotected
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4197
    "Like asExternalBytes, but does not register the bytes so
15836
cdf0d7258f9e class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15717
diff changeset
  4198
     bytes are GARBAGE-COLLECTED."
14155
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4199
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4200
    |bytes sz|
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4201
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4202
    sz := self byteSize.
15836
cdf0d7258f9e class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15717
diff changeset
  4203
    bytes := ExternalBytes unprotectedNew:sz.
14155
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4204
    bytes replaceFrom:1 to:sz with:self startingAt:1.
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4205
    ^ bytes
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4206
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4207
    "
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4208
     |x|
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4209
     x := 'fooBar' asExternalBytesUnprotected.
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4210
     ObjectMemory garbageCollect
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4211
    "
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4212
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4213
    "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
  4214
    "Modified: / 30-11-2013 / 11:42:21 / cg"
14155
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4215
!
065cc819c3f1 added: #asExternalBytesUnprotected
vrany
parents: 14142
diff changeset
  4216
18600
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  4217
asSingleByteString
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  4218
    "return the receiver converted to a 'normal' string.
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  4219
     Raises an error if unrepresentable characters are encountered.
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  4220
     See also: asSingleByteStringIfPossible and asSingleByteStringReplaceInvalidWith:"
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  4221
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  4222
    ^ String fromString:self
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  4223
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  4224
    "
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  4225
     #[60 61 62 63] asSingleByteString
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4226
     #[60 61 62 63] asExternalBytes  asSingleByteString
18969
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4227
     #[67 68 69 70] asIntegerArray asSingleByteString
18600
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  4228
     (Unicode16String with:(Character value:16rFF)) asSingleByteString
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  4229
     (Unicode16String with:(Character value:16rFFFF)) asSingleByteString
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  4230
    "
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  4231
!
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  4232
18969
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4233
asSingleByteStringIfPossible
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4234
    "if possible, return the receiver converted to a 'normal' string.
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4235
     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
  4236
     If not possible, the (wideString) receiver is returned."
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4237
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4238
    self containsNon8BitElements ifTrue:[^ self asString].
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4239
    ^ self asSingleByteString.
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4240
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4241
    "
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4242
     #[67 68 69 70] asSingleByteStringIfPossible
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4243
     #[67 68 69 70] asIntegerArray asSingleByteStringIfPossible
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4244
     'hello' asUnicodeString asSingleByteStringIfPossible
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4245
    "
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4246
!
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4247
14132
debafd18f04b added: #asUUID
Stefan Vogel <sv@exept.de>
parents: 14131
diff changeset
  4248
asUUID
debafd18f04b added: #asUUID
Stefan Vogel <sv@exept.de>
parents: 14131
diff changeset
  4249
    ^ UUID fromBytes:self
12951
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  4250
! !
6856ade56f18 added: #asExternalBytes
Stefan Vogel <sv@exept.de>
parents: 12769
diff changeset
  4251
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4252
!UninterpretedBytes methodsFor:'encoding & decoding'!
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4253
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4254
utf8Decoded
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4255
    "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
  4256
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4257
    ^ CharacterArray decodeFromUTF8:self.
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4258
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4259
    "
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4260
     #[16rC8 16rA0] utf8Decoded
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4261
     #[16rC8 16rA0] asString utf8Decoded
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4262
     #[16rC8 16rA0] asExternalBytes utf8Decoded
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4263
     (Character value:16r220) utf8Encoded utf8Decoded
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4264
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4265
     (Character value:16r800) utf8Encoded
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4266
     (Character value:16r220) utf8Encoded utf8Decoded
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4267
    "
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4268
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4269
    "test:
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4270
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4271
      |utf8Encoding original readBack|
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4272
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4273
      1 to:16rFFFF do:[:ascii |
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4274
        original := (Character value:ascii) asString.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4275
        utf8Encoding := original utf8Encoded.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4276
        readBack := utf8Encoding utf8Decoded.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4277
        readBack = original ifFalse:[
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4278
            self halt
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4279
        ]
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4280
      ]
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4281
    "
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4282
!
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4283
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4284
utf8DecodedWithTwoByteCharactersReplacedBy:replacementCharacter
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4285
    "Interpreting myself as an UTF-8 representation, decode and return
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4286
     the decoded string. Suppress all 2-byte (above 16rFF) characters,
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4287
     and replace them with replacementCharacter"
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4288
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4289
    |in out c|
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4290
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4291
    self containsNon7BitAscii ifFalse:[
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4292
        ^ self asSingleByteString
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4293
    ].
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4294
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4295
    out := WriteStream on:(String uninitializedNew:self size * 3 // 2).
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4296
    in := self readStream.
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4297
    [in atEnd] whileFalse:[
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4298
        c := Character utf8DecodeFrom:in.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4299
        c codePoint > 16rFF ifTrue:[
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4300
            c := replacementCharacter
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4301
        ].
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4302
        out nextPut:c.
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4303
    ].
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4304
    ^ out contents
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4305
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4306
    "
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4307
     (Character value:16r220) utf8Encoded
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4308
        utf8DecodedWithTwoByteCharactersReplacedBy:(Character space)
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4309
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4310
     (Character value:16r220) utf8Encoded asExternalBytes copyButLast
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4311
        utf8DecodedWithTwoByteCharactersReplacedBy:(Character space)
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4312
    "
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4313
! !
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4314
4782
04a2ea1ad3a5 added replaceBytes...
Claus Gittinger <cg@exept.de>
parents: 4530
diff changeset
  4315
!UninterpretedBytes methodsFor:'filling & replacing'!
04a2ea1ad3a5 added replaceBytes...
Claus Gittinger <cg@exept.de>
parents: 4530
diff changeset
  4316
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4317
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
  4318
    "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
  4319
     like collection.
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4320
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4321
     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
  4322
     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
  4323
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4324
%{  /* NOCONTEXT */
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
    int nIndex, repNIndex;
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4327
    int startIndex, stopIndex;
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4328
    REGISTER unsigned char *src;
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4329
    REGISTER int repStartIndex;
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4330
    int repStopIndex, count;
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4331
    REGISTER unsigned char *dst;
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4332
    OBJ cls;
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
#ifndef NO_PRIM_BYTEARR
14082
8ee1315d35eb Revert to 1.81
Stefan Vogel <sv@exept.de>
parents: 14081
diff changeset
  4335
    if ((__isBytes(aCollection) || __isExternalBytesLike(aCollection))
14142
7a769e54130d changed:
Stefan Vogel <sv@exept.de>
parents: 14132
diff changeset
  4336
     && (__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
  4337
     && __bothSmallInteger(start, stop)
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4338
     && __isSmallInteger(repStart)) {
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4339
        startIndex = __intVal(start) - 1;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4340
        if (startIndex >= 0) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4341
            dst = (__ByteArrayInstPtr(self)->ba_element) + startIndex;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4342
            nIndex = __byteArraySize(self);
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4343
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4344
            if ((cls = __qClass(self)) != @global(ByteArray)) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4345
                int nInst;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4346
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4347
                nInst = __OBJS2BYTES__(__intVal(__ClassInstPtr(cls)->c_ninstvars));
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4348
                dst += nInst;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4349
                nIndex -= nInst;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4350
            }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4351
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4352
            stopIndex = __intVal(stop) - 1;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4353
            count = stopIndex - startIndex + 1;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4354
            if (count == 0) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4355
                RETURN ( self );
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4356
            }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4357
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4358
            if ((count > 0) && (stopIndex < nIndex)) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4359
                repStartIndex = __intVal(repStart) - 1;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4360
                if (repStartIndex >= 0) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4361
                    if (__isExternalBytesLike(aCollection)) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4362
                        OBJ sz;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4363
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4364
                        src = __externalAddressVal(aCollection);
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4365
                        if (src == 0) goto fallBack;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4366
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4367
                        sz = __externalBytesSize(aCollection);
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4368
                        if (__isSmallInteger(sz)) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4369
                            repNIndex = __smallIntegerVal(sz);
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4370
                        } else {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4371
                            repNIndex = repStopIndex+1; /* always enough */
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4372
                        }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4373
                        src = src + repStartIndex;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4374
                    } else {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4375
                        if (__isStringLike(aCollection)) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4376
                            repNIndex = __stringSize(aCollection);
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4377
                        } else {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4378
                            repNIndex = __qSize(aCollection) - OHDR_SIZE;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4379
                        }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4380
                        src = (__ByteArrayInstPtr(aCollection)->ba_element) + repStartIndex;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4381
                        if ((cls = __qClass(aCollection)) != @global(ByteArray)) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4382
                            int nInst;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4383
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4384
                            nInst = __OBJS2BYTES__(__intVal(__ClassInstPtr(cls)->c_ninstvars));
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4385
                            src += nInst;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4386
                            repNIndex -= nInst;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4387
                        }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4388
                    }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4389
                    repStopIndex = repStartIndex + (stopIndex - startIndex);
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4390
                    if (repStopIndex < repNIndex) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4391
                        if (aCollection == self) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4392
                            /* take care of overlapping copy */
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4393
                            if (src < dst) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4394
                                /* must do a reverse copy */
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4395
                                src += count;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4396
                                dst += count;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4397
                                while (count-- > 0) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4398
                                    *--dst = *--src;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4399
                                }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4400
                                RETURN ( self );
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4401
                            }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4402
                        }
12769
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
# ifdef bcopy4
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4405
                        if (((unsigned INT)src & 3) == ((unsigned INT)dst & 3)) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4406
                            int nW;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4407
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4408
                            /* copy unaligned part */
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4409
                            while (count && ((unsigned INT)src & 3)) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4410
                                *dst++ = *src++;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4411
                                count--;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4412
                            }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4413
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4414
                            if (count > 0) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4415
                                /* copy aligned part */
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4416
                                nW = count >> 2;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4417
                                bcopy4(src, dst, nW);
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4418
                                if ((count = count & 3) != 0) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4419
                                    /* copy any remaining part */
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4420
                                    src += (nW<<2);
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4421
                                    dst += (nW<<2);
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4422
                                    while (count--) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4423
                                        *dst++ = *src++;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4424
                                    }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4425
                                }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4426
                            }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4427
                            RETURN ( self );
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4428
                        }
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4429
# else
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4430
#  if __POINTER_SIZE__ == 8
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4431
                        if (((unsigned INT)src & 7) == ((unsigned INT)dst & 7)) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4432
                            /* copy unaligned part */
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4433
                            while (count && ((unsigned INT)src & 7)) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4434
                                *dst++ = *src++;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4435
                                count--;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4436
                            }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4437
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4438
                            /* copy aligned part */
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4439
                            while (count >= 8) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4440
                                ((unsigned INT *)dst)[0] = ((unsigned INT *)src)[0];
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4441
                                dst += 8;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4442
                                src += 8;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4443
                                count -= 8;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4444
                            }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4445
                            while (count--) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4446
                                *dst++ = *src++;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4447
                            }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4448
                            RETURN ( self );
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4449
                        }
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4450
#  endif /* 64bit */
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4451
# endif /* bcopy4 */
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4452
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4453
# ifdef FAST_MEMCPY
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4454
                        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
  4455
# else
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4456
#  ifdef __UNROLL_LOOPS__
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4457
                        while (count >= 8) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4458
                            dst[0] = src[0]; dst[1] = src[1];
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4459
                            dst[2] = src[2]; dst[3] = src[3];
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4460
                            dst[4] = src[4]; dst[5] = src[5];
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4461
                            dst[6] = src[6]; dst[7] = src[7];
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4462
                            dst += 8; src += 8;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4463
                            count -= 8;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4464
                        }
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4465
#  endif /* __UNROLL_LOOPS__ */
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4466
                        while (count-- > 0) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4467
                            *dst++ = *src++;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4468
                        }
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4469
# endif
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4470
                        RETURN ( self );
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4471
                    }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4472
                }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4473
            }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4474
        }
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4475
    }
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4476
fallBack: ;
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4477
#endif
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4478
%}.
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4479
    "
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4480
     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
  4481
     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
  4482
    "
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4483
    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
  4484
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4485
    "
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4486
     #[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
  4487
        copy
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4488
            replaceFrom:1 to:8
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4489
            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
  4490
            startingAt:1
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4491
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4492
     #[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
  4493
        copy
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4494
            replaceFrom:3 to:10
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4495
            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
  4496
            startingAt:1
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4497
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4498
     #[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
  4499
        copy
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4500
            replaceFrom:3 to:4
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4501
            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
  4502
            startingAt:1
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4503
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4504
     #[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
  4505
        copy
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4506
            replaceFrom:0 to:9
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4507
            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
  4508
            startingAt:1
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4509
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4510
     #[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
  4511
        copy
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4512
            replaceFrom:1 to:10
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4513
            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
  4514
            startingAt:0
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4515
    "
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4516
!
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4517
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4518
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
  4519
    "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
  4520
     byte-array-like.
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4521
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4522
     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
  4523
     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
  4524
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4525
    ^ self
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4526
        replaceBytesFrom:startIndex
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4527
        to:(startIndex + replacementCollection size - repStartIndex)
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4528
        with:replacementCollection
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4529
        startingAt:repStartIndex
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4530
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4531
    "
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4532
     args:    startIndex            : <integer>
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4533
              replacementCollection : <collection of <bytes> >
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4534
              repStartIndex         : <integer>
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4535
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4536
     returns: self
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4537
    "
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4538
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4539
    "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
  4540
    "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
  4541
!
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4542
13902
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4543
replaceBytesWith:replacementCollection
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4544
    "replace elements from another collection, which must be byte-array-like.
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4545
     Replace stops at whichever collection is smaller.
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4546
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4547
     Notice: This operation modifies the receiver, NOT a copy;
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4548
     therefore the change may affect all others referencing the receiver."
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4549
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4550
    ^ self
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4551
        replaceBytesFrom:1
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4552
        to:(replacementCollection size min:self size)
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4553
        with:replacementCollection
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4554
        startingAt:1
13902
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4555
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4556
    "
15004
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  4557
     (ByteArray new:10) replaceBytesWith:'hello'
Claus Gittinger <cg@exept.de>
parents: 14970
diff changeset
  4558
     (ByteArray new:10) replaceBytesWith:'hello world bla bla bla'
13902
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4559
    "
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4560
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4561
    "Created: / 09-01-2012 / 16:18:10 / cg"
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4562
!
2c81e1513418 added: #replaceBytesWith:
Claus Gittinger <cg@exept.de>
parents: 13724
diff changeset
  4563
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4564
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
  4565
    "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
  4566
     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
  4567
     Return the receiver.
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4568
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4569
     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
  4570
     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
  4571
14131
3b0cb7751a71 changed: #replaceFrom:to:with:startingAt:
Claus Gittinger <cg@exept.de>
parents: 14082
diff changeset
  4572
    self class isBytes ifTrue:[
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4573
        ((aCollection class == self class)
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4574
         or:[aCollection isByteCollection]) ifTrue:[
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4575
            ^ self replaceBytesFrom:startIndex to:stopIndex with:aCollection startingAt:repStartIndex
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4576
        ].
7252
82cd08881a2a abstract replaceBytes fallback is required (lead to recursion)
Claus Gittinger <cg@exept.de>
parents: 7218
diff changeset
  4577
    ].
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4578
    ^ 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
  4579
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4580
    "
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4581
     args:    startIndex            : <integer>
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4582
              stopIndex             : <integer>
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4583
              replacementCollection : <collection of <bytes> >
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4584
              repStartIndex         : <integer>
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4585
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4586
     returns: self
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4587
    "
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4588
14131
3b0cb7751a71 changed: #replaceFrom:to:with:startingAt:
Claus Gittinger <cg@exept.de>
parents: 14082
diff changeset
  4589
    "Modified: / 08-05-2012 / 13:23:27 / cg"
4782
04a2ea1ad3a5 added replaceBytes...
Claus Gittinger <cg@exept.de>
parents: 4530
diff changeset
  4590
! !
04a2ea1ad3a5 added replaceBytes...
Claus Gittinger <cg@exept.de>
parents: 4530
diff changeset
  4591
12757
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4592
!UninterpretedBytes methodsFor:'hashing'!
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4593
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4594
computeXorHashFrom:startIndex to:endIndex
20372
aa0461b19c97 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20177
diff changeset
  4595
    "compute and answer the 32bit SmallInteger-Hash of the bytes
12757
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4596
     from startIndex to endIndex.
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4597
     If endindex = 0 or endIndex > size, hash up the size.
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4598
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4599
     NOTE: startIndex and endIndex are only hints about what should be hashed.
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4600
           In fact, more bytes could be involved in hashing.
20372
aa0461b19c97 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20177
diff changeset
  4601
           SO ARRAYS MUST BE EQUAL TO HASH TO THE SAME VALUE.
aa0461b19c97 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20177
diff changeset
  4602
aa0461b19c97 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20177
diff changeset
  4603
    Also NOTE:
aa0461b19c97 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20177
diff changeset
  4604
        used to return a 32bit hash on 32bit machines and a 64bit integer on 64bit cpus.
aa0461b19c97 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20177
diff changeset
  4605
        changed to return the same for all (in case hash values are used for other purposes)."
12757
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4606
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4607
    |w|
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4608
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4609
%{
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4610
    if (__bothSmallInteger(startIndex, endIndex)) {
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4611
        unsigned char *cp;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4612
        INT sz;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4613
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4614
        __fetchBytePointerAndSize__(self, &cp, &sz);
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4615
        if (cp) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4616
            INT sidx = ((unsigned INT)__smallIntegerVal(startIndex)) - 1;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4617
            INT eidx = ((unsigned INT)__smallIntegerVal(endIndex)) - 1;
20372
aa0461b19c97 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20177
diff changeset
  4618
// #           define H_INT INT            
aa0461b19c97 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20177
diff changeset
  4619
// #           define _MAX_H_INT _MAX_INT;
aa0461b19c97 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20177
diff changeset
  4620
#           define H_INT int            
aa0461b19c97 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20177
diff changeset
  4621
#           define _MAX_H_INT 0x3FFFFFFF
aa0461b19c97 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20177
diff changeset
  4622
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4623
            unsigned char *ep;
20372
aa0461b19c97 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20177
diff changeset
  4624
            unsigned H_INT hash = 0, hash2 = 0, carry;
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4625
            int i;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4626
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4627
            if (eidx < 0 || eidx >= sz) eidx = sz - 1;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4628
            if (sidx > eidx) sidx = eidx;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4629
            if (sidx < 0) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4630
                RETURN(__mkSmallInteger(0));
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4631
            }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4632
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4633
            ep = cp + eidx;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4634
            cp += sidx;
12757
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4635
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4636
#if 0
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4637
            /*
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4638
             * On LSB-First (little endian) cpus,
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4639
             * this code does not produce the same result
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4640
             * if the same bytes are at different positions
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4641
             */
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4642
20372
aa0461b19c97 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20177
diff changeset
  4643
            if ((H_INT)cp & (sizeof(H_INT)-1)) {
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4644
                /* not aligned */
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4645
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4646
                for (i=0; cp <= ep; cp++) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4647
                    hash2 = (hash2 << 8) | *cp;
20372
aa0461b19c97 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20177
diff changeset
  4648
                    if (++i == sizeof(H_INT)) {
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4649
                        hash ^= hash2;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4650
                        i = hash2 = 0;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4651
                    }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4652
                }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4653
            } else {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4654
                /* aligned */
20372
aa0461b19c97 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20177
diff changeset
  4655
                for (; cp+sizeof(H_INT) <= ep; cp += sizeof(H_INT)) {
aa0461b19c97 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20177
diff changeset
  4656
                    hash ^= *(unsigned H_INT *)cp;
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4657
                }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4658
                for (; cp <= ep; cp++) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4659
                    hash2 = (hash2 << 8) | *cp;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4660
                }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4661
            }
12757
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4662
#else
20372
aa0461b19c97 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20177
diff changeset
  4663
            for (i=0; cp <= ep-sizeof(H_INT); cp += sizeof(H_INT)) {
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4664
                hash2 = cp[0];
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4665
                hash2 = (hash2 << 8) | cp[1];
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4666
                hash2 = (hash2 << 8) | cp[2];
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4667
                hash2 = (hash2 << 8) | cp[3];
20373
bce89424b82a #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20372
diff changeset
  4668
# if 0
20372
aa0461b19c97 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20177
diff changeset
  4669
                if (sizeof(H_INT) == 8) {
aa0461b19c97 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20177
diff changeset
  4670
                    hash2 = (hash2 << 8) | cp[4];
aa0461b19c97 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20177
diff changeset
  4671
                    hash2 = (hash2 << 8) | cp[5];
aa0461b19c97 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20177
diff changeset
  4672
                    hash2 = (hash2 << 8) | cp[6];
aa0461b19c97 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20177
diff changeset
  4673
                    hash2 = (hash2 << 8) | cp[7];
aa0461b19c97 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20177
diff changeset
  4674
                }
20373
bce89424b82a #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20372
diff changeset
  4675
# endif
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4676
                /*
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4677
                 * multiply by large prime to scramble bits and
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4678
                 * to avoid a 0 result from
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4679
                 * #[1 2 3 4 1 2 3 4] computeXorHashFrom:1 to:8.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4680
                 */
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4681
                hash ^= (hash * 31415821) ^ hash2;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4682
            }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4683
            for (hash2 = 0; cp <= ep; cp++) {
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4684
                hash2 = (hash2 << 8) | *cp;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4685
            }
12757
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4686
#endif
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4687
            hash ^= (hash * 31415821) ^ hash2;
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4688
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4689
            /*
20372
aa0461b19c97 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20177
diff changeset
  4690
             * fold the high bits not fitting into a H_INT
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4691
             */
20372
aa0461b19c97 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20177
diff changeset
  4692
            carry = hash & ~_MAX_H_INT;
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4693
            if (carry) {
20372
aa0461b19c97 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20177
diff changeset
  4694
                hash = (hash & _MAX_H_INT) ^ (carry >> 8);
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4695
            }
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4696
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4697
            RETURN(__mkSmallInteger(hash));
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4698
        }
12757
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4699
    }
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4700
%}.
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4701
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4702
    ^ self primitiveFailed
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4703
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4704
    "
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4705
     #[1 2 3 4] computeXorHashFrom:1 to:4.
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4706
     #[1 2 3 4] computeXorHashFrom:1 to:32.
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4707
     #[1 2 3 4] computeXorHashFrom:1 to:0.
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4708
     #[1 2 3 4 5] computeXorHashFrom:1 to:4.
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4709
     #[1 2 3 4 1 2 3 4] computeXorHashFrom:1 to:8.
20372
aa0461b19c97 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 20177
diff changeset
  4710
     #[1 2 3 4 5 6 7 8] computeXorHashFrom:2 to:8. 
12757
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4711
     #[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
  4712
     #[2 3 4 5 6 7 8] computeXorHashFrom:1 to:8.
91ec8f105783 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19507
diff changeset
  4713
    "
91ec8f105783 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19507
diff changeset
  4714
!
91ec8f105783 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19507
diff changeset
  4715
91ec8f105783 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19507
diff changeset
  4716
hash
91ec8f105783 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19507
diff changeset
  4717
    |sz|
91ec8f105783 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19507
diff changeset
  4718
91ec8f105783 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19507
diff changeset
  4719
    sz := self size.
91ec8f105783 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19507
diff changeset
  4720
    sz <= 32 ifTrue:[
91ec8f105783 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19507
diff changeset
  4721
        ^ self computeXorHashFrom:1 to:sz.
91ec8f105783 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19507
diff changeset
  4722
    ].
91ec8f105783 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19507
diff changeset
  4723
    ^ (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
  4724
91ec8f105783 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19507
diff changeset
  4725
    "
91ec8f105783 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19507
diff changeset
  4726
        #[1 2 3 4] hash
91ec8f105783 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19507
diff changeset
  4727
        #[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
  4728
          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
  4729
        #[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
  4730
          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
  4731
    "
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4732
! !
1ba48c9c243b computeXorHashFrom:to:
Stefan Vogel <sv@exept.de>
parents: 12551
diff changeset
  4733
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4734
!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
  4735
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4736
copyReverse
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4737
    "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
  4738
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4739
    ^ self copy reverse
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4740
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4741
    "
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4742
     #[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
  4743
     #[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
  4744
    "
19415
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4745
!
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4746
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4747
swapBytes
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4748
    "swap bytes (of int16s) inplace -
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4749
     Expects that the receiver has an even number of bytes;
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4750
     if not, only the pairs excluding the last byte are swapped"
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4751
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4752
    |b1 lastIndex "{ Class: SmallInteger }"|
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4753
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4754
    lastIndex := self size-1.
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4755
    1 to:lastIndex by:2 do:[:idx |
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4756
        b1 := self byteAt:idx.
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4757
        self byteAt:idx put:(self byteAt:idx+1).
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4758
        self byteAt:idx+1 put:b1.
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4759
    ].
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4760
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4761
    "
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4762
     #[1 2 3 4 5] swapBytes
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4763
     #[1 2 3 4] swapBytes
524cb9f19895 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19404
diff changeset
  4764
    "
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4765
! !
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4766
20961
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  4767
!UninterpretedBytes methodsFor:'inspecting'!
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  4768
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  4769
inspector2Tabs
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  4770
    ^ super inspector2Tabs , #( inspector2TabForHexDump )
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  4771
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  4772
    "Created: / 27-02-2012 / 21:51:36 / cg"
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  4773
    "Modified: / 13-02-2015 / 21:03:19 / Jan Vrany <jan.vrany@fit.cvut.cz>"
a8e7825ad3c0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20960
diff changeset
  4774
! !
14131
3b0cb7751a71 changed: #replaceFrom:to:with:startingAt:
Claus Gittinger <cg@exept.de>
parents: 14082
diff changeset
  4775
3363
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  4776
!UninterpretedBytes methodsFor:'misc'!
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  4777
13575
44a3b3c29795 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12951
diff changeset
  4778
swapLongAt:byteIndex
3433
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  4779
    "swap the byteOrder of a long.
a94725308432 added comments;
Claus Gittinger <cg@exept.de>
parents: 3410
diff changeset
  4780
     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
  4781
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  4782
    |t|
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  4783
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  4784
    t := self byteAt:byteIndex.
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  4785
    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
  4786
    self byteAt:(byteIndex + 3) put:t.
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  4787
    t := self byteAt:(byteIndex + 1).
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  4788
    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
  4789
    self byteAt:(byteIndex + 2) put:t
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  4790
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  4791
    "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
  4792
! !
3bb61f364fe3 added #from: and #swapLongAt: for ST80 compatibility.
Claus Gittinger <cg@exept.de>
parents: 3323
diff changeset
  4793
18664
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4794
!UninterpretedBytes methodsFor:'printing & storing'!
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4795
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4796
hexPrintOn:aStream
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4797
    "print as hex string, eg: 'FF0243'.
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4798
     This string can be used in #fromHexString: to recreate the byteArray"
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4799
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4800
    self hexPrintOn:aStream withSeparator:nil
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4801
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4802
    "
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4803
      #[1 2 3 4 10 17] hexPrintOn:Transcript
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4804
    "
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4805
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4806
    "
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4807
     |s|
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4808
     s := String streamContents:[:s | #[1 2 3 4 10 17] hexPrintOn:s].
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4809
     ByteArray fromHexString:s
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4810
    "
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4811
!
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4812
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4813
hexPrintOn:aStream withSeparator:aSeparatorStringOrCharacterOrNil
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4814
    "print as hex string with separators, eg: 'FF:02:43'"
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4815
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4816
    |first|
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4817
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4818
    first := true.
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4819
    1 to:self size do:[:idx |
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4820
        aSeparatorStringOrCharacterOrNil notNil ifTrue:[
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4821
            first ifFalse:[
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4822
                aSeparatorStringOrCharacterOrNil printOn:aStream
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4823
            ] ifTrue:[
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4824
                first := false.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4825
            ].
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4826
        ].
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4827
        (self byteAt:idx) printOn:aStream base:16 size:2 fill:$0.
18664
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4828
    ].
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4829
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4830
    "
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4831
      #[1 2 3 4 10 17] hexPrintOn:Transcript withSeparator:$:
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4832
      #[1 2 3 4 10 17] hexPrintOn:Transcript withSeparator:(Character space)
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4833
      #[1 2 3 4 10 17] hexPrintOn:Transcript withSeparator:'-'
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4834
      #[1 2 3 4 10 17] hexPrintOn:Transcript withSeparator:nil
20177
0eaabd41cd8a #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20176
diff changeset
  4835
      'hello' hexPrintOn:Transcript withSeparator:'.'
18664
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4836
    "
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4837
!
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4838
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4839
hexPrintString
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4840
    "print as hex string, eg: 'FF0243'.
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4841
     This string can be used in #fromHexString: to recreate the byteArray"
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4842
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4843
    ^ self hexPrintStringWithSeparator:nil
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4844
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4845
    "
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4846
     #[1 2 3 4 10 17] hexPrintString
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4847
     ByteArray fromHexString:#[1 2 3 4 10 17] hexPrintString
20176
2e68059772c7 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20139
diff changeset
  4848
     'hello' hexPrintString
18664
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4849
    "
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4850
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4851
    "Modified: / 03-07-2010 / 01:59:19 / cg"
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4852
!
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4853
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4854
hexPrintStringWithSeparator:aSeparatorStringOrCharacterOrNil
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4855
    "print as hex string, eg: 'FF:02:43'."
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4856
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4857
    ^ String
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4858
        streamContents:[:s |
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4859
            self hexPrintOn:s withSeparator:aSeparatorStringOrCharacterOrNil.
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4860
        ]
18664
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4861
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4862
    "
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4863
      #[1 2 3 4 10 17] hexPrintStringWithSeparator:$:
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4864
      #[1 2 3 4 10 17] hexPrintStringWithSeparator:Character space
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4865
      #[1 2 3 4 10 17] hexPrintStringWithSeparator:' - '
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4866
      #[1 2 3 4 10 17] hexPrintStringWithSeparator:nil
20176
2e68059772c7 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20139
diff changeset
  4867
      'hello' hexPrintStringWithSeparator:'.'
18664
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4868
    "
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4869
! !
be5c0b1e5296 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 18650
diff changeset
  4870
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4871
!UninterpretedBytes methodsFor:'private'!
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4872
18969
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4873
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
  4874
    "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
  4875
18969
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4876
    |srcIdx "{ Class:SmallInteger }"
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4877
     start "{ Class:SmallInteger }"
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4878
     stop "{ Class:SmallInteger }"|
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4879
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4880
    start := startArg.
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4881
    stop := stopArg.
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4882
    srcIdx := sourceIndex.
18969
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4883
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4884
    start to:stop do:[:dstIdx |
18969
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4885
        self at:dstIdx put:(sourceBytes at:srcIdx).
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4886
        srcIdx := srcIdx + 1
12769
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4887
    ].
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4888
! !
435668a20ddd Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12757
diff changeset
  4889
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4890
!UninterpretedBytes methodsFor:'queries'!
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4891
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4892
containsNon7BitAscii
18969
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4893
    "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
  4894
     (i.e. if it is non-ascii)"
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4895
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4896
    |sz "{ Class:SmallInteger }"|
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4897
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4898
    sz := self size.
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4899
    1 to:sz do:[:idx|
18969
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4900
        (self at:idx) > 16r7F ifTrue:[
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4901
            ^ true.
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4902
        ].
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4903
    ].
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4904
    ^ false.
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4905
!
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4906
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4907
containsNon8BitElements
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4908
    "return true, if the underlying structure contains elements larger than a single byte"
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4909
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4910
    |sz "{ Class:SmallInteger }"|
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4911
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4912
    sz := self size.
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4913
    1 to:sz do:[:idx|
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4914
        (self at:idx) > 16rFF ifTrue:[
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4915
            ^ true.
510f79020ae8 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 18880
diff changeset
  4916
        ].
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4917
    ].
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4918
    ^ false.
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4919
!
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4920
7218
b798be6d632f elementBoundsError -> elementBoundsError:
Claus Gittinger <cg@exept.de>
parents: 7197
diff changeset
  4921
defaultElement
b798be6d632f elementBoundsError -> elementBoundsError:
Claus Gittinger <cg@exept.de>
parents: 7197
diff changeset
  4922
    ^ 0
b798be6d632f elementBoundsError -> elementBoundsError:
Claus Gittinger <cg@exept.de>
parents: 7197
diff changeset
  4923
!
b798be6d632f elementBoundsError -> elementBoundsError:
Claus Gittinger <cg@exept.de>
parents: 7197
diff changeset
  4924
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4925
referencesAny:aCollection
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4926
    "redefined to speed up searching when many of my instances are present"
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4927
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4928
%{ /* NOCONTEXT */
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4929
    if (__mkSmallInteger(0) == __ClassInstPtr(__qClass(self))->c_ninstvars) {
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4930
        /* I am only bytes */
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4931
        RETURN(false)
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4932
    }
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4933
%}.
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4934
    ^ super referencesAny:aCollection
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4935
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4936
    "
19368
1811855e8abb #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 19366
diff changeset
  4937
        'abc' referencesAny:#()
18616
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4938
    "
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4939
!
9e97c42bc5df class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18600
diff changeset
  4940
3323
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4941
sizeInBytes
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4942
    "return the number of 8-bit bytes in the receiver.
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4943
     This is needed since subclasse may redefine #size (TwoByteString)"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4944
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4945
    ^ super size
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4946
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4947
    "Created: / 5.3.1998 / 10:41:13 / stefan"
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4948
! !
f890c96b2f2a Add ST80 compatibility stuff
Stefan Vogel <sv@exept.de>
parents: 3284
diff changeset
  4949
8986
c2962d45eca0 new: #isByteCollection
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
  4950
!UninterpretedBytes methodsFor:'testing'!
c2962d45eca0 new: #isByteCollection
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
  4951
c2962d45eca0 new: #isByteCollection
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
  4952
isByteCollection
c2962d45eca0 new: #isByteCollection
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
  4953
    "return true, if the receiver has access methods for bytes;
c2962d45eca0 new: #isByteCollection
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
  4954
     true is returned here - the method is redefined from Object."
c2962d45eca0 new: #isByteCollection
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
  4955
c2962d45eca0 new: #isByteCollection
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
  4956
    ^ true
9005
b82aa6bdc487 #isNonByteCollection
Stefan Vogel <sv@exept.de>
parents: 8995
diff changeset
  4957
!
b82aa6bdc487 #isNonByteCollection
Stefan Vogel <sv@exept.de>
parents: 8995
diff changeset
  4958
b82aa6bdc487 #isNonByteCollection
Stefan Vogel <sv@exept.de>
parents: 8995
diff changeset
  4959
isNonByteCollection
b82aa6bdc487 #isNonByteCollection
Stefan Vogel <sv@exept.de>
parents: 8995
diff changeset
  4960
    "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
  4961
     false is returned here - the method is redefined from Collection."
b82aa6bdc487 #isNonByteCollection
Stefan Vogel <sv@exept.de>
parents: 8995
diff changeset
  4962
b82aa6bdc487 #isNonByteCollection
Stefan Vogel <sv@exept.de>
parents: 8995
diff changeset
  4963
    ^ false
8986
c2962d45eca0 new: #isByteCollection
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
  4964
! !
c2962d45eca0 new: #isByteCollection
Stefan Vogel <sv@exept.de>
parents: 8913
diff changeset
  4965
11009
fb66915c5bb5 changed #acceptVisitor:with: - moved to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 10676
diff changeset
  4966
!UninterpretedBytes methodsFor:'visiting'!
fb66915c5bb5 changed #acceptVisitor:with: - moved to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 10676
diff changeset
  4967
fb66915c5bb5 changed #acceptVisitor:with: - moved to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 10676
diff changeset
  4968
acceptVisitor:aVisitor with:aParameter
16719
19b7ae0bbb49 comment/format only
Claus Gittinger <cg@exept.de>
parents: 16320
diff changeset
  4969
    "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
  4970
fb66915c5bb5 changed #acceptVisitor:with: - moved to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 10676
diff changeset
  4971
    ^ aVisitor visitByteArray:self with:aParameter
fb66915c5bb5 changed #acceptVisitor:with: - moved to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 10676
diff changeset
  4972
! !
fb66915c5bb5 changed #acceptVisitor:with: - moved to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 10676
diff changeset
  4973
695
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
  4974
!UninterpretedBytes class methodsFor:'documentation'!
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
  4975
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
  4976
version
18600
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  4977
    ^ '$Header$'
12253
c933c6fcdeef changed: #fromHexStringWithSeparators:
Claus Gittinger <cg@exept.de>
parents: 11973
diff changeset
  4978
!
c933c6fcdeef changed: #fromHexStringWithSeparators:
Claus Gittinger <cg@exept.de>
parents: 11973
diff changeset
  4979
c933c6fcdeef changed: #fromHexStringWithSeparators:
Claus Gittinger <cg@exept.de>
parents: 11973
diff changeset
  4980
version_CVS
18600
35de4089788f class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 18346
diff changeset
  4981
    ^ '$Header$'
695
20ec350f92ca checkin from browser
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
  4982
! !
15087
509fb4833fe1 class: UninterpretedBytes
Claus Gittinger <cg@exept.de>
parents: 15004
diff changeset
  4983
18284
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
  4984
7887131009f5 class: UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 17119
diff changeset
  4985
UninterpretedBytes initialize!