18 Commits (master)

Author SHA1 Message Date
Sergey Marinkevich 79caaad58d qosd: добавил краевые узлы
Краевые узлы не могут иметь дочерние узлы. Отлично подходит для
бесклассовых дисциплин. Например, вариации FIFO, Fair Queue, RED и т.д.

Псевдо-бесклассовые по типу TBF, которые подключают в себя FIFO (или
любую указанную пользователем дисциплину), всё ещё должны пользоваться
SimpleNode.
9 months ago
Sergey Marinkevich df1a728f56 qosd: поправил комментарий 9 months ago
Сергей Маринкевич 10b79b8af6 qosd: исправлен комментарий 9 months ago
Сергей Маринкевич dedd7df19c qosd: обезопашен обход дерева с модификацией
Примеров итератора с доступом на чтение я много оставил, а пример
модификации дерева только один. И тот я сразу забыл перевести на
итераторы (range-based for loop).

Т.к. проход теперь не по вектору (он давал экземпляр умного указателя),
а по обычному указателю (собственному прокси, если точнее), то узел
разрушался уже в процессе его отключения от дерева. Добавил удержание
ссылки в сам `unlinkParent()` (ну, нам действительно может быть нужно
только безвозвратное удаление поддерева) и пример в `main.cpp` расширил
и прокомментировал.
9 months ago
Сергей Маринкевич 5b515eaf19 qosd: в миксины добавлен оператор конвертации в умный указатель
В отличие от метода `getNode()`, оператор конвертации будет публичным.
А ещё он позволяет преобразовывать объект неявно.
9 months ago
Сергей Маринкевич 784594faa6 qosd: создание узлов переведено на фабричный метод
Решил обойтись простым ~~советским~~ статическим методом:

	template <typename T>
	class FabricMixin {
	public:
		template <typename... Args>
		static std::shared_ptr<T> create(Args&&... args) {
			return std::shared_ptr<T>(new T(std::forward<Args>(args)...));
		}
	};

Ну ладно, он не так просто выглядит на первый взгляд. Но, по сути, всё,
что он делает: параметризует метод типом возвращаемого указателя, и
передаёт все аргументы как есть в конструктор заданного типа. Решил
сделать так, чтобы не копипастить тело конструктора. Ну, вдруг я,
например, трассировку туда добавить захочу. Правда, есть недостаток у
такого решения:

	class SimpleNode : ...,
			   public FabricMixin<SimpleNode> {
		friend class FabricMixin<SimpleNode>;

Не очень удобное подключение: а) нужно внести по крайней мере две
строчки; б) автоматически самого себя параметром шаблона передавать
нельзя.

Вносить этот метод в `BaseNode` (или около) не хотел, чтобы не
пробрасывать оконечный тип по всей иерархии. Да и от указанных выше
проблем он не избавляет. Зато можно будет относительно безболезненно
выпилить этот класс, если ему подвернётся достойная замена.
9 months ago
Сергей Маринкевич 6c5d9d7992 qosd: трассировка кон-/деструкторов переведена на отдельный логгер
Т.к. в основном меня либо интересует создание/удаление объектов, либо
нет. Смысла объединять это логи с другими логами объектов каждой
подсистемы я не вижу.
9 months ago
Sergey Marinkevich f46e1a6d0b add iterators
New iterators can be used to iterate through Nodes.

Squashed commit of the following:

commit 602ed679631647dd1c8874b0b0145fcb09458341
Author: GRayHook <s@marinkevich.ru>
Date:   Fri Aug 1 19:36:46 2025 +0700

    fup after CR

commit 08f7b59aa7
Author: GRayHook <s@marinkevich.ru>
Date:   Fri Aug 1 19:20:48 2025 +0700

    normalize members of iterator

commit 038cbb73f4
Author: GRayHook <s@marinkevich.ru>
Date:   Fri Aug 1 18:57:08 2025 +0700

    bump

commit 0f93988fb6
Author: GRayHook <s@marinkevich.ru>
Date:   Fri Aug 1 11:32:35 2025 +0700

    tmp
9 months ago
Сергей Маринкевич 0f9d73366b add doxygen 10 months ago
Сергей Маринкевич e5dc6f7502 make nodes to provide nodes instead of mixins 10 months ago
Сергей Маринкевич c228caaa45 add hierarchical node 10 months ago
Сергей Маринкевич 55ef99c848 unlink the links 10 months ago
Сергей Маринкевич d17c80a195 fup 10 months ago
Сергей Маринкевич f994303cb5 cleanup 10 months ago
Сергей Маринкевич 0912566c5f working...? 10 months ago
Сергей Маринкевич f5f78308bd tmp 10 months ago
Сергей Маринкевич 44480a7128 shared children disappear 10 months ago
Сергей Маринкевич b2be9b51ca poperdolilo 10 months ago