Don't require the `--structure` argument.
{
            readBinary(total, in);
            readBinary(count_end, in);
            size_t size = 0;
            readBinary(size, in);
            buckets.reserve(size);
            for (size_t i = 0; i < size; ++i)
            {
                Buckets::value_type elem;
                readBinary(elem.first, in);
                readBinary(elem.second, in);
                buckets.emplace(std::move(elem));
            }
        }
    };
    using Table = HashMap<NGramHash, Histogram, TrivialHash>;
    Table table;
    MarkovModelParameters params;
    std::vector<CodePoint> code_points;
    
    static constexpr CodePoint BEGIN = -1;
    
    static constexpr CodePoint END = -2;
    static NGramHash hashContext(const CodePoint * begin, const CodePoint * end)
    {
        return CRC32Hash()(StringRef(reinterpret_cast<const char *>(begin), (end - begin) * sizeof(CodePoint)));
    }
    
    static CodePoint readCodePoint(const char *& pos, const char * end)