module nxt.string_store;

import nxt.variant_arrays;

@safe pure:

/** Store sets of strings with different lengths compactly.
 */
struct StringStore
{
    @safe pure:
    void insertBack(string value) nothrow @nogc
    {
        switch (value.length)
        {
            // TODO static foreach
        case 1: _store.insertBack(cast(char[1])value[0 .. 1]); break;
        case 2: _store.insertBack(cast(char[2])value[0 .. 2]); break;
        case 3: _store.insertBack(cast(char[3])value[0 .. 3]); break;
        case 4: _store.insertBack(cast(char[4])value[0 .. 4]); break;
        case 5: _store.insertBack(cast(char[5])value[0 .. 5]); break;
        case 6: _store.insertBack(cast(char[6])value[0 .. 6]); break;
        case 7: _store.insertBack(cast(char[7])value[0 .. 7]); break;
        case 8: _store.insertBack(cast(char[8])value[0 .. 8]); break;
        default:
            _store.insertBack(value);
        }
    }
private:
    VariantArrays!(char[1],
                   char[2],
                   char[3],
                   char[4],
                   char[5],
                   char[6],
                   char[7],
                   char[8],
                   string) _store;
}

@safe pure nothrow @nogc unittest
{
    StringStore ss;
    ss.insertBack("alpha");
    ss.insertBack("beta");
}