Login | Register   
LinkedIn
Google+
Twitter
RSS Feed
Download our iPhone app
TODAY'S HEADLINES  |   ARTICLE ARCHIVE  |   FORUMS  |   TIP BANK
Browse DevX
Sign up for e-mail newsletters from DevX


Tip of the Day
Language: VB5,VB6
Expertise: Intermediate
Jul 21, 2001

CBitArray - a class for dealing with large arrays of Boolean

' ------------------------------------------------------------------------
'  The CBITARRAY class
'
'  simiulates an array of Boolean values
'  saves memory by packing one element in one bit
'
' IMPORTANT: you make make ITEM the default member for this class
'            do this from inside the Tools | Procedure Attributes dialog box
'
' Usage:
'    Dim bitArr As New CBitArray
'    bitArr.Init(10000)         ' 10,000 boolean elements
'    ' assign a value
'    bitArr(10) = True
'    ' read it back
'    Print bitArr(10)
'
' ------------------------------------------------------------------------

Option Explicit

Dim mask(0 To 7) As Integer
Dim values() As Byte

Public Sub Init(ByVal numEls As Long)
    ' redimension the internal array
    ' MUST BE THE FIRST METHOD CALLED FOR THIS CLASS
    ReDim values(numEls \ 8) As Byte
End Sub

Private Sub Class_Initialize()
    ' initialize the mask() array
    Dim i As Integer
    mask(0) = 1
    For i = 1 To 7
        mask(i) = mask(i - 1) * 2
    Next
End Sub

' for smoother syntax, you should make ITEM the default member for this class

Property Get Item(ByVal index As Long) As Boolean
    ' retrieve an array item
    Item = values(index \ 8) And mask(index And 7)
End Property

Property Let Item(ByVal index As Long, ByVal new_Item As Boolean)
    Dim ndx As Long, m As Byte
    ' cache the mask into a local variable
    m = mask(index And 7)
    ndx = index \ 8
    ' set or reset only the relevant bit
    values(ndx) = (values(ndx) And Not m) Or (new_Item And m)
End Property

Francesco Balena
 
Comment and Contribute

 

 

 

 

 


(Maximum characters: 1200). You have 1200 characters left.

 

 

Sitemap
Thanks for your registration, follow us on our social networks to keep up-to-date