summaryrefslogtreecommitdiff
path: root/src/core/model/Domain.cpp
diff options
context:
space:
mode:
authorAndreas Stöckel <astoecke@techfak.uni-bielefeld.de>2015-01-09 01:09:07 +0100
committerAndreas Stöckel <astoecke@techfak.uni-bielefeld.de>2015-01-09 01:09:07 +0100
commit0605eed698443dc18c48340084507c90e97a9333 (patch)
tree0722a96365bb3b602c07c7dbdd0f6d0bf9f26d54 /src/core/model/Domain.cpp
parentb31e6b5b147218f65b40668fb764caa90334d453 (diff)
Adapted code to new resolve function
Diffstat (limited to 'src/core/model/Domain.cpp')
-rw-r--r--src/core/model/Domain.cpp61
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);
}
}
}