21 #include "Internal.hpp"
40 ctx = ly_ctx_new(search_dir, options);
42 check_libyang_error(
nullptr);
44 deleter = std::make_shared<Deleter>(ctx);
47 ctx = ly_ctx_new_ylpath(search_dir, path, format, options);
49 check_libyang_error(
nullptr);
51 deleter = std::make_shared<Deleter>(ctx);
54 ctx = ly_ctx_new_ylmem(search_dir, data, format, options);
56 check_libyang_error(
nullptr);
58 deleter = std::make_shared<Deleter>(ctx);
62 int ret = ly_ctx_set_searchdir(ctx, search_dir);
64 check_libyang_error(ctx);
69 struct lyd_node *new_node = ly_ctx_info(ctx);
71 check_libyang_error(ctx);
75 S_Deleter new_deleter = std::make_shared<Deleter>(new_node, deleter);
76 return std::make_shared<Data_Node>(new_node, new_deleter);
80 return module ? std::make_shared<Module>((
lys_module *) module, deleter) :
nullptr;
83 const struct lys_module *new_module = ly_ctx_get_module_older(
ctx, module->module);
84 return new_module ? std::make_shared<Module>((
lys_module *) new_module, deleter) :
nullptr;
89 check_libyang_error(
ctx);
91 return module ? std::make_shared<Module>((
lys_module *) module, deleter) :
nullptr;
95 return module ? std::make_shared<Module>((
lys_module *) module, deleter) :
nullptr;
101 std::vector<S_Module> s_vector;
103 while ((mod = ly_ctx_get_module_iter(
ctx, &i))) {
104 if (mod ==
nullptr) {
107 s_vector.push_back(std::make_shared<Module>((
lys_module *) mod, deleter));
116 std::vector<S_Module> s_vector;
118 while ((mod = ly_ctx_get_disabled_module_iter(
ctx, &i))) {
119 if (mod ==
nullptr) {
122 s_vector.push_back(std::make_shared<Module>((
lys_module *) mod, deleter));
128 return ly_ctx_clean(
ctx,
nullptr);
131 std::vector<std::string> s_vector;
132 const char *
const *
data = ly_ctx_get_searchdirs(
ctx);
139 if (
data[size] ==
nullptr) {
142 s_vector.push_back(std::string(
data[size]));
148 S_Submodule
Context::get_submodule(
const char *module,
const char *revision,
const char *submodule,
const char *sub_revision) {
151 tmp_submodule = ly_ctx_get_submodule(
ctx, module, revision, submodule, sub_revision);
153 return tmp_submodule ? std::make_shared<Submodule>((
struct lys_submodule *) tmp_submodule, deleter) :
nullptr;
158 tmp_submodule = ly_ctx_get_submodule2(main_module->module, submodule);
160 return tmp_submodule ? std::make_shared<Submodule>((
struct lys_submodule *) tmp_submodule, deleter) :
nullptr;
163 const struct lys_node *node =
nullptr;
165 node = ly_ctx_get_node(ctx, start ? start->node : NULL, data_path, output);
167 return node ? std::make_shared<Schema_Node>((
struct lys_node *) node, deleter) :
nullptr;
170 struct ly_set *set = ly_ctx_find_path(ctx, schema_path);
175 S_Deleter new_deleter = std::make_shared<Deleter>(set, deleter);
176 return std::make_shared<Set>(set, new_deleter);
179 std::vector<S_Schema_Node> s_vector;
183 for (i = 0; i < ctx->models.used; i++) {
184 while ((iter = (
struct lys_node *)
lys_getnext(iter, NULL, ctx->models.list[i], options))) {
185 s_vector.push_back(std::make_shared<Schema_Node>(iter, deleter));
192 struct lyd_node *new_node =
nullptr;
196 check_libyang_error(ctx);
200 S_Deleter new_deleter = std::make_shared<Deleter>(new_node, deleter);
201 return std::make_shared<Data_Node>(new_node, new_deleter);
204 struct lyd_node *new_node =
nullptr;
206 new_node =
lyd_parse_fd(ctx, fd, format, options, NULL);
208 check_libyang_error(ctx);
212 S_Deleter new_deleter = std::make_shared<Deleter>(new_node, deleter);
213 return std::make_shared<Data_Node>(new_node, new_deleter);
221 check_libyang_error(
ctx);
225 S_Deleter new_deleter = std::make_shared<Deleter>(module, deleter);
226 return std::make_shared<Module>(module, new_deleter);
233 check_libyang_error(
ctx);
237 S_Deleter new_deleter = std::make_shared<Deleter>(module, deleter);
238 return std::make_shared<Module>(module, new_deleter);
245 check_libyang_error(
ctx);
249 S_Deleter new_deleter = std::make_shared<Deleter>(module, deleter);
250 return std::make_shared<Module>(module, new_deleter);
253 struct lyd_node *new_node =
nullptr;
257 check_libyang_error(ctx);
261 S_Deleter new_deleter = std::make_shared<Deleter>(new_node, deleter);
262 return std::make_shared<Data_Node>(new_node, new_deleter);
265 struct lyd_node *new_node =
nullptr;
268 throw std::invalid_argument(
"Elem can not be empty");
273 check_libyang_error(ctx);
277 S_Deleter new_deleter = std::make_shared<Deleter>(new_node, deleter);
278 return std::make_shared<Data_Node>(new_node, new_deleter);
286 mod_missing_cb.emplace_back(std::move(callback), std::move(deleter));
289 const char*
Context::cpp_mod_missing_cb(
const char *mod_name,
const char *mod_rev,
const char *submod_name,
const char *sub_rev,
void *user_data,
LYS_INFORMAT *format,
void (**free_module_data)(
void*,
void*))
293 const auto &cb = x.first;
294 auto ret = cb(mod_name, mod_rev, submod_name, sub_rev);
296 *format = ret.format;
303 if (ly_errno != LY_SUCCESS) {
325 std::vector<S_Error> s_vector;
330 struct ly_err_item *first_eitem = ly_err_first(context->ctx);
335 struct ly_err_item *eitem = first_eitem;
337 s_vector.push_back(std::make_shared<Error>(eitem));
346 return ly_log_options(options);
351 return ly_verb(level);
355 struct ly_set *set_new = ly_set_new();
357 check_libyang_error(
nullptr);
361 deleter = std::make_shared<Deleter>(set_new);
369 std::vector<S_Data_Node> s_vector;
372 for (i = 0; i < set->number; i++){
373 s_vector.push_back(std::make_shared<Data_Node>(set->set.d[i], deleter));
379 std::vector<S_Schema_Node> s_vector;
382 for (i = 0; i < set->number; i++){
383 s_vector.push_back(std::make_shared<Schema_Node>(set->set.s[i], deleter));
389 ly_set *new_set = ly_set_dup(set);
394 auto deleter = std::make_shared<Deleter>(new_set);
395 return std::make_shared<Set>(new_set, deleter);
399 throw std::invalid_argument(
"Node can not be empty");
401 return ly_set_add(set, (
void *) node->node, options);
405 throw std::invalid_argument(
"Node can not be empty");
407 return ly_set_add(set, (
void *) node->node, options);
413 return ly_set_contains(set, (
void *) node->node);
419 return ly_set_contains(set, (
void *) node->node);
422 return ly_set_clean(set);
426 throw std::invalid_argument(
"Node can not be empty");
428 return ly_set_rm(set, (
void *) node->node);
432 throw std::invalid_argument(
"Node can not be empty");
434 return ly_set_rm(set, (
void *) node->node);
437 return ly_set_rm_index(set, index);
442 return new_ctx ? std::make_shared<Context>(new_ctx,
nullptr) :
nullptr;