From 4434b9892538978be1fb1ee81c6680b06f8d414e Mon Sep 17 00:00:00 2001 From: Adrian Szyndela Date: Wed, 28 Oct 2020 10:40:45 +0100 Subject: [PATCH] refactoring: generalize operations Change-Id: I6af4d846397b73dc3dfaf45ccf5ebb0fd1ceef46 --- src/internal/storage_backend_flatbuffers.cpp | 33 +++++++--------------------- src/internal/storage_backend_flatbuffers.hpp | 10 +++++++-- 2 files changed, 16 insertions(+), 27 deletions(-) diff --git a/src/internal/storage_backend_flatbuffers.cpp b/src/internal/storage_backend_flatbuffers.cpp index 07b1213..feba813 100644 --- a/src/internal/storage_backend_flatbuffers.cpp +++ b/src/internal/storage_backend_flatbuffers.cpp @@ -60,7 +60,7 @@ bool StorageBackendFlatbuffers::match(const ldp_xml_parser::MatchItemAccess &mat } template ::policy_type> -ldp_xml_parser::DecisionItem StorageBackendFlatbuffers::getDecisionItem(const T &item, const P *policy) const { +ldp_xml_parser::DecisionItem StorageBackendFlatbuffers::getDecisionItem(const T &item, const P *policy, ldp_serialization::ItemsType) const { const auto *v = policyGetItems(policy); auto rend = containerGetReverseIteratorEnd(v); for (auto rit = containerGetReverseIterator(v); rit != rend; ++rit) { @@ -99,7 +99,8 @@ auto StorageBackendFlatbuffers::getDecisionItemFromTree(const FB::PolicyOwnNode template <> ldp_xml_parser::DecisionItem StorageBackendFlatbuffers::getDecisionItem(const ldp_xml_parser::MatchItemOwn &item, - const PolicyOwn *policy) const { + const PolicyOwn *policy, + ldp_serialization::TreeType) const { if (item.getName().length() == 0) return ldp_xml_parser::Decision::DENY; @@ -122,10 +123,10 @@ ldp_xml_parser::DecisionItem StorageBackendFlatbuffers::getDecisionItem(const Ma return getDecisionItem(item, setUserGroupGetPolicy(elem.second)); } -ldp_xml_parser::DecisionItem StorageBackendFlatbuffers::getDecisionItemFromSendIndex(const MatchItemSend &item, const FB::PolicySend *policy) const { +ldp_xml_parser::DecisionItem StorageBackendFlatbuffers::getDecisionItem(const MatchItemSend &item, const FB::PolicySend *policy) const { if (!policyHasIndex(policy)) - return getDecisionItem(item, policy); // make it old way for old databases + return getDecisionItem(item, policy, ldp_serialization::ItemsType()); // make it old way for old databases auto index = policyGetIndex(policy); @@ -242,27 +243,9 @@ TYPE_HELPER(Send, send) TYPE_HELPER(Receive, receive) TYPE_HELPER(Access, access) -template <> -ldp_xml_parser::DecisionItem StorageBackendFlatbuffers::getDecisionItemContextMandatory(const MatchItemSend &item) const { - return getDecisionItemFromSendIndex(item, setGetContextMandatory(getPolicySet())); -} - -template <> -ldp_xml_parser::DecisionItem StorageBackendFlatbuffers::getDecisionItemContextDefault(const MatchItemSend &item) const { - return getDecisionItemFromSendIndex(item, setGetContextDefault(getPolicySet())); -} - -template <> -ldp_xml_parser::DecisionItem StorageBackendFlatbuffers::getDecisionItemUser(uid_t uid, const MatchItemSend &item) const { - auto map = setGetUser(getPolicySet()); - - if (containerEmpty(map)) - return ldp_xml_parser::Decision::ANY; - - auto elem = containerLookupByKey(map, uid); - if (!elem.first) - return ldp_xml_parser::Decision::ANY; - return getDecisionItemFromSendIndex(item, setUserGroupGetPolicy(elem.second)); +template +ldp_xml_parser::DecisionItem StorageBackendFlatbuffers::getDecisionItem(const T &item, P policy) const { + return getDecisionItem(item, policy, typename ldp_serialization::PolicyContentType

::result()); } template diff --git a/src/internal/storage_backend_flatbuffers.hpp b/src/internal/storage_backend_flatbuffers.hpp index 536808a..cf7d4e1 100644 --- a/src/internal/storage_backend_flatbuffers.hpp +++ b/src/internal/storage_backend_flatbuffers.hpp @@ -214,9 +214,15 @@ private: auto getPolicySet() const; template - ldp_xml_parser::DecisionItem getDecisionItem(const T &item, const P *policy) const; + ldp_xml_parser::DecisionItem getDecisionItem(const T &item, const P *policy, ldp_serialization::ItemsType) const; - ldp_xml_parser::DecisionItem getDecisionItemFromSendIndex(const ldp_xml_parser::MatchItemSend &item, const FB::PolicySend *policy) const; + template + ldp_xml_parser::DecisionItem getDecisionItem(const T &item, const P *policy, ldp_serialization::TreeType) const; + + template + ldp_xml_parser::DecisionItem getDecisionItem(const T &item, P policy) const; + + ldp_xml_parser::DecisionItem getDecisionItem(const ldp_xml_parser::MatchItemSend &item, const FB::PolicySend *policy) const; template ldp_xml_parser::DecisionItem getDecisionItem(const MatchItem &item, const Map &map, id_t id) const; -- 2.7.4