Esempio n. 1
0
        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++;
        }
Esempio n. 2
0
        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);
        }