aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarcelo Lira <marcelo.lira@openbossa.org>2010-06-15 15:03:45 -0300
committerMarcelo Lira <marcelo.lira@openbossa.org>2010-06-15 15:13:56 -0300
commit7f433285d4e78a9525d6b72fcaf679a208d45bf3 (patch)
treed4ebc02192ce14929310524108ef940d178f4e35
parent7e6b26aeeb9d97cbae6ac9fca290b109fdd2e828 (diff)
Added method to OverloadData to return the list of overloads without repetition.
The method OverloadData::overloadsWithoutRepetition() returns the overload list of the OverloadData object removing "almost" duplicated functions. For our purposes "foo()" and "foo()const" means the same, so the constant version is removed.
-rw-r--r--overloaddata.cpp16
-rw-r--r--overloaddata.h2
2 files changed, 18 insertions, 0 deletions
diff --git a/overloaddata.cpp b/overloaddata.cpp
index 66705333c..d773ddf42 100644
--- a/overloaddata.cpp
+++ b/overloaddata.cpp
@@ -470,6 +470,22 @@ bool OverloadData::isFinalOccurrence(const AbstractMetaFunction* func) const
return true;
}
+QList<const AbstractMetaFunction*> OverloadData::overloadsWithoutRepetition() const
+{
+ QList<const AbstractMetaFunction*> overloads = m_overloads;
+ foreach (const AbstractMetaFunction* func, m_overloads) {
+ if (func->minimalSignature().endsWith("const"))
+ continue;
+ foreach (const AbstractMetaFunction* f, overloads) {
+ if ((func->minimalSignature() + "const") == f->minimalSignature()) {
+ overloads.removeOne(f);
+ break;
+ }
+ }
+ }
+ return overloads;
+}
+
const AbstractMetaFunction* OverloadData::getFunctionWithDefaultValue() const
{
foreach (const AbstractMetaFunction* func, m_overloads) {
diff --git a/overloaddata.h b/overloaddata.h
index 703407063..13276c609 100644
--- a/overloaddata.h
+++ b/overloaddata.h
@@ -92,6 +92,8 @@ public:
OverloadData* findNextArgWithDefault();
bool isFinalOccurrence(const AbstractMetaFunction* func) const;
+ /// Returns the list of overloads removing repeated constant functions (ex.: "foo()" and "foo()const", the second is removed).
+ QList<const AbstractMetaFunction*> overloadsWithoutRepetition() const;
const QList<const AbstractMetaFunction*>& overloads() const { return m_overloads; }
OverloadDataList nextOverloadData() const { return m_nextOverloadData; }
OverloadData* previousOverloadData() const { return m_previousOverloadData; }