20 #ifndef FST_FILTER_STATE_H_ 21 #define FST_FILTER_STATE_H_ 25 #include <forward_list> 71 size_t Hash()
const {
return static_cast<size_t>(state_); }
74 return state_ == fs.state_;
78 return state_ != fs.state_;
101 size_t Hash()
const {
return weight_.Hash(); }
104 return weight_ == fs.weight_;
108 return weight_ != fs.weight_;
119 template <
typename T>
130 for (
const auto &elem : list_) h ^= h << 1 ^ elem;
138 const std::forward_list<T> &
GetState()
const {
return list_; }
143 std::forward_list<T> list_;
147 template <
class FS1,
class FS2>
150 using FilterState1 = FS1;
151 using FilterState2 = FS2;
156 : fs1_(fs1), fs2_(fs2) {}
161 const auto h1 = fs1_.Hash();
162 static constexpr
auto lshift = 5;
163 static constexpr
auto rshift = CHAR_BIT *
sizeof(size_t) - 5;
164 return h1 << lshift ^ h1 >> rshift ^ fs2_.Hash();
168 return fs1_ == fs.fs1_ && fs2_ == fs.fs2_;
172 return fs1_ != fs.fs1_ || fs2_ != fs.fs2_;
191 size_t Hash()
const {
return 0; }
194 return state_ == fs.state_;
198 return state_ != fs.state_;
207 #endif // FST_FILTER_STATE_H_
bool operator==(const TrivialFilterState &fs) const
bool operator!=(const IntegerFilterState &fs) const
static const IntegerFilterState NoState()
bool operator==(const IntegerFilterState &fs) const
bool operator!=(const TrivialFilterState &fs) const
bool operator!=(const ListFilterState &fs) const
TrivialFilterState(bool state=false)
bool operator==(const ListFilterState &fs) const
bool operator!=(const PairFilterState &fs) const
static const PairFilterState NoState()
static const ListFilterState NoState()
static const TrivialFilterState NoState()
bool operator==(const PairFilterState &fs) const
bool operator!=(const WeightFilterState &fs) const
bool operator==(const WeightFilterState &fs) const
PairFilterState(const FilterState1 &fs1, const FilterState2 &fs2)
static const WeightFilterState NoState()
const FilterState1 & GetState1() const
WeightFilterState(W weight)
const FilterState2 & GetState2() const
std::forward_list< T > * GetMutableState()
const std::forward_list< T > & GetState() const