UnboxedIntegerArray.st
author Claus Gittinger <cg@exept.de>
Thu, 09 Jun 2016 12:30:05 +0200
changeset 3886 b4fe47975cce
parent 3863 1ad2dc0cb100
child 4045 df87f891d9bc
permissions -rw-r--r--
initial checkin class: ValueDoubleLink added: #copyright #documentation #value #value:
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1311
e20fa06ce5f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1178
diff changeset
     1
"
e20fa06ce5f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1178
diff changeset
     2
 COPYRIGHT (c) 2003 by eXept Software AG
e20fa06ce5f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1178
diff changeset
     3
              All Rights Reserved
e20fa06ce5f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1178
diff changeset
     4
e20fa06ce5f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1178
diff changeset
     5
 This software is furnished under a license and may be used
e20fa06ce5f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1178
diff changeset
     6
 only in accordance with the terms of that license and with the
e20fa06ce5f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1178
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
e20fa06ce5f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1178
diff changeset
     8
 be provided or otherwise made available to, or used by, any
e20fa06ce5f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1178
diff changeset
     9
 other person.  No title to or ownership of the software is
e20fa06ce5f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1178
diff changeset
    10
 hereby transferred.
e20fa06ce5f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1178
diff changeset
    11
"
1178
4a62761a9433 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    12
"{ Package: 'stx:libbasic2' }"
4a62761a9433 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    13
3541
698d77094d7f class: UnboxedIntegerArray
Stefan Vogel <sv@exept.de>
parents: 2712
diff changeset
    14
"{ NameSpace: Smalltalk }"
698d77094d7f class: UnboxedIntegerArray
Stefan Vogel <sv@exept.de>
parents: 2712
diff changeset
    15
2676
032f43769c27 class definition
Claus Gittinger <cg@exept.de>
parents: 2039
diff changeset
    16
AbstractNumberVector subclass:#UnboxedIntegerArray
1178
4a62761a9433 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    17
	instanceVariableNames:''
4a62761a9433 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    18
	classVariableNames:''
4a62761a9433 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    19
	poolDictionaries:''
4a62761a9433 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    20
	category:'Collections-Arrayed'
4a62761a9433 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    21
!
4a62761a9433 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    22
1311
e20fa06ce5f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1178
diff changeset
    23
!UnboxedIntegerArray class methodsFor:'documentation'!
e20fa06ce5f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1178
diff changeset
    24
e20fa06ce5f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1178
diff changeset
    25
copyright
e20fa06ce5f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1178
diff changeset
    26
"
e20fa06ce5f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1178
diff changeset
    27
 COPYRIGHT (c) 2003 by eXept Software AG
e20fa06ce5f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1178
diff changeset
    28
              All Rights Reserved
e20fa06ce5f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1178
diff changeset
    29
e20fa06ce5f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1178
diff changeset
    30
 This software is furnished under a license and may be used
e20fa06ce5f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1178
diff changeset
    31
 only in accordance with the terms of that license and with the
e20fa06ce5f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1178
diff changeset
    32
 inclusion of the above copyright notice.   This software may not
e20fa06ce5f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1178
diff changeset
    33
 be provided or otherwise made available to, or used by, any
e20fa06ce5f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1178
diff changeset
    34
 other person.  No title to or ownership of the software is
e20fa06ce5f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1178
diff changeset
    35
 hereby transferred.
e20fa06ce5f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1178
diff changeset
    36
"
1574
0c15fa756ca4 comments
Claus Gittinger <cg@exept.de>
parents: 1563
diff changeset
    37
!
0c15fa756ca4 comments
Claus Gittinger <cg@exept.de>
parents: 1563
diff changeset
    38
0c15fa756ca4 comments
Claus Gittinger <cg@exept.de>
parents: 1563
diff changeset
    39
documentation
0c15fa756ca4 comments
Claus Gittinger <cg@exept.de>
parents: 1563
diff changeset
    40
"
0c15fa756ca4 comments
Claus Gittinger <cg@exept.de>
parents: 1563
diff changeset
    41
    An abstract superclass for all unboxed integer classes.
0c15fa756ca4 comments
Claus Gittinger <cg@exept.de>
parents: 1563
diff changeset
    42
    In contrast to normal arrays (which store pointers to their elements),
0c15fa756ca4 comments
Claus Gittinger <cg@exept.de>
parents: 1563
diff changeset
    43
    unboxedIntegerArrays store the values in a dense & compact way. 
3767
f115746dcd0a #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 3734
diff changeset
    44
    Since the representation fits corresponding underlying C-language representations,
1574
0c15fa756ca4 comments
Claus Gittinger <cg@exept.de>
parents: 1563
diff changeset
    45
    these are also useful to pass bulk data to c primitive code.
0c15fa756ca4 comments
Claus Gittinger <cg@exept.de>
parents: 1563
diff changeset
    46
0c15fa756ca4 comments
Claus Gittinger <cg@exept.de>
parents: 1563
diff changeset
    47
    [see also:]
0c15fa756ca4 comments
Claus Gittinger <cg@exept.de>
parents: 1563
diff changeset
    48
        ByteArray WordArray BooleanArray FloatArray DoubleArray Array
0c15fa756ca4 comments
Claus Gittinger <cg@exept.de>
parents: 1563
diff changeset
    49
        IntegerArray LongIntegerArray SignedLongIntegerArray
0c15fa756ca4 comments
Claus Gittinger <cg@exept.de>
parents: 1563
diff changeset
    50
0c15fa756ca4 comments
Claus Gittinger <cg@exept.de>
parents: 1563
diff changeset
    51
    [author:]
0c15fa756ca4 comments
Claus Gittinger <cg@exept.de>
parents: 1563
diff changeset
    52
        Claus Gittinger
0c15fa756ca4 comments
Claus Gittinger <cg@exept.de>
parents: 1563
diff changeset
    53
"
1311
e20fa06ce5f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1178
diff changeset
    54
! !
1178
4a62761a9433 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    55
1557
52f4a080f6f0 +isAbstract
Claus Gittinger <cg@exept.de>
parents: 1423
diff changeset
    56
!UnboxedIntegerArray class methodsFor:'queries'!
52f4a080f6f0 +isAbstract
Claus Gittinger <cg@exept.de>
parents: 1423
diff changeset
    57
52f4a080f6f0 +isAbstract
Claus Gittinger <cg@exept.de>
parents: 1423
diff changeset
    58
isAbstract
2039
40972b6171c2 comment
Claus Gittinger <cg@exept.de>
parents: 1574
diff changeset
    59
    "Return if this class is an abstract class.
40972b6171c2 comment
Claus Gittinger <cg@exept.de>
parents: 1574
diff changeset
    60
     True is returned for UnboxedIntegerArray here; false for subclasses.
3782
adf9bb41332e #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 3767
diff changeset
    61
     Abstract subclasses must redefine this again."
2039
40972b6171c2 comment
Claus Gittinger <cg@exept.de>
parents: 1574
diff changeset
    62
1557
52f4a080f6f0 +isAbstract
Claus Gittinger <cg@exept.de>
parents: 1423
diff changeset
    63
    ^ self == UnboxedIntegerArray
3734
dbc7f37b85c0 #FEATURE
Stefan Vogel <sv@exept.de>
parents: 3541
diff changeset
    64
!
dbc7f37b85c0 #FEATURE
Stefan Vogel <sv@exept.de>
parents: 3541
diff changeset
    65
dbc7f37b85c0 #FEATURE
Stefan Vogel <sv@exept.de>
parents: 3541
diff changeset
    66
maxVal
3863
1ad2dc0cb100 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 3782
diff changeset
    67
    "the maximum value which can be stored in instances of me"
1ad2dc0cb100 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 3782
diff changeset
    68
    
1ad2dc0cb100 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 3782
diff changeset
    69
    ^ self subclassResponsibility.
1ad2dc0cb100 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 3782
diff changeset
    70
!
1ad2dc0cb100 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 3782
diff changeset
    71
1ad2dc0cb100 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 3782
diff changeset
    72
minVal
1ad2dc0cb100 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 3782
diff changeset
    73
    "the minimum value which can be stored in instances of me"
1ad2dc0cb100 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 3782
diff changeset
    74
    
3734
dbc7f37b85c0 #FEATURE
Stefan Vogel <sv@exept.de>
parents: 3541
diff changeset
    75
    ^ self subclassResponsibility.
1557
52f4a080f6f0 +isAbstract
Claus Gittinger <cg@exept.de>
parents: 1423
diff changeset
    76
! !
52f4a080f6f0 +isAbstract
Claus Gittinger <cg@exept.de>
parents: 1423
diff changeset
    77
1423
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
    78
!UnboxedIntegerArray methodsFor:'accessing'!
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
    79
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
    80
at:index
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
    81
    "return the indexed instance variable with index, anInteger.
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
    82
     Trigger an error if the receiver has no indexed instance variables.
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
    83
     This method should NOT be redefined in any subclass (except with great care, for tuning)"
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
    84
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
    85
%{  /* NOCONTEXT */
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
    86
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
    87
    REGISTER int nbytes, indx;
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
    88
    OBJ myClass;
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
    89
    REGISTER char *pFirst;
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
    90
    REGISTER int n;
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
    91
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
    92
    /*
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
    93
     * notice the missing test for self being a nonNilObject -
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
    94
     * this can be done since basicAt: is defined both in UndefinedObject
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
    95
     * and SmallInteger
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
    96
     */
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
    97
    if (__isSmallInteger(index)) {
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
    98
        myClass = __qClass(self);
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
    99
        indx = __intVal(index) - 1;
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   100
        n /* nInstVars */ = __intVal(__ClassInstPtr(myClass)->c_ninstvars);
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   101
        n /* nInstBytes */ = OHDR_SIZE + __OBJS2BYTES__(n /* nInstVars */);
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   102
        nbytes = __qSize(self) - n /* nInstBytes */;
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   103
        pFirst = (char *)(__InstPtr(self)) + n /* nInstBytes */;
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   104
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   105
        switch ((INT)(__ClassInstPtr(myClass)->c_flags) & __MASKSMALLINT(ARRAYMASK)) {
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   106
            case __MASKSMALLINT(WORDARRAY):
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   107
                /*
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   108
                 * unsigned 16bit ints
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   109
                 */
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   110
                /* Notice: the hard coded shifts are by purpose;
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   111
                 * it makes us independent of the short-size of the machine
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   112
                 */
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   113
                if ((unsigned)indx < (nbytes>>1)) {
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   114
                    unsigned short *sp;
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   115
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   116
                    sp = (unsigned short *)(pFirst + (indx<<1));
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   117
                    RETURN ( __MKSMALLINT( (INT)(*sp & 0xFFFF)) );
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   118
                }
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   119
                break;
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   120
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   121
            case __MASKSMALLINT(SWORDARRAY):
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   122
                /*
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   123
                 * signed 16bit ints
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   124
                 */
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   125
                /* Notice: the hard coded shifts are by purpose;
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   126
                 * it makes us independent of the short-size of the machine
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   127
                 */
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   128
                if ((unsigned)indx < (nbytes>>1)) {
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   129
                    short *ssp;
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   130
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   131
                    ssp = (short *)(pFirst + (indx<<1));
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   132
                    RETURN ( __MKSMALLINT( (INT)(*ssp) ));
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   133
                }
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   134
                break;
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   135
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   136
            case __MASKSMALLINT(LONGARRAY):
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   137
                /*
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   138
                 * unsigned 32bit ints
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   139
                 */
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   140
                /* Notice: the hard coded shifts are by purpose;
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   141
                 * it makes us independent of the int-size of the machine
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   142
                 */
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   143
                if ((unsigned)indx < (nbytes>>2)) {
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   144
                    unsigned int32 ul;
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   145
                    unsigned int32 *lp;
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   146
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   147
                    lp = (unsigned int32 *)(pFirst + (indx<<2));
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   148
                    ul = *lp;
1563
685e88155bbd alpha64 vs. POINTER_SIZE cleanup
Claus Gittinger <cg@exept.de>
parents: 1557
diff changeset
   149
#if __POINTER_SIZE__ == 8
1423
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   150
                    {
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   151
                        unsigned  INT ull = (unsigned INT)ul;
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   152
                        RETURN ( __MKSMALLINT(ull) );
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   153
                    }
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   154
#else
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   155
                    if (ul <= _MAX_INT) {
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   156
                        RETURN ( __MKSMALLINT(ul) );
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   157
                    }
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   158
                    RETURN ( __MKULARGEINT(ul) );
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   159
#endif
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   160
                }
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   161
                break;
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   162
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   163
            case __MASKSMALLINT(SLONGARRAY):
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   164
                /*
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   165
                 * signed 32bit ints
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   166
                 */
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   167
                /* Notice: the hard coded shifts are by purpose;
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   168
                 * it makes us independent of the int-size of the machine
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   169
                 */
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   170
                if ((unsigned)indx < (nbytes>>2)) {
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   171
                    int32 *slp;
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   172
                    int32 l;
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   173
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   174
                    slp = (int32 *)(pFirst + (indx<<2));
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   175
                    l = *slp;
1563
685e88155bbd alpha64 vs. POINTER_SIZE cleanup
Claus Gittinger <cg@exept.de>
parents: 1557
diff changeset
   176
#if __POINTER_SIZE__ == 8
1423
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   177
                    {
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   178
                        INT ll = (INT)l;
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   179
                        RETURN ( __MKSMALLINT(ll) );
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   180
                    }
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   181
#else
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   182
                    if (__ISVALIDINTEGER(l)) {
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   183
                        RETURN ( __MKSMALLINT(l) );
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   184
                    }
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   185
                    RETURN ( __MKLARGEINT(l) );
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   186
#endif
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   187
                }
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   188
                break;
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   189
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   190
            case __MASKSMALLINT(SLONGLONGARRAY):
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   191
                /*
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   192
                 * signed 64bit longlongs
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   193
                 */
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   194
#ifdef __NEED_LONGLONG_ALIGN
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   195
                if ((INT)pFirst & (__LONGLONG_ALIGN-1)) {
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   196
                    int delta = __LONGLONG_ALIGN - ((INT)pFirst & (__LONGLONG_ALIGN-1));
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   197
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   198
                    pFirst += delta;
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   199
                    nbytes -= delta;
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   200
                }
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   201
#endif
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   202
                /* Notice: the hard coded shifts are by purpose;
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   203
                 * it makes us independent of the long/longlong-size of the machine
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   204
                 */
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   205
                if ((unsigned)indx < (nbytes>>3)) {
1563
685e88155bbd alpha64 vs. POINTER_SIZE cleanup
Claus Gittinger <cg@exept.de>
parents: 1557
diff changeset
   206
#if __POINTER_SIZE__ == 8
1423
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   207
                    INT *slp, ll;
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   208
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   209
                    slp = (INT *)(pFirst + (indx<<3));
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   210
                    ll = *slp;
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   211
                    if (__ISVALIDINTEGER(ll)) {
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   212
                        RETURN ( __MKSMALLINT(ll) );
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   213
                    }
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   214
                    RETURN ( __MKLARGEINT(ll) );
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   215
#else
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   216
                    __int64__ *llp;
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   217
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   218
                    llp = (__int64__ *)(pFirst + (indx<<3));
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   219
                    RETURN (__MKINT64(llp));
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   220
#endif
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   221
                }
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   222
                break;
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   223
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   224
            case __MASKSMALLINT(LONGLONGARRAY):
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   225
                /*
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   226
                 * unsigned 64bit longlongs
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   227
                 */
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   228
#ifdef __NEED_LONGLONG_ALIGN
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   229
                if ((INT)pFirst & (__LONGLONG_ALIGN-1)) {
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   230
                    int delta = __LONGLONG_ALIGN - ((INT)pFirst & (__LONGLONG_ALIGN-1));
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   231
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   232
                    pFirst += delta;
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   233
                    nbytes -= delta;
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   234
                }
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   235
#endif
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   236
                /* Notice: the hard coded shifts are by purpose;
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   237
                 * it makes us independent of the long/longlong-size of the machine
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   238
                 */
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   239
                if ((unsigned)indx < (nbytes>>3)) {
1563
685e88155bbd alpha64 vs. POINTER_SIZE cleanup
Claus Gittinger <cg@exept.de>
parents: 1557
diff changeset
   240
#if __POINTER_SIZE__ == 8
1423
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   241
                    unsigned INT *ulp, ul;
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   242
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   243
                    ulp = (unsigned INT *)(pFirst + (indx<<3));
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   244
                    ul = *ulp;
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   245
                    if (ul <= _MAX_INT) {
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   246
                        RETURN ( __MKSMALLINT(ul) );
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   247
                    }
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   248
                    RETURN ( __MKULARGEINT(ul) );
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   249
#else
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   250
                    __uint64__ *llp;
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   251
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   252
                    llp = (__uint64__ *)(pFirst + (indx<<3));
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   253
                    RETURN (__MKUINT64(llp));
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   254
#endif
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   255
                }
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   256
                break;
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   257
        }
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   258
    }
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   259
%}.
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   260
    ^ self indexNotIntegerOrOutOfBounds:index
2712
7ba8787b6b16 added: #byteAt:
Claus Gittinger <cg@exept.de>
parents: 2676
diff changeset
   261
!
7ba8787b6b16 added: #byteAt:
Claus Gittinger <cg@exept.de>
parents: 2676
diff changeset
   262
7ba8787b6b16 added: #byteAt:
Claus Gittinger <cg@exept.de>
parents: 2676
diff changeset
   263
byteAt:index
7ba8787b6b16 added: #byteAt:
Claus Gittinger <cg@exept.de>
parents: 2676
diff changeset
   264
    "treating the receiver as a stream of bytes in native byteorder,
3541
698d77094d7f class: UnboxedIntegerArray
Stefan Vogel <sv@exept.de>
parents: 2712
diff changeset
   265
     return an individual byte"
2712
7ba8787b6b16 added: #byteAt:
Claus Gittinger <cg@exept.de>
parents: 2676
diff changeset
   266
3541
698d77094d7f class: UnboxedIntegerArray
Stefan Vogel <sv@exept.de>
parents: 2712
diff changeset
   267
    |lVal elementByteSize|
698d77094d7f class: UnboxedIntegerArray
Stefan Vogel <sv@exept.de>
parents: 2712
diff changeset
   268
698d77094d7f class: UnboxedIntegerArray
Stefan Vogel <sv@exept.de>
parents: 2712
diff changeset
   269
    elementByteSize := self class elementByteSize.
2712
7ba8787b6b16 added: #byteAt:
Claus Gittinger <cg@exept.de>
parents: 2676
diff changeset
   270
3541
698d77094d7f class: UnboxedIntegerArray
Stefan Vogel <sv@exept.de>
parents: 2712
diff changeset
   271
    lVal := self at:((index - 1) // elementByteSize) + 1.
698d77094d7f class: UnboxedIntegerArray
Stefan Vogel <sv@exept.de>
parents: 2712
diff changeset
   272
    IsBigEndian ifTrue:[
698d77094d7f class: UnboxedIntegerArray
Stefan Vogel <sv@exept.de>
parents: 2712
diff changeset
   273
        ^ lVal digitAt:(4 - ((index - 1) \\ elementByteSize)). 
2712
7ba8787b6b16 added: #byteAt:
Claus Gittinger <cg@exept.de>
parents: 2676
diff changeset
   274
    ].
3541
698d77094d7f class: UnboxedIntegerArray
Stefan Vogel <sv@exept.de>
parents: 2712
diff changeset
   275
    ^ lVal digitAt:((index - 1) \\ elementByteSize) + 1. 
2712
7ba8787b6b16 added: #byteAt:
Claus Gittinger <cg@exept.de>
parents: 2676
diff changeset
   276
7ba8787b6b16 added: #byteAt:
Claus Gittinger <cg@exept.de>
parents: 2676
diff changeset
   277
    "
7ba8787b6b16 added: #byteAt:
Claus Gittinger <cg@exept.de>
parents: 2676
diff changeset
   278
     (IntegerArray new:2)
7ba8787b6b16 added: #byteAt:
Claus Gittinger <cg@exept.de>
parents: 2676
diff changeset
   279
        at:1 put:16r12345678;
7ba8787b6b16 added: #byteAt:
Claus Gittinger <cg@exept.de>
parents: 2676
diff changeset
   280
        at:2 put:16r9abcdef0;
7ba8787b6b16 added: #byteAt:
Claus Gittinger <cg@exept.de>
parents: 2676
diff changeset
   281
        byteAt:5      
7ba8787b6b16 added: #byteAt:
Claus Gittinger <cg@exept.de>
parents: 2676
diff changeset
   282
    "
7ba8787b6b16 added: #byteAt:
Claus Gittinger <cg@exept.de>
parents: 2676
diff changeset
   283
7ba8787b6b16 added: #byteAt:
Claus Gittinger <cg@exept.de>
parents: 2676
diff changeset
   284
    "Created: / 27-02-2012 / 20:58:47 / cg"
1423
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   285
! !
f192a7708747 Define #at: (like Array, same as Object>>basicAt:) for speed.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   286
1414
e801d1248f10 printing code shared for 16- and 32bit arrays
Claus Gittinger <cg@exept.de>
parents: 1311
diff changeset
   287
!UnboxedIntegerArray methodsFor:'printing'!
e801d1248f10 printing code shared for 16- and 32bit arrays
Claus Gittinger <cg@exept.de>
parents: 1311
diff changeset
   288
e801d1248f10 printing code shared for 16- and 32bit arrays
Claus Gittinger <cg@exept.de>
parents: 1311
diff changeset
   289
printOn:aStream base:radix showRadix:showRadix
e801d1248f10 printing code shared for 16- and 32bit arrays
Claus Gittinger <cg@exept.de>
parents: 1311
diff changeset
   290
    "append a printed representation to aStream in the given number base."
e801d1248f10 printing code shared for 16- and 32bit arrays
Claus Gittinger <cg@exept.de>
parents: 1311
diff changeset
   291
e801d1248f10 printing code shared for 16- and 32bit arrays
Claus Gittinger <cg@exept.de>
parents: 1311
diff changeset
   292
    (self class == WordArray or:[self class == LongIntegerArray]) 
e801d1248f10 printing code shared for 16- and 32bit arrays
Claus Gittinger <cg@exept.de>
parents: 1311
diff changeset
   293
    ifTrue:[    "/ care for subclasses
e801d1248f10 printing code shared for 16- and 32bit arrays
Claus Gittinger <cg@exept.de>
parents: 1311
diff changeset
   294
        aStream nextPutAll:'#('.
e801d1248f10 printing code shared for 16- and 32bit arrays
Claus Gittinger <cg@exept.de>
parents: 1311
diff changeset
   295
        self 
e801d1248f10 printing code shared for 16- and 32bit arrays
Claus Gittinger <cg@exept.de>
parents: 1311
diff changeset
   296
            do:[:word | word printOn:aStream base:radix showRadix:showRadix]
e801d1248f10 printing code shared for 16- and 32bit arrays
Claus Gittinger <cg@exept.de>
parents: 1311
diff changeset
   297
            separatedBy:[aStream space].
e801d1248f10 printing code shared for 16- and 32bit arrays
Claus Gittinger <cg@exept.de>
parents: 1311
diff changeset
   298
        aStream nextPut:$).
e801d1248f10 printing code shared for 16- and 32bit arrays
Claus Gittinger <cg@exept.de>
parents: 1311
diff changeset
   299
        ^ self
e801d1248f10 printing code shared for 16- and 32bit arrays
Claus Gittinger <cg@exept.de>
parents: 1311
diff changeset
   300
    ].
e801d1248f10 printing code shared for 16- and 32bit arrays
Claus Gittinger <cg@exept.de>
parents: 1311
diff changeset
   301
    ^ self printOn:aStream
e801d1248f10 printing code shared for 16- and 32bit arrays
Claus Gittinger <cg@exept.de>
parents: 1311
diff changeset
   302
! !
e801d1248f10 printing code shared for 16- and 32bit arrays
Claus Gittinger <cg@exept.de>
parents: 1311
diff changeset
   303
1178
4a62761a9433 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   304
!UnboxedIntegerArray methodsFor:'queries'!
4a62761a9433 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   305
4a62761a9433 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   306
defaultElement
4a62761a9433 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   307
    ^ 0
4a62761a9433 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   308
! !
4a62761a9433 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   309
4a62761a9433 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   310
!UnboxedIntegerArray class methodsFor:'documentation'!
4a62761a9433 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   311
4a62761a9433 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   312
version
3734
dbc7f37b85c0 #FEATURE
Stefan Vogel <sv@exept.de>
parents: 3541
diff changeset
   313
    ^ '$Header$'
1178
4a62761a9433 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   314
! !
3541
698d77094d7f class: UnboxedIntegerArray
Stefan Vogel <sv@exept.de>
parents: 2712
diff changeset
   315