ADD: a base node for the payload tree
This commit is contained in:
parent
d0dc43b076
commit
5a53d5c2cd
@ -23,6 +23,7 @@ ENDIF()
|
|||||||
set(WHISPER_SOURCES
|
set(WHISPER_SOURCES
|
||||||
include/Whisper/Data/Classification.hpp
|
include/Whisper/Data/Classification.hpp
|
||||||
src/Whisper/Data/Classification.cpp
|
src/Whisper/Data/Classification.cpp
|
||||||
|
include/Whisper/Tree/Node.hpp
|
||||||
)
|
)
|
||||||
|
|
||||||
set(WHISPER_REQUIRED_LIBRARIES loguru)
|
set(WHISPER_REQUIRED_LIBRARIES loguru)
|
||||||
|
107
include/Whisper/Tree/Node.hpp
Normal file
107
include/Whisper/Tree/Node.hpp
Normal file
@ -0,0 +1,107 @@
|
|||||||
|
#pragma once
|
||||||
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||||
|
*/
|
||||||
|
/** @file */
|
||||||
|
/** @copyright 2021 MPLv2 */
|
||||||
|
#include <memory>
|
||||||
|
#include <list>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief This is the main namespace for all whisper-com related datatypes and classed.
|
||||||
|
*/
|
||||||
|
namespace Whisper
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief The namespace for all Tree related datatypes and classes
|
||||||
|
*/
|
||||||
|
namespace Tree
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Base class for a Payload used by the Whisper::Serializer
|
||||||
|
*
|
||||||
|
* This class represents a node in a two way linked tree.
|
||||||
|
*/
|
||||||
|
class Node : public std::enable_shared_from_this<Whisper::Tree::Node>
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
|
||||||
|
/// the parent node of the node within the tree
|
||||||
|
std::shared_ptr<Whisper::Tree::Node> parent_;
|
||||||
|
|
||||||
|
/// all the children of this node
|
||||||
|
std::shared_ptr<std::list<std::shared_ptr<Whisper::Tree::Node>>> children_;
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Constructor for just initializing the Node
|
||||||
|
*/
|
||||||
|
Node() : parent_(nullptr),
|
||||||
|
children_(nullptr)
|
||||||
|
{
|
||||||
|
children_=std::make_shared<std::list<std::shared_ptr<Whisper::Tree::Node>>>();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief set the parent of this node
|
||||||
|
*
|
||||||
|
* @param parent - the parent node
|
||||||
|
*/
|
||||||
|
void parent(std::shared_ptr<Whisper::Tree::Node> parent) {parent_=parent;}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Returns the current set parent of the node
|
||||||
|
*
|
||||||
|
* @return the parent node
|
||||||
|
*/
|
||||||
|
std::shared_ptr<Whisper::Tree::Node> parent() {return parent_;}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief append a child node to the list of children
|
||||||
|
*
|
||||||
|
* @param child - the child to append
|
||||||
|
*/
|
||||||
|
void appendChild(std::shared_ptr<Whisper::Tree::Node> child)
|
||||||
|
{
|
||||||
|
children_->push_back(child);
|
||||||
|
child->parent(shared_from_this());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief prepend a child node to the list of children
|
||||||
|
*
|
||||||
|
* @param child - the child to prepend
|
||||||
|
*/
|
||||||
|
void prependChild(std::shared_ptr<Whisper::Tree::Node> child)
|
||||||
|
{
|
||||||
|
children_->push_front(child);
|
||||||
|
child->parent(shared_from_this());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief return a pointer to the list of children
|
||||||
|
*
|
||||||
|
* @return shared_ptr of the list of children
|
||||||
|
*/
|
||||||
|
std::shared_ptr<std::list<std::shared_ptr<Whisper::Tree::Node>>> children() { return children_;}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Virtual method returning the type of the node when extended by a class
|
||||||
|
*
|
||||||
|
* @return type of the Node, in general it is expected to by of type Whisper::PayloadType
|
||||||
|
*/
|
||||||
|
virtual std::uint32_t type() const { return 0;};
|
||||||
|
|
||||||
|
}; // class Node
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}; // namespace Tree
|
||||||
|
|
||||||
|
}; // namespace WHisper
|
Loading…
Reference in New Issue
Block a user