#ifndef MARISA_PROGRESS_H_ #define MARISA_PROGRESS_H_ #include "base.h" namespace marisa { class Progress { public: explicit Progress(int flags); bool is_valid() const; bool is_last() const { return (trie_id_ + 1) >= num_tries(); } Progress &operator++() { ++trie_id_; return *this; } void test_total_size(std::size_t total_size) { MARISA_THROW_IF(total_size_ > (MARISA_UINT32_MAX - total_size), MARISA_SIZE_ERROR); total_size_ += total_size; } int flags() const { return flags_; } int trie_id() const { return trie_id_; } std::size_t total_size() const { return total_size_; } int num_tries() const { return flags_ & MARISA_NUM_TRIES_MASK; } int trie() const { return flags_ & MARISA_TRIE_MASK; } int tail() const { return flags_ & MARISA_TAIL_MASK; } int order() const { return flags_ & MARISA_ORDER_MASK; } private: int flags_; int trie_id_; std::size_t total_size_; // Disallows copy and assignment. Progress(const Progress &); Progress &operator=(const Progress &); }; } // namespace marisa #endif // MARISA_PROGRESS_H_