diff options
author | Andreas Stöckel <astoecke@techfak.uni-bielefeld.de> | 2015-01-09 01:09:07 +0100 |
---|---|---|
committer | Andreas Stöckel <astoecke@techfak.uni-bielefeld.de> | 2015-01-09 01:09:07 +0100 |
commit | 0605eed698443dc18c48340084507c90e97a9333 (patch) | |
tree | 0722a96365bb3b602c07c7dbdd0f6d0bf9f26d54 /src/core/model/Domain.cpp | |
parent | b31e6b5b147218f65b40668fb764caa90334d453 (diff) |
Adapted code to new resolve function
Diffstat (limited to 'src/core/model/Domain.cpp')
-rw-r--r-- | src/core/model/Domain.cpp | 61 |
1 files changed, 15 insertions, 46 deletions
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<Rooted<Managed>> &res, - const std::vector<std::string> &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<Rooted<Managed>> &res, - const std::vector<std::string> &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<Attribute> &attributes = + attributesDescriptor->getAttributes(); + continueResolveComposita(attributes, attributes.getIndex(), state); + continueResolveComposita(fieldDescriptors, fieldDescriptors.getIndex(), + state); } -void StructuredClass::doResolve(std::vector<Rooted<Managed>> &res, - const std::vector<std::string> &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<Rooted<Managed>> &res, - const std::vector<std::string> &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); } } } |