add doxygen
This commit is contained in:
+7
-4
@@ -6,13 +6,16 @@
|
||||
#include <memory>
|
||||
#include <mutex>
|
||||
|
||||
/// \brief Класс для логирования сообщений по категориям и уровням серьезности.
|
||||
/// Позволяет вести логирование с разными уровнями и подавлять вывод по категориям.
|
||||
class Logger {
|
||||
public:
|
||||
/// \brief Уровни серьезности сообщений для логгера.
|
||||
enum class Severity {
|
||||
Debug,
|
||||
Info,
|
||||
Warning,
|
||||
Error
|
||||
Debug, ///< Отладочная информация
|
||||
Info, ///< Информационные сообщения
|
||||
Warning, ///< Предупреждения
|
||||
Error ///< Ошибки
|
||||
};
|
||||
|
||||
// Получить логгер по категории (создаёт, если нет)
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
#include <vector>
|
||||
#include "ifaces/ILinkMixin.h"
|
||||
|
||||
/// \brief Интерфейс для классов-связей между элементами.
|
||||
/// \tparam TElem Тип элемента, между которыми устанавливается связь.
|
||||
template <class TElem>
|
||||
class ILink {
|
||||
public:
|
||||
|
||||
@@ -2,6 +2,8 @@
|
||||
#include <memory>
|
||||
#include "ifaces/ILink.h"
|
||||
|
||||
/// \brief Интерфейс для классов, поддерживающих связь с дочерними элементами через ILink.
|
||||
/// \tparam TElem Тип дочернего элемента.
|
||||
template <class TElem>
|
||||
class ILinkMixin {
|
||||
public:
|
||||
|
||||
@@ -4,8 +4,11 @@
|
||||
|
||||
class INode;
|
||||
|
||||
/// \brief Умный указатель на INode.
|
||||
using NodePtr = std::shared_ptr<INode>;
|
||||
|
||||
/// \brief Интерфейс для узлов дерева.
|
||||
/// Определяет базовые методы для работы с именем и типом узла.
|
||||
class INode : public virtual ILinkMixin<INode> {
|
||||
public:
|
||||
~INode() = default;
|
||||
|
||||
@@ -5,6 +5,8 @@
|
||||
#include "ifaces/ILink.h"
|
||||
#include "Logger.h"
|
||||
|
||||
/// \brief Базовая реализация интерфейса ILink для хранения связей между элементами.
|
||||
/// \tparam TElem Тип элемента, между которыми устанавливается связь.
|
||||
template <class TElem>
|
||||
class BaseLink : public ILink<TElem> {
|
||||
public:
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
#include "links/BaseLink.h"
|
||||
#include <stdexcept>
|
||||
|
||||
/// \brief Связь для листового узла, не допускающая дочерних элементов.
|
||||
class LeafLink : public BaseLink {
|
||||
public:
|
||||
using BaseLink::BaseLink;
|
||||
|
||||
@@ -4,6 +4,9 @@
|
||||
#include "ifaces/ILink.h"
|
||||
#include "Logger.h"
|
||||
|
||||
/// \brief Заглушка для не реализованной связи между элементами.
|
||||
/// Все методы возвращают пустые значения или не выполняют действий.
|
||||
/// \tparam TElem Тип элемента.
|
||||
template <class TElem>
|
||||
class NotImplementedLink : public ILink<TElem> {
|
||||
using ElemPtr = std::shared_ptr<TElem>>;
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
#pragma once
|
||||
#include "links/BaseLink.h"
|
||||
|
||||
/// \brief Связь "один-ко-многим" между элементами одного типа.
|
||||
/// Каждый дочерний элемент должен быть того же типа, что и родитель.
|
||||
/// \tparam TElem Тип элемента.
|
||||
template <class TElem>
|
||||
class OneToManyLink : public BaseLink<TElem> {
|
||||
public:
|
||||
|
||||
@@ -2,6 +2,9 @@
|
||||
#include "links/BaseLink.h"
|
||||
#include <stdexcept>
|
||||
|
||||
/// \brief Связь "один-к-одному" между элементами.
|
||||
/// Позволяет добавить только одного дочернего элемента.
|
||||
/// \tparam TElem Тип элемента.
|
||||
template <class TElem>
|
||||
class OneToOneLink : public BaseLink<TElem> {
|
||||
public:
|
||||
|
||||
@@ -6,6 +6,8 @@
|
||||
#include "ifaces/INode.h"
|
||||
#include "Logger.h"
|
||||
|
||||
/// \brief Базовый миксин для реализации ILinkMixin для INode.
|
||||
/// Предоставляет базовую реализацию методов для работы с дочерними узлами и родителем.
|
||||
class BaseLinkMixin : public virtual ILinkMixin<INode>,
|
||||
public std::enable_shared_from_this<ILinkMixin<INode>> {
|
||||
using ElemPtr = std::shared_ptr<INode>;
|
||||
|
||||
@@ -6,6 +6,9 @@
|
||||
#include "links/OneToOneLink.h"
|
||||
#include "Logger.h"
|
||||
|
||||
/// \brief Миксин для иерархических связей между элементами.
|
||||
/// Автоматически выбирает тип связи (один-ко-многим или один-к-одному) в зависимости от типа дочернего элемента.
|
||||
/// \tparam TElem Тип дочернего элемента.
|
||||
template <class TElem>
|
||||
class HierarchicalLinkMixin : public LazyLinkMixin<OneToOneLink<TElem>> {
|
||||
using LinkPtr = std::shared_ptr<ILink<TElem>>;
|
||||
|
||||
@@ -4,6 +4,8 @@
|
||||
#include <memory>
|
||||
#include "Logger.h"
|
||||
|
||||
/// \brief Миксин для ленивой инициализации связи (link) с дочерними элементами.
|
||||
/// \tparam TLink Тип используемой связи (link).
|
||||
template <class TLink>
|
||||
class LazyLinkMixin : public BaseLinkMixin {
|
||||
public:
|
||||
|
||||
@@ -4,6 +4,8 @@
|
||||
#include "ifaces/INode.h"
|
||||
#include "Logger.h"
|
||||
|
||||
/// \brief Базовый класс для всех узлов дерева.
|
||||
/// Содержит имя и тип узла, реализует интерфейс INode.
|
||||
class BaseNode : public virtual INode {
|
||||
public:
|
||||
BaseNode(std::string name) : name_(std::move(name)) {
|
||||
|
||||
@@ -5,6 +5,8 @@
|
||||
#include "mixins/HierarchicalLinkMixin.h"
|
||||
#include "Logger.h"
|
||||
|
||||
/// \brief Класс сложного (составного) узла дерева.
|
||||
/// Может содержать несколько дочерних ComplexNode и один SimpleNode.
|
||||
class ComplexNode : public BaseNode,
|
||||
virtual public HierarchicalLinkMixin<INode> {
|
||||
public:
|
||||
|
||||
@@ -6,6 +6,8 @@
|
||||
#include "links/OneToOneLink.h"
|
||||
#include "Logger.h"
|
||||
|
||||
/// \brief Класс простого (листового) узла дерева.
|
||||
/// Может содержать только одного дочернего ComplexNode.
|
||||
class SimpleNode : public BaseNode,
|
||||
virtual public LazyLinkMixin<OneToOneLink<INode>> {
|
||||
public:
|
||||
|
||||
Reference in New Issue
Block a user