Home | History | Annotate | Download | only in marisa
      1 #ifndef MARISA_RANK_H_
      2 #define MARISA_RANK_H_
      3 
      4 #include "base.h"
      5 
      6 namespace marisa {
      7 
      8 class Rank {
      9  public:
     10   Rank() : abs_(0), rel_lo_(0), rel_hi_(0) {}
     11 
     12   void set_abs(UInt32 value) {
     13     abs_ = value;
     14   }
     15   void set_rel1(UInt32 value) {
     16     MARISA_DEBUG_IF(value > 64, MARISA_PARAM_ERROR);
     17     rel_lo_ = (rel_lo_ & ~0x7FU) | (value & 0x7FU);
     18   }
     19   void set_rel2(UInt32 value) {
     20     MARISA_DEBUG_IF(value > 128, MARISA_PARAM_ERROR);
     21     rel_lo_ = (rel_lo_ & ~(0xFFU << 7)) | ((value & 0xFFU) << 7);
     22   }
     23   void set_rel3(UInt32 value) {
     24     MARISA_DEBUG_IF(value > 192, MARISA_PARAM_ERROR);
     25     rel_lo_ = (rel_lo_ & ~(0xFFU << 15)) | ((value & 0xFFU) << 15);
     26   }
     27   void set_rel4(UInt32 value) {
     28     MARISA_DEBUG_IF(value > 256, MARISA_PARAM_ERROR);
     29     rel_lo_ = (rel_lo_ & ~(0x1FFU << 23)) | ((value & 0x1FFU) << 23);
     30   }
     31   void set_rel5(UInt32 value) {
     32     MARISA_DEBUG_IF(value > 320, MARISA_PARAM_ERROR);
     33     rel_hi_ = (rel_hi_ & ~0x1FFU) | (value & 0x1FFU);
     34   }
     35   void set_rel6(UInt32 value) {
     36     MARISA_DEBUG_IF(value > 384, MARISA_PARAM_ERROR);
     37     rel_hi_ = (rel_hi_ & ~(0x1FFU << 9)) | ((value & 0x1FFU) << 9);
     38   }
     39   void set_rel7(UInt32 value) {
     40     MARISA_DEBUG_IF(value > 448, MARISA_PARAM_ERROR);
     41     rel_hi_ = (rel_hi_ & ~(0x1FFU << 18)) | ((value & 0x1FFU) << 18);
     42   }
     43 
     44   UInt32 abs() const {
     45     return abs_;
     46   }
     47   UInt32 rel1() const {
     48     return rel_lo_ & 0x7FU;
     49   }
     50   UInt32 rel2() const {
     51     return (rel_lo_ >> 7) & 0xFFU;
     52   }
     53   UInt32 rel3() const {
     54     return (rel_lo_ >> 15) & 0xFFU;
     55   }
     56   UInt32 rel4() const {
     57     return rel_lo_ >> 23;
     58   }
     59   UInt32 rel5() const {
     60     return rel_hi_ & 0x1FFU;
     61   }
     62   UInt32 rel6() const {
     63     return (rel_hi_ >> 9) & 0x1FFU;
     64   }
     65   UInt32 rel7() const {
     66     return (rel_hi_ >> 18) & 0x1FFU;
     67   }
     68 
     69  private:
     70   UInt32 abs_;
     71   UInt32 rel_lo_;
     72   UInt32 rel_hi_;
     73 };
     74 
     75 }  // namespace marisa
     76 
     77 #endif  // MARISA_RANK_H_
     78