Implement SysrepoAccess

The class is currently only able to set leaf values and create and
delete presence containers.

Change-Id: I3b187fa359a766a7bec2da5772e50ebb6bde7b15
diff --git a/src/sysrepo_access.cpp b/src/sysrepo_access.cpp
new file mode 100644
index 0000000..f7799b0
--- /dev/null
+++ b/src/sysrepo_access.cpp
@@ -0,0 +1,79 @@
+/*
+ * Copyright (C) 2018 CESNET, https://photonics.cesnet.cz/
+ * Copyright (C) 2018 FIT CVUT, https://fit.cvut.cz/
+ *
+ * Written by Václav Kubernát <kubervac@fit.cvut.cz>
+ *
+*/
+
+#include <sysrepo-cpp/Session.h>
+#include "sysrepo_access.hpp"
+
+
+struct valFromValue : boost::static_visitor<S_Val> {
+    S_Val operator()(const enum_& value) const
+    {
+        return std::make_shared<Val>(value.m_value.c_str(), SR_ENUM_T);
+    }
+
+    S_Val operator()(const std::string& value) const
+    {
+        return std::make_shared<Val>(value.c_str());
+    }
+
+    S_Val operator()(const uint32_t& value) const
+    {
+        return std::make_shared<Val>(value, SR_UINT32_T);
+    }
+
+    S_Val operator()(const int32_t& value) const
+    {
+        return std::make_shared<Val>(value, SR_INT32_T);
+    }
+
+    S_Val operator()(const bool& value) const
+    {
+        return std::make_shared<Val>(value, SR_BOOL_T);
+    }
+
+    S_Val operator()(const double& value) const
+    {
+        return std::make_shared<Val>(value);
+    }
+};
+
+SysrepoAccess::~SysrepoAccess()
+{
+    m_session->commit();
+}
+
+SysrepoAccess::SysrepoAccess(const std::string& appname)
+    : m_connection(new Connection(appname.c_str()))
+{
+    m_session = std::make_shared<Session>(m_connection);
+}
+
+std::map<std::string, leaf_data_> SysrepoAccess::getItems(const std::string& path)
+{
+    std::map<std::string, leaf_data_> res;
+    auto iterator = m_session->get_items_iter(path.c_str());
+
+    // TODO: implement this (and make use of it somehow)
+
+    return res;
+}
+
+void SysrepoAccess::setLeaf(const std::string& path, leaf_data_ value)
+{
+    m_session->set_item(path.c_str(), boost::apply_visitor(valFromValue(), value));
+}
+
+void SysrepoAccess::createPresenceContainer(const std::string& path)
+{
+    m_session->set_item(path.c_str());
+}
+
+void SysrepoAccess::deletePresenceContainer(const std::string& path)
+{
+    m_session->delete_item(path.c_str());
+}