| 1 | /* ANTLR Translator Generator | 
| 2 | * Project led by Terence Parr at http://www.jGuru.com | 
| 3 | * Software rights: http://www.antlr.org/license.html | 
| 4 | * | 
| 5 | * $Id: BitSet.cpp,v 1.1 2005-12-02 15:38:02 tim Exp $ | 
| 6 | */ | 
| 7 | #include "antlr/BitSet.hpp" | 
| 8 | #include <string> | 
| 9 |  | 
| 10 | #ifdef ANTLR_CXX_SUPPORTS_NAMESPACE | 
| 11 | namespace antlr { | 
| 12 | #endif | 
| 13 |  | 
| 14 | BitSet::BitSet(unsigned int nbits) | 
| 15 | : storage(nbits) | 
| 16 | { | 
| 17 | for (unsigned int i = 0; i < nbits ; i++ ) | 
| 18 | storage[i] = false; | 
| 19 | } | 
| 20 |  | 
| 21 | BitSet::BitSet( const unsigned long* bits_, unsigned int nlongs ) | 
| 22 | : storage(nlongs*32) | 
| 23 | { | 
| 24 | for ( unsigned int i = 0 ; i < (nlongs * 32); i++) | 
| 25 | storage[i] = (bits_[i>>5] & (1UL << (i&31))) ? true : false; | 
| 26 | } | 
| 27 |  | 
| 28 | BitSet::~BitSet() | 
| 29 | { | 
| 30 | } | 
| 31 |  | 
| 32 | void BitSet::add(unsigned int el) | 
| 33 | { | 
| 34 | if( el >= storage.size() ) | 
| 35 | storage.resize( el+1, false ); | 
| 36 |  | 
| 37 | storage[el] = true; | 
| 38 | } | 
| 39 |  | 
| 40 | bool BitSet::member(unsigned int el) const | 
| 41 | { | 
| 42 | if ( el >= storage.size()) | 
| 43 | return false; | 
| 44 |  | 
| 45 | return storage[el]; | 
| 46 | } | 
| 47 |  | 
| 48 | ANTLR_USE_NAMESPACE(std)vector<unsigned int> BitSet::toArray() const | 
| 49 | { | 
| 50 | ANTLR_USE_NAMESPACE(std)vector<unsigned int> elems; | 
| 51 | for (unsigned int i = 0; i < storage.size(); i++) | 
| 52 | { | 
| 53 | if (storage[i]) | 
| 54 | elems.push_back(i); | 
| 55 | } | 
| 56 |  | 
| 57 | return elems; | 
| 58 | } | 
| 59 |  | 
| 60 | #ifdef ANTLR_CXX_SUPPORTS_NAMESPACE | 
| 61 | } | 
| 62 | #endif |