summaryrefslogtreecommitdiff
path: root/src/core/model/Domain.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/model/Domain.cpp')
-rw-r--r--src/core/model/Domain.cpp37
1 files changed, 27 insertions, 10 deletions
diff --git a/src/core/model/Domain.cpp b/src/core/model/Domain.cpp
index 55f05b3..f45bd27 100644
--- a/src/core/model/Domain.cpp
+++ b/src/core/model/Domain.cpp
@@ -179,13 +179,7 @@ bool Descriptor::continuePath(Handle<StructuredClass> target,
std::vector<Rooted<Node>> optimum;
// use recursive depth-first search from the top to reach the given child
// get the list of effective FieldDescriptors.
- NodeVector<FieldDescriptor> fields;
- if (isa(&RttiTypes::StructuredClass)) {
- const StructuredClass *tis = static_cast<const StructuredClass *>(this);
- fields = tis->getEffectiveFieldDescriptors();
- } else {
- fields = getFieldDescriptors();
- }
+ NodeVector<FieldDescriptor> fields = getFieldDescriptors();
for (auto &fd : fields) {
for (auto &c : fd->getChildren()) {
@@ -234,6 +228,30 @@ bool Descriptor::continuePath(Handle<StructuredClass> target,
return found;
}
+int Descriptor::getFieldDescriptorIndex(const std::string &name) const
+{
+ int f = 0;
+ for (auto &fd : getFieldDescriptors()) {
+ if (fd->getName() == name) {
+ return f;
+ }
+ f++;
+ }
+ return -1;
+}
+
+int Descriptor::getFieldDescriptorIndex(Handle<FieldDescriptor> fd) const
+{
+ int f = 0;
+ for (auto &fd2 : getFieldDescriptors()) {
+ if (fd == fd2) {
+ return f;
+ }
+ f++;
+ }
+ return -1;
+}
+
void Descriptor::addFieldDescriptor(Handle<FieldDescriptor> fd)
{
// only add it if we need to.
@@ -444,14 +462,13 @@ const void StructuredClass::gatherFieldDescriptors(
}
}
-NodeVector<FieldDescriptor> StructuredClass::getEffectiveFieldDescriptors()
- const
+NodeVector<FieldDescriptor> StructuredClass::getFieldDescriptors() const
{
// in this case we return a NodeVector of Rooted entries without owner.
NodeVector<FieldDescriptor> vec;
std::set<std::string> overriddenFields;
gatherFieldDescriptors(vec, overriddenFields);
- return std::move(vec);
+ return vec;
}
/* Class AnnotationClass */