public static bool TestKeyNamesGeneration(TextWriter writer, PsbReader reader)
        {
            KeyNamesGenerator generator = new KeyNamesGenerator(
                new StandardKeyNamesEncoder()
            {
                OutputDebug = false
            }, false);
            var keyNames = reader.KeyNames;

            for (uint i = 0; i < keyNames.Count; ++i)
            {
                writer.WriteLine(keyNames[i]);
                generator.AddString(keyNames[i]);
            }
            generator.Generate();
            writer.WriteLine("--------");
            var keyNamesNew = new PsbReader.KeyNamesReader(generator.ValueOffsets, generator.Tree, generator.Tails);

            for (uint i = 0; i < keyNamesNew.Count; ++i)
            {
                writer.WriteLine(keyNamesNew[i]);
            }

            for (uint i = 0; i < keyNames.Count; ++i)
            {
                if (keyNamesNew[i] != keyNames[i])
                {
                    return(false);
                }
            }
            return(true);
        }
        void Prepare()
        {
            // Reset build objects
            keyNamesGen = new KeyNamesGenerator(new StandardKeyNamesEncoder(), Version == 1);
            stringsCache.Clear();
            streamsCache.Clear();
            bStreamsCache.Clear();

            PrepareNode(root);
            keyNamesGen.Generate();
            // Sort strings
            stringsCache.Sort((x, y) => string.CompareOrdinal(x, y));
            SortStreamNodes(false);
            if (Version >= 4)
            {
                SortStreamNodes(true);
            }
        }