Program Listing for File MeshNode.hpp¶
↰ Return to documentation for file (include/netuit/mesh/MeshNode.hpp)
#pragma once
#ifndef NETUIT_MESH_MESHNODE_HPP_INCLUDE
#define NETUIT_MESH_MESHNODE_HPP_INCLUDE
#include <stddef.h>
#include "../../../third-party/Empirical/source/base/optional.h"
#include "../../../third-party/Empirical/source/base/vector.h"
#include "MeshNodeInput.hpp"
#include "MeshNodeOutput.hpp"
namespace netuit {
template<typename ImplSpec>
class MeshNode {
public:
using input_t = netuit::MeshNodeInput<ImplSpec>;
using output_t = netuit::MeshNodeOutput<ImplSpec>;
using inputs_t = emp::vector<input_t>;
using outputs_t = emp::vector<output_t>;
private:
inputs_t inputs;
outputs_t outputs;
const size_t node_id;
public:
MeshNode(const size_t node_id_) : node_id(node_id_) { ; }
void AddInput(const input_t &input) {
inputs.push_back(input);
}
void AddOutput(const output_t &output) {
outputs.push_back(output);
}
size_t GetNodeID() const { return node_id; }
inputs_t& GetInputs() { return inputs; }
outputs_t& GetOutputs() { return outputs; }
const inputs_t& GetInputs() const { return inputs; }
const outputs_t& GetOutputs() const { return outputs; }
input_t& GetInput(const size_t i) { return inputs[i]; }
output_t& GetOutput(const size_t i) { return outputs[i]; }
const input_t& GetInput(const size_t i) const { return inputs[i]; }
const output_t& GetOutput(const size_t i) const { return outputs[i]; }
size_t GetNumInputs() const { return inputs.size(); }
size_t GetNumOutputs() const { return outputs.size(); }
bool HasInputs() const { return GetNumInputs(); }
bool HasOutputs() const { return GetNumOutputs(); }
bool HasInput(const size_t i) const { return i < GetNumInputs(); }
bool HasOutput(const size_t i) const { return i < GetNumOutputs(); }
emp::optional<input_t> GetInputOrNullopt(const size_t i) const {
return HasInput(i) ? emp::optional<input_t>{GetInput(i)} : std::nullopt;
}
emp::optional<output_t> GetOutputOrNullopt(const size_t i) const {
return HasOutput(i) ? emp::optional<output_t>{GetOutput(i)} : std::nullopt;
}
};
} // namespace netuit
#endif // #ifndef NETUIT_MESH_MESHNODE_HPP_INCLUDE