00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include "FactorTypeSet.h"
00023
00024 using namespace std;
00025
00026 namespace Moses
00027 {
00028 FactorMask::FactorMask(const vector<FactorType> &factors)
00029 {
00030 vector<FactorType>::const_iterator iter;
00031 for (iter = factors.begin() ; iter != factors.end() ; ++iter) {
00032 this->set(*iter);
00033 }
00034 }
00035
00036 bool FactorMask::IsUseable(const FactorMask &other) const
00037 {
00038 for (size_t i = 0; i < other.size(); ++i) {
00039 if (other[i]) {
00040 if (!this->operator[](i) ) {
00041 return false;
00042 }
00043 }
00044 }
00045
00046 return true;
00047 }
00048
00049 TO_STRING_BODY(FactorMask);
00050
00051
00052 std::ostream& operator<<(std::ostream& out, const FactorMask& fm)
00053 {
00054 out << "FactorMask<";
00055 bool first = true;
00056 for (size_t currFactor = 0 ; currFactor < MAX_NUM_FACTORS ; currFactor++) {
00057 if (fm[currFactor]) {
00058 if (first) {
00059 first = false;
00060 } else {
00061 out << ",";
00062 }
00063 out << currFactor;
00064 }
00065 }
00066 out << ">";
00067
00068 return out;
00069 }
00070
00071 }
00072
00073