diff --git a/src/lib/data/name/NameElement.cpp b/src/lib/data/name/NameElement.cpp index f27b7e9f..db8d4a5d 100644 --- a/src/lib/data/name/NameElement.cpp +++ b/src/lib/data/name/NameElement.cpp @@ -96,7 +96,7 @@ bool NameElement::hasSignature() const return m_signature.isValid(); } -const NameElement::Signature& NameElement::getSignature() +const NameElement::Signature& NameElement::getSignature() const { return m_signature; } diff --git a/src/lib/data/name/NameElement.h b/src/lib/data/name/NameElement.h index 76d083f4..7c221100 100644 --- a/src/lib/data/name/NameElement.h +++ b/src/lib/data/name/NameElement.h @@ -37,11 +37,11 @@ public: std::wstring getNameWithSignatureParameters() const; bool hasSignature() const; - const Signature& getSignature(); + const Signature& getSignature() const; void setSignature(std::wstring prefix, std::wstring postfix); private: - const std::wstring m_name; + std::wstring m_name; Signature m_signature; }; diff --git a/src/lib/data/name/NameHierarchy.cpp b/src/lib/data/name/NameHierarchy.cpp index 1818d862..ca67bcb8 100644 --- a/src/lib/data/name/NameHierarchy.cpp +++ b/src/lib/data/name/NameHierarchy.cpp @@ -30,10 +30,10 @@ std::wstring NameHierarchy::serializeRange(const NameHierarchy& nameHierarchy, s ss << NAME_DELIMITER; } - ss << nameHierarchy[i]->getName() << PART_DELIMITER; - ss << nameHierarchy[i]->getSignature().getPrefix(); + ss << nameHierarchy[i].getName() << PART_DELIMITER; + ss << nameHierarchy[i].getSignature().getPrefix(); ss << SIGNATURE_DELIMITER; - ss << nameHierarchy[i]->getSignature().getPostfix(); + ss << nameHierarchy[i].getSignature().getPostfix(); } return ss.str(); } @@ -86,7 +86,7 @@ NameHierarchy NameHierarchy::deserialize(const std::wstring& serializedName) npos += NAME_DELIMITER.size(); } - nameHierarchy.push(std::make_shared(std::move(name), std::move(prefix), std::move(postfix))); + nameHierarchy.push(NameElement(std::move(name), std::move(prefix), std::move(postfix))); } return nameHierarchy; @@ -107,21 +107,21 @@ NameHierarchy::NameHierarchy(const NameDelimiterType delimiter) { } -NameHierarchy::NameHierarchy(std::wstring name, const NameDelimiterType delimiter) - : m_delimiter(delimiter) -{ - push(std::make_shared(std::move(name))); -} - NameHierarchy::NameHierarchy(const std::vector& names, const NameDelimiterType delimiter) : m_delimiter(delimiter) { for (const std::wstring& name : names) { - push(std::make_shared(name)); + push(name); } } +NameHierarchy::NameHierarchy(std::wstring name, const NameDelimiterType delimiter) + : m_delimiter(delimiter) +{ + push(std::move(name)); +} + NameHierarchy::NameHierarchy(const NameHierarchy& other) : m_elements(other.m_elements) , m_delimiter(other.m_delimiter) @@ -138,14 +138,14 @@ NameHierarchy::~NameHierarchy() { } -void NameHierarchy::push(std::shared_ptr element) +void NameHierarchy::push(NameElement element) { - m_elements.push_back(element); + m_elements.emplace_back(std::move(element)); } void NameHierarchy::push(std::wstring name) { - m_elements.push_back(std::make_shared(std::move(name))); + m_elements.emplace_back(std::move(name)); } void NameHierarchy::pop() @@ -153,16 +153,22 @@ void NameHierarchy::pop() m_elements.pop_back(); } -std::shared_ptr NameHierarchy::back() const +NameElement& NameHierarchy::back() { - if (m_elements.size() > 0) - { - return m_elements.back(); - } - return std::shared_ptr(); + return m_elements.back(); } -std::shared_ptr NameHierarchy::operator[](size_t pos) const +const NameElement& NameHierarchy::back() const +{ + return m_elements.back(); +} + +NameElement& NameHierarchy::operator[](size_t pos) +{ + return m_elements[pos]; +} + +const NameElement& NameHierarchy::operator[](size_t pos) const { return m_elements[pos]; } @@ -207,7 +213,7 @@ std::wstring NameHierarchy::getQualifiedName() const { ss << nameDelimiterTypeToString(m_delimiter); } - ss << m_elements[i]->getName(); + ss << m_elements[i].getName(); } return ss.str(); } @@ -217,7 +223,7 @@ std::wstring NameHierarchy::getQualifiedNameWithSignature() const std::wstring name = getQualifiedName(); if (m_elements.size()) { - name = m_elements.back()->getSignature().qualifyName(name); // todo: use separator for signature! + name = m_elements.back().getSignature().qualifyName(name); // todo: use separator for signature! } return name; } @@ -226,7 +232,7 @@ std::wstring NameHierarchy::getRawName() const { if (m_elements.size()) { - return m_elements.back()->getName(); + return m_elements.back().getName(); } return L""; } @@ -235,7 +241,7 @@ std::wstring NameHierarchy::getRawNameWithSignature() const { if (m_elements.size()) { - return m_elements.back()->getNameWithSignature(); + return m_elements.back().getNameWithSignature(); } return L""; } @@ -244,7 +250,7 @@ std::wstring NameHierarchy::getRawNameWithSignatureParameters() const { if (m_elements.size()) { - return m_elements.back()->getNameWithSignatureParameters(); + return m_elements.back().getNameWithSignatureParameters(); } return L""; } @@ -253,7 +259,7 @@ bool NameHierarchy::hasSignature() const { if (m_elements.size()) { - return m_elements.back()->hasSignature(); + return m_elements.back().hasSignature(); } return false; @@ -263,7 +269,7 @@ NameElement::Signature NameHierarchy::getSignature() const { if (m_elements.size()) { - return m_elements.back()->getSignature(); // todo: use separator for signature! + return m_elements.back().getSignature(); // todo: use separator for signature! } return NameElement::Signature(); diff --git a/src/lib/data/name/NameHierarchy.h b/src/lib/data/name/NameHierarchy.h index 8a1bb7bc..ee9e686f 100644 --- a/src/lib/data/name/NameHierarchy.h +++ b/src/lib/data/name/NameHierarchy.h @@ -1,7 +1,6 @@ #ifndef NAME_HIERARCHY_H #define NAME_HIERARCHY_H -#include #include #include @@ -26,12 +25,15 @@ public: NameDelimiterType getDelimiter() const; void setDelimiter(const NameDelimiterType delimiter); - void push(std::shared_ptr element); + void push(NameElement element); void push(std::wstring name); void pop(); - std::shared_ptr back() const; - std::shared_ptr operator[](size_t pos) const; + NameElement& back(); + const NameElement& back() const; + NameElement& operator[](size_t pos); + const NameElement& operator[](size_t pos) const; + NameHierarchy& operator=(const NameHierarchy& other); NameHierarchy& operator=(NameHierarchy&& other); @@ -49,7 +51,7 @@ public: NameElement::Signature getSignature() const; private: - std::vector> m_elements; + std::vector m_elements; NameDelimiterType m_delimiter; }; diff --git a/src/lib_cxx/data/parser/cxx/name/CxxDeclName.cpp b/src/lib_cxx/data/parser/cxx/name/CxxDeclName.cpp index e2f59bf7..9dfa8112 100644 --- a/src/lib_cxx/data/parser/cxx/name/CxxDeclName.cpp +++ b/src/lib_cxx/data/parser/cxx/name/CxxDeclName.cpp @@ -14,7 +14,7 @@ CxxDeclName::CxxDeclName(std::wstring name, std::vector templatePa NameHierarchy CxxDeclName::toNameHierarchy() const { NameHierarchy ret = getParent() ? getParent()->toNameHierarchy() : NameHierarchy(NAME_DELIMITER_CXX); - ret.push(std::make_shared(m_name + getTemplateSuffix(m_templateParameterNames))); + ret.push(m_name + getTemplateSuffix(m_templateParameterNames)); return ret; } diff --git a/src/lib_cxx/data/parser/cxx/name/CxxFunctionDeclName.cpp b/src/lib_cxx/data/parser/cxx/name/CxxFunctionDeclName.cpp index 76ee5357..1a78bbb7 100644 --- a/src/lib_cxx/data/parser/cxx/name/CxxFunctionDeclName.cpp +++ b/src/lib_cxx/data/parser/cxx/name/CxxFunctionDeclName.cpp @@ -44,6 +44,6 @@ NameHierarchy CxxFunctionDeclName::toNameHierarchy() const } NameHierarchy ret = CxxDeclName::toNameHierarchy(); - ret.back()->setSignature(prefix.str(), postfix.str()); + ret.back().setSignature(prefix.str(), postfix.str()); return ret; } diff --git a/src/lib_cxx/data/parser/cxx/name/CxxStaticFunctionDeclName.cpp b/src/lib_cxx/data/parser/cxx/name/CxxStaticFunctionDeclName.cpp index 718113ba..43d9b729 100644 --- a/src/lib_cxx/data/parser/cxx/name/CxxStaticFunctionDeclName.cpp +++ b/src/lib_cxx/data/parser/cxx/name/CxxStaticFunctionDeclName.cpp @@ -15,9 +15,10 @@ CxxStaticFunctionDeclName::CxxStaticFunctionDeclName( NameHierarchy CxxStaticFunctionDeclName::toNameHierarchy() const { NameHierarchy ret = CxxFunctionDeclName::toNameHierarchy(); - ret.back()->setSignature( - ret.back()->getSignature().getPrefix(), - ret.back()->getSignature().getPostfix() + L" (" + m_translationUnitFileName + L')' + NameElement& last = ret.back(); + last.setSignature( + last.getSignature().getPrefix(), + last.getSignature().getPostfix() + L" (" + m_translationUnitFileName + L')' ); return ret; } diff --git a/src/lib_cxx/data/parser/cxx/name/CxxTypeName.cpp b/src/lib_cxx/data/parser/cxx/name/CxxTypeName.cpp index 2d08a1e0..411e3345 100644 --- a/src/lib_cxx/data/parser/cxx/name/CxxTypeName.cpp +++ b/src/lib_cxx/data/parser/cxx/name/CxxTypeName.cpp @@ -42,7 +42,7 @@ CxxTypeName::CxxTypeName( NameHierarchy CxxTypeName::toNameHierarchy() const { NameHierarchy ret = getParent() ? getParent()->toNameHierarchy() : NameHierarchy(NAME_DELIMITER_CXX); - ret.push(std::make_shared(m_name + getTemplateSuffix(m_templateArguments))); + ret.push(m_name + getTemplateSuffix(m_templateArguments)); return ret; } diff --git a/src/lib_cxx/data/parser/cxx/name/CxxVariableDeclName.cpp b/src/lib_cxx/data/parser/cxx/name/CxxVariableDeclName.cpp index bb05ef38..de4565e5 100644 --- a/src/lib_cxx/data/parser/cxx/name/CxxVariableDeclName.cpp +++ b/src/lib_cxx/data/parser/cxx/name/CxxVariableDeclName.cpp @@ -22,6 +22,6 @@ NameHierarchy CxxVariableDeclName::toNameHierarchy() const signaturePrefix += m_typeName->toString(); NameHierarchy ret = CxxDeclName::toNameHierarchy(); - ret.back()->setSignature(std::move(signaturePrefix), L""); + ret.back().setSignature(std::move(signaturePrefix), L""); return ret; } diff --git a/src/test/StorageTestSuite.h b/src/test/StorageTestSuite.h index dba29436..54e21cbf 100644 --- a/src/test/StorageTestSuite.h +++ b/src/test/StorageTestSuite.h @@ -265,9 +265,9 @@ private: NameHierarchy createFunctionNameHierarchy(std::wstring ret, std::wstring name, std::wstring parameters) const { NameHierarchy nameHierarchy = createNameHierarchy(name); - std::wstring lastName = nameHierarchy.back()->getName(); + std::wstring lastName = nameHierarchy.back().getName(); nameHierarchy.pop(); - nameHierarchy.push(std::make_shared(lastName, ret, parameters)); + nameHierarchy.push(NameElement(lastName, ret, parameters)); return nameHierarchy; } @@ -276,7 +276,7 @@ private: NameHierarchy nameHierarchy(NAME_DELIMITER_CXX); for (std::wstring element: utility::splitToVector(s, nameDelimiterTypeToString(NAME_DELIMITER_CXX))) { - nameHierarchy.push(std::make_shared(element)); + nameHierarchy.push(element); } return nameHierarchy; }