Home | History | Annotate | Download | only in marisa_alpha
      1 #ifndef MARISA_ALPHA_PROGRESS_H_
      2 #define MARISA_ALPHA_PROGRESS_H_
      3 
      4 #include "base.h"
      5 
      6 namespace marisa_alpha {
      7 
      8 class Progress {
      9  public:
     10   explicit Progress(int flags);
     11 
     12   bool is_valid() const;
     13   bool is_last() const {
     14     return (trie_id_ + 1) >= num_tries();
     15   }
     16 
     17   Progress &operator++() {
     18     ++trie_id_;
     19     return *this;
     20   }
     21 
     22   void test_total_size(std::size_t total_size) {
     23     MARISA_ALPHA_THROW_IF(total_size_ > (MARISA_ALPHA_UINT32_MAX - total_size),
     24         MARISA_ALPHA_SIZE_ERROR);
     25     total_size_ += total_size;
     26   }
     27 
     28   int flags() const {
     29     return flags_;
     30   }
     31   int trie_id() const {
     32     return trie_id_;
     33   }
     34   std::size_t total_size() const {
     35     return total_size_;
     36   }
     37 
     38   int num_tries() const {
     39     return flags_ & MARISA_ALPHA_NUM_TRIES_MASK;
     40   }
     41   int trie() const {
     42     return flags_ & MARISA_ALPHA_TRIE_MASK;
     43   }
     44   int tail() const {
     45     return flags_ & MARISA_ALPHA_TAIL_MASK;
     46   }
     47   int order() const {
     48     return flags_ & MARISA_ALPHA_ORDER_MASK;
     49   }
     50 
     51  private:
     52   int flags_;
     53   int trie_id_;
     54   std::size_t total_size_;
     55 
     56   // Disallows copy and assignment.
     57   Progress(const Progress &);
     58   Progress &operator=(const Progress &);
     59 };
     60 
     61 }  // namespace marisa_alpha
     62 
     63 #endif  // MARISA_ALPHA_PROGRESS_H_
     64