[vlc-commits] dash: Node: Avoiding lots of copies

Hugo Beauzée-Luyssen git at videolan.org
Thu Nov 24 18:14:57 CET 2011


vlc | branch: master | Hugo Beauzée-Luyssen <beauze.h at gmail.com> | Thu Nov 24 17:26:00 2011 +0100| [d6576e6af2472d48bfb36966e29d36bfb74b64ee] | committer: Rémi Denis-Courmont

dash: Node: Avoiding lots of copies

Signed-off-by: Rémi Denis-Courmont <remi at remlab.net>

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=d6576e6af2472d48bfb36966e29d36bfb74b64ee
---

 modules/stream_filter/dash/xml/Node.cpp |   32 ++++++++++++++++++++----------
 modules/stream_filter/dash/xml/Node.h   |   19 +++++++++--------
 2 files changed, 31 insertions(+), 20 deletions(-)

diff --git a/modules/stream_filter/dash/xml/Node.cpp b/modules/stream_filter/dash/xml/Node.cpp
index 3f2b549..fe8c4ca 100644
--- a/modules/stream_filter/dash/xml/Node.cpp
+++ b/modules/stream_filter/dash/xml/Node.cpp
@@ -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;
 }
diff --git a/modules/stream_filter/dash/xml/Node.h b/modules/stream_filter/dash/xml/Node.h
index 4a28c5f..e4973a5 100644
--- a/modules/stream_filter/dash/xml/Node.h
+++ b/modules/stream_filter/dash/xml/Node.h
@@ -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;



More information about the vlc-commits mailing list