21 static Value mkCopy(EP value) {
return (Value(value,
false)); }
24 static Value mkShare(EP value) {
return (Value(value,
true)); }
28 EP
get()
const {
return (value_); }
32 bool isShared()
const {
return (shared_); }
38 Value(EP value,
bool shared) : value_(value), shared_(shared) { }
54 Value<EP> moveComments1(EP element) {
55 bool modified =
false;
60 typedef std::vector<ElementPtr> ListType;
61 const ListType& list = element->listValue();
62 for (ListType::const_iterator it = list.cbegin();
63 it != list.cend(); ++it) {
64 Value<ElementPtr> item = moveComments1(*it);
65 result->add(item.get());
66 if (!item.isShared()) {
71 return (Value<EP>::mkShare(element));
73 return (Value<EP>::mkCopy(result));
76 return (Value<EP>::mkShare(element));
81 bool has_comment =
false;
82 typedef std::map<std::string, ConstElementPtr> map_type;
83 const map_type& map = element->mapValue();
84 for (map_type::const_iterator it = map.cbegin(); it != map.cend(); ++it) {
85 if (it->first ==
"comment") {
88 }
else if (it->first ==
"user-context") {
90 result->set(
"user-context", it->second);
93 Value<ConstElementPtr> item = moveComments1(it->second);
94 result->set(it->first, item.get());
95 if (!item.isShared()) {
101 if (!has_comment && !modified) {
102 return (Value<EP>::mkShare(element));
109 moved->set(
"comment", comment);
113 merge(moved, previous);
115 result->set(
"user-context", moved);
118 return (Value<EP>::mkCopy(result));
127 Value<ElementPtr> result = moveComments1(element);
128 return (result.get());
132 Value<ConstElementPtr> result = moveComments1(element);
133 return (result.get());
boost::shared_ptr< Element > ElementPtr
static ElementPtr createMap(const Position &pos=ZERO_POSITION())
Creates an empty MapElement type ElementPtr.
boost::shared_ptr< const Element > ConstElementPtr
Defines the logger used by the top-level component of kea-dhcp-ddns.
void merge(ElementPtr element, ConstElementPtr other)
Merges the data from other into element.
ConstElementPtr moveComments(ConstElementPtr element)
Move comment entries to user-context (const variant)