Todo, when I find the time: - See if composite deltas can be re-implemented with primitive deltas that depend on their contents Motivation: - No more need for a 'CompositeLevel' class that keeps track of which delta is contained by which composite. - Composites that contain a common delta could be made conflicting (this is consistent with our "rules": a conflict can only occur between deltas that have a common dependency) Difficulty: - Still want to show/hide deltas at certain level. - Add Version.getGraphState() Motivation: - Often, we need the graph state (i.e. snapshot) associated with some version, e.g., to make an update to it (creating a new version). - Currently, we use all kinds of tricks (sometimes very slow replaying of all deltas since big-bang, sometimes the more efficient rollback/forward from our current graph-state) to get a certain graph state. - Code would be easier to read if we can just get the GraphState out of any Version. Difficulty: - Decide how often to store snapshot. Tradeoff between memory use and speed. - In a first (naive) implementation, could just keep all generated snapshots (in lazy manner) in memory, forever. - Make Version.findPathTo(v:Version) more efficient (use breadth-first search) Motivation: - This function is used very often. It makes code easy to read. - Currently implemented using Depth First Search (with a little heuristic)