示例#1
0
        private Table(string path, VersionSet versionSet)
        {
            m_versionSet = versionSet;
            m_path       = path;

            if (m_versionSet.HasComparator)
            {
                if (m_versionSet.Comparator == "leveldb.BytewiseComparator")
                {
                    m_comparer = new BytewiseComparator();
                }
                else
                {
                    throw new Exception("Not supported yet");
                }
            }
        }
示例#2
0
        public static Table OpenRead(string directory)
        {
            // get the filename of the manifest.
            var current = File.ReadAllLines(Path.Combine(directory, "CURRENT"));

            if (current.Length < 1)
            {
                throw new Exception("Invalid CURRENT file.");
            }

            // read the manifest file.
            var versionSet = new VersionSet();

            var block = new byte[32768];

            using (var file = File.OpenRead(Path.Combine(directory, current[0])))
            {
                var recordReader = new RecordReader();
                int numRead      = 0;
                do
                {
                    numRead = file.Read(block);
                    if (numRead > 0)
                    {
                        var sequence = new ReadOnlySequence <byte>(block);
                        var reader   = new SequenceReader <byte>(sequence);
                        while (reader.Remaining > 6)
                        {
                            if (!recordReader.From(ref reader, record => versionSet.Add(record)))
                            {
                                break;
                            }
                        }
                    }
                } while (numRead >= block.Length);
            }

            return(new Table(directory, versionSet));
        }