diff options
Diffstat (limited to 'modules/io_codec')
-rw-r--r-- | modules/io_codec/c++/rpc.hpp | 42 |
1 files changed, 39 insertions, 3 deletions
diff --git a/modules/io_codec/c++/rpc.hpp b/modules/io_codec/c++/rpc.hpp index 66b7c41..04293cd 100644 --- a/modules/io_codec/c++/rpc.hpp +++ b/modules/io_codec/c++/rpc.hpp @@ -11,27 +11,63 @@ namespace saw { /** - * + * This class acts as a helper for rpc calls and representing data on the remote. */ template<typename T, typename Encoding> class data_or_id { private: + /** + * Variant representing the either id or data class. + */ std::variant<id<T>, data<T,Encoding>> doi_; public: + /** + * Constructor for instantiating. + */ data_or_id(const id<T>& val): doi_{val} {} + /** + * Constructor for instantiating. + */ data_or_id(data<T,Encoding> val): doi_{std::move(val)} {} + /** + * Check if this class holds an id. + */ bool is_id() const { - return false; + return std::holds_alternative<id<T>>(doi_); } + /** + * Check if this class holds data. + */ bool is_data() const { - return false; + return std::holds_alternative<data<T,Encoding>>(doi_); + } + + /** + * Returns the id. + */ + id<T> get_id() const { + return std::get<id<T>>(doi_); + } + + /** + * Return a data reference. + */ + data<T,Encoding>& get_data(){ + return std::get<data<T,Encoding>>(doi_); + } + + /** + * Return a data reference. + */ + const data<T,Encoding>& get_data() const { + return std::get<data<T,Encoding>>(doi_); } }; |