add doxygen

iters
Сергей Маринкевич 5 months ago
parent e5dc6f7502
commit 0f9d73366b

1
.gitignore vendored

@ -1,3 +1,4 @@
*.swp
build
.vscode
doc

@ -0,0 +1,20 @@
# Doxyfile 1.9.8
# Основной конфиг для генерации документации Doxygen
PROJECT_NAME = "links project"
OUTPUT_DIRECTORY = doc
CREATE_SUBDIRS = NO
OUTPUT_LANGUAGE = Russian
INPUT = src include
FILE_PATTERNS = *.h *.cpp
RECURSIVE = YES
EXTRACT_ALL = YES
GENERATE_LATEX = NO
GENERATE_HTML = YES
GENERATE_MAN = NO
GENERATE_RTF = NO
GENERATE_XML = NO
QUIET = NO
WARN_IF_UNDOCUMENTED = YES
# Можно добавить дополнительные настройки по необходимости

@ -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:

Loading…
Cancel
Save