38#include <disciplines.grpc.pb.h>
100 const std::vector<size_t> &shape);
107 explicit Variable(
const philote::VariableMetaData &meta);
114 explicit Variable(
const philote::PartialsMetaData &meta);
138 void Segment(const
size_t &start, const
size_t &end,
139 const std::vector<
double> &data);
149 std::vector<
double>
Segment(const
size_t &start, const
size_t &end) const;
157 std::vector<
size_t>
Shape() const noexcept;
172 double operator()(const
size_t &i) const;
180 double &operator()(const
size_t &i);
198 grpc::ClientReaderWriter<::
philote::Array, ::
philote::Array> *stream,
199 const
size_t &chunk_size) const;
212 grpc::ServerReaderWriterInterface<::
philote::Array, ::
philote::Array> *stream,
213 const
size_t &chunk_size,
214 grpc::ServerContext* context =
nullptr) const;
223 grpc::ClientReaderWriterInterface<::
philote::Array, ::
philote::Array> *stream,
224 const
size_t &chunk_size) const;
239 std::vector<
size_t> shape_;
242 std::vector<
double> data_;
245 std::vector<int64_t> discrete_data_;
331 T& operator()(const std::
string& key1, const std::
string& key2)
333 return data_[std::make_pair(key1, key2)];
343 const T&
operator()(
const std::string& key1,
const std::string& key2)
const
345 return data_.at(std::make_pair(key1, key2));
355 bool contains(
const std::string& key1,
const std::string& key2)
const noexcept
357 return data_.find(std::make_pair(key1, key2)) != data_.end();
377 return data_.empty();
391 auto begin() {
return data_.begin(); }
392 auto begin()
const {
return data_.begin(); }
397 auto end() {
return data_.end(); }
398 auto end()
const {
return data_.end(); }
401 std::map<std::pair<std::string, std::string>, T> data_;
404 typedef std::map<std::string, philote::Variable>
Variables;
Dictionary for storing values with respect to two keys.
Definition variable.h:292
const T & operator()(const std::string &key1, const std::string &key2) const
Access value using two keys (const version)
Definition variable.h:343
auto begin() const
Definition variable.h:392
auto begin()
Get iterator to beginning.
Definition variable.h:391
bool empty() const noexcept
Check if the dictionary is empty.
Definition variable.h:375
PairDict()=default
Default constructor.
bool contains(const std::string &key1, const std::string &key2) const noexcept
Check if a key pair exists.
Definition variable.h:355
PairDict & operator=(const PairDict &)=default
Copy assignment operator.
size_t size() const noexcept
Get the size of the dictionary.
Definition variable.h:365
void clear()
Clear all entries.
Definition variable.h:383
auto end()
Get iterator to end.
Definition variable.h:397
auto end() const
Definition variable.h:398
PairDict(const PairDict &)=default
Copy constructor.
PairDict(PairDict &&) noexcept=default
Move constructor.
A class for storing continuous and discrete variables.
Definition variable.h:85
Variable(const philote::VariableMetaData &meta)
Construct a new Variable object.
void AssignChunk(const Array &data)
Assigns a chunk to the variable.
Variable(const philote::PartialsMetaData &meta)
Construct a new Variable object.
std::vector< size_t > Shape() const noexcept
Returns the shape of the array.
void Segment(const size_t &start, const size_t &end, const std::vector< double > &data)
Assigns a segment of the array given a subvector.
Variable(const philote::VariableType &type, const std::vector< size_t > &shape)
Construct a new Variable object.
size_t Size() const noexcept
Returns the size of the array.
~Variable() noexcept=default
Destroy the Variables object.
void Send(std::string name, std::string subname, grpc::ClientReaderWriter<::philote::Array, ::philote::Array > *stream, const size_t &chunk_size) const
Sends the variable from the client to the server.
Variable()=default
Construct a new Variables object.
philote::Array CreateChunk(const size_t &start, const size_t &end) const
Create a Chunk of the variable.
Definition discipline.h:43
std::map< std::string, philote::Variable > Variables
Definition variable.h:404
PairDict< philote::Variable > PartialsPairDict
Definition variable.h:406
std::map< std::pair< std::string, std::string >, philote::Variable > Partials
Definition variable.h:405