From e353c4aef455268aa3ec61086656333ad34fef0a Mon Sep 17 00:00:00 2001 From: "keldu.magnus" Date: Mon, 10 Aug 2020 23:33:20 +0200 Subject: [PATCH] added basic logging structure and async classes --- source/async.h | 63 ++++++++++++++++++++++++++++++++++++++------------ source/log.cpp | 5 ++++ source/log.h | 28 ++++++++++++++++++++++ 3 files changed, 81 insertions(+), 15 deletions(-) create mode 100644 source/log.cpp create mode 100644 source/log.h diff --git a/source/async.h b/source/async.h index 331e00e..5328860 100644 --- a/source/async.h +++ b/source/async.h @@ -7,15 +7,22 @@ namespace gin { class ConveyorNode { +private: + Own node; + ConveyorNode* parent = nullptr; public: + ConveyorNode(); + ConveyorNode(Own&& node); virtual ~ConveyorNode() = default; + + void setParent(ConveyorNode* p); }; class ConveyorBase { private: Own node; - public: + ConveyorBase(Own&& node); virtual ~ConveyorBase() = default; }; @@ -31,13 +38,6 @@ using ChainedConveyors = decltype(chainedConveyorType((T *)nullptr)); template using ConveyorResult = ChainedConveyors>; -template class Conveyor : public ConveyorBase { -private: -public: - template - ConveyorResult then(Func &&func, ErrorFunc &&error_func); -}; - struct PropagateError { public: struct PropagateErrorHelper { @@ -50,6 +50,35 @@ public: PropagateErrorHelper operator(Error&& error); }; +template class Conveyor : public ConveyorBase { +private: +public: + template + ConveyorResult then(Func &&func, ErrorFunc &&error_func); +}; + +template +class ConveyorFeeder { +private: + Conveyor* entry = nullptr; + + friend class Conveyor; + + void entryDestroyed(); +public: + ConveyorFeeder(Conveyor& conv); + void feed(T&& data); +}; + +template +struct ConveyorAndFeeder { + Own> feeder; + Conveyor conveyor; +}; + +template +ConveyorFeeder newConveyorAndFeeder(); + class EventLoop; class Event { private: @@ -110,18 +139,22 @@ public: void poll(); }; -class InputConveyorNode : public ConveyorNode { -public: -}; - template class ConvertConveyorNode : public ConveyorNode {}; template -class ArrayBufferConveyorNode : public ConveyorNode, public Event { +class QueueBufferConveyorNode : public ConveyorNode, public Event { private: - std::array storage; - + std::queue> storage; public: + void fire() override; +}; + +template +class QueueBufferConveyorNode : public ConveyorNode, public Event { +private: + std::queue storage; +public: + void fire() override; }; } // namespace gin // Template inlining diff --git a/source/log.cpp b/source/log.cpp new file mode 100644 index 0000000..5e16665 --- /dev/null +++ b/source/log.cpp @@ -0,0 +1,5 @@ +#include "log.h" + +namespace gin { + +} \ No newline at end of file diff --git a/source/log.h b/source/log.h new file mode 100644 index 0000000..50d03db --- /dev/null +++ b/source/log.h @@ -0,0 +1,28 @@ +#pragma once + +#include "common.h" + +namespace gin { +class EventLoop; +class LogIo { +private: + EventLoop& loop; +public: + LogIo(EventLoop& loop); +}; + +class Log { +public: + enum class Type : uint8_t { + Info, + Warning, + Error, + Debug + }; +private: + LogIo& central; + EventLoop& loop; +public: + Log(LogIo& central, EventLoop& loop); +}; +} \ No newline at end of file