19 return (x == cl->
p_data_info->end()) ? 0 : x->second->offset;
27 const char* fname =
"OksIndex::OksIndex(OksClass *, OksAttribute *";
35 Oks::error_msg(fname) <<
"Can't build index for ABSTRACT class \"" << c->get_name() <<
"\"\n";
45 Oks::error_msg(fname) <<
"Can't find attribute \"" << a->p_name <<
"\" in class \"" << c->get_name()
46 <<
"\" to build index.\n";
51 Oks::error_msg(fname) <<
"Class \"" << c->get_name() <<
"\" already has index for attribute \"" << a->p_name
64 for (OksObject::Map::iterator i = c->p_objects->begin(); i != c->p_objects->end(); ++i)
68 std::cout <<
"Build index for attribute \'" <<
a->
p_name <<
"\' in class \'" <<
c->
get_name() <<
"\' for " <<
size()
72 for (
int j = 0; j < entries(); j++) {
75 std::cout << j <<
".\tobject id \'" <<
obj->GetId() <<
"\' "
76 <<
"\tvalue: \'" <<
obj->data[
offset] <<
"\'\n";
96 std::pair<Position, Position> positions = equal_range(o);
100 for (; i != i2; ++i) {
134 i1 = lower_bound(&test_o);
137 if ((*i1)->data[
offset] == *d) {
138 i2 = upper_bound(&test_o);
147 i2 = lower_bound(&test_o);
149 i2 = upper_bound(&test_o);
155 i1 = upper_bound(&test_o);
157 i1 = lower_bound(&test_o);
173 for (; pos1 != pos2; ++pos1)
174 olist->push_back(*pos1);
189 if ((andOperation ==
true) && (a1 == b1))
196 if (andOperation ==
true) {
210 if ((b2 != end()) && ((*b2)->data[
offset] < (*a1)->data[
offset]))
214 if ((b1 != end()) && (*a2)->data[
offset] > (*b1)->data[
offset])
219 if (b2 == end() || b1 == end()) {
220 pos2 = (b2 != end()) ? b2 : b1;
222 pos2 = ((*b2)->data[
offset] <= (*b1)->data[
offset]) ? b2 : b1;
225 for (; pos1 != pos2; ++pos1)
226 olist->push_back(*pos1);
228 if (a1 != b1 && a2 == b2) {
230 for (; a1 != b1; ++a1)
231 olist->push_back(*a1);
232 }
else if (a2 != b2 && a1 == b1) {
234 for (; a2 != b2; ++a2)
235 olist->push_back(*a2);
236 }
else if (a1 != b1 && a2 != b2) {
249 if (b2 != end() && (*b2)->data[
offset] < (*a1)->data[
offset]) {
250 for (; a2 != b2; ++a2)
251 olist->push_back(*a2);
252 for (; a1 != b1; ++a1)
253 olist->push_back(*a1);
260 if (b1 != end() && (*a2)->data[
offset] > (*b1)->data[
offset]) {
261 for (; a1 != b1; ++a1)
262 olist->push_back(*a1);
263 for (; a2 != b2; ++a2)
264 olist->push_back(*a2);
272 if (b2 == end() || b1 == end()) {
273 pos2 = (b2 == end()) ? b2 : b1;
275 pos2 = ((*b2)->data[
offset] >= (*b1)->data[
offset]) ? b2 : b1;
277 for (; pos1 != pos2; ++pos1)
278 olist->push_back(*pos1);
const std::string & get_name() const noexcept
out stream operator
bool get_is_abstract() const noexcept
OksObject::Map * p_objects
OksIndex::Map * p_indices
const std::string & get_name() const noexcept
OksAttribute * find_attribute(const std::string &name) const noexcept
Find attribute (search in this and base classes).
OksDataInfo::Map * p_data_info
static size_t get_offset(OksClass *, OksAttribute *)
std::multiset< OksObject *, OksObjectSortBy >::const_iterator ConstPosition
std::multiset< OksObject *, OksObjectSortBy >::iterator Position
OksObject * FindFirst(OksData *d) const
std::map< const OksAttribute *, OksIndex *, SortByName > Map
OksObject * remove_obj(OksObject *)
OksObject::List * find_all(OksData *, OksQuery::Comparator) const
OksIndex(OksClass *, OksAttribute *)
void find_interval(OksData *, OksQuery::Comparator, ConstPosition &, ConstPosition &) const
OksObject describes instance of OksClass.
std::list< OksObject * > List
static bool equal_cmp(const OksData *, const OksData *)
bool(*) Comparator(const OksData *, const OksData *)
static bool greater_cmp(const OksData *, const OksData *)
static bool less_or_equal_cmp(const OksData *, const OksData *)
static bool greater_or_equal_cmp(const OksData *, const OksData *)
static bool less_cmp(const OksData *, const OksData *)
static std::ostream & error_msg(const char *)
FELIX Initialization std::string initerror FELIX queue timed std::string queuename Unexpected chunk size