From 0605eed698443dc18c48340084507c90e97a9333 Mon Sep 17 00:00:00 2001 From: Andreas Stöckel Date: Fri, 9 Jan 2015 01:09:07 +0100 Subject: Adapted code to new resolve function --- src/core/model/Domain.cpp | 61 ++++++++++++----------------------------------- 1 file changed, 15 insertions(+), 46 deletions(-) (limited to 'src/core/model/Domain.cpp') diff --git a/src/core/model/Domain.cpp b/src/core/model/Domain.cpp index e2aaba4..f03bd7a 100644 --- a/src/core/model/Domain.cpp +++ b/src/core/model/Domain.cpp @@ -23,59 +23,28 @@ namespace ousia { namespace model { -void FieldDescriptor::doResolve(std::vector> &res, - const std::vector &path, - Filter filter, void *filterData, unsigned idx, - VisitorSet &visited) -{ - // We call resolve for the children, but give them the field name as - // alias. - for (auto &c : children) { - c->resolve(res, path, filter, filterData, idx, visited, &getNameRef()); - } -} +/* Class FieldDescriptor */ -// TODO: better alias? -static std::string DESCRIPTOR_ATTRIBUTES_ALIAS{"attributes"}; +/* Class Descriptor */ -void Descriptor::doResolve(std::vector> &res, - const std::vector &path, Filter filter, - void *filterData, unsigned idx, VisitorSet &visited) +void Descriptor::continueResolve(ResolutionState &state) { - // TODO: This could be a problem, because the name of the field might be - // needed in the path. - for (auto &fd : fieldDescriptors) { - fd->resolve(res, path, filter, filterData, idx, visited, nullptr); - } - // TODO: This throws a SEGFAULT for some reason. - // attributesDescriptor->resolve(res, path, filter, filterData, idx, - // visited, - // &DESCRIPTOR_ATTRIBUTES_ALIAS); + const NodeVector &attributes = + attributesDescriptor->getAttributes(); + continueResolveComposita(attributes, attributes.getIndex(), state); + continueResolveComposita(fieldDescriptors, fieldDescriptors.getIndex(), + state); } -void StructuredClass::doResolve(std::vector> &res, - const std::vector &path, - Filter filter, void *filterData, unsigned idx, - VisitorSet &visited) -{ - Descriptor::doResolve(res, path, filter, filterData, idx, visited); - if (!isa.isNull()) { - isa->doResolve(res, path, filter, filterData, idx, visited); - } -} +/* Class Domain */ -void Domain::doResolve(std::vector> &res, - const std::vector &path, Filter filter, - void *filterData, unsigned idx, VisitorSet &visited) +void Domain::continueResolve(ResolutionState &state) { - for (auto &s : structureClasses) { - s->resolve(res, path, filter, filterData, idx, visited, nullptr); - } - for (auto &a : annotationClasses) { - a->resolve(res, path, filter, filterData, idx, visited, nullptr); - } - for (auto &t : typesystems) { - t->resolve(res, path, filter, filterData, idx, visited, nullptr); + if (!continueResolveComposita(structureClasses, structureClasses.getIndex(), + state) | + continueResolveComposita(annotationClasses, + annotationClasses.getIndex(), state)) { + continueResolveReferences(typesystems, state); } } } -- cgit v1.2.3