15 #include "data/store/classtree.h" 34 bool*
added = 0)
override 43 bool*
added)
override;
51 targ = store->getSink();
60 return id_set(column,
value);
67 return no_id_set(column,
value);
74 return id_set(column,
value);
82 return no_id_set(column,
value);
89 return no_id_set(column,
value);
120 std::unique_ptr<Store> store;
128 ClassTree<ct_node> class_tree;
133 std::map<String8, code_node> codes;
135 code_node root_cn, *cur_cn;
141 std::vector<String> loc_names;
144 std::vector<uint> loc_columns;
146 std::vector<std::vector<uint>> data_columns;
169 std::vector<byte> bytesref_val;
171 std::vector<utf8_t> string8_buf;
172 std::vector<utf16_t> string16_buf;
174 equal_doc_id eq_doc_id;
176 std::vector<bool> is_id;
180 template <
typename T>
185 if (!cur_data_column)
187 cur_data_column = &data_columns[first_data_column];
190 uint cur_sibling(cur_data_column->front());
191 cur_data_column = &data_columns[
column];
192 assert(cur_data_column->front() >= cur_sibling);
193 if ((cur_data_column->front() != cur_sibling) &&
194 ((!targ->
move(-1) || !targ->
move(cur_data_column->front()))))
197 return targ->
set((*cur_data_column)[1], t);
200 template <
typename T>
205 assert(!is_id[column]);
206 return set_targ(column, t);
209 template <
typename T>
222 if (column == doc_id_column)
223 return check_doc_id(t);
224 return set_targ(column, t);
231 if ((column < is_id.size()) && is_id[column])
233 if (column == doc_id_column)
234 return check_doc_id(t);
236 if ((column == doc_id_column + 1) && (cur_cn != &root_cn))
238 auto new_cn(cur_cn->codes.find(t));
239 if (new_cn == cur_cn->codes.end())
241 cur_cn = &(new_cn->second);
242 return targ->
move(cur_cn->child);
244 return set_targ(column, t);
249 size_t first_data_column;
250 const std::vector<uint>* cur_data_column;
virtual int64 start(uint64 docNum)
Begin a new document/record/row, committing current one (if any)
const Xpace_Char16 Xpace_Data_Type type
virtual RET set(LOC location, int64 value)
Write an int64.
A write-only, forward (by document) cursor into a Store.
static const char * LOC_TAG
tag of fields (columns) that contain location in the final store
Each high-level Xpace object has a Configuration.
const Xpace_Char16 Xpace_Data_Type uint bool * added
A string, Unicode UTF-16 and reference-counted.
A low-level const data holder.
A floatimg-point number with explicit mantissa and decimals TODO: normalize.
const Xpace_Char16 Xpace_Data_Type uint columnNum
static const char * DOC_ID_TAG
tag of the field (column) that contains the document identifier
A write-only, forward cursor into a table.
unsigned long long uint64
const Xpace_Char16 * name
Sink callbacks for table data.
uint column
Add a 64-bit int to the row.
virtual RET move(LOC location)
Move without setting data.
Xpace project main namespace
std::vector< uint > Location
A location within a source.
A Store is a hierarchically organized dataset, suitable for managing structured text and multidimensi...