mirror of
https://github.com/cwbaker/lalr.git
synced 2026-09-26 16:33:18 +03:00
Use size_t for set elements in GrammarSymbolSet
This commit is contained in:
parent
93160d6200
commit
b72f97e34d
2 changed files with 12 additions and 10 deletions
|
|
@ -10,10 +10,13 @@
|
|||
using std::vector;
|
||||
using namespace lalr;
|
||||
|
||||
static const size_t ONE = 1;
|
||||
static const size_t BITS_PER_ELEMENT = sizeof(size_t) * 8;
|
||||
|
||||
GrammarSymbolSet::GrammarSymbolSet( size_t symbols )
|
||||
: set_()
|
||||
{
|
||||
set_.resize( symbols / 8 );
|
||||
set_.resize( symbols / BITS_PER_ELEMENT );
|
||||
}
|
||||
|
||||
GrammarSymbolSet::GrammarSymbolSet( GrammarSymbolSet&& set )
|
||||
|
|
@ -46,10 +49,10 @@ GrammarSymbolSet& GrammarSymbolSet::operator=( const GrammarSymbolSet& set )
|
|||
|
||||
bool GrammarSymbolSet::contains( int symbol_index ) const
|
||||
{
|
||||
size_t index = symbol_index / 8;
|
||||
size_t index = symbol_index / BITS_PER_ELEMENT;
|
||||
if ( index < set_.size() )
|
||||
{
|
||||
unsigned char mask = 1 << (symbol_index % 8);
|
||||
size_t mask = ONE << (symbol_index % BITS_PER_ELEMENT);
|
||||
return (set_[index] & mask) != 0;
|
||||
}
|
||||
return false;
|
||||
|
|
@ -59,16 +62,15 @@ bool GrammarSymbolSet::insert( const GrammarSymbol* symbol )
|
|||
{
|
||||
if ( symbol )
|
||||
{
|
||||
int index = symbol->index() / 8;
|
||||
if ( index >= int(set_.size()) )
|
||||
size_t index = symbol->index() / BITS_PER_ELEMENT;
|
||||
if ( index >= set_.size() )
|
||||
{
|
||||
set_.insert( set_.end(), index - set_.size() + 1, 0 );
|
||||
}
|
||||
unsigned char mask = 1 << (symbol->index() % 8);
|
||||
size_t mask = ONE << (symbol->index() % BITS_PER_ELEMENT);
|
||||
if ( !(set_[index] & mask) )
|
||||
{
|
||||
set_[index] |= mask;
|
||||
// symbols_.push_back( symbol );
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
@ -85,8 +87,8 @@ int GrammarSymbolSet::insert( const GrammarSymbolSet& set )
|
|||
int added = 0;
|
||||
for ( size_t i = 0; i < set.set_.size(); ++i )
|
||||
{
|
||||
unsigned char mask = set_[i];
|
||||
unsigned char new_mask = mask | set.set_[i];
|
||||
size_t mask = set_[i];
|
||||
size_t new_mask = mask | set.set_[i];
|
||||
if ( mask != new_mask )
|
||||
{
|
||||
set_[i] = new_mask;
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ class GrammarSymbol;
|
|||
|
||||
class GrammarSymbolSet
|
||||
{
|
||||
std::vector<unsigned char> set_;
|
||||
std::vector<size_t> set_;
|
||||
|
||||
public:
|
||||
GrammarSymbolSet( size_t symbols );
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue