73 lines
2.3 KiB
C++
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
|