Don't require the `--structure` argument.
{
        size_t length = UTF8::seqLength(*pos);
        if (pos + length > end)
            length = end - pos;
        if (length > sizeof(CodePoint))
            length = sizeof(CodePoint);
        CodePoint res = 0;
        memcpy(&res, pos, length);
        pos += length;
        return res;
    }
    static bool writeCodePoint(CodePoint code, char *& pos, const char * end)
    {
        size_t length
            = (code & 0xFF000000) ? 4
            : (code & 0xFFFF0000) ? 3
            : (code & 0xFFFFFF00) ? 2
            : 1;
        if (pos + length > end)
            return false;
        memcpy(pos, &code, length);
        pos += length;
        return true;
    }
public:
    explicit MarkovModel(MarkovModelParameters params_)