public void WriteInterval(DataStructures.CustomInterval interval) { if (interval.IsEmpty()) { // marks the last interval _writer.WriteOpt(interval.Start); _writer.WriteOpt(interval.End); _writer.WriteOpt(0); // for the null string dictionary _writer.WriteOpt(0); // for the null non-string dictionary return; } if (interval.ReferenceName != _referenceName) { throw new Exception( $"Unexpected interval in custom interval writer.\nExpected reference name: {_referenceName}, observed reference name: {interval.ReferenceName}"); } if (interval.Type != _intervalType) { throw new Exception( $"Unexpected interval in custom interval writer.\nExpected interval type: {_intervalType}, observed interval type: {interval.Type}"); } _writer.WriteOpt(interval.Start); _writer.WriteOpt(interval.End); if (interval.StringValues != null) { _writer.WriteOpt(interval.StringValues.Count); foreach (var keyVal in interval.StringValues) { _writer.WriteOptUtf8(keyVal.Key); _writer.WriteOptUtf8(keyVal.Value); } } else { _writer.WriteOpt(0); } if (interval.NonStringValues != null) { _writer.WriteOpt(interval.NonStringValues.Count); foreach (var keyVal in interval.NonStringValues) { _writer.WriteOptUtf8(keyVal.Key); _writer.WriteOptUtf8(keyVal.Value); } } else { _writer.WriteOpt(0); } _count++; }
public DataStructures.CustomInterval GetNextCustomInterval() { if (_reachedEnd) { return(null); } var chromosome = _referenceName; var type = _intervalType; var start = _reader.ReadOptInt32(); var end = _reader.ReadOptInt32(); var interval = new DataStructures.CustomInterval(chromosome, start, end, type, null, null); if (interval.IsEmpty()) { _reachedEnd = true; return(null); } var stringDictCount = _reader.ReadOptInt32(); if (stringDictCount > 0) { interval.StringValues = new Dictionary <string, string>(stringDictCount); for (var i = 0; i < stringDictCount; i++) { var key = _reader.ReadUtf8String(); var val = _reader.ReadUtf8String(); interval.StringValues.Add(key, val); } } var nonStringDictCount = _reader.ReadOptInt32(); if (nonStringDictCount > 0) { interval.NonStringValues = new Dictionary <string, string>(nonStringDictCount); for (var i = 0; i < nonStringDictCount; i++) { var key = _reader.ReadUtf8String(); var val = _reader.ReadUtf8String(); interval.NonStringValues.Add(key, val); } } return(interval); }