Robotics Library  0.6.2
Attribute.h
Go to the documentation of this file.
1 //
2 // Copyright (c) 2009, Markus Rickert
3 // All rights reserved.
4 //
5 // Redistribution and use in source and binary forms, with or without
6 // modification, are permitted provided that the following conditions are met:
7 //
8 // * Redistributions of source code must retain the above copyright notice,
9 // this list of conditions and the following disclaimer.
10 // * Redistributions in binary form must reproduce the above copyright notice,
11 // this list of conditions and the following disclaimer in the documentation
12 // and/or other materials provided with the distribution.
13 //
14 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
15 // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17 // ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
18 // LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
19 // CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
20 // SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
21 // INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
22 // CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
23 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
24 // POSSIBILITY OF SUCH DAMAGE.
25 //
26 
27 #ifndef _RL_XML_ATTRIBUTE_H_
28 #define _RL_XML_ATTRIBUTE_H_
29 
30 #include <string>
31 #include <boost/shared_array.hpp>
32 #include <libxml/parser.h>
33 
34 namespace rl
35 {
36  namespace xml
37  {
38  class Attribute
39  {
40  public:
41  Attribute(xmlAttrPtr attr) :
42  attr(attr)
43  {
44  }
45 
46  Attribute(xmlNodePtr node, const ::std::string& name, const ::std::string& value) :
47  attr(
48  xmlNewProp(
49  node,
50  reinterpret_cast< const xmlChar* >(name.c_str()),
51  reinterpret_cast< const xmlChar* >(value.c_str())
52  )
53  )
54  {
55  }
56 
57  virtual ~Attribute()
58  {
59  if (NULL == this->attr->doc)
60  {
61  xmlFreeProp(this->attr);
62  }
63  }
64 
65  ::std::string getValue() const
66  {
67  ::boost::shared_array< xmlChar > value(
68  xmlGetProp(
69  this->attr->parent,
70  this->attr->name
71  ),
72  xmlFree
73  );
74 
75  return reinterpret_cast< char* >(value.get());
76  }
77 
78  xmlAttrPtr operator()() const
79  {
80  return this->attr;
81  }
82 
83  void remove()
84  {
85  xmlRemoveProp(this->attr);
86  }
87 
88  void setValue(const ::std::string& value)
89  {
90  xmlSetProp(
91  this->attr->parent,
92  this->attr->name,
93  reinterpret_cast< const xmlChar* >(value.c_str())
94  );
95  }
96 
97  protected:
98 
99  private:
100  xmlAttrPtr attr;
101  };
102  }
103 }
104 
105 #endif // _RL_XML_ATTRIBUTE_H_
rl::xml::Attribute::getValue
::std::string getValue() const
Definition: Attribute.h:65
rl::xml::Attribute::Attribute
Attribute(xmlNodePtr node, const ::std::string &name, const ::std::string &value)
Definition: Attribute.h:46
rl::xml::Attribute
Definition: Attribute.h:39
rl::xml::Attribute::setValue
void setValue(const ::std::string &value)
Definition: Attribute.h:88
rl::xml::Attribute::remove
void remove()
Definition: Attribute.h:83
rl::xml::Attribute::Attribute
Attribute(xmlAttrPtr attr)
Definition: Attribute.h:41
rl::xml::Attribute::operator()
xmlAttrPtr operator()() const
Definition: Attribute.h:78
rl::xml::Attribute::~Attribute
virtual ~Attribute()
Definition: Attribute.h:57
rl::xml::Attribute::attr
xmlAttrPtr attr
Definition: Attribute.h:100
rl
Definition: Ati.cpp:35