24 Commits (master)
 

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

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

Т.к. проход теперь не по вектору (он давал экземпляр умного указателя),
а по обычному указателю (собственному прокси, если точнее), то узел
разрушался уже в процессе его отключения от дерева. Добавил удержание
ссылки в сам `unlinkParent()` (ну, нам действительно может быть нужно
только безвозвратное удаление поддерева) и пример в `main.cpp` расширил
и прокомментировал.
4 months ago
Сергей Маринкевич 5b515eaf19 qosd: в миксины добавлен оператор конвертации в умный указатель
В отличие от метода `getNode()`, оператор конвертации будет публичным.
А ещё он позволяет преобразовывать объект неявно.
4 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` (или около) не хотел, чтобы не
пробрасывать оконечный тип по всей иерархии. Да и от указанных выше
проблем он не избавляет. Зато можно будет относительно безболезненно
выпилить этот класс, если ему подвернётся достойная замена.
4 months ago
Сергей Маринкевич 6c5d9d7992 qosd: трассировка кон-/деструкторов переведена на отдельный логгер
Т.к. в основном меня либо интересует создание/удаление объектов, либо
нет. Смысла объединять это логи с другими логами объектов каждой
подсистемы я не вижу.
4 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
5 months ago
Сергей Маринкевич 0f9d73366b add doxygen 5 months ago
Сергей Маринкевич e5dc6f7502 make nodes to provide nodes instead of mixins 5 months ago
Сергей Маринкевич c228caaa45 add hierarchical node 5 months ago
Сергей Маринкевич 55ef99c848 unlink the links 5 months ago
Сергей Маринкевич d17c80a195 fup 5 months ago
Сергей Маринкевич f994303cb5 cleanup 5 months ago
Сергей Маринкевич 0912566c5f working...? 5 months ago
Сергей Маринкевич f5f78308bd tmp 5 months ago
Сергей Маринкевич 3801a5dc0b add make 5 months ago
Сергей Маринкевич 44480a7128 shared children disappear 5 months ago
Сергей Маринкевич b2be9b51ca poperdolilo 5 months ago
Сергей Маринкевич 8b60fc0183 fixed 5 months ago
Сергей Маринкевич fd34b335c1 refuck but broken 5 months ago
Сергей Маринкевич 60bbaae0c0 remove getNode from ILink 5 months ago
Сергей Маринкевич dc9bfe51ab fup 5 months ago
Сергей Маринкевич b9cf6623d1 init 5 months ago