Initial compresison.

This commit is contained in:
jmsgrogan 2022-08-01 16:14:14 +01:00
parent 4fce4fc614
commit 1ee31596fb
11 changed files with 195 additions and 1 deletions

View file

@ -15,6 +15,7 @@ list(APPEND core_LIB_INCLUDES
Dictionary.cpp
Color.cpp
CommandLineArgs.cpp
data_structures/Tree.cpp
loggers/FileLogger.cpp
file_utilities/File.cpp
file_utilities/FileFormats.cpp
@ -35,6 +36,7 @@ target_include_directories(core PUBLIC
"${CMAKE_CURRENT_SOURCE_DIR}/loggers"
"${CMAKE_CURRENT_SOURCE_DIR}/memory"
"${CMAKE_CURRENT_SOURCE_DIR}/streams"
"${CMAKE_CURRENT_SOURCE_DIR}/data_structures"
)
set_target_properties( core PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS ON )
set_property(TARGET core PROPERTY FOLDER src)

View file

View file

@ -0,0 +1,66 @@
#pragma once
#include <memory>
template<typename T>
class Node
{
public:
Node(T data)
: mData(data)
{}
void addChild(std::unique_ptr<Node> child)
{
if(!mLeftChild)
{
mLeftChild = std::move(child);
}
else
{
mRightChild = std::move(child);
}
}
bool isLeaf() const
{
return !mLeftChild && !mRightChild;
}
T getData() const
{
return mData;
}
private:
T mData;
unsigned char mTag{0};
std::unique_ptr<Node> mLeftChild;
std::unique_ptr<Node> mRightChild;
};
template<typename T>
using NodePtr = std::unique_ptr<Node<T> >;
template<typename T>
class Tree
{
public:
Tree()
{
}
void addRootNode(NodePtr<T> root)
{
mRootNode = std::move(root);
}
Node<T>* getRootNode() const
{
return mRootNode.get();
}
private:
NodePtr<T> mRootNode;
};