Groonga 3.0.9 Source Code Document
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
block.hpp
Go to the documentation of this file.
1 /* -*- c-basic-offset: 2 -*- */
2 /* Copyright(C) 2011 Brazil
3 
4  This library is free software; you can redistribute it and/or
5  modify it under the terms of the GNU Lesser General Public
6  License version 2.1 as published by the Free Software Foundation.
7 
8  This library is distributed in the hope that it will be useful,
9  but WITHOUT ANY WARRANTY; without even the implied warranty of
10  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11  Lesser General Public License for more details.
12 
13  You should have received a copy of the GNU Lesser General Public
14  License along with this library; if not, write to the Free Software
15  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
16 */
17 
18 #ifndef GRN_DAT_BLOCK_HPP_
19 #define GRN_DAT_BLOCK_HPP_
20 
21 #include "dat.hpp"
22 
23 namespace grn {
24 namespace dat {
25 
27  public:
28  Block() : next_(0), prev_(0), first_phantom_(0), num_phantoms_(0) {}
29 
30  // Blocks in the same level are stored in a doubly-linked list which is
31  // represented by the following next() and prev().
32  UInt32 next() const {
33  return next_ / BLOCK_SIZE;
34  }
35  UInt32 prev() const {
36  return prev_ / BLOCK_SIZE;
37  }
38 
39  // A level indicates how easyily find_offset() can find a good offset in that
40  // block. It is easier in lower level blocks.
41  UInt32 level() const {
42  return next_ & BLOCK_MASK;
43  }
44  // A block level rises when find_offset() fails to find a good offset
45  // MAX_FAILURE_COUNT times in that block.
47  return prev_ & BLOCK_MASK;
48  }
49 
51  return first_phantom_;
52  }
53  UInt32 num_phantoms() const {
54  return num_phantoms_;
55  }
56 
57  void set_next(UInt32 x) {
59  next_ = (next_ & BLOCK_MASK) | (x * BLOCK_SIZE);
60  }
61  void set_prev(UInt32 x) {
63  prev_ = (prev_ & BLOCK_MASK) | (x * BLOCK_SIZE);
64  }
65 
66  void set_level(UInt32 x) {
69  next_ = (next_ & ~BLOCK_MASK) | x;
70  }
74  prev_ = (prev_ & ~BLOCK_MASK) | x;
75  }
76 
79  first_phantom_ = (UInt16)x;
80  }
83  num_phantoms_ = (UInt16)x;
84  }
85 
86  private:
87  UInt32 next_;
88  UInt32 prev_;
89  UInt16 first_phantom_;
90  UInt16 num_phantoms_;
91 };
92 
93 } // namespace dat
94 } // namespace grn
95 
96 #endif // GRN_DAT_BLOCK_HPP_