serialization: add interface for getting policies 44/199644/5
authorAdrian Szyndela <adrian.s@samsung.com>
Wed, 13 Feb 2019 14:10:14 +0000 (15:10 +0100)
committerHyotaek Shim <hyotaek.shim@samsung.com>
Thu, 7 Mar 2019 07:31:51 +0000 (07:31 +0000)
Serialization needs access to stored structures.
This introduces access functions on Db->Policy level.

Change-Id: I46b21886c6026a7f6de4741ba20f3a0f228a6cb1

src/internal/naive_policy_db.cpp
src/internal/naive_policy_db.hpp

index a727abd..dc67e41 100644 (file)
@@ -72,6 +72,9 @@ public:
                }
                return &(it->second);
        }
+
+       const std::map<uid_t, P> &getPoliciesUser() const { return user; }
+       const std::map<uid_t, P> &getPoliciesGroup() const { return group; }
 };
 
 /****************** NoUserAndGroupContext ************************/
@@ -129,6 +132,9 @@ public:
                }
        }
 
+       const P &getRefPolicyContextMandatory() const { return contextMandatory; }
+       const P &getRefPolicyContextDefault() const { return contextDefault; }
+
        const P *getPolicyContextMandatory() const {
                tslog::log("---policy_type = CONTEXT = MANDATORY\n");
                return &contextMandatory;
@@ -276,6 +282,9 @@ public:
                typedef decltype(field)::policy_type policy_type; \
                typedef decltype(field) policy_set_type; \
        }; \
+       template <>     struct NaivePolicyDb::NaivePolicyDbImpl::MatchPolicy<typename decltype(NaivePolicyDb::NaivePolicyDbImpl::field)::policy_type> { \
+               typedef decltype(field) policy_set_type; \
+       }; \
        template <> \
        auto NaivePolicyDb::NaivePolicyDbImpl::getPolicySet<T>() const -> decltype((field)) { \
                return field; \
@@ -283,6 +292,10 @@ public:
        template <> \
        auto NaivePolicyDb::NaivePolicyDbImpl::getPolicySet<T>() -> decltype((field)) { \
                return field; \
+       } \
+       template <> \
+       auto NaivePolicyDb::NaivePolicyDbImpl::getPolicySet<typename decltype(NaivePolicyDb::NaivePolicyDbImpl::field)::policy_type>() -> decltype((field)) { \
+               return field; \
        }
 
 DEF_GET_POLICY_SET(MatchItemOwn, m_own_set)
@@ -418,7 +431,28 @@ void NaivePolicyDb::clear() {
        pimpl = std::unique_ptr<NaivePolicyDbImpl>{new NaivePolicyDbImpl};
 }
 
-NaivePolicyDb::NaivePolicyDb() : pimpl{new NaivePolicyDbImpl} { }
+template <typename T>
+const T &NaivePolicyDb::getPolicyContextMandatory() const {
+       return pimpl->getPolicySet<T>().getRefPolicyContextMandatory();
+}
+
+template <typename T>
+const T &NaivePolicyDb::getPolicyContextDefault() const {
+       return pimpl->getPolicySet<T>().getRefPolicyContextDefault();
+}
+
+template <typename T>
+const std::map<uid_t, T> &NaivePolicyDb::getPoliciesUser() const {
+       return pimpl->getPolicySet<T>().getPoliciesUser();
+}
+
+template <typename T>
+const std::map<gid_t, T> &NaivePolicyDb::getPoliciesGroup() const {
+       return pimpl->getPolicySet<T>().getPoliciesGroup();
+}
+
+NaivePolicyDb::NaivePolicyDb() : pimpl{new NaivePolicyDbImpl} {
+}
 
 NaivePolicyDb::~NaivePolicyDb() = default;
 
@@ -450,8 +484,27 @@ T_INSTANTIATION3(ItemSend)
 T_INSTANTIATION3(ItemReceive)
 T_INSTANTIATION3(ItemAccess)
 
+#define T_INSTANTIATION4(T) \
+       template const T &NaivePolicyDb::getPolicyContextMandatory() const; \
+       template const T &NaivePolicyDb::getPolicyContextDefault() const;
+
+T_INSTANTIATION4(PolicyOwn)
+T_INSTANTIATION4(PolicySend)
+T_INSTANTIATION4(PolicyReceive)
+T_INSTANTIATION4(PolicyAccess)
+
+#define T_INSTANTIATION5(T) \
+       template const std::map<uid_t, T> &NaivePolicyDb::getPoliciesGroup() const; \
+       template const std::map<gid_t, T> &NaivePolicyDb::getPoliciesUser() const;
+
+T_INSTANTIATION5(PolicyOwn)
+T_INSTANTIATION5(PolicySend)
+T_INSTANTIATION5(PolicyReceive)
+
 #undef T_INSTANTIATION
 #undef T_INSTANTIATION2
 #undef T_INSTANTIATION3
+#undef T_INSTANTIATION4
+#undef T_INSTANTIATION5
 
 } // namespace ldp_xml_parser
index 52ca603..fe5f95f 100644 (file)
@@ -18,6 +18,8 @@
 
 #include <memory>
 #include <vector>
+#include <map>
+#include <sys/types.h>
 #include "policy.hpp"
 
 /**
@@ -67,6 +69,19 @@ namespace ldp_xml_parser
                                         T &item);
 
                void clear();
+
+               // The getPolicy*() methods are intended for Serializers to get
+               // access to policy structures.
+               // Supported template parameters are: PolicyOwn, PolicySend, PolicyReceive
+               // and for PolicyAccess only getPolicyContext*()
+               template <typename T>
+               const T &getPolicyContextMandatory() const;
+               template <typename T>
+               const T &getPolicyContextDefault() const;
+               template <typename T>
+               const std::map<uid_t, T> &getPoliciesUser() const;
+               template <typename T>
+               const std::map<gid_t, T> &getPoliciesGroup() const;
        };
 }
 #endif