Blame swig/cpp/src/Xml.cpp

Packit 8fb591
/**
Packit 8fb591
 * @file Xml.cpp
Packit 8fb591
 * @author Mislav Novakovic <mislav.novakovic@sartura.hr>
Packit 8fb591
 * @brief Implementation of header Xml.hpp
Packit 8fb591
 *
Packit 8fb591
 * Copyright (c) 2017 Deutsche Telekom AG.
Packit 8fb591
 *
Packit 8fb591
 * This source code is licensed under BSD 3-Clause License (the "License").
Packit 8fb591
 * You may not use this file except in compliance with the License.
Packit 8fb591
 * You may obtain a copy of the License at
Packit 8fb591
 *
Packit 8fb591
 *     https://opensource.org/licenses/BSD-3-Clause
Packit 8fb591
 */
Packit 8fb591
Packit 8fb591
#include <iostream>
Packit 8fb591
#include <memory>
Packit 8fb591
#include <stdexcept>
Packit 8fb591
#include <vector>
Packit 8fb591
Packit 8fb591
#include "Internal.hpp"
Packit 8fb591
#include "Xml.hpp"
Packit 8fb591
Packit 8fb591
extern "C" {
Packit 8fb591
#include "libyang.h"
Packit 8fb591
#include "xml.h"
Packit 8fb591
}
Packit 8fb591
Packit 8fb591
namespace libyang {
Packit 8fb591
Packit 8fb591
Xml_Ns::Xml_Ns(const struct lyxml_ns *ns, S_Deleter deleter):
Packit 8fb591
    ns((struct lyxml_ns *) ns),
Packit 8fb591
    deleter(deleter)
Packit 8fb591
{}
Packit 8fb591
Xml_Ns::~Xml_Ns() {}
Packit 8fb591
S_Xml_Ns Xml_Ns::next() LY_NEW(ns, next, Xml_Ns);
Packit 8fb591
Packit 8fb591
Xml_Attr::Xml_Attr(struct lyxml_attr *attr, S_Deleter deleter):
Packit 8fb591
    attr(attr),
Packit 8fb591
    deleter(deleter)
Packit 8fb591
{}
Packit 8fb591
Xml_Attr::~Xml_Attr() {}
Packit 8fb591
S_Xml_Attr Xml_Attr::next() LY_NEW(attr, next, Xml_Attr);
Packit 8fb591
S_Xml_Ns Xml_Attr::ns() LY_NEW(attr, ns, Xml_Ns);
Packit 8fb591
Packit 8fb591
Xml_Elem::Xml_Elem(S_Context context, struct lyxml_elem *elem, S_Deleter deleter):
Packit 8fb591
    context(context),
Packit 8fb591
    elem(elem),
Packit 8fb591
    deleter(deleter)
Packit 8fb591
{}
Packit 8fb591
Xml_Elem::~Xml_Elem() {}
Packit 8fb591
S_Xml_Elem Xml_Elem::parent() {return elem->parent ? std::make_shared<Xml_Elem>(context, elem->parent, deleter) : nullptr;}
Packit 8fb591
S_Xml_Attr Xml_Elem::attr() LY_NEW(elem, attr, Xml_Attr);
Packit 8fb591
S_Xml_Elem Xml_Elem::child() {return elem->child ? std::make_shared<Xml_Elem>(context, elem->child, deleter) : nullptr;}
Packit 8fb591
S_Xml_Elem Xml_Elem::next() {return elem->next ? std::make_shared<Xml_Elem>(context, elem->next, deleter) : nullptr;}
Packit 8fb591
S_Xml_Elem Xml_Elem::prev() {return elem->prev ? std::make_shared<Xml_Elem>(context, elem->prev, deleter) : nullptr;}
Packit 8fb591
S_Xml_Ns Xml_Elem::ns() LY_NEW(elem, ns, Xml_Ns);
Packit 8fb591
const char *Xml_Elem::get_attr(const char *name, const char *ns) {
Packit 8fb591
    return lyxml_get_attr(elem, name, ns);
Packit 8fb591
}
Packit 8fb591
S_Xml_Ns Xml_Elem::get_ns(const char *prefix) {
Packit 8fb591
    const struct lyxml_ns *ns = lyxml_get_ns(elem, prefix);
Packit 8fb591
    return elem->ns ? std::make_shared<Xml_Ns>((struct lyxml_ns *)ns, deleter) : nullptr;
Packit 8fb591
}
Packit 8fb591
std::string Xml_Elem::print_mem(int options) {
Packit 8fb591
    char *data = nullptr;
Packit 8fb591
Packit 8fb591
    lyxml_print_mem(&data, (const struct lyxml_elem *) elem, options);
Packit 8fb591
    if (!data) {
Packit 8fb591
        return nullptr;
Packit 8fb591
    }
Packit 8fb591
Packit 8fb591
    std::string s_data = data;
Packit 8fb591
    free(data);
Packit 8fb591
    return s_data;
Packit 8fb591
}
Packit 8fb591
Packit 8fb591
std::vector<S_Xml_Elem> Xml_Elem::tree_for() {
Packit 8fb591
    std::vector<S_Xml_Elem> s_vector;
Packit 8fb591
Packit 8fb591
    struct lyxml_elem *elem = nullptr;
Packit 8fb591
    LY_TREE_FOR(elem, elem) {
Packit 8fb591
        s_vector.push_back(std::make_shared<Xml_Elem>(context, elem, deleter));
Packit 8fb591
    }
Packit 8fb591
Packit 8fb591
    return s_vector;
Packit 8fb591
}
Packit 8fb591
std::vector<S_Xml_Elem> Xml_Elem::tree_dfs() {
Packit 8fb591
    std::vector<S_Xml_Elem> s_vector;
Packit 8fb591
Packit 8fb591
    struct lyxml_elem *elem = nullptr, *next = nullptr;
Packit 8fb591
    LY_TREE_DFS_BEGIN(elem, next, elem) {
Packit 8fb591
        s_vector.push_back(std::make_shared<Xml_Elem>(context, elem, deleter));
Packit 8fb591
        LY_TREE_DFS_END(elem, next, elem)
Packit 8fb591
    }
Packit 8fb591
Packit 8fb591
    return s_vector;
Packit 8fb591
}
Packit 8fb591
Packit 8fb591
}