added basic logging structure and async classes

This commit is contained in:
keldu.magnus 2020-08-10 23:33:20 +02:00
parent 89aed0e28c
commit e353c4aef4
3 changed files with 81 additions and 15 deletions

View File

@ -7,15 +7,22 @@
namespace gin {
class ConveyorNode {
private:
Own<ConveyorNode> node;
ConveyorNode* parent = nullptr;
public:
ConveyorNode();
ConveyorNode(Own<ConveyorNode>&& node);
virtual ~ConveyorNode() = default;
void setParent(ConveyorNode* p);
};
class ConveyorBase {
private:
Own<ConveyorNode> node;
public:
ConveyorBase(Own<ConveyorNode>&& node);
virtual ~ConveyorBase() = default;
};
@ -31,13 +38,6 @@ using ChainedConveyors = decltype(chainedConveyorType((T *)nullptr));
template <typename Func, typename T>
using ConveyorResult = ChainedConveyors<ReturnType<Func, T>>;
template <typename T> class Conveyor : public ConveyorBase {
private:
public:
template <typename Func, typename ErrorFunc>
ConveyorResult<Func, T> then(Func &&func, ErrorFunc &&error_func);
};
struct PropagateError {
public:
struct PropagateErrorHelper {
@ -50,6 +50,35 @@ public:
PropagateErrorHelper operator(Error&& error);
};
template <typename T> class Conveyor : public ConveyorBase {
private:
public:
template <typename Func, typename ErrorFunc>
ConveyorResult<Func, T> then(Func &&func, ErrorFunc &&error_func);
};
template<typename T>
class ConveyorFeeder {
private:
Conveyor<T>* entry = nullptr;
friend class Conveyor<T>;
void entryDestroyed();
public:
ConveyorFeeder(Conveyor<T>& conv);
void feed(T&& data);
};
template<typename T>
struct ConveyorAndFeeder {
Own<ConveyorFeeder<T>> feeder;
Conveyor<T> conveyor;
};
template<typename T>
ConveyorFeeder<T> newConveyorAndFeeder();
class EventLoop;
class Event {
private:
@ -110,18 +139,22 @@ public:
void poll();
};
class InputConveyorNode : public ConveyorNode {
public:
};
template <typename T> class ConvertConveyorNode : public ConveyorNode {};
template <typename T, size_t S>
class ArrayBufferConveyorNode : public ConveyorNode, public Event {
class QueueBufferConveyorNode : public ConveyorNode, public Event {
private:
std::array<T, S> storage;
std::queue<T, std::array<T,S>> storage;
public:
void fire() override;
};
template<typename T>
class QueueBufferConveyorNode<T> : public ConveyorNode, public Event {
private:
std::queue<T> storage;
public:
void fire() override;
};
} // namespace gin
// Template inlining

5
source/log.cpp Normal file
View File

@ -0,0 +1,5 @@
#include "log.h"
namespace gin {
}

28
source/log.h Normal file
View File

@ -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);
};
}