Files
BionxControl/nodes/nodes/ntxcompostionnode.h
Christoph Holzheuer 0b54793b08 added nodes.
2026-04-02 15:15:28 +02:00

73 lines
2.3 KiB
C++

#ifndef NTX_HASANODE_H
#define NTX_HASANODE_H
#include <vector>
#include <variant>
#include <stdexcept>
#include <utility>
#include <ntxnodebase.h>
namespace ntx
{
/**
* @brief Implementierung via Komposition (Has-A).
*
* Hält die Payload als Member 'm_payload'.
*/
template<typename TPayload>
class NtxHasANode : public NtxNodeBase
{
public:
// Konstruktor forwarding an m_payload
template<typename... Args>
explicit NtxHasANode(Args&&... args)
: NtxNodeBase{},
m_payload{std::forward<Args>(args)...}
{
}
// ========================================
// NtxINode Interface: Payload Forwarding
// ========================================
size_t getValueCount() const override { return m_payload.getValueCount(); }
void clearValues() override { m_payload.clearValues(); }
bool hasValue(const NtxString& key) const override { return m_payload.hasValue(key); }
void setValue(const NtxString& key, const NtxVariant& value) override { m_payload.setValue(key, value); }
NtxVariant getValue(const NtxString& key) const override { return m_payload.getValue(key); }
void removeValue(const NtxString& key) override { m_payload.removeValue(key); }
bool hasValue(size_t index) const override { return m_payload.hasValue(index); }
void setValue(size_t index, const NtxVariant& value) override { m_payload.setValue(index, value); }
NtxVariant getValue(size_t index) const override { return m_payload.getValue(index); }
// Deducing This Support (Raw Access)
// TPayload muss doGetValues() oder Zugriff auf den Vektor unterstützen
std::vector<NtxVariant>& doGetValues() override { return m_payload.doGetValues(); }
const std::vector<NtxVariant>& doGetValues() const override { return m_payload.doGetValues(); }
void forEachAttribute(NtxPayloadVisitor visitor) const override
{
m_payload.forEachAttribute(visitor);
}
NtxNodePtr clone() const override
{
auto newNode = std::make_shared<NtxHasANode<TPayload>>();
newNode->m_payload = this->m_payload; // Copy Payload
newNode->setClassTypeId(this->getClassTypeId());
return newNode;
}
protected:
TPayload m_payload;
};
} // namespace ntx
#endif // NTX_HASANODE_H