Analysis
Overview
The goal of this task is to develop a scheme on how to implement a history of changes resulting from the work of the user with Sophie 2 and provide access to any given point in time in this history.
This way a snapshot of the state of Sophie 2 at a given time point could be obtained for various purposes such as:
- debugging
- reverting changes
- feeding the change manager with needed info
- etc.
Task requirements
- Propose ideas for the structure of the history of changes. It should be flexible enough, so the queries as the following could be answered:
- get a snapshot of the state of all properties at a given time point
- get the value of a given property at a given time point
- get a history of all the values of a given property at a given time point
- get a list of all Changes that affect a given property before and after a given time point
- get a list of properties which a Change affects
- Since these operations might turn out quite slow, performance should be taken into consideration as early as possible:
- provide rough ideas on how these operations could be implemented algorithmically efficient
- also provide ideas for suitable data structures which could improve the performance
- Provide rough implementation of the above ideas, if possible
- Add unit test for the implementation, if possible
Task result
- Design ideas and diagrams of the proposed solutions to the given problems in this page
- New code and unit tests, if any
Implementation idea
- Consider using some data structure which provides logarithmic time for some of the queries
- Try providing ideas for data structures and algorithms which perform at least some of the queries efficiently. Different approaches might be possibly combined to yield good results.
Related
PRO_LIB_CORE_TUTORIAL
PRO_CHANGE_MANAGER_R0
PRO_CHANGE_MERGING_R0
PRO_CHANGE_PRIMITIVES_R0
PRO_CHANGE_UNDO_MANAGER_R0
How to demo
- Show this page and explain the problems and proposed solutions
- Run the unit tests, if any
Design
(Describe your design here.)
Implementation
(Describe and link the implementation results here (from the wiki or the repository).)
Testing
(Place the testing results here.)
Comments
(Write comments for this or later revisions here.)