summaryrefslogtreecommitdiff
path: root/src/core
diff options
context:
space:
mode:
authorBenjamin Paassen <bpaassen@techfak.uni-bielefeld.de>2015-02-12 22:36:38 +0100
committerBenjamin Paassen <bpaassen@techfak.uni-bielefeld.de>2015-02-12 22:36:38 +0100
commit3ed124aeed2cb65b05f61224115366601ee3b05f (patch)
treeac25a6f524d6361d64b69926238623b972cea0fa /src/core
parent37a691eb6a5ed31dfc28e15db9d076322ab5fdde (diff)
added Descriptor::getPermittedChildren.
Diffstat (limited to 'src/core')
-rw-r--r--src/core/model/Domain.cpp13
-rw-r--r--src/core/model/Domain.hpp12
2 files changed, 25 insertions, 0 deletions
diff --git a/src/core/model/Domain.cpp b/src/core/model/Domain.cpp
index 6f33ebd..3cc9755 100644
--- a/src/core/model/Domain.cpp
+++ b/src/core/model/Domain.cpp
@@ -471,6 +471,19 @@ NodeVector<FieldDescriptor> Descriptor::getDefaultFields() const
return res;
}
+NodeVector<StructuredClass> Descriptor::getPermittedChildren() const
+{
+ // TODO: In principle a cast would be nicer here, but for now we copy.
+ NodeVector<Node> nodes = collect(this, [](Handle<Node> n) {
+ return n->isa(&RttiTypes::StructuredClass);
+ });
+ NodeVector<StructuredClass> res;
+ for (auto n : nodes) {
+ res.push_back(n.cast<StructuredClass>());
+ }
+ return res;
+}
+
static ssize_t getFieldDescriptorIndex(const NodeVector<FieldDescriptor> &fds,
const std::string &name)
{
diff --git a/src/core/model/Domain.hpp b/src/core/model/Domain.hpp
index c277812..6bc2fba 100644
--- a/src/core/model/Domain.hpp
+++ b/src/core/model/Domain.hpp
@@ -624,6 +624,18 @@ public:
* children of an instance of this Descriptor.
*/
NodeVector<FieldDescriptor> getDefaultFields() const;
+
+ /**
+ * Returns a vector of all StructuredClasses that are allowed as children
+ * of an instance of this Descriptor in the structure tree. This also makes
+ * use of transparency.
+ * The list is sorted by the number of transparent elements that have to be
+ * constructed to arrive at the respective FieldDescriptor.
+ *
+ * @return a vector of all StructuredClasses that are allowed as children
+ * of an instance of this Descriptor in the structure tree.
+ */
+ NodeVector<StructuredClass> getPermittedChildren() const;
};
/*
* TODO: We should discuss Cardinalities one more time. Is it smart to define