コード例 #1
0
            private SbnFeature[] ReadBins(int nid, SbnBinIndex binIndex)
            {
                var numFeatures = binIndex.GetNumFeatures(nid);
                var res         = new SbnFeature[numFeatures];

                if (numFeatures == 0)
                {
                    return(res);
                }

                var firstBinIndex = binIndex.GetFirstBinIndex(nid);
                var numBins       = (int)Math.Ceiling(numFeatures / 100d);

                for (var i = 0; i < numBins; i++)
                {
                    using (var ms = new BinaryReader(new MemoryStream(_tree.GetBinData(firstBinIndex + i))))
                    {
                        var bin   = new SbnBin();
                        var binId = bin.Read(ms);
                        if (binId != firstBinIndex + i)
                        {
                            throw new SbnException("Corrupt sbn file");
                        }
                        bin.CopyTo(res, i * 100);
                    }
                }
                return(res);
            }
コード例 #2
0
        /// <summary>
        /// Creates an istance of this class
        /// </summary>
        /// <param name="sbnFilename"></param>
        /// <param name="sbxFilename"></param>
        private SbnQueryOnlyTree(string sbnFilename, string sbxFilename)
        {
            _sbnStream = new FileStream(sbnFilename, FileMode.Open, FileAccess.Read, FileShare.Read, 8192);
            _sbnHeader = new SbnHeader();
            var sbnReader = new BinaryReader(_sbnStream);

            _sbnHeader.Read(sbnReader);
            _sbnBinIndex = SbnBinIndex.Read(sbnReader);

            _sbxStream = new FileStream(sbxFilename, FileMode.Open, FileAccess.Read, FileShare.Read, 8192);

            FirstLeafNodeId = (int)Math.Pow(2, GetNumberOfLevels(_sbnHeader.NumRecords) - 1);
            MaxCacheLevel   = DefaultMaxCacheLevel;

            SbnQueryOnlyNode.CreateRoot(this);
            _sbxStream.Position = 0;
        }