#pragma once #include "common.hpp" #include "data.hpp" #include namespace saw { template class data_server { private: /** * Device context class */ device* device_; /** * Store for the data the server manages. */ std::unordered_map> values_; public: /** * Main constructor */ data_server(device& device__): device_{&device__} {} /** * Receive data which we will store. */ error_or send(const data& dat, id store_id){ auto eoval = device_->copy_to_device(dat); if(eoval.is_error()){ auto& err = eoval.get_error(); return std::move(err); } return make_error(); } error_or> receive(id store_id){ return make_error(); } }; template class data_client { private: /** * Corresponding server for this client */ data_server* srv_; /** * The next id for identifying issues on the remote side. */ uint64_t next_id_; public: /** * Main constructor */ data_client(data_server& srv__): srv_{&srv__}, next_id_{0u} {} /** * Send data to. */ error_or> send(const data& dat){ id dat_id{next_id_}; auto eov = srv_->send(dat, dat_id); if(eov.is_error()){ auto& err = eov.get_error(); return std::move(err); } ++next_id_; return dat_id; } }; }