Commit graph

110 commits

Author SHA1 Message Date
d0dcccbd1b move and split drafted code to the acutal library headers 2015-01-04 12:36:13 +01:00
eb8ad8ed11 code up the actual list diff generator algorithm
sans the implementation of the index lookup table(s)

The algorithm is KISS, a variant of insertion sort, i.e.
worst time quadratic, but known to perform well on small data sets.
The mere generation of the diff description is O(n log n), since
we do not verify that we can "find" out of order elements. We leave
this to the consumer of the diff, which at this point has to scan
into the rest of the data sequence (leading to quadratic complexity)
2015-01-04 12:02:41 +01:00
5427d659d7 definition reordering and comments 2015-01-04 09:26:25 +01:00
97c63e0472 solution how to place and use the diff token constructors
finally....
The problem is that the C++ "dependent types" defeat the typical
DSL usage, where you define some helper function in a generic
language setup class and mix this language in as superclass.
This is, C++ requires us to refer explicitly to any dependent type,
since, due to possible template specialisations, the parser
can't know if a given symbol is a inherited type or a field.

As a solution, we place the token constructor functors into a
static struct "token", which allows to write e.g. token.insert(xyz)
2015-01-04 09:08:36 +01:00
5c818aff69 better typename 2015-01-03 12:52:09 +01:00
5bae84392a implementation of demand-driven diff generating iterator
TODO: actual decision tree
2015-01-03 02:37:33 +01:00
25646337cd change list diff language to rely on 'find' instead of 'push'
As decided in beb57cde
this changeset switches our basic list diff language to work
in the style of an insertion sort. Rather than 'pushing back'
out-of-order elements, we scan and bring forward missing elements.

Later, when passing the original location of the elements
fetched this way, a 'skip' verb will help to clean up
possible leftowers, so implementation is possible
(and indeed acomplished) without shifting any other elements.
2015-01-02 13:18:25 +01:00
cd85b3425e fix: neat a dedicated translation unit for definitions
...yes, sometimes we even want to emit code ;-)
2015-01-02 11:26:27 +01:00
9707a8982c Diff Handling and Diff Application: framework and definitions
factored out of the concept test built last week.
2014-12-15 03:21:19 +01:00
658698407e use the successful concept test as starting point for a diff handling system
...basically move code from test to various headers
2014-12-15 01:27:03 +01:00