BitArray.st
author Claus Gittinger <cg@exept.de>
Tue, 09 Jul 2019 20:55:17 +0200
changeset 24417 03b083548da2
parent 24243 f4b01e220af0
permissions -rw-r--r--
#REFACTORING by exept class: Smalltalk class changed: #recursiveInstallAutoloadedClassesFrom:rememberIn:maxLevels:noAutoload:packageTop:showSplashInLevels: Transcript showCR:(... bindWith:...) -> Transcript showCR:... with:...
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
23976
16af24753c12 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 21694
diff changeset
     1
"{ Encoding: utf8 }"
16af24753c12 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 21694
diff changeset
     2
20654
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     3
"
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     4
 COPYRIGHT (c) 1997 by eXept Software AG / Claus Gittinger
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     5
              All Rights Reserved
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     6
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     7
 This software is furnished under a license and may be used
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     8
 only in accordance with the terms of that license and with the
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     9
 inclusion of the above copyright notice.   This software may not
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    10
 be provided or otherwise made available to, or used by, any
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    11
 other person.  No title to or ownership of the software is
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    12
 hereby transferred.
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    13
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    14
 This is a demo example:
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    15
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    16
 THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTOR ``AS IS'' AND
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    17
 ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    18
 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    19
 ARE DISCLAIMED.  IN NO EVENT SHALL THE CONTRIBUTOR BE LIABLE
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    20
 FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    21
 DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    22
 OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    23
 HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    24
 LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    25
 OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    26
 SUCH DAMAGE.
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    27
"
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    28
"{ Package: 'stx:libbasic' }"
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    29
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    30
"{ NameSpace: Smalltalk }"
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    31
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    32
ArrayedCollection variableByteSubclass:#BitArray
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    33
	instanceVariableNames:'tally'
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    34
	classVariableNames:''
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    35
	poolDictionaries:''
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    36
	category:'Collections-Arrayed'
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    37
!
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    38
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    39
!BitArray class methodsFor:'documentation'!
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    40
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    41
copyright
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    42
"
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    43
 COPYRIGHT (c) 1997 by eXept Software AG / Claus Gittinger
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    44
              All Rights Reserved
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    45
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    46
 This software is furnished under a license and may be used
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    47
 only in accordance with the terms of that license and with the
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    48
 inclusion of the above copyright notice.   This software may not
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    49
 be provided or otherwise made available to, or used by, any
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    50
 other person.  No title to or ownership of the software is
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    51
 hereby transferred.
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    52
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    53
 This is a demo example:
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    54
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    55
 THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTOR ``AS IS'' AND
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    56
 ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    57
 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    58
 ARE DISCLAIMED.  IN NO EVENT SHALL THE CONTRIBUTOR BE LIABLE
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    59
 FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    60
 DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    61
 OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    62
 HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    63
 LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    64
 OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    65
 SUCH DAMAGE.
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    66
"
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    67
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    68
!
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    69
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    70
documentation
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    71
"
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    72
    BitArrays are specially tuned to store bits, and are useful for bulk bit/boolean data. 
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    73
    They require only 1/32th (32bit machines) or 1/64th (64bit machines) of the memory 
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    74
    compared to an array of booleans.
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    75
21694
f1f2615f8a41 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20654
diff changeset
    76
    They store 8 bits per byte. Since instances store bits in multiples
20654
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    77
    of 8, the real size of the collection is kept in an extra instance variable (tally).
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    78
    It may be useful if huge boolean arrays are needed.
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    79
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    80
    There are 10 types of people in this world: 
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    81
        Those who understand binary, & those who don't.
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    82
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    83
    ATTENTION:
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    84
        Bits 1 to 8 of the BooleanArray are stored in bits 8 to 1 of the
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    85
        corresponding byte, to allow easy mapping to ASN.1 BIT STRING encoding
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    86
        in the BER. (i.e. MSB-first)
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    87
        Do not change this.
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    88
        
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    89
    [memory requirements:]
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    90
        OBJ-HEADER + ((size + 7) // 8)
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    91
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    92
    [author:]
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    93
        Claus Gittinger
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    94
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    95
    [see also:]
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    96
        BooleanArray ByteArray WordArray Array
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    97
"
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    98
!
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    99
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   100
examples
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   101
"
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   102
                                                                        [exBegin]
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   103
    (BitArray new:7) inspect
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   104
                                                                        [exEnd]
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   105
                                                                        [exBegin]
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   106
    (BitArray new:7) basicInspect
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   107
                                                                        [exEnd]
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   108
                                                                        [exBegin]
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   109
    |bits|
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   110
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   111
    bits := BitArray new:1000000.
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   112
    (bits at:9999) printCR.
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   113
    bits at:9999 put:1.
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   114
    (bits at:9999) printCR.
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   115
                                                                        [exEnd]
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   116
"
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   117
! !
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   118
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   119
!BitArray class methodsFor:'instance creation'!
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   120
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   121
fromBytes:aByteArray
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   122
    "return a new instance, capable of holding aByteArray size*8 bits, initialized from aByteArray"
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   123
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   124
    |a|
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   125
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   126
    a := self new: aByteArray size*8.
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   127
    1 to:aByteArray size do:[:i | a byteAt:i put:(aByteArray at:i)].
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   128
    ^ a
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   129
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   130
    "
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   131
     BitArray fromBytes:#[ 2r00001111 2r10101010 2r01010101]
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   132
    "
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   133
!
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   134
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   135
new
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   136
    "return a new instance, capable of holding size bits"
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   137
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   138
    ^ self new:0
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   139
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   140
    "
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   141
     BitArray new
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   142
    "
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   143
!
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   144
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   145
new:size
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   146
    "return a new instance, capable of holding size bits"
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   147
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   148
    |nBytes|
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   149
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   150
    nBytes := (size + 7) // 8.
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   151
    ^ (super new:nBytes) setTally:size
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   152
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   153
    "
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   154
     BitArray new:10
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   155
    "
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   156
!
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   157
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   158
uninitializedNew:size
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   159
    ^ self new:size
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   160
! !
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   161
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   162
!BitArray class methodsFor:'queries'!
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   163
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   164
maxVal
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   165
    "the minimum value which can be stored in instances of me.
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   166
     For BitArrays, this is 1"
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   167
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   168
    ^ 1
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   169
!
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   170
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   171
minVal
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   172
    "the minimum value which can be stored in instances of me.
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   173
     For BitArrays, this is 0"
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   174
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   175
    ^ 0
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   176
! !
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   177
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   178
!BitArray methodsFor:'accessing'!
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   179
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   180
at:index
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   181
    "retrieve the bit at index (1..)"
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   182
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   183
    |byte mask i0|
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   184
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   185
    (index between:1 and:tally) ifFalse:[
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   186
        ^ self subscriptBoundsError:index
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   187
    ].
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   188
    i0 := index - 1.
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   189
    byte := super basicAt:(i0 // 8)+1.
24243
f4b01e220af0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 24242
diff changeset
   190
    "/     ATTENTION:
f4b01e220af0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 24242
diff changeset
   191
    "/         Bits 1 to 8 of the BooleanArray are stored in bits 8 to 1 of the
f4b01e220af0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 24242
diff changeset
   192
    "/         corresponding byte, to allow easy mapping to ASN.1 BIT STRING encoding
f4b01e220af0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 24242
diff changeset
   193
    "/         in the BER. (i.e. MSB-first)
f4b01e220af0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 24242
diff changeset
   194
    "/         Do not change this.
20654
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   195
    mask := 1 bitShift:(7 - (i0 \\ 8)).
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   196
    ^ (byte bitTest:mask) ifTrue:[1] ifFalse:[0]
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   197
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   198
    "
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   199
     (BitArray new:1000) at:555
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   200
     (BitArray new:1000) at:400 put:1; at:400
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   201
    "
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   202
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   203
    "
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   204
     |b|
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   205
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   206
     b := BitArray new:1000.
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   207
     b at:555 put:1.
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   208
     b at:555   
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   209
    "
24243
f4b01e220af0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 24242
diff changeset
   210
f4b01e220af0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 24242
diff changeset
   211
    "Modified (comment): / 03-06-2019 / 08:20:20 / Claus Gittinger"
20654
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   212
!
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   213
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   214
at:index put:aNumber
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   215
    "store the argument, aNumber at index (1..);    
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   216
     return the argument, aNumber (sigh)."
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   217
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   218
    |byte mask idx i0|
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   219
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   220
    (index between:1 and:tally) ifFalse:[
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   221
        ^ self subscriptBoundsError:index
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   222
    ].
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   223
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   224
    i0 := index - 1.
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   225
    idx := (i0 // 8) + 1.
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   226
    byte := super basicAt:idx.
24243
f4b01e220af0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 24242
diff changeset
   227
    "/     ATTENTION:
f4b01e220af0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 24242
diff changeset
   228
    "/         Bits 1 to 8 of the BooleanArray are stored in bits 8 to 1 of the
f4b01e220af0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 24242
diff changeset
   229
    "/         corresponding byte, to allow easy mapping to ASN.1 BIT STRING encoding
f4b01e220af0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 24242
diff changeset
   230
    "/         in the BER. (i.e. MSB-first)
f4b01e220af0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 24242
diff changeset
   231
    "/         Do not change this.
20654
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   232
    mask := 1 bitShift:(7 - (i0 \\ 8)).
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   233
    aNumber == 1 ifTrue:[
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   234
        byte := byte bitOr:mask
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   235
    ] ifFalse:[
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   236
        aNumber == 0 ifTrue:[
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   237
            byte := byte bitAnd:(mask bitInvert)
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   238
        ] ifFalse:[
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   239
            "/ not 0 or 1
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   240
            ^ self elementBoundsError:aNumber
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   241
        ]
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   242
    ].
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   243
    super basicAt:idx put:byte.
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   244
    ^ aNumber.
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   245
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   246
    "
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   247
     |b|
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   248
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   249
     b := BitArray new:1000.
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   250
     b at:555 put:1.
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   251
     b at:555    
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   252
    "
24243
f4b01e220af0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 24242
diff changeset
   253
f4b01e220af0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 24242
diff changeset
   254
    "Modified (comment): / 03-06-2019 / 08:20:26 / Claus Gittinger"
20654
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   255
!
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   256
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   257
byteAt:index
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   258
    "retrieve 8 bits at index; the index is 1 for the first 8 bits, 2 for the next 8 bits etc."
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   259
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   260
    ^ self basicAt:index
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   261
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   262
    "
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   263
     ((BitArray new:8) at:1 put:1); byteAt:1
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   264
    "
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   265
!
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   266
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   267
byteAt:index put:aByte
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   268
    "store 8 bits at index; the index is 1 for the first 8 bits, 2 for the next 8 bits etc."
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   269
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   270
    ^ self basicAt:index put:aByte
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   271
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   272
    "
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   273
     ((BitArray new:8) byteAt:1 put:128); at:1     
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   274
    "
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   275
!
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   276
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   277
occurrencesOf:anElement
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   278
    "count the occurrences of the argument, anElement in the receiver"
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   279
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   280
    |nOnes|
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   281
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   282
    nOnes := self countOnes.
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   283
    anElement == 1 ifTrue:[
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   284
        ^ nOnes
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   285
    ].
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   286
    anElement == 0 ifTrue:[
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   287
        ^ tally - nOnes
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   288
    ].
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   289
    ^ 0
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   290
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   291
    "
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   292
     (BitArray new:10)
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   293
        at:4 put:1;
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   294
        at:6 put:1;
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   295
        at:7 put:1;
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   296
        occurrencesOf:1 
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   297
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   298
     (BitArray new:10)
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   299
        at:4 put:1;
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   300
        at:6 put:1;
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   301
        at:7 put:1;
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   302
        occurrencesOf:0    
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   303
    "
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   304
! !
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   305
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   306
!BitArray methodsFor:'converting'!
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   307
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   308
bytes
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   309
    "answer myself as a ByteArray containing my bytes"
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   310
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   311
    |size bytes|
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   312
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   313
    size := self basicSize.
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   314
    bytes := ByteArray new:size.
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   315
    1 to:size do:[:index|
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   316
        bytes at:index put:(self byteAt:index)
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   317
    ].
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   318
    ^ bytes
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   319
! !
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   320
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   321
!BitArray methodsFor:'filling & replacing'!
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   322
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   323
atAllPut:aNumber
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   324
    "replace all elements of the collection by the argument, aNumber.
23976
16af24753c12 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 21694
diff changeset
   325
     Return the receiver.
20654
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   326
     The argument, aBoolean must be 0 or 1.
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   327
     Notice: This operation modifies the receiver, NOT a copy;
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   328
     therefore the change may affect all others referencing the receiver."
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   329
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   330
    |v lastIndex|
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   331
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   332
    lastIndex := self basicSize.
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   333
    lastIndex == 0 ifTrue:[^ self].
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   334
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   335
    aNumber == 1 ifTrue:[
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   336
        v := 255
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   337
    ] ifFalse:[
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   338
        aNumber == 0 ifTrue:[
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   339
            v := 0
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   340
        ] ifFalse:[
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   341
            "/
24242
ae4ea9cab9e2 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 23976
diff changeset
   342
            "/ bitArrays can only hold 0 and 1
20654
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   343
            "/
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   344
            ^ self elementBoundsError:aNumber
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   345
        ]
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   346
    ].
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   347
    1 to:lastIndex-1 do:[:i |
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   348
        self basicAt:i put:v
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   349
    ].
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   350
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   351
    "/ ensure 0-bits above tally
24243
f4b01e220af0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 24242
diff changeset
   352
    "/     ATTENTION:
f4b01e220af0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 24242
diff changeset
   353
    "/         Bits 1 to 8 of the BooleanArray are stored in bits 8 to 1 of the
f4b01e220af0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 24242
diff changeset
   354
    "/         corresponding byte, to allow easy mapping to ASN.1 BIT STRING encoding
f4b01e220af0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 24242
diff changeset
   355
    "/         in the BER. (i.e. MSB-first)
f4b01e220af0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 24242
diff changeset
   356
    "/         Do not change this.
20654
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   357
    v := #[ 2r11111111
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   358
            2r10000000
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   359
            2r11000000
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   360
            2r11100000
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   361
            2r11110000
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   362
            2r11111000
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   363
            2r11111100
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   364
            2r11111110 ] at:(tally\\8)+1. 
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   365
    self basicAt:lastIndex put:v.
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   366
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   367
    "
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   368
     ((self new:10) atAllPut:1) countOnes  
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   369
     ((self new:8) atAllPut:1) countOnes   
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   370
    "
23976
16af24753c12 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 21694
diff changeset
   371
24243
f4b01e220af0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 24242
diff changeset
   372
    "Modified (comment): / 03-06-2019 / 08:21:05 / Claus Gittinger"
20654
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   373
! !
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   374
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   375
!BitArray methodsFor:'logical operations'!
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   376
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   377
bitOr:aBitArray
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   378
    |new mySize "{ Class: SmallInteger }" otherSize "{ Class: SmallInteger }"|
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   379
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   380
    mySize := self basicSize.
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   381
    otherSize := aBitArray basicSize.
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   382
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   383
    new := self class basicNew:(mySize max:otherSize).
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   384
    new setTally:(self size max:aBitArray size).
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   385
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   386
    1 to:mySize do:[:i|
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   387
        new basicAt:i put:(self basicAt:i).
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   388
    ].
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   389
    1 to:otherSize do:[:i|
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   390
        new basicAt:i put:((new basicAt:i) bitOr:(aBitArray basicAt:i)).
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   391
    ].
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   392
    
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   393
    ^ new
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   394
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   395
    "
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   396
        ((BitArray new:5) at:3 put:1; yourself) bitOr:((BitArray new:8) at:5 put:1; yourself)
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   397
    "
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   398
! !
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   399
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   400
!BitArray methodsFor:'private'!
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   401
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   402
countOnes
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   403
    "count the 1-bits in the receiver"
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   404
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   405
    |sz bI count|
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   406
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   407
    count := 0.
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   408
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   409
    "/ because remaining bits in the highest byte are always 0,
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   410
    "/ we can simply count the 1-bits in ALL bytes... (see lastByte handling in atAllPut:)
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   411
    bI := 1.
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   412
    sz := self basicSize.
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   413
    [bI <= sz] whileTrue:[
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   414
        count := count + (self basicAt:bI) bitCount.
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   415
        bI := bI + 1.
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   416
    ].
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   417
    ^ count
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   418
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   419
"/    |i nI bI bits count|
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   420
"/    i := bI := 1.
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   421
"/    [
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   422
"/        nI := i + 8.
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   423
"/        nI <= tally
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   424
"/    ] whileTrue:[
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   425
"/        bits := self basicAt:bI.
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   426
"/        count := count + bits bitCount.
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   427
"/        bI := bI + 1.
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   428
"/        i := nI
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   429
"/    ].
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   430
"/    [i <= tally] whileTrue:[
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   431
"/        (self at:i) ifTrue:[ count := count + 1].
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   432
"/        i := i + 1.
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   433
"/    ].
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   434
"/    ^ count
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   435
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   436
    "
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   437
     (BooleanArray new:100)
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   438
        at:14 put:true; 
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   439
        at:55 put:true; 
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   440
        countOnes
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   441
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   442
     (BooleanArray new:100)
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   443
        at:14 put:true; 
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   444
        at:55 put:true; 
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   445
        occurrencesOf:true
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   446
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   447
     (BooleanArray new:100)
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   448
        at:14 put:true; 
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   449
        at:55 put:true; 
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   450
        occurrencesOf:false
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   451
    "
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   452
!
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   453
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   454
indexOfNth:n occurrenceOf:what
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   455
    "return the index of the nTh occurrence of a value, or 0 if there are not that many"
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   456
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   457
    |sz byteIndex count countInByte|
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   458
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   459
    n > self size ifTrue:[^ 0].
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   460
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   461
    count := 0.
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   462
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   463
    byteIndex := 1.
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   464
    sz := self basicSize.
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   465
    [byteIndex <= sz] whileTrue:[
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   466
        countInByte := (self basicAt:byteIndex) bitCount.
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   467
        what = self defaultElement ifTrue:[
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   468
            countInByte := 8-countInByte.
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   469
        ].
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   470
        count := count + countInByte.
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   471
        count >= n ifTrue:[
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   472
            count := count - countInByte.
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   473
            (byteIndex-1)*8+1 to:(byteIndex-1)*8+8 do:[:bitIndex |
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   474
                (self at:bitIndex) = what ifTrue:[
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   475
                    count := count + 1.
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   476
                    count = n ifTrue:[
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   477
                        ^ bitIndex.
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   478
                    ]
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   479
                ].
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   480
            ].
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   481
            ^ 0
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   482
        ].
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   483
        byteIndex := byteIndex + 1.
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   484
    ].
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   485
    ^ 0
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   486
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   487
    "
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   488
     (BooleanArray new:100)
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   489
        at:1 put:true;
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   490
        at:2 put:true;
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   491
        at:4 put:true;
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   492
        at:5 put:true;
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   493
        at:6 put:true;
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   494
        at:7 put:true;
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   495
        at:8 put:true;
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   496
        at:10 put:true;
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   497
        indexOfNth:8 occurrenceOf:false
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   498
    "
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   499
!
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   500
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   501
setTally:size
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   502
    "set my tally - that is the actual number of bits in me
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   503
     (usually a little less than the number of bits in my byte array)"
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   504
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   505
    tally := size
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   506
! !
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   507
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   508
!BitArray methodsFor:'queries'!
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   509
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   510
defaultElement
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   511
    ^ 0
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   512
!
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   513
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   514
isValidElement:anObject
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   515
    "return true, if I can hold this kind of object"
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   516
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   517
    ^ anObject == 0 or:[anObject == 1]
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   518
!
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   519
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   520
size
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   521
    "return the size of the receiver"
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   522
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   523
    ^ tally
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   524
! !
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   525
23976
16af24753c12 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 21694
diff changeset
   526
20654
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   527
!BitArray methodsFor:'visiting'!
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   528
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   529
acceptVisitor:aVisitor with:aParameter
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   530
    "dispatch for visitor pattern; send #visitBitArray:with: to aVisitor"
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   531
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   532
    ^ aVisitor visitBitArray:self with:aParameter
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   533
! !
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   534
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   535
!BitArray class methodsFor:'documentation'!
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   536
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   537
version
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   538
    ^ '$Header$'
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   539
!
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   540
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   541
version_CVS
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   542
    ^ '$Header$'
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   543
! !
d36b1e1c301f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   544