コード例 #1
0
        public EpsgCrs GetByKey(uint targetKey)
        {
            var hasMetrics = _areFileMetricsRead;

            if (hasMetrics)
            {
                if (targetKey < _lowKey || targetKey > _highKey)
                {
                    return(null);
                }
            }

            using (var reader = DataFile.Get()) {
                if (!hasMetrics)
                {
                    ReadFileMetrics(reader);
                    if (targetKey < _lowKey || targetKey > _highKey)
                    {
                        return(null);
                    }
                }

                return(GetByBinarySearch(targetKey, reader.BinaryReader));
            }
        }
コード例 #2
0
        private EpsgDataResourceReaderNumbers()
        {
            _preloadDouble = new double[8];
            using (var reader = ReaderDouble.Get(0)) {
                for (var i = 0; i < _preloadDouble.Length; ++i)
                {
                    _preloadDouble[i] = reader.BinaryReader.ReadDouble();
                }
            }

            _preloadInt = new int[16];
            using (var reader = ReaderInt.Get(0)) {
                for (var i = 0; i < _preloadInt.Length; ++i)
                {
                    _preloadInt[i] = reader.BinaryReader.ReadInt32();
                }
            }

            _preloadShort = new short[32];
            using (var reader = ReaderShort.Get(0)) {
                for (var i = 0; i < _preloadShort.Length; ++i)
                {
                    _preloadShort[i] = reader.BinaryReader.ReadInt16();
                }
            }
        }
コード例 #3
0
 static EpsgDataResourceReaderText()
 {
     _preload = new string[64];
     using (var datReader = DatReader.Get())
         using (var txtReader = TxtReader.Get()) {
             for (int i = 0; i < _preload.Length; ++i)
             {
                 var word = ReadWord(i, datReader.BinaryReader, txtReader.BinaryReader);
                 _preload[i] = String.IsInterned(word) ?? word;
             }
         }
 }
コード例 #4
0
 public EpsgParameterUsage[] GetParameterUsages()
 {
     Contract.Ensures(Contract.Result <EpsgParameterUsage[]>() != null);
     if (_usagesCache == null)
     {
         using (var reader = _dataFile.Get()) {
             _usagesCache = ReadParameterUsages(reader.BinaryReader);
         }
     }
     Contract.Assume(_usagesCache != null);
     return((EpsgParameterUsage[])_usagesCache.Clone()); // always return a new array to prevent mutation
 }
コード例 #5
0
        public IEnumerable <TValue> ReadAllValues()
        {
            using (var reader = DataFile.Get()) {
                if (!_areFileMetricsRead)
                {
                    ReadFileMetrics(reader);
                }

                reader.CoreStream.Seek(sizeof(ushort), SeekOrigin.Begin);
                for (ushort i = 0; i < _count; ++i)
                {
                    var key   = reader.BinaryReader.ReadUInt16();
                    var value = ReadValue(key, reader.BinaryReader);
                    yield return(value);
                }
            }
        }
コード例 #6
0
 public string GetString(ushort stringOffset)
 {
     Contract.Requires(stringOffset != UInt16.MaxValue);
     if (stringOffset == UInt16.MaxValue)
     {
         return(String.Empty);
     }
     int[] wordIndices;
     using (var reader = _wordPointerResource.Get(stringOffset)) {
         wordIndices = Read7BitArray(reader.BinaryReader);
     }
     return(BuildWordString(wordIndices));
 }
コード例 #7
0
        protected override int[] ReadValue(ushort key, BinaryReader reader)
        {
            var c      = reader.ReadUInt16();
            var offset = reader.ReadInt32();
            var result = new int[c];

            if (c == 1)
            {
                result[0] = offset; // value stored as offset in this case
            }
            else
            {
                using (var setReader = _secondaryDataFile.Get(sizeof(ushort) + (CountValue * RecordTotalSize) + (offset * sizeof(int)))) {
                    for (int i = 0; i < result.Length; ++i)
                    {
                        result[i] = setReader.BinaryReader.ReadInt32();
                    }
                }
            }
            return(result);
        }
コード例 #8
0
        protected override EpsgConcatenatedCoordinateOperationInfo ReadValue(ushort key, BinaryReader reader)
        {
            var sourceCrsCode = reader.ReadUInt16();
            var targetCrsCode = reader.ReadUInt16();
            var areaCode      = reader.ReadUInt16();
            var deprecated    = reader.ReadByte() != 0;
            var name          = TextReader.GetString(reader.ReadUInt16());

            Contract.Assume(!String.IsNullOrEmpty(name));
            var stepCodes      = new ushort[reader.ReadByte()];
            var stepFileOffset = reader.ReadUInt16();

            using (var readerPath = _pathDataFile.Get(stepFileOffset)) {
                for (int i = 0; i < stepCodes.Length; i++)
                {
                    stepCodes[i] = readerPath.BinaryReader.ReadUInt16();
                }
            }
            return(new EpsgConcatenatedCoordinateOperationInfo(
                       key, sourceCrsCode, targetCrsCode, areaCode,
                       deprecated, name, stepCodes
                       ));
        }