00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include <boost/functional/hash.hpp>
00023 #include "Bitmap.h"
00024
00025 namespace Moses
00026 {
00027
00028 TO_STRING_BODY(Bitmap);
00029
00030 Bitmap::Bitmap(size_t size, const std::vector<bool>& initializer)
00031 :m_bitmap(initializer.begin(), initializer.end())
00032 {
00033
00034
00035
00036 m_bitmap.resize(size, false);
00037
00038 m_numWordsCovered = std::count(m_bitmap.begin(), m_bitmap.end(), true);
00039
00040
00041 std::vector<char>::const_iterator first_gap = std::find(
00042 m_bitmap.begin(), m_bitmap.end(), false);
00043 m_firstGap = (
00044 (first_gap == m_bitmap.end()) ?
00045 NOT_FOUND : first_gap - m_bitmap.begin());
00046 }
00047
00049 Bitmap::Bitmap(size_t size)
00050 :m_bitmap(size, false)
00051 ,m_firstGap(0)
00052 ,m_numWordsCovered(0)
00053
00054 {
00055 }
00056
00058 Bitmap::Bitmap(const Bitmap ©)
00059 :m_bitmap(copy.m_bitmap)
00060 ,m_firstGap(copy.m_firstGap)
00061 ,m_numWordsCovered(copy.m_numWordsCovered)
00062 {
00063 }
00064
00065 Bitmap::Bitmap(const Bitmap ©, const Range &range)
00066 :m_bitmap(copy.m_bitmap)
00067 ,m_firstGap(copy.m_firstGap)
00068 ,m_numWordsCovered(copy.m_numWordsCovered)
00069 {
00070 SetValueNonOverlap(range);
00071 }
00072
00073
00074 size_t Bitmap::hash() const
00075 {
00076 size_t ret = boost::hash_value(m_bitmap);
00077 return ret;
00078 }
00079
00080 bool Bitmap::operator==(const Bitmap& other) const
00081 {
00082 return m_bitmap == other.m_bitmap;
00083 }
00084
00085
00086 std::ostream& operator<<(std::ostream& out, const Bitmap& bitmap)
00087 {
00088 for (size_t i = 0 ; i < bitmap.m_bitmap.size() ; i++) {
00089 out << int(bitmap.GetValue(i));
00090 }
00091 return out;
00092 }
00093
00094 }
00095
00096