I am starting on porting Python's difflib's sequence matcher to D.

I want to have a class that will accept two ranges whose elements are of the same type and whose elements can be compared for equality.

How do I make a class declaration that specifies a (forward) range type and an equality-supporting element type?

Here's what doesn't work:

class Diff(T, E) {
        T a; // T should be a forward range of E elements
        T b; // E elements must support == and !=
        // This is a hash key=E element, value=slice of size_t
        size_t[][E] b2j;

        this(T a, T b) {
                this.a = a;
                this.b = b;
                chainB();
        }

        void chainB() {
                foreach (i, element; b)
                        b2j[element] ~= i;
                // TODO
        }
}

unittest {
        import std.stdio: writeln;

    writeln("unittest for the diffrange library.");
        auto a = ["Tulips are yellow,", "Violets are blue,",
                  "Agar is sweet,", "As are you."];
        auto b = ["Roses are red,", "Violets are blue,",
                  "Sugar is sweet,", "And so are you."];
        auto diff = Diff(a, b);
}

Reply via email to