Program Listing for File node.h#
↰ Return to documentation for file (include/nodes-graph/node.h)
#pragma once
#include <cstdint>
#include <random>
#include <set>
#include <string>
#include "nodes-graph/types.h"
namespace ng {
class Node {
std::string name_;
node_id_t id_; // instance id
qualifier_t qualifier_; // node type qualifier (or graph qualifier for proxies)
std::set<socket_id_t> input_sockets_;
std::set<socket_id_t> output_sockets_;
bool proxy_ = false;
static std::mt19937 generator_;
static std::uniform_int_distribution<std::size_t> distribution_;
public:
Node(
const std::string& name="",
const node_id_t& id=null_node,
const qualifier_t& qualifier=null_qualifier,
const std::set<socket_id_t>& input_sockets={},
const std::set<socket_id_t>& output_sockets={},
bool proxy=false
);
// --- Setters
inline void set_name(const std::string& name) { name_ = name; }
inline void set_proxy(bool proxy) { proxy_ = proxy; }
// --- Getters
inline const std::string& get_name() const { return name_; }
inline const node_id_t& get_id() const { return id_; }
inline const qualifier_t& get_qualifier() const { return qualifier_; }
inline const std::set<socket_id_t>& get_input_sockets() const { return input_sockets_; }
inline const std::set<socket_id_t>& get_output_sockets() const { return output_sockets_; }
inline bool is_proxy() const { return proxy_; }
// --- Methods
inline std::size_t n_input_sockets() const { return input_sockets_.size(); }
inline std::size_t n_output_sockets() const { return output_sockets_.size(); }
inline bool has_input_socket(const socket_id_t& socket_id) const { return input_sockets_.count(socket_id) > 0; }
inline bool has_output_socket(const socket_id_t& socket_id) const { return output_sockets_.count(socket_id) > 0; }
bool register_input_socket(const socket_id_t& socket_id);
bool register_output_socket(const socket_id_t& socket_id);
bool remove_input_socket(const socket_id_t& socket_id);
bool remove_output_socket(const socket_id_t& socket_id);
// --- Random IDs
static std::size_t make_random_id();
static void seed_random_ids(uint32_t seed);
};
} // namespace ng