Я пытаюсь написать библиотеку C ++ 11 как часть более широкого проекта, который реализует стек изменений (модификация, вставка и удаление), реализованных поверх исходного буфера. Затем цель состоит в том, чтобы иметь возможность быстро просмотреть «изменения» и вывести измененные данные.
Мой текущий подход:
Это кажется довольно сложной задачей — нужно позаботиться о многих вещах, и я быстро накапливаю сложный код!
Я уверен, что это должно быть проблемой, с которой сталкивались другие программы, но просмотр различных шестнадцатеричных редакторов и т. Д. Не указал мне на полезную реализацию. Есть ли название для этой проблемы («стек отмены данных» и друзья не слишком далеко зашли!), Или библиотека, которую можно использовать, даже в качестве ссылки, для такого рода вещей?
Я считаю, что наиболее распространенный подход (который я успешно использовал в прошлом) — это просто сохранить исходное состояние и затем поместить каждую операцию изменения (что делается + аргументы) в стек отмены. Затем, чтобы перейти к определенному предыдущему состоянию, вы начинаете с оригинала и применяете все изменения, кроме тех, которые вы хотите отменить.
Это гораздо проще реализовать, чем пытаться определить, какие части данных изменились, и это работает хорошо, если сами операции не занимают много времени (и, следовательно, медленно «воспроизводят» исходное состояние).
Я бы посмотрел на постоянные структуры данных, такие как https://en.wikipedia.org/wiki/Persistent_data_structure а также http://www.toves.org/books/persist/#s2 — или веб-поиск на условиях из этих. Я думаю, что вы могли бы сделать это с постоянным деревом, листья которого несут короткие последовательности.