add doxygen

This commit is contained in:
Сергей Маринкевич
2025-07-25 18:45:02 +07:00
parent e5dc6f7502
commit 0f9d73366b
17 changed files with 60 additions and 4 deletions
+7 -4
View File
@@ -6,13 +6,16 @@
#include <memory>
#include <mutex>
/// \brief Класс для логирования сообщений по категориям и уровням серьезности.
/// Позволяет вести логирование с разными уровнями и подавлять вывод по категориям.
class Logger {
public:
/// \brief Уровни серьезности сообщений для логгера.
enum class Severity {
Debug,
Info,
Warning,
Error
Debug, ///< Отладочная информация
Info, ///< Информационные сообщения
Warning, ///< Предупреждения
Error ///< Ошибки
};
// Получить логгер по категории (создаёт, если нет)
+2
View File
@@ -3,6 +3,8 @@
#include <vector>
#include "ifaces/ILinkMixin.h"
/// \brief Интерфейс для классов-связей между элементами.
/// \tparam TElem Тип элемента, между которыми устанавливается связь.
template <class TElem>
class ILink {
public:
+2
View File
@@ -2,6 +2,8 @@
#include <memory>
#include "ifaces/ILink.h"
/// \brief Интерфейс для классов, поддерживающих связь с дочерними элементами через ILink.
/// \tparam TElem Тип дочернего элемента.
template <class TElem>
class ILinkMixin {
public:
+3
View File
@@ -4,8 +4,11 @@
class INode;
/// \brief Умный указатель на INode.
using NodePtr = std::shared_ptr<INode>;
/// \brief Интерфейс для узлов дерева.
/// Определяет базовые методы для работы с именем и типом узла.
class INode : public virtual ILinkMixin<INode> {
public:
~INode() = default;
+2
View File
@@ -5,6 +5,8 @@
#include "ifaces/ILink.h"
#include "Logger.h"
/// \brief Базовая реализация интерфейса ILink для хранения связей между элементами.
/// \tparam TElem Тип элемента, между которыми устанавливается связь.
template <class TElem>
class BaseLink : public ILink<TElem> {
public:
+1
View File
@@ -2,6 +2,7 @@
#include "links/BaseLink.h"
#include <stdexcept>
/// \brief Связь для листового узла, не допускающая дочерних элементов.
class LeafLink : public BaseLink {
public:
using BaseLink::BaseLink;
+3
View File
@@ -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>>;
+3
View File
@@ -1,6 +1,9 @@
#pragma once
#include "links/BaseLink.h"
/// \brief Связь "один-ко-многим" между элементами одного типа.
/// Каждый дочерний элемент должен быть того же типа, что и родитель.
/// \tparam TElem Тип элемента.
template <class TElem>
class OneToManyLink : public BaseLink<TElem> {
public:
+3
View File
@@ -2,6 +2,9 @@
#include "links/BaseLink.h"
#include <stdexcept>
/// \brief Связь "один-к-одному" между элементами.
/// Позволяет добавить только одного дочернего элемента.
/// \tparam TElem Тип элемента.
template <class TElem>
class OneToOneLink : public BaseLink<TElem> {
public:
+2
View File
@@ -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>;
+3
View File
@@ -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>>;
+2
View File
@@ -4,6 +4,8 @@
#include <memory>
#include "Logger.h"
/// \brief Миксин для ленивой инициализации связи (link) с дочерними элементами.
/// \tparam TLink Тип используемой связи (link).
template <class TLink>
class LazyLinkMixin : public BaseLinkMixin {
public:
+2
View File
@@ -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)) {
+2
View File
@@ -5,6 +5,8 @@
#include "mixins/HierarchicalLinkMixin.h"
#include "Logger.h"
/// \brief Класс сложного (составного) узла дерева.
/// Может содержать несколько дочерних ComplexNode и один SimpleNode.
class ComplexNode : public BaseNode,
virtual public HierarchicalLinkMixin<INode> {
public:
+2
View File
@@ -6,6 +6,8 @@
#include "links/OneToOneLink.h"
#include "Logger.h"
/// \brief Класс простого (листового) узла дерева.
/// Может содержать только одного дочернего ComplexNode.
class SimpleNode : public BaseNode,
virtual public LazyLinkMixin<OneToOneLink<INode>> {
public: