diff options
author | Andreas Stöckel <astoecke@techfak.uni-bielefeld.de> | 2015-01-25 18:48:12 +0100 |
---|---|---|
committer | Andreas Stöckel <astoecke@techfak.uni-bielefeld.de> | 2015-01-25 18:48:12 +0100 |
commit | e8863235b93ff79cd68faf93e92140114bfa4ceb (patch) | |
tree | 2730a9c44dbeef24ebca5278d9aba4523fa710f8 | |
parent | c36f476f434c16a52ada15bdfcc5f92bcad1b8db (diff) |
Added "setIntersection" method to Rtti class.
-rw-r--r-- | src/core/common/Rtti.cpp | 11 | ||||
-rw-r--r-- | src/core/common/Rtti.hpp | 11 |
2 files changed, 22 insertions, 0 deletions
diff --git a/src/core/common/Rtti.cpp b/src/core/common/Rtti.cpp index 6849a0e..acc98a7 100644 --- a/src/core/common/Rtti.cpp +++ b/src/core/common/Rtti.cpp @@ -147,6 +147,17 @@ bool Rtti::setIsOneOf(const RttiSet &s1, const RttiSet &s2) return false; } +RttiSet Rtti::setIntersection(const RttiSet &s1, const RttiSet &s2) +{ + RttiSet res; + for (const Rtti *t1 : s1) { + if (t1->isOneOf(s2)) { + res.insert(t1); + } + } + return res; +} + bool Rtti::composedOf(const Rtti &other) const { initialize(); diff --git a/src/core/common/Rtti.hpp b/src/core/common/Rtti.hpp index 05cc728..f371494 100644 --- a/src/core/common/Rtti.hpp +++ b/src/core/common/Rtti.hpp @@ -403,6 +403,17 @@ public: static bool setIsOneOf(const RttiSet &s1, const RttiSet &s2); /** + * Calculates the intersection of two RttiSets. Only the elements of s1 + * which are at least one element in s2 are returned. + * + * @param s1 is the first set. For each type in this set we check whether + * it is one of the types in s2, only those elements are returned. + * @param s2 is the second set. + * @return s1 restricted to the types in s2. + */ + static RttiSet setIntersection(const RttiSet &s1, const RttiSet &s2); + + /** * Returns true if an instance of this type may have references to the other * given type. This mechanism is used to prune impossible paths when * resolving objects of a certain type by name in an object graph. |