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"); } } }
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)); }