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