1/* -*- c-basic-offset: 2 -*- */
2/*
3 Copyright(C) 2011-2016 Brazil
4
5 This library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Lesser General Public
7 License version 2.1 as published by the Free Software Foundation.
8
9 This library is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 Lesser General Public License for more details.
13
14 You should have received a copy of the GNU Lesser General Public
15 License along with this library; if not, write to the Free Software
16 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17*/
18
19#pragma once
20
21// See base.hpp and check.hpp for details.
22#include "base.hpp"
23#include "check.hpp"
24
25namespace grn {
26namespace dat {
27
28class GRN_DAT_API Node {
29 public:
30 Node() : base_(), check_() {}
31
32 Base base() const {
33 return base_;
34 }
35 bool is_linker() const {
36 GRN_DAT_DEBUG_THROW_IF(is_phantom());
37 return base_.is_linker();
38 }
39 UInt32 offset() const {
40 GRN_DAT_DEBUG_THROW_IF(is_phantom());
41 return base_.offset();
42 }
43 UInt32 key_pos() const {
44 GRN_DAT_DEBUG_THROW_IF(is_phantom());
45 return base_.key_pos();
46 }
47
48 Check check() const {
49 return check_;
50 }
51 bool is_offset() const {
52 return check_.is_offset();
53 }
54 UInt32 except_is_offset() const {
55 return check_.except_is_offset();
56 }
57 bool is_phantom() const {
58 return check_.is_phantom();
59 }
60 UInt32 next() const {
61 return check_.next();
62 }
63 UInt32 prev() const {
64 return check_.prev();
65 }
66 UInt32 label() const {
67 return check_.label();
68 }
69 UInt32 child() const {
70 return check_.child();
71 }
72 UInt32 sibling() const {
73 return check_.sibling();
74 }
75
76 void set_base(Base x) {
77 GRN_DAT_DEBUG_THROW_IF(is_phantom());
78 base_ = x;
79 }
80 void set_offset(UInt32 x) {
81 GRN_DAT_DEBUG_THROW_IF(is_phantom());
82 base_.set_offset(x);
83 }
84 void set_key_pos(UInt32 x) {
85 GRN_DAT_DEBUG_THROW_IF(is_phantom());
86 base_.set_key_pos(x);
87 }
88
89 void set_check(Check x) {
90 check_ = x;
91 }
92 void set_is_offset(bool x) {
93 check_.set_is_offset(x);
94 }
95 void set_except_is_offset(UInt32 x) {
96 check_.set_except_is_offset(x);
97 }
98 void set_is_phantom(bool x) {
99 GRN_DAT_DEBUG_THROW_IF(base_.offset() != INVALID_OFFSET);
100 check_.set_is_phantom(x);
101 }
102 void set_next(UInt32 x) {
103 GRN_DAT_DEBUG_THROW_IF(base_.offset() != INVALID_OFFSET);
104 check_.set_next(x);
105 }
106 void set_prev(UInt32 x) {
107 GRN_DAT_DEBUG_THROW_IF(base_.offset() != INVALID_OFFSET);
108 check_.set_prev(x);
109 }
110 void set_label(UInt32 x) {
111 GRN_DAT_DEBUG_THROW_IF(offset() != INVALID_OFFSET);
112 check_.set_label(x);
113 }
114 void set_child(UInt32 x) {
115 check_.set_child(x);
116 }
117 void set_sibling(UInt32 x) {
118 check_.set_sibling(x);
119 }
120
121 private:
122 Base base_;
123 Check check_;
124};
125
126} // namespace dat
127} // namespace grn
128