mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-08-10 09:48:32 +00:00
Exploration of using rocksdb as file+instance storage
This commit is contained in:
@@ -279,7 +279,7 @@ static void end_element(void* user, const xmlChar* tag) {
|
||||
}
|
||||
*/
|
||||
// @todo
|
||||
// back.inst()->data().storage_.set(back.idx(), elems);
|
||||
// back.inst()->data().set_attribute_value(back.idx(), elems);
|
||||
}
|
||||
|
||||
if (state->dialect == ifcxml_dialect_ifc2x3 && state->stack.back().ntype() == stack_node::node_instance) {
|
||||
@@ -325,7 +325,7 @@ static void process_characters(void* user, const xmlChar* character, int len) {
|
||||
if (!val.empty()) {
|
||||
// type declaration always at idx 0
|
||||
visit_any([&state](auto& v) {
|
||||
state->stack.back().inst()->data().storage_.set(0, v);
|
||||
state->stack.back().inst()->data().set_attribute_value(0, v);
|
||||
}, val);
|
||||
}
|
||||
} else if (state_type == stack_node::node_header_entry) {
|
||||
@@ -479,7 +479,7 @@ static void start_element(void* user, const xmlChar* tag, const xmlChar** attrs)
|
||||
}
|
||||
}
|
||||
|
||||
auto untyped = IfcEntityInstanceData(storage_t(decl->as_entity() != nullptr ? decl->as_entity()->attribute_count() : 1));
|
||||
auto untyped = IfcEntityInstanceData(in_memory_attribute_storage(decl->as_entity() != nullptr ? decl->as_entity()->attribute_count() : 1));
|
||||
|
||||
const IfcParse::entity* entity = decl->as_entity();
|
||||
if (entity != nullptr) {
|
||||
@@ -494,7 +494,7 @@ static void start_element(void* user, const xmlChar* tag, const xmlChar** attrs)
|
||||
auto val = parse_attribute_value(attr->type_of_attribute(), pair.second);
|
||||
if (!val.empty()) {
|
||||
visit_any([&untyped, idx](auto& v) {
|
||||
untyped.storage_.set(idx, v);
|
||||
untyped.set_attribute_value(idx, v);
|
||||
}, val);
|
||||
}
|
||||
} else {
|
||||
@@ -531,7 +531,7 @@ static void start_element(void* user, const xmlChar* tag, const xmlChar** attrs)
|
||||
IfcUtil::IfcBaseClass* inst;
|
||||
auto inst_ = create_instance(decl);
|
||||
instance_to_attribute(inst_, state->stack.back().idx(), inst);
|
||||
// state->stack.back().inst()->data().storage_.set(state->stack.back().idx(), attr);
|
||||
// state->stack.back().inst()->data().set_attribute_value(state->stack.back().idx(), attr);
|
||||
state->stack.push_back(stack_node::instance(id, inst));
|
||||
} else if (state_type == stack_node::node_aggregate) {
|
||||
|
||||
@@ -592,7 +592,7 @@ static void start_element(void* user, const xmlChar* tag, const xmlChar** attrs)
|
||||
if (inst != nullptr) {
|
||||
int idx = (*found)->entity_reference()->attribute_index(
|
||||
(*found)->attribute_reference());
|
||||
inst->data().storage_.set(idx, state->stack.back().inst());
|
||||
inst->data().set_attribute_value(idx, state->stack.back().inst());
|
||||
state->stack.push_back(stack_node::instance(id, inst));
|
||||
} else {
|
||||
Logger::Error("Unknown attribute " + tagname);
|
||||
@@ -663,12 +663,12 @@ static void start_element(void* user, const xmlChar* tag, const xmlChar** attrs)
|
||||
int idx = state->stack.back().inv_attr()->entity_reference()->attribute_index(
|
||||
state->stack.back().inv_attr()->attribute_reference());
|
||||
if (inst != nullptr) {
|
||||
inst->data().storage_.set(idx, state->stack.back().inst());
|
||||
inst->data().set_attribute_value(idx, state->stack.back().inst());
|
||||
} else {
|
||||
Logger::Error("Internal error, inverse attribute not processed");
|
||||
}
|
||||
} else if (state_type == stack_node::node_instance_attribute) {
|
||||
state->stack.back().inst()->data().storage_.set(state->stack.back().idx(), inst);
|
||||
state->stack.back().inst()->data().set_attribute_value(state->stack.back().idx(), inst);
|
||||
}
|
||||
|
||||
if (entity == nullptr) {
|
||||
|
||||
Reference in New Issue
Block a user