]> git.sesse.net Git - vlc/commitdiff
dash: Node: Avoiding lots of copies
authorHugo Beauzée-Luyssen <beauze.h@gmail.com>
Thu, 24 Nov 2011 16:26:00 +0000 (17:26 +0100)
committerRémi Denis-Courmont <remi@remlab.net>
Thu, 24 Nov 2011 17:12:40 +0000 (19:12 +0200)
Signed-off-by: Rémi Denis-Courmont <remi@remlab.net>
modules/stream_filter/dash/xml/Node.cpp
modules/stream_filter/dash/xml/Node.h

index 3f2b5493f183083b66e72f73d0d30a0108341d79..fe8c4ca001b897e2dad5dd916deb32d39008bbe8 100644 (file)
@@ -29,6 +29,8 @@
 
 using namespace dash::xml;
 
+const std::string   Node::EmptyString = "";
+
 Node::Node  ()
 {
 }
@@ -38,7 +40,7 @@ Node::~Node ()
         delete(this->subNodes.at(i));
 }
 
-std::vector<Node*>                  Node::getSubNodes           ()
+const std::vector<Node*>&            Node::getSubNodes           () const
 {
     return this->subNodes;
 }
@@ -46,23 +48,29 @@ void                                Node::addSubNode            (Node *node)
 {
     this->subNodes.push_back(node);
 }
-std::string                         Node::getName               ()
+const std::string&                  Node::getName               () const
 {
     return this->name;
 }
-void                                Node::setName               (std::string name)
+void                                Node::setName               (const std::string& 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;
 }
-std::vector<std::string>            Node::getAttributeKeys      ()
+std::vector<std::string>            Node::getAttributeKeys      () const
 {
     std::vector<std::string> keys;
     std::map<std::string, std::string>::const_iterator it;
@@ -73,15 +81,17 @@ std::vector<std::string>            Node::getAttributeKeys      ()
     }
     return keys;
 }
-bool                                Node::hasText               ()
+
+bool                                Node::hasText               () const
 {
     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;
 }
index 4a28c5f93ffddb0deb521e6bd8cedd4901bba992..e4973a5e90726cf65f356484542487296c1bb527 100644 (file)
@@ -40,18 +40,19 @@ namespace dash
                 Node            ();
                 virtual ~Node   ();
 
-                std::vector<Node *>                 getSubNodes         ();
+                const std::vector<Node *>&          getSubNodes         () const;
                 void                                addSubNode          (Node *node);
-                std::string                         getName             ();
-                void                                setName             (std::string name);
-                void                                addAttribute        (std::string key, std::string value);
-                std::string                         getAttributeValue   (std::string key);
-                std::vector<std::string>            getAttributeKeys    ();
-                bool                                hasText             ();
-                std::string                         getText             ();
-                std::map<std::string, std::string>  getAttributes       ();
+                const std::string&                  getName             () const;
+                void                                setName             (const std::string& name);
+                void                                addAttribute        (const std::string& key, const std::string& value);
+                const std::string&                  getAttributeValue   (const std::string& key) const;
+                std::vector<std::string>            getAttributeKeys    () const;
+                bool                                hasText             () const;
+                const std::string&                  getText             () const;
+                const std::map<std::string, std::string>& getAttributes () const;
 
             private:
+                static const std::string            EmptyString;
                 std::vector<Node *>                 subNodes;
                 std::map<std::string, std::string>  attributes;
                 std::string                         name;