libyang 1.0.184
YANG data modeling language library
Loading...
Searching...
No Matches
Tree_Data.hpp
Go to the documentation of this file.
1
14
15#ifndef LIBYANG_CPP_TREE_DATA_H
16#define LIBYANG_CPP_TREE_DATA_H
17
18#include <iostream>
19#include <memory>
20#include <exception>
21#include <vector>
22
23#include "Internal.hpp"
24#include "Tree_Schema.hpp"
25
26extern "C" {
27#include "libyang.h"
28#include "tree_data.h"
29}
30
31namespace libyang {
32
39
41{
42 int64_t value;
43 uint8_t digits;
44};
45
50class Value
51{
52public:
54 Value(lyd_val value, LY_DATA_TYPE* value_type, uint8_t value_flags, struct lys_type *type, S_Deleter deleter);
55 ~Value();
57 const char *binary() {return LY_TYPE_BINARY == value_type ? value.binary : throw "wrong type";};
59 std::vector<S_Type_Bit> bit();
61 int8_t bln() {return LY_TYPE_BOOL == value_type ? value.bln : throw "wrong type";};
63 Decimal64 dec64() {return LY_TYPE_DEC64 == value_type ? Decimal64{ value.dec64, type->info.dec64.dig } : throw "wrong type";};
65 S_Type_Enum enm() {return LY_TYPE_ENUM == value_type ? std::make_shared<Type_Enum>(value.enm, deleter) : throw "wrong type";};
67 S_Ident ident() {return LY_TYPE_IDENT == value_type ? std::make_shared<Ident>(value.ident, deleter) : throw "wrong type";};
69 S_Data_Node instance();
71 int8_t int8() {return LY_TYPE_INT8 == value_type ? value.int8 : throw "wrong type";};
73 int16_t int16() {return LY_TYPE_INT16 == value_type ? value.int16 : throw "wrong type";};
75 int32_t int32() {return LY_TYPE_INT32 == value_type ? value.int32 : throw "wrong type";};
77 int64_t int64() {return LY_TYPE_INT64 == value_type ? value.int64 : throw "wrong type";};
79 S_Data_Node leafref();
81 const char *string() {return LY_TYPE_STRING == value_type ? value.string : throw "wrong type";};
83 uint8_t uint8() {return LY_TYPE_UINT8 == value_type ? value.uint8 : throw "wrong type";};
85 uint16_t uint16() {return LY_TYPE_UINT16 == value_type ? value.uint16 : throw "wrong type";};
87 uint32_t uint32() {return LY_TYPE_UINT32 == value_type ? value.uint32 : throw "wrong type";};
89 uint64_t uint64() {return LY_TYPE_UINT64 == value_type ? value.uint64 : throw "wrong type";};
90
91private:
92 lyd_val value;
93 LY_DATA_TYPE value_type;
94 uint8_t value_flags;
95 struct lys_type *type;
96 S_Deleter deleter;
97};
98
104{
105public:
107 Data_Node(struct lyd_node *node, S_Deleter deleter = nullptr);
109 Data_Node(S_Data_Node parent, S_Module module, const char *name);
111 Data_Node(S_Data_Node parent, S_Module module, const char *name, const char *val_str);
113 Data_Node(S_Data_Node parent, S_Module module, const char *name, const char *value, LYD_ANYDATA_VALUETYPE value_type);
115 Data_Node(S_Data_Node parent, S_Module module, const char *name, S_Data_Node value);
117 Data_Node(S_Data_Node parent, S_Module module, const char *name, S_Xml_Elem value);
119 Data_Node(S_Context context, const char *path, const char *value, LYD_ANYDATA_VALUETYPE value_type, int options);
121 Data_Node(S_Context context, const char *path, S_Data_Node value, int options);
123 Data_Node(S_Context context, const char *path, S_Xml_Elem value, int options);
124 //TODO
125 //struct lyd_node *lyd_new_output(struct lyd_node *parent, const struct lys_module *module, const char *name);
126 //struct lyd_node *lyd_new_output_leaf(struct lyd_node *parent, const struct lys_module *module, const char *name,
127 // const char *val_str);
128 //struct lyd_node *lyd_new_output_leaf(struct lyd_node *parent, const struct lys_module *module, const char *name,
129 // void *value, LYD_ANYDATA_VALUETYPE value_type);
130 virtual ~Data_Node();
132 S_Schema_Node schema() LY_NEW(node, schema, Schema_Node);
134 uint8_t validity() {return node->validity;};
136 uint8_t dflt() {return node->dflt;};
138 uint8_t when_status() {return node->when_status;};
140 S_Attr attr();
142 S_Data_Node next() LY_NEW(node, next, Data_Node);
144 S_Data_Node prev() LY_NEW(node, prev, Data_Node);
146 S_Data_Node parent() LY_NEW(node, parent, Data_Node);
148 virtual S_Data_Node child() LY_NEW(node, child, Data_Node);
149
150 /* functions */
152 std::string path();
154 S_Data_Node dup(int recursive);
156 S_Data_Node dup_withsiblings(int recursive);
158 S_Data_Node dup_to_ctx(int recursive, S_Context context);
160 int merge(S_Data_Node source, int options);
162 int merge_to_ctx(S_Data_Node source, int options, S_Context context);
164 int insert(S_Data_Node new_node);
166 int insert_sibling(S_Data_Node new_node);
168 int insert_before(S_Data_Node new_node);
170 int insert_after(S_Data_Node new_node);
172 int schema_sort(int recursive);
174 S_Set find_path(const char *expr);
176 S_Set find_instance(S_Schema_Node schema);
178 S_Data_Node first_sibling();
180 int validate(int options, S_Context var_arg);
182 int validate(int options, S_Data_Node var_arg);
184 int validate_value(const char *value);
186 S_Difflist diff(S_Data_Node second, int options);
188 S_Data_Node new_path(S_Context ctx, const char *path, const char *value, LYD_ANYDATA_VALUETYPE value_type, int options);
190 S_Data_Node new_path(S_Context ctx, const char *path, S_Data_Node value, int options);
192 S_Data_Node new_path(S_Context ctx, const char *path, S_Xml_Elem value, int options);
194 unsigned int list_pos();
196 int unlink();
198 S_Attr insert_attr(S_Module module, const char *name, const char *value);
200 S_Module node_module();
202 std::string print_mem(LYD_FORMAT format, int options);
203
204 /* emulate TREE macro's */
206 std::vector<S_Data_Node> tree_for();
208 std::vector<S_Data_Node> tree_dfs();
209
211 struct lyd_node *swig_node() {return node;};
213 S_Deleter swig_deleter() {return deleter;};
214
215 friend Set;
218
220 struct lyd_node *C_lyd_node() {return node;};
221
222private:
223 struct lyd_node *node;
224 S_Deleter deleter;
225};
226
227S_Data_Node create_new_Data_Node(struct lyd_node *node);
228
234{
235public:
237 Data_Node_Leaf_List(S_Data_Node derived);
239 Data_Node_Leaf_List(struct lyd_node *node, S_Deleter deleter = nullptr);
242 const char *value_str() {return ((struct lyd_node_leaf_list *) node)->value_str;};
244 S_Value value();
246 LY_DATA_TYPE value_type() {return ((struct lyd_node_leaf_list *) node)->value_type;};
248 S_Data_Node child() {return nullptr;};
249
250 /* functions */
252 int change_leaf(const char *val_str);
254 int wd_default();
256 S_Type leaf_type();
257
258private:
259 struct lyd_node *node;
260 S_Deleter deleter;
261};
262
268{
269public:
271 Data_Node_Anydata(S_Data_Node derived);
273 Data_Node_Anydata(struct lyd_node *node, S_Deleter deleter = nullptr);
276 LYD_ANYDATA_VALUETYPE value_type() {return ((struct lyd_node_anydata *) node)->value_type;};
278 lyd_anydata_value value() {return ((struct lyd_node_anydata *) node)->value;};
280 S_Data_Node child() {return nullptr;};
281
282private:
283 struct lyd_node *node;
284 S_Deleter deleter;
285};
286
291class Attr
292{
293public:
295 Attr(struct lyd_attr *attr, S_Deleter deleter = nullptr);
296 ~Attr();
298 S_Data_Node parent() LY_NEW(attr, parent, Data_Node);
300 S_Attr next();
301 //struct lys_ext_instance_complex *annotation
303 const char *name() {return attr->name;};
305 const char *value_str() {return attr->value_str;};
307 S_Value value();
309 LY_DATA_TYPE value_type() {return attr->value_type;};
310private:
311 struct lyd_attr *attr;
312 S_Deleter deleter;
313};
314
320{
321public:
323 Difflist(struct lyd_difflist *diff, S_Deleter deleter);
324 ~Difflist();
326 LYD_DIFFTYPE *type() {return diff->type;};
328 std::vector<S_Data_Node> first();
330 std::vector<S_Data_Node> second();
331
332private:
333 struct lyd_difflist *diff;
334 S_Deleter deleter;
335};
336
338
339}
340
341#endif
Class implementation for libyang C header tree_schema.h.
S_Attr next()
const char * name()
LY_DATA_TYPE value_type()
S_Data_Node parent()
Attr(struct lyd_attr *attr, S_Deleter deleter=nullptr)
S_Value value()
const char * value_str()
LYD_ANYDATA_VALUETYPE value_type()
Data_Node_Anydata(S_Data_Node derived)
lyd_anydata_value value()
Data_Node_Leaf_List(S_Data_Node derived)
int change_leaf(const char *val_str)
classes for wrapping lyd_node.
S_Data_Node prev()
unsigned int list_pos()
S_Data_Node first_sibling()
std::string print_mem(LYD_FORMAT format, int options)
virtual S_Data_Node child()
S_Attr insert_attr(S_Module module, const char *name, const char *value)
S_Set find_path(const char *expr)
int insert(S_Data_Node new_node)
Data_Node(struct lyd_node *node, S_Deleter deleter=nullptr)
Definition Tree_Data.cpp:68
std::vector< S_Data_Node > tree_for()
S_Data_Node new_path(S_Context ctx, const char *path, const char *value, LYD_ANYDATA_VALUETYPE value_type, int options)
uint8_t when_status()
S_Data_Node next()
int insert_after(S_Data_Node new_node)
S_Data_Node parent()
S_Data_Node dup_withsiblings(int recursive)
S_Deleter swig_deleter()
S_Data_Node dup(int recursive)
std::vector< S_Data_Node > tree_dfs()
struct lyd_node * C_lyd_node()
int insert_sibling(S_Data_Node new_node)
int schema_sort(int recursive)
int merge_to_ctx(S_Data_Node source, int options, S_Context context)
int validate_value(const char *value)
struct lyd_node * swig_node()
S_Schema_Node schema()
int validate(int options, S_Context var_arg)
S_Module node_module()
S_Set find_instance(S_Schema_Node schema)
S_Data_Node dup_to_ctx(int recursive, S_Context context)
int merge(S_Data_Node source, int options)
S_Difflist diff(S_Data_Node second, int options)
int insert_before(S_Data_Node new_node)
std::string path()
LYD_DIFFTYPE * type()
std::vector< S_Data_Node > second()
std::vector< S_Data_Node > first()
Difflist(struct lyd_difflist *diff, S_Deleter deleter)
S_Data_Node instance()
Definition Tree_Data.cpp:55
uint32_t uint32()
Definition Tree_Data.hpp:87
uint16_t uint16()
Definition Tree_Data.hpp:85
Decimal64 dec64()
Definition Tree_Data.hpp:63
const char * binary()
Definition Tree_Data.hpp:57
int16_t int16()
Definition Tree_Data.hpp:73
int8_t int8()
Definition Tree_Data.hpp:71
uint8_t uint8()
Definition Tree_Data.hpp:83
uint64_t uint64()
Definition Tree_Data.hpp:89
int32_t int32()
Definition Tree_Data.hpp:75
S_Type_Enum enm()
Definition Tree_Data.hpp:65
Value(lyd_val value, LY_DATA_TYPE *value_type, uint8_t value_flags, struct lys_type *type, S_Deleter deleter)
Definition Tree_Data.cpp:33
std::vector< S_Type_Bit > bit()
Definition Tree_Data.cpp:41
const char * string()
Definition Tree_Data.hpp:81
int64_t int64()
Definition Tree_Data.hpp:77
S_Ident ident()
Definition Tree_Data.hpp:67
S_Data_Node leafref()
Definition Tree_Data.cpp:61
S_Data_Node create_new_Data_Node(struct lyd_node *node)
union lyd_value_u lyd_val
node's value representation
LYD_DIFFTYPE
list of possible types of differences in lyd_difflist
Definition tree_data.h:312
LYD_ANYDATA_VALUETYPE
List of possible value types stored in lyd_node_anydata.
Definition tree_data.h:50
LYD_FORMAT
Data input/output formats supported by libyang parser and printer functions.
Definition tree_data.h:40
Structure for the result of lyd_diff(), describing differences between two data trees.
Definition tree_data.h:355
Generic structure for a data node, directly applicable to the data nodes defined as LYS_CONTAINER,...
Definition tree_data.h:176
Structure for data nodes defined as LYS_ANYDATA or LYS_ANYXML.
Definition tree_data.h:278
Anydata value union.
Definition tree_data.h:262
LY_DATA_TYPE
YANG built-in types.
@ LY_TYPE_STRING
@ LY_TYPE_IDENT
@ LY_TYPE_UINT16
@ LY_TYPE_INT16
@ LY_TYPE_BOOL
@ LY_TYPE_INT32
@ LY_TYPE_ENUM
@ LY_TYPE_UINT8
@ LY_TYPE_BINARY
@ LY_TYPE_INT64
@ LY_TYPE_INT8
@ LY_TYPE_UINT64
@ LY_TYPE_DEC64
@ LY_TYPE_UINT32
YANG type structure providing information from the schema.
The main libyang public header.
Attribute structure.
Definition tree_data.h:128
Structure for data nodes defined as LYS_LEAF or LYS_LEAFLIST.
Definition tree_data.h:217
libyang representation of data trees.