From b72f97e34d801830faa13f61b3241a9249b69e1b Mon Sep 17 00:00:00 2001 From: Charles Baker Date: Fri, 2 Jun 2023 16:20:30 +1200 Subject: [PATCH] Use size_t for set elements in GrammarSymbolSet --- src/lalr/GrammarSymbolSet.cpp | 20 +++++++++++--------- src/lalr/GrammarSymbolSet.hpp | 2 +- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/src/lalr/GrammarSymbolSet.cpp b/src/lalr/GrammarSymbolSet.cpp index 78d32bc..90e83bf 100644 --- a/src/lalr/GrammarSymbolSet.cpp +++ b/src/lalr/GrammarSymbolSet.cpp @@ -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; diff --git a/src/lalr/GrammarSymbolSet.hpp b/src/lalr/GrammarSymbolSet.hpp index fd9444e..098dc0d 100644 --- a/src/lalr/GrammarSymbolSet.hpp +++ b/src/lalr/GrammarSymbolSet.hpp @@ -11,7 +11,7 @@ class GrammarSymbol; class GrammarSymbolSet { - std::vector set_; + std::vector set_; public: GrammarSymbolSet( size_t symbols );