#pragma once #include "common.hpp" #include "data.hpp" #include "device.hpp" #include #include #include #include namespace saw { template class data_server final : public i_data_server { private: our> device_; std::map>> values_; public: static constexpr std::pair class_id{schema_hash::apply(), schema_hash::apply()}; std::pair get_class_id() const override { return class_id; } data_server(our> device__): device_{std::move(device__)} {} error_or send(data& dat, id store_id){ data> hip_dat; { auto eov = device_->copy_to_device(dat, hip_dat); if(eov.is_error()){ return eov; } } auto ins = values_.emplace(std::make_pair(store_id.get_value(), hip_dat)); if(!ins.second){ return make_error(); } return make_void(); } error_or allocate(const data::MetaSchema, Encoding>& dat, id store_id){ return make_error("Allocate not implemented"); return make_void(); } error_or> receive(id store_id){ return make_error("Receive not implemented"); } error_or erase(id store_id){ return make_error("Erase not implemented"); return make_void(); } error_or>>> find(id store_id){ auto find_res = values_.find(store_id.get_value()); if(find_res == values_.end()){ return make_error(); } return {(find_res->second)}; } }; }