|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#include <boost/functional/hash.hpp> |
|
#include "Bitmap.h" |
|
|
|
namespace Moses |
|
{ |
|
|
|
TO_STRING_BODY(Bitmap); |
|
|
|
Bitmap::Bitmap(size_t size, const std::vector<bool>& initializer) |
|
:m_bitmap(initializer.begin(), initializer.end()) |
|
{ |
|
|
|
|
|
|
|
m_bitmap.resize(size, false); |
|
|
|
m_numWordsCovered = std::count(m_bitmap.begin(), m_bitmap.end(), true); |
|
|
|
|
|
std::vector<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()); |
|
} |
|
|
|
|
|
Bitmap::Bitmap(size_t size) |
|
:m_bitmap(size, false) |
|
,m_firstGap(0) |
|
,m_numWordsCovered(0) |
|
|
|
{ |
|
} |
|
|
|
|
|
Bitmap::Bitmap(const Bitmap ©) |
|
:m_bitmap(copy.m_bitmap) |
|
,m_firstGap(copy.m_firstGap) |
|
,m_numWordsCovered(copy.m_numWordsCovered) |
|
{ |
|
} |
|
|
|
Bitmap::Bitmap(const Bitmap ©, const Range &range) |
|
:m_bitmap(copy.m_bitmap) |
|
,m_firstGap(copy.m_firstGap) |
|
,m_numWordsCovered(copy.m_numWordsCovered) |
|
{ |
|
SetValueNonOverlap(range); |
|
} |
|
|
|
|
|
size_t Bitmap::hash() const |
|
{ |
|
size_t ret = boost::hash_value(m_bitmap); |
|
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; |
|
} |
|
|
|
} |
|
|
|
|
|
|