Output
The Output base class allows quick access to output values from a given node’s computation. Often nodes have many inputs and many outputs. Parameters on a node are considered to be inputs to a node.
Output base class header.
class COMPUTES_EXPORT OutputCompute: public Compute {
public:
COMPONENT_ID(Compute, OutputCompute);
OutputCompute(Entity* entity);
virtual ~OutputCompute();
// We override to stop creating the inputs and outputs namespace.
virtual void create_inputs_outputs(const EntityConfig& config = EntityConfig()) {external();}
// Exposure.
void set_exposed(bool exposed);
bool is_exposed() const;
// Serialization.
virtual void save(SimpleSaver& saver) const;
virtual void load(SimpleLoader& loader);
protected:
// Our state.
virtual bool update_state();
private:
// Our fixed deps.
Dep<Compute> _node_compute;
// Exposure.
bool _exposed;
friend class InputCompute;
friend class OutputShape;
};
Output base class implementation.
OutputCompute::OutputCompute(Entity* entity)
: Compute(entity, kDID()),
_node_compute(this),
_exposed(true) {
get_dep_loader()->register_fixed_dep(_node_compute, Path({"..",".."}));
}
OutputCompute::~OutputCompute() {
}
bool OutputCompute::update_state() {
internal();
Compute::update_state();
// Using our name we query our nodes compute results.
const std::string& our_name = our_entity()->get_name();
set_main_output(_node_compute->get_output(our_name));
return true;
}
void OutputCompute::set_exposed(bool exposed) {
external();
_exposed = exposed;
}
bool OutputCompute::is_exposed() const {
external();
return _exposed;
}
void OutputCompute::save(SimpleSaver& saver) const {
external();
Compute::save(saver);
// Serialize the exposed value.
saver.save(_exposed);
}
void OutputCompute::load(SimpleLoader& loader) {
external();
Compute::load(loader);
// Load the exposed value.
loader.load(_exposed);
}