IntegerArray.st
author Claus Gittinger <cg@exept.de>
Tue, 22 Jan 2008 16:54:20 +0100
changeset 1924 4f84cb037a21
parent 1445 6fbd46d7f9f0
child 2289 57de37a4eb31
permissions -rw-r--r--
copyright
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
601
9f043e153af4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     1
"
736
db164846b078 documentation
Claus Gittinger <cg@exept.de>
parents: 601
diff changeset
     2
 COPYRIGHT (c) 1997 by eXept Software AG
601
9f043e153af4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     3
	      All Rights Reserved
9f043e153af4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     4
9f043e153af4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     5
 This software is furnished under a license and may be used
9f043e153af4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     6
 only in accordance with the terms of that license and with the
9f043e153af4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
9f043e153af4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     8
 be provided or otherwise made available to, or used by, any
9f043e153af4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     9
 other person.  No title to or ownership of the software is
9f043e153af4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    10
 hereby transferred.
9f043e153af4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    11
"
9f043e153af4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    12
1177
f81425b27be5 inheritance & documentation
Claus Gittinger <cg@exept.de>
parents: 736
diff changeset
    13
"{ Package: 'stx:libbasic2' }"
f81425b27be5 inheritance & documentation
Claus Gittinger <cg@exept.de>
parents: 736
diff changeset
    14
f81425b27be5 inheritance & documentation
Claus Gittinger <cg@exept.de>
parents: 736
diff changeset
    15
UnboxedIntegerArray variableLongSubclass:#IntegerArray
601
9f043e153af4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    16
	instanceVariableNames:''
9f043e153af4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    17
	classVariableNames:''
9f043e153af4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    18
	poolDictionaries:''
9f043e153af4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    19
	category:'Collections-Arrayed'
9f043e153af4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    20
!
9f043e153af4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    21
9f043e153af4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    22
!IntegerArray class methodsFor:'documentation'!
9f043e153af4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    23
9f043e153af4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    24
copyright
9f043e153af4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    25
"
9f043e153af4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    26
 COPYRIGHT (c) 1997 by eXept Software AG
9f043e153af4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    27
	      All Rights Reserved
9f043e153af4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    28
9f043e153af4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    29
 This software is furnished under a license and may be used
9f043e153af4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    30
 only in accordance with the terms of that license and with the
9f043e153af4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    31
 inclusion of the above copyright notice.   This software may not
9f043e153af4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    32
 be provided or otherwise made available to, or used by, any
9f043e153af4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    33
 other person.  No title to or ownership of the software is
9f043e153af4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    34
 hereby transferred.
9f043e153af4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    35
"
9f043e153af4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    36
!
9f043e153af4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    37
9f043e153af4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    38
documentation
9f043e153af4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    39
"
9f043e153af4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    40
    IntegerArrays store integers in the range 0..16rFFFFFFFF.
9f043e153af4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    41
    In contrast to normal arrays (which store pointers to their elements),
9f043e153af4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    42
    integerArrays store the values in a dense & compact way. 
9f043e153af4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    43
    Since the representation fits the underlying C-language systems representation
9f043e153af4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    44
    of unsigned int32's, this is also useful to pass bulk data to c primitive code.
9f043e153af4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    45
736
db164846b078 documentation
Claus Gittinger <cg@exept.de>
parents: 601
diff changeset
    46
    [memory requirements:]
db164846b078 documentation
Claus Gittinger <cg@exept.de>
parents: 601
diff changeset
    47
        OBJ-HEADER + (size * 4)
db164846b078 documentation
Claus Gittinger <cg@exept.de>
parents: 601
diff changeset
    48
601
9f043e153af4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    49
    [see also:]
736
db164846b078 documentation
Claus Gittinger <cg@exept.de>
parents: 601
diff changeset
    50
        ByteArray BooleanArray FloatArray DoubleArray Array
db164846b078 documentation
Claus Gittinger <cg@exept.de>
parents: 601
diff changeset
    51
        SignedWordArray WordArray
601
9f043e153af4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    52
9f043e153af4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    53
    [author:]
736
db164846b078 documentation
Claus Gittinger <cg@exept.de>
parents: 601
diff changeset
    54
        Claus Gittinger
601
9f043e153af4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    55
"
9f043e153af4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    56
! !
9f043e153af4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    57
1445
6fbd46d7f9f0 Redefine #< for speed
Stefan Vogel <sv@exept.de>
parents: 1177
diff changeset
    58
!IntegerArray methodsFor:'comparing'!
6fbd46d7f9f0 Redefine #< for speed
Stefan Vogel <sv@exept.de>
parents: 1177
diff changeset
    59
6fbd46d7f9f0 Redefine #< for speed
Stefan Vogel <sv@exept.de>
parents: 1177
diff changeset
    60
< anIntegerArray
6fbd46d7f9f0 Redefine #< for speed
Stefan Vogel <sv@exept.de>
parents: 1177
diff changeset
    61
    "Compare the receiver with the argument and return true if the
6fbd46d7f9f0 Redefine #< for speed
Stefan Vogel <sv@exept.de>
parents: 1177
diff changeset
    62
     receiver is greater than the argument. Otherwise return false.
6fbd46d7f9f0 Redefine #< for speed
Stefan Vogel <sv@exept.de>
parents: 1177
diff changeset
    63
6fbd46d7f9f0 Redefine #< for speed
Stefan Vogel <sv@exept.de>
parents: 1177
diff changeset
    64
     Redefined for speed (xpath handling)"
6fbd46d7f9f0 Redefine #< for speed
Stefan Vogel <sv@exept.de>
parents: 1177
diff changeset
    65
6fbd46d7f9f0 Redefine #< for speed
Stefan Vogel <sv@exept.de>
parents: 1177
diff changeset
    66
%{  /* NOCONTEXT */
6fbd46d7f9f0 Redefine #< for speed
Stefan Vogel <sv@exept.de>
parents: 1177
diff changeset
    67
6fbd46d7f9f0 Redefine #< for speed
Stefan Vogel <sv@exept.de>
parents: 1177
diff changeset
    68
    int len1, len2, min, i;
6fbd46d7f9f0 Redefine #< for speed
Stefan Vogel <sv@exept.de>
parents: 1177
diff changeset
    69
    REGISTER OBJ s = anIntegerArray;
6fbd46d7f9f0 Redefine #< for speed
Stefan Vogel <sv@exept.de>
parents: 1177
diff changeset
    70
    unsigned int *ip1, *ip2;
6fbd46d7f9f0 Redefine #< for speed
Stefan Vogel <sv@exept.de>
parents: 1177
diff changeset
    71
    OBJ cls;
6fbd46d7f9f0 Redefine #< for speed
Stefan Vogel <sv@exept.de>
parents: 1177
diff changeset
    72
    OBJ myCls;
6fbd46d7f9f0 Redefine #< for speed
Stefan Vogel <sv@exept.de>
parents: 1177
diff changeset
    73
6fbd46d7f9f0 Redefine #< for speed
Stefan Vogel <sv@exept.de>
parents: 1177
diff changeset
    74
    if (__isNonNilObject(s)) {
6fbd46d7f9f0 Redefine #< for speed
Stefan Vogel <sv@exept.de>
parents: 1177
diff changeset
    75
        cls = __qClass(s);
6fbd46d7f9f0 Redefine #< for speed
Stefan Vogel <sv@exept.de>
parents: 1177
diff changeset
    76
        myCls = __qClass(self);
6fbd46d7f9f0 Redefine #< for speed
Stefan Vogel <sv@exept.de>
parents: 1177
diff changeset
    77
6fbd46d7f9f0 Redefine #< for speed
Stefan Vogel <sv@exept.de>
parents: 1177
diff changeset
    78
        if ((cls == IntegerArray) || (cls == myCls)) {
6fbd46d7f9f0 Redefine #< for speed
Stefan Vogel <sv@exept.de>
parents: 1177
diff changeset
    79
            ip2 = __integerArrayVal(s);
6fbd46d7f9f0 Redefine #< for speed
Stefan Vogel <sv@exept.de>
parents: 1177
diff changeset
    80
            len2 = __integerArraySize(s);
6fbd46d7f9f0 Redefine #< for speed
Stefan Vogel <sv@exept.de>
parents: 1177
diff changeset
    81
            /*
6fbd46d7f9f0 Redefine #< for speed
Stefan Vogel <sv@exept.de>
parents: 1177
diff changeset
    82
             * care for instances of subclasses ...
6fbd46d7f9f0 Redefine #< for speed
Stefan Vogel <sv@exept.de>
parents: 1177
diff changeset
    83
             */
6fbd46d7f9f0 Redefine #< for speed
Stefan Vogel <sv@exept.de>
parents: 1177
diff changeset
    84
            if (cls != IntegerArray) {
6fbd46d7f9f0 Redefine #< for speed
Stefan Vogel <sv@exept.de>
parents: 1177
diff changeset
    85
                int n = __OBJS2BYTES__(__intVal(__ClassInstPtr(cls)->c_ninstvars)) / sizeof(__integerArrayVal(s));
6fbd46d7f9f0 Redefine #< for speed
Stefan Vogel <sv@exept.de>
parents: 1177
diff changeset
    86
6fbd46d7f9f0 Redefine #< for speed
Stefan Vogel <sv@exept.de>
parents: 1177
diff changeset
    87
                ip2 += n;
6fbd46d7f9f0 Redefine #< for speed
Stefan Vogel <sv@exept.de>
parents: 1177
diff changeset
    88
                len2 -= n;
6fbd46d7f9f0 Redefine #< for speed
Stefan Vogel <sv@exept.de>
parents: 1177
diff changeset
    89
            }
6fbd46d7f9f0 Redefine #< for speed
Stefan Vogel <sv@exept.de>
parents: 1177
diff changeset
    90
6fbd46d7f9f0 Redefine #< for speed
Stefan Vogel <sv@exept.de>
parents: 1177
diff changeset
    91
            ip1 = __integerArrayVal(self);
6fbd46d7f9f0 Redefine #< for speed
Stefan Vogel <sv@exept.de>
parents: 1177
diff changeset
    92
            len1 = __integerArraySize(self);
6fbd46d7f9f0 Redefine #< for speed
Stefan Vogel <sv@exept.de>
parents: 1177
diff changeset
    93
            /*
6fbd46d7f9f0 Redefine #< for speed
Stefan Vogel <sv@exept.de>
parents: 1177
diff changeset
    94
             * care for instances of subclasses ...
6fbd46d7f9f0 Redefine #< for speed
Stefan Vogel <sv@exept.de>
parents: 1177
diff changeset
    95
             */
6fbd46d7f9f0 Redefine #< for speed
Stefan Vogel <sv@exept.de>
parents: 1177
diff changeset
    96
            if (myCls != IntegerArray) {
6fbd46d7f9f0 Redefine #< for speed
Stefan Vogel <sv@exept.de>
parents: 1177
diff changeset
    97
                int n = __OBJS2BYTES__(__intVal(__ClassInstPtr(myCls)->c_ninstvars)) / sizeof(__integerArrayVal(s));
6fbd46d7f9f0 Redefine #< for speed
Stefan Vogel <sv@exept.de>
parents: 1177
diff changeset
    98
6fbd46d7f9f0 Redefine #< for speed
Stefan Vogel <sv@exept.de>
parents: 1177
diff changeset
    99
                ip1 += n;
6fbd46d7f9f0 Redefine #< for speed
Stefan Vogel <sv@exept.de>
parents: 1177
diff changeset
   100
                len1 -= n;
6fbd46d7f9f0 Redefine #< for speed
Stefan Vogel <sv@exept.de>
parents: 1177
diff changeset
   101
            }
6fbd46d7f9f0 Redefine #< for speed
Stefan Vogel <sv@exept.de>
parents: 1177
diff changeset
   102
6fbd46d7f9f0 Redefine #< for speed
Stefan Vogel <sv@exept.de>
parents: 1177
diff changeset
   103
            if (len1 <= len2)
6fbd46d7f9f0 Redefine #< for speed
Stefan Vogel <sv@exept.de>
parents: 1177
diff changeset
   104
                min = len1;
6fbd46d7f9f0 Redefine #< for speed
Stefan Vogel <sv@exept.de>
parents: 1177
diff changeset
   105
            else
6fbd46d7f9f0 Redefine #< for speed
Stefan Vogel <sv@exept.de>
parents: 1177
diff changeset
   106
                min = len2;
6fbd46d7f9f0 Redefine #< for speed
Stefan Vogel <sv@exept.de>
parents: 1177
diff changeset
   107
6fbd46d7f9f0 Redefine #< for speed
Stefan Vogel <sv@exept.de>
parents: 1177
diff changeset
   108
            for (i = 0; i < min; i++) {
6fbd46d7f9f0 Redefine #< for speed
Stefan Vogel <sv@exept.de>
parents: 1177
diff changeset
   109
                if (ip1[i] < ip2[i]) {
6fbd46d7f9f0 Redefine #< for speed
Stefan Vogel <sv@exept.de>
parents: 1177
diff changeset
   110
                    RETURN(true)
6fbd46d7f9f0 Redefine #< for speed
Stefan Vogel <sv@exept.de>
parents: 1177
diff changeset
   111
                }
6fbd46d7f9f0 Redefine #< for speed
Stefan Vogel <sv@exept.de>
parents: 1177
diff changeset
   112
                if (ip1[i] > ip2[i]) {
6fbd46d7f9f0 Redefine #< for speed
Stefan Vogel <sv@exept.de>
parents: 1177
diff changeset
   113
                    RETURN(false)
6fbd46d7f9f0 Redefine #< for speed
Stefan Vogel <sv@exept.de>
parents: 1177
diff changeset
   114
                }
6fbd46d7f9f0 Redefine #< for speed
Stefan Vogel <sv@exept.de>
parents: 1177
diff changeset
   115
            }
6fbd46d7f9f0 Redefine #< for speed
Stefan Vogel <sv@exept.de>
parents: 1177
diff changeset
   116
6fbd46d7f9f0 Redefine #< for speed
Stefan Vogel <sv@exept.de>
parents: 1177
diff changeset
   117
            if (len1 < len2) {
6fbd46d7f9f0 Redefine #< for speed
Stefan Vogel <sv@exept.de>
parents: 1177
diff changeset
   118
                RETURN ( true );
6fbd46d7f9f0 Redefine #< for speed
Stefan Vogel <sv@exept.de>
parents: 1177
diff changeset
   119
            }
6fbd46d7f9f0 Redefine #< for speed
Stefan Vogel <sv@exept.de>
parents: 1177
diff changeset
   120
            RETURN ( false );
6fbd46d7f9f0 Redefine #< for speed
Stefan Vogel <sv@exept.de>
parents: 1177
diff changeset
   121
        }
6fbd46d7f9f0 Redefine #< for speed
Stefan Vogel <sv@exept.de>
parents: 1177
diff changeset
   122
    }
6fbd46d7f9f0 Redefine #< for speed
Stefan Vogel <sv@exept.de>
parents: 1177
diff changeset
   123
%}.
6fbd46d7f9f0 Redefine #< for speed
Stefan Vogel <sv@exept.de>
parents: 1177
diff changeset
   124
    ^ super < anIntegerArray
6fbd46d7f9f0 Redefine #< for speed
Stefan Vogel <sv@exept.de>
parents: 1177
diff changeset
   125
6fbd46d7f9f0 Redefine #< for speed
Stefan Vogel <sv@exept.de>
parents: 1177
diff changeset
   126
6fbd46d7f9f0 Redefine #< for speed
Stefan Vogel <sv@exept.de>
parents: 1177
diff changeset
   127
    "
6fbd46d7f9f0 Redefine #< for speed
Stefan Vogel <sv@exept.de>
parents: 1177
diff changeset
   128
        (IntegerArray newFrom:#[1 2 3 4 5]) < (IntegerArray newFrom:#[1 2 3 4 5])
6fbd46d7f9f0 Redefine #< for speed
Stefan Vogel <sv@exept.de>
parents: 1177
diff changeset
   129
        (IntegerArray newFrom:#[1 2 3 4 5]) < (IntegerArray newFrom:#[1 2 3 4])
6fbd46d7f9f0 Redefine #< for speed
Stefan Vogel <sv@exept.de>
parents: 1177
diff changeset
   130
        (IntegerArray newFrom:#[1 2 3 4]) < (IntegerArray newFrom:#[1 2 3 4 5])
6fbd46d7f9f0 Redefine #< for speed
Stefan Vogel <sv@exept.de>
parents: 1177
diff changeset
   131
        (IntegerArray newFrom:#[1 2 3 4 5]) < (IntegerArray newFrom:#[1 2 3 4 6])
6fbd46d7f9f0 Redefine #< for speed
Stefan Vogel <sv@exept.de>
parents: 1177
diff changeset
   132
        (IntegerArray newFrom:#[]) < (IntegerArray newFrom:#[1 2 3 4 6])
6fbd46d7f9f0 Redefine #< for speed
Stefan Vogel <sv@exept.de>
parents: 1177
diff changeset
   133
    "
6fbd46d7f9f0 Redefine #< for speed
Stefan Vogel <sv@exept.de>
parents: 1177
diff changeset
   134
! !
6fbd46d7f9f0 Redefine #< for speed
Stefan Vogel <sv@exept.de>
parents: 1177
diff changeset
   135
601
9f043e153af4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   136
!IntegerArray class methodsFor:'documentation'!
9f043e153af4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   137
9f043e153af4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   138
version
1445
6fbd46d7f9f0 Redefine #< for speed
Stefan Vogel <sv@exept.de>
parents: 1177
diff changeset
   139
    ^ '$Header: /cvs/stx/stx/libbasic2/IntegerArray.st,v 1.4 2004-04-12 16:37:53 stefan Exp $'
601
9f043e153af4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   140
! !