Я реализую проект, похожий на интерпретатор, для которого мне нужна странная маленькая очередь планирования. Поскольку я хотел бы попытаться избежать повторного изобретения колес, я надеялся, что кто-нибудь может дать мне ссылки на аналогичную структуру или существующую работу. Я знаю, что могу просто создавать несколько очередей по мере продвижения вперед, я просто ищу какую-то перспективу у других людей, у которых могут быть лучшие идеи, чем у меня;)
Я предполагаю, что это может работать примерно так: структура представляет собой дерево с одним корнем. Вы получаете своего рода «insert_iterator» в корень и затем помещаете на него элементы (например, a и b в примере ниже). Однако в любой момент вы можете также разделить итератор на несколько итераторов, эффективно создавая ветви. Ветви не могут снова слиться в одну очередь, но вы можете начать выталкивать элементы с начала очереди (опять же, используя своего рода visitor_iterator), пока пустые ветви не будут отброшены (на ваше усмотрение).
x -> y -> z
a -> b -> { g -> h -> i -> j }
f -> b
Есть идеи? Похоже на относительно простую структуру для реализации себя с помощью пула очередей, но я придерживаюсь стратегии «сначала подумай, потом код»:)
Спасибо
РЕДАКТИРОВАТЬ: Я думал, что я хотел бы добавить дополнительную справочную информацию. Это не относится к проблеме, но я подумал, что это может помочь прояснить мои цели. Очень грубо идея этой структуры состоит в том, что она в основном используется для планирования вычислений ... Ветвь может заканчиваться либо COMMIT, либо ROLLBACK. Если любой из x -> ..., g -> ... или f -> ... заканчивается COMMIT, то
a -> b
выполняется последовательно, а также ветвь, которая завершилась в COMMIT. Э.Г.
x -> y -> z -> COMMIT
Однако a -> b будет выполняться только один раз, когда хотя бы одна из ветвей зафиксирована.
Если все три ветви заканчиваются ROLLBACK, тогда все дерево отбрасывается, включая начальные события a -> b.
Спасибо за великолепные ответы! Я подробно рассмотрю их, как только вернусь домой.