data: performance optimization NameHierarchy
* For performance reasons nodes now store a serialized version of their name hierarchy directly. Removed NameHierarchy table from database.
This commit is contained in:
@@ -1,5 +1,40 @@
|
||||
#include "data/name/NameHierarchy.h"
|
||||
|
||||
#include "utility/logging/logging.h"
|
||||
#include "utility/utilityString.h"
|
||||
|
||||
std::string NameHierarchy::serialize(NameHierarchy nameHierarchy)
|
||||
{
|
||||
std::string serializedName = "";
|
||||
for (size_t i = 0; i < nameHierarchy.size(); i++)
|
||||
{
|
||||
serializedName += nameHierarchy[i]->getFullName() + "\t";
|
||||
serializedName += nameHierarchy[i]->getFullSignature();
|
||||
if (i + 1 < nameHierarchy.size())
|
||||
serializedName += "\n";
|
||||
}
|
||||
return serializedName;
|
||||
}
|
||||
|
||||
NameHierarchy NameHierarchy::deserialize(const std::string& serializedName)
|
||||
{
|
||||
NameHierarchy nameHierarchy;
|
||||
|
||||
std::vector<std::string> serializedNameElements = utility::splitToVector(serializedName, "\n");
|
||||
for (size_t i = 0; i < serializedNameElements.size(); i++)
|
||||
{
|
||||
std::vector<std::string> nameParts = utility::splitToVector(serializedNameElements[i], "\t");
|
||||
if (nameParts.size() != 2)
|
||||
{
|
||||
LOG_ERROR("unable to deserialize name hierarchy: " + serializedName); // todo: obfuscate serializedName!
|
||||
return NameHierarchy();
|
||||
}
|
||||
nameHierarchy.push(std::make_shared<NameElement>(nameParts[0], nameParts[1]));
|
||||
}
|
||||
|
||||
return nameHierarchy;
|
||||
}
|
||||
|
||||
NameHierarchy::NameHierarchy()
|
||||
{
|
||||
}
|
||||
@@ -25,7 +60,11 @@ void NameHierarchy::pop()
|
||||
|
||||
std::shared_ptr<NameElement> NameHierarchy::back() const
|
||||
{
|
||||
return m_elements.back();
|
||||
if (m_elements.size() > 0)
|
||||
{
|
||||
return m_elements.back();
|
||||
}
|
||||
return std::shared_ptr<NameElement>();
|
||||
}
|
||||
|
||||
std::shared_ptr<NameElement> NameHierarchy::operator[](size_t pos) const
|
||||
|
||||
@@ -10,6 +10,9 @@
|
||||
class NameHierarchy
|
||||
{
|
||||
public:
|
||||
static std::string serialize(NameHierarchy nameHierarchy);
|
||||
static NameHierarchy deserialize(const std::string& serializedName);
|
||||
|
||||
NameHierarchy();
|
||||
NameHierarchy(const std::string& name);
|
||||
~NameHierarchy();
|
||||
|
||||
Reference in New Issue
Block a user