Module description
- bar -- Bit array module
-
The bar module implements a bit array.
Bit array structure
- bar% ( -- n )
- Get the required space for a bar variable
Array creation, initialisation and destruction
- bar-init ( +n bar -- )
- Initialise the array with length n
- bar-(free) ( bar -- )
- Free the internal data from the heap
- bar-create ( +n "<spaces>name" -- ; -- bar )
- Create a bit array in the dictionary with length n
- bar-new ( n -- bar )
- Create a bit array on the heap with length n
- bar-free ( bar -- )
- Free the array from the heap
Member words
- bar-length@ ( bar -- +n )
- Get the number of bits in the array
- bar-index? ( n bar -- flag )
- Check if the index n is valid in the array
Bit array words
- bar^move ( bar1 bar2 -- )
- Move bar1 into bar2
- bar^or ( bar1 bar2 -- )
- OR the bit arrays bar1 and bar2 and store the result in bar2
- bar^and ( bar1 bar2 -- )
- AND the bit arrays bar1 and bar2 and store the result in bar2
- bar^xor ( bar1 bar2 -- )
- XOR the bit arrays bar1 and bar2 and store the result in bar2
Bit set words
- bar-set-bit ( n bar -- )
- Set the nth bit in the array
- bar-set-bits ( u n bar -- )
- Set a range of bits in the array, starting from the nth bit, u bits long
- bar-set-list ( nu .. n1 u bar -- )
- Set n1 till nuth bits in the array
- bar-set ( bar -- )
- Set all bits in the array
Bit reset words
- bar-reset-bit ( n bar -- )
- Reset the nth bit
- bar-reset-bits ( u n bar -- )
- Reset a range of bits in the array, starting from the nth bit, u bits long
- bar-reset-list ( nu .. n1 u bar -- )
- Reset n1 till nuth bits in the array
- bar-reset ( bar -- )
- Reset all bits in the array
Bit invert words
- bar-invert-bit ( n bar -- )
- Invert the nth bit
- bar-invert-bits ( u n bar -- )
- Invert a range of bits in the array, starting from the nth bit, u bits long
- bar-invert ( bar -- )
- Invert all bits in the array
Bit check words
- bar-get-bit ( n bar -- flag )
- Check if the nth bit is set
- bar-count-bits ( +n1 n2 bar -- u )
- Count the number of bits set in a range in the array, starting from the n2th bit, n1 bits long
- bar-count ( bar -- u )
- Count the number of bits set in the array
- bar-execute ( i*x xt bar -- j*x )
- Execute xt for every bit in the array
- bar-execute? ( i*x xt bar -- j*x flag )
- Execute xt for every bit in the array or until xt returns true, flag is true if xt returned true
Inspection
- bar-dump ( bar -- )
- Dump the bit array
Examples
\ ==============================================================================
\
\ bar_expl - the bit array example in the ffl
\
\ Copyright (C) 2008 Dick van Oudheusden
\
\ This library is free software; you can redistribute it and/or
\ modify it under the terms of the GNU General Public
\ License as published by the Free Software Foundation; either
\ version 2 of the License, or (at your option) any later version.
\
\ This library is distributed in the hope that it will be useful,
\ but WITHOUT ANY WARRANTY; without even the implied warranty of
\ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
\ General Public License for more details.
\
\ You should have received a copy of the GNU General Public
\ License along with this library; if not, write to the Free
\ Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
\
\ ==============================================================================
\
\ $Date: 2008-10-05 06:34:20 $ $Revision: 1.1 $
\
\ ==============================================================================
include ffl/bar.fs
\ Create a bit array with 15 bits [0..14] in the dictionary
15 bar-create bar1
\ Set bit 1, 4..8, 12 and 14 in the array
1 bar1 bar-set-bit
5 4 bar1 bar-set-bits
12 14 2 bar1 bar-set-list \ new in version 3
\ Count the number of bits set
.( There are ) bar1 bar-count . .( bits set in the array.) cr
\ Check for bits
6 bar1 bar-get-bit [IF]
.( Bit 6 is set in the array.) cr
[ELSE]
.( Bit 6 is not set in the array.) cr
[THEN]
13 bar1 bar-get-bit [IF]
.( Bit 13 is set in the array.) cr
[ELSE]
.( Bit 13 is not set in the array.) cr
[THEN]
\ Create a bit array with 8 bits on the heap
8 bar-new value bar2
\ Set all bits in the array
bar2 bar-set
\ Reset bits 5..7 in the array
3 5 bar2 bar-reset-bits
\ Print the bit array by executing bar-emit for every bit in the array
: bar-emit ( flag -- )
1 AND [char] 0 + emit
;
.( Bit array: ) ' bar-emit bar2 bar-execute cr
\ Hamming distance
.( Hamming distance: )
bar2 bar1 bar^xor \ new in version 3
bar1 bar-count . cr
\ Free the array from the heap
bar2 bar-free
Generated by fsdocgen 0.1.0