| #include <boost/foreach.hpp> |
| #include "Bitmaps.h" |
| #include "Util.h" |
|
|
| using namespace std; |
|
|
| namespace Moses |
| { |
| Bitmaps::Bitmaps(size_t inputSize, const std::vector<bool> &initSourceCompleted) |
| { |
| m_initBitmap = new Bitmap(inputSize, initSourceCompleted); |
| m_coll[m_initBitmap]; |
| } |
|
|
| Bitmaps::~Bitmaps() |
| { |
| BOOST_FOREACH (const Coll::value_type& myPair, m_coll) { |
| const Bitmap *bm = myPair.first; |
| delete bm; |
| } |
| } |
|
|
| const Bitmap &Bitmaps::GetNextBitmap(const Bitmap &bm, const Range &range) |
| { |
| Bitmap *newBM = new Bitmap(bm, range); |
|
|
| Coll::const_iterator iter = m_coll.find(newBM); |
| if (iter == m_coll.end()) { |
| m_coll[newBM] = NextBitmaps(); |
| return *newBM; |
| } else { |
| delete newBM; |
| return *iter->first; |
| } |
| } |
|
|
| const Bitmap &Bitmaps::GetBitmap(const Bitmap &bm, const Range &range) |
| { |
| Coll::iterator iter = m_coll.find(&bm); |
| assert(iter != m_coll.end()); |
|
|
| const Bitmap *newBM; |
| NextBitmaps &next = iter->second; |
| NextBitmaps::const_iterator iterNext = next.find(range); |
| if (iterNext == next.end()) { |
| |
| newBM = &GetNextBitmap(bm, range); |
| next[range] = newBM; |
| } else { |
| |
| |
| newBM = iterNext->second; |
| } |
| return *newBM; |
| } |
|
|
| } |
|
|
|
|