| | |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | #include <boost/functional/hash.hpp> |
| | #include "Bitmap.h" |
| |
|
| | namespace Moses2 |
| | { |
| |
|
| | Bitmap::Bitmap(MemPool &pool, size_t size) : |
| | m_bitmap(pool, size) |
| | { |
| | } |
| |
|
| | void Bitmap::Init(const std::vector<bool>& initializer) |
| | { |
| |
|
| | for (size_t i = 0; i < initializer.size(); ++i) { |
| | m_bitmap[i] = initializer[i]; |
| | } |
| |
|
| | |
| | |
| | for (size_t i = initializer.size(); i < m_bitmap.size(); ++i) { |
| | m_bitmap[i] = false; |
| | } |
| |
|
| | m_numWordsCovered = std::count(m_bitmap.begin(), m_bitmap.end(), true); |
| |
|
| | |
| | Array<char>::const_iterator first_gap = std::find(m_bitmap.begin(), |
| | m_bitmap.end(), false); |
| | m_firstGap = ((first_gap == m_bitmap.end()) ? |
| | NOT_FOUND: first_gap - m_bitmap.begin()); |
| | } |
| |
|
| | void Bitmap::Init(const Bitmap ©, const Range &range) |
| | { |
| | m_firstGap = copy.m_firstGap; |
| | m_numWordsCovered = copy.m_numWordsCovered; |
| | for (size_t i = 0; i < m_bitmap.size(); ++i) { |
| | m_bitmap[i] = copy.m_bitmap[i]; |
| | } |
| | SetValueNonOverlap(range); |
| | } |
| |
|
| | |
| | size_t Bitmap::hash() const |
| | { |
| | size_t ret = m_bitmap.hash(); |
| | return ret; |
| | } |
| |
|
| | bool Bitmap::operator==(const Bitmap& other) const |
| | { |
| | return m_bitmap == other.m_bitmap; |
| | } |
| |
|
| | |
| | std::ostream& operator<<(std::ostream& out, const Bitmap& bitmap) |
| | { |
| | for (size_t i = 0; i < bitmap.m_bitmap.size(); i++) { |
| | out << int(bitmap.GetValue(i)); |
| | } |
| | return out; |
| | } |
| |
|
| | } |
| |
|
| |
|