Loading src/common/api/admire_types.hpp +42 −0 Original line number Diff line number Diff line Loading @@ -127,6 +127,48 @@ private: std::unique_ptr<impl> m_pimpl; }; namespace qos { enum class subclass : std::underlying_type<ADM_qos_class_t>::type { bandwidth = ADM_QOS_CLASS_BANDWIDTH, iops = ADM_QOS_CLASS_IOPS, }; enum class scope : std::underlying_type<ADM_qos_scope_t>::type { dataset = ADM_QOS_SCOPE_DATASET, node = ADM_QOS_SCOPE_NODE, job = ADM_QOS_SCOPE_JOB, transfer = ADM_QOS_SCOPE_TRANSFER }; struct entity { template <typename T> entity(admire::qos::scope s, T&& data); entity(const entity&) noexcept; entity(entity&&) noexcept; entity& operator=(const entity&) noexcept; entity& operator=(entity&&) noexcept; ~entity(); admire::qos::scope scope() const; template <typename T> T data() const; private: class impl; std::unique_ptr<impl> m_pimpl; }; } // namespace qos struct dataset { explicit dataset(std::string id); Loading src/common/api/types.cpp +63 −0 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ #include <utils/ctype_ptr.hpp> #include <cstdarg> #include <api/convert.hpp> #include <variant> #include "admire_types.hpp" /******************************************************************************/ Loading Loading @@ -1212,5 +1213,67 @@ job_requirements::storage() const { return m_pimpl->storage(); } namespace qos { class entity::impl { public: template <typename T> impl(const admire::qos::scope& s, T&& data) : m_scope(s), m_data(data) {} impl(const impl& rhs) = default; impl(impl&& rhs) = default; impl& operator=(const impl& other) noexcept = default; impl& operator=(impl&&) noexcept = default; admire::qos::scope scope() const { return m_scope; } template <typename T> T data() const { return std::get<T>(m_data); } private: admire::qos::scope m_scope; std::variant<dataset, node, job, transfer> m_data; }; template <typename T> entity::entity(admire::qos::scope s, T&& data) : m_pimpl(std::make_unique<entity::impl>(s, std::forward<T>(data))) {} entity::entity(const entity& other) noexcept : m_pimpl(std::make_unique<entity::impl>(*other.m_pimpl)) {} entity::entity(entity&&) noexcept = default; entity& entity::operator=(const entity& other) noexcept { this->m_pimpl = std::make_unique<impl>(*other.m_pimpl); return *this; } entity& entity::operator=(entity&&) noexcept = default; entity::~entity() = default; admire::qos::scope entity::scope() const { return m_pimpl->scope(); } template <typename T> T entity::data() const { return m_pimpl->data<T>(); } } // namespace qos } // namespace admire Loading
src/common/api/admire_types.hpp +42 −0 Original line number Diff line number Diff line Loading @@ -127,6 +127,48 @@ private: std::unique_ptr<impl> m_pimpl; }; namespace qos { enum class subclass : std::underlying_type<ADM_qos_class_t>::type { bandwidth = ADM_QOS_CLASS_BANDWIDTH, iops = ADM_QOS_CLASS_IOPS, }; enum class scope : std::underlying_type<ADM_qos_scope_t>::type { dataset = ADM_QOS_SCOPE_DATASET, node = ADM_QOS_SCOPE_NODE, job = ADM_QOS_SCOPE_JOB, transfer = ADM_QOS_SCOPE_TRANSFER }; struct entity { template <typename T> entity(admire::qos::scope s, T&& data); entity(const entity&) noexcept; entity(entity&&) noexcept; entity& operator=(const entity&) noexcept; entity& operator=(entity&&) noexcept; ~entity(); admire::qos::scope scope() const; template <typename T> T data() const; private: class impl; std::unique_ptr<impl> m_pimpl; }; } // namespace qos struct dataset { explicit dataset(std::string id); Loading
src/common/api/types.cpp +63 −0 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ #include <utils/ctype_ptr.hpp> #include <cstdarg> #include <api/convert.hpp> #include <variant> #include "admire_types.hpp" /******************************************************************************/ Loading Loading @@ -1212,5 +1213,67 @@ job_requirements::storage() const { return m_pimpl->storage(); } namespace qos { class entity::impl { public: template <typename T> impl(const admire::qos::scope& s, T&& data) : m_scope(s), m_data(data) {} impl(const impl& rhs) = default; impl(impl&& rhs) = default; impl& operator=(const impl& other) noexcept = default; impl& operator=(impl&&) noexcept = default; admire::qos::scope scope() const { return m_scope; } template <typename T> T data() const { return std::get<T>(m_data); } private: admire::qos::scope m_scope; std::variant<dataset, node, job, transfer> m_data; }; template <typename T> entity::entity(admire::qos::scope s, T&& data) : m_pimpl(std::make_unique<entity::impl>(s, std::forward<T>(data))) {} entity::entity(const entity& other) noexcept : m_pimpl(std::make_unique<entity::impl>(*other.m_pimpl)) {} entity::entity(entity&&) noexcept = default; entity& entity::operator=(const entity& other) noexcept { this->m_pimpl = std::make_unique<impl>(*other.m_pimpl); return *this; } entity& entity::operator=(entity&&) noexcept = default; entity::~entity() = default; admire::qos::scope entity::scope() const { return m_pimpl->scope(); } template <typename T> T entity::data() const { return m_pimpl->data<T>(); } } // namespace qos } // namespace admire