Commit d6576e6a authored by Hugo Beauzée-Luyssen's avatar Hugo Beauzée-Luyssen Committed by Rémi Denis-Courmont

dash: Node: Avoiding lots of copies

Signed-off-by: default avatarRémi Denis-Courmont <remi@remlab.net>
parent 1086074c
...@@ -29,6 +29,8 @@ ...@@ -29,6 +29,8 @@
using namespace dash::xml; using namespace dash::xml;
const std::string Node::EmptyString = "";
Node::Node () Node::Node ()
{ {
} }
...@@ -38,7 +40,7 @@ Node::~Node () ...@@ -38,7 +40,7 @@ Node::~Node ()
delete(this->subNodes.at(i)); delete(this->subNodes.at(i));
} }
std::vector<Node*> Node::getSubNodes () const std::vector<Node*>& Node::getSubNodes () const
{ {
return this->subNodes; return this->subNodes;
} }
...@@ -46,23 +48,29 @@ void Node::addSubNode (Node *node) ...@@ -46,23 +48,29 @@ void Node::addSubNode (Node *node)
{ {
this->subNodes.push_back(node); this->subNodes.push_back(node);
} }
std::string Node::getName () const std::string& Node::getName () const
{ {
return this->name; return this->name;
} }
void Node::setName (std::string name) void Node::setName (const std::string& name)
{ {
this->name = name; this->name = name;
} }
std::string Node::getAttributeValue (std::string key)
const std::string& Node::getAttributeValue (const std::string& key) const
{ {
return this->attributes[key]; std::map<std::string, std::string>::const_iterator it = this->attributes.find( key );
if ( it != this->attributes.end() )
return it->second;
return EmptyString;
} }
void Node::addAttribute (std::string key, std::string value)
void Node::addAttribute ( const std::string& key, const std::string& value)
{ {
this->attributes[key] = value; this->attributes[key] = value;
} }
std::vector<std::string> Node::getAttributeKeys () std::vector<std::string> Node::getAttributeKeys () const
{ {
std::vector<std::string> keys; std::vector<std::string> keys;
std::map<std::string, std::string>::const_iterator it; std::map<std::string, std::string>::const_iterator it;
...@@ -73,15 +81,17 @@ std::vector<std::string> Node::getAttributeKeys () ...@@ -73,15 +81,17 @@ std::vector<std::string> Node::getAttributeKeys ()
} }
return keys; return keys;
} }
bool Node::hasText ()
bool Node::hasText () const
{ {
return false; return false;
} }
std::string Node::getText ()
const std::string& Node::getText () const
{ {
return ""; return EmptyString;
} }
std::map<std::string,std::string> Node::getAttributes () const std::map<std::string,std::string>& Node::getAttributes () const
{ {
return this->attributes; return this->attributes;
} }
...@@ -40,18 +40,19 @@ namespace dash ...@@ -40,18 +40,19 @@ namespace dash
Node (); Node ();
virtual ~Node (); virtual ~Node ();
std::vector<Node *> getSubNodes (); const std::vector<Node *>& getSubNodes () const;
void addSubNode (Node *node); void addSubNode (Node *node);
std::string getName (); const std::string& getName () const;
void setName (std::string name); void setName (const std::string& name);
void addAttribute (std::string key, std::string value); void addAttribute (const std::string& key, const std::string& value);
std::string getAttributeValue (std::string key); const std::string& getAttributeValue (const std::string& key) const;
std::vector<std::string> getAttributeKeys (); std::vector<std::string> getAttributeKeys () const;
bool hasText (); bool hasText () const;
std::string getText (); const std::string& getText () const;
std::map<std::string, std::string> getAttributes (); const std::map<std::string, std::string>& getAttributes () const;
private: private:
static const std::string EmptyString;
std::vector<Node *> subNodes; std::vector<Node *> subNodes;
std::map<std::string, std::string> attributes; std::map<std::string, std::string> attributes;
std::string name; std::string name;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment