I want a simple algorithm.
Given DList (or a Range, Array... I am not constrained by the container type), I want to combine certain elements depending on some condition.

In the toy example, the struct and condition are simpler then in my real scenario, but i think it covers my problem: https://run.dlang.io/is/1QGw85

The function `conflate` is the algorithm I want and is currently not working (either it is wrong, or cannot compile).

How I imagined it to work in rough pseudo code:


outer: traverse the list:
   inner: traverse the list from the current outer position
      if condition(current outer position, current inner position)
combine(current outer position, current inner position)
            stableDelete(current inner position)


I am convinced that this works. It is really not that hard, all i need is a DoublyLinked list. D's DList however does not provide me with the interface I need for implementing this.
Or I am too stupid to see how I should do it.

I am not restricted on DLists, I can choose whatever I want. The rest of the code should work with just InputRanges. However doubly linked list should be most efficient for this problem, since all I want to do is delete stuff at random position, i.e. to bend some pointers. Yes I might suffer from premature optimization :)
  • Fighting the DList Jan Hönig via Digitalmars-d-learn

Reply via email to