예제 #1
0
        public IEnumerable <IDataItem> GetAll(IKey key)
        {
            List <DataBlockInfo> offsets = null;

            if (isSealed)
            {
                offsets = GetOffsetListFromHeader(key);
            }
            else if (GetHelper(key))
            {
                offsets = index[key];
            }
            else
            {
                return(null);
            }

            DataItems <KeyType, ValType> di = null;

            if (offsets != null)
            {
                di = new DataItems <KeyType, ValType>(offsets, this, key);
            }
            return(di);
        }
예제 #2
0
        public IEnumerable <IDataItem> GetAllWithSkip(IKey key, long startTimeStamp, long endTimeStamp, long skip)
        {
            List <DataBlockInfo> allOffsets = null;

            if (isSealed)
            {
                allOffsets = GetOffsetListFromHeader(key);
            }
            else if (GetHelper(key))
            {
                allOffsets = index[key];
            }
            else
            {
                return(null);
            }

            DataItems <KeyType, ValType> di = null;

            if (allOffsets != null)
            {
                List <DataBlockInfo> requiredOffsets = new List <DataBlockInfo>();

                foreach (DataBlockInfo datablockinfo in allOffsets)
                {
                    if (datablockinfo.ts > endTimeStamp)
                    {
                        break;
                    }
                    else if (datablockinfo.ts >= startTimeStamp && datablockinfo.ts <= endTimeStamp && (datablockinfo.ts - startTimeStamp) % skip == 0)
                    {
                        requiredOffsets.Add(datablockinfo);
                    }
                }

                di = new DataItems <KeyType, ValType>(requiredOffsets, this, key);
            }
            return(di);
        }
예제 #3
0
        public IEnumerable <IDataItem> GetAll(IKey key, long startTimeStamp, long endTimeStamp)
        {
            if (logger != null)
            {
                logger.Log("Start ValueDataStream Get Offset");
            }
            List <DataBlockInfo> allOffsets = null;

            if (isSealed)
            {
                allOffsets = GetOffsetListFromHeader(key);
            }
            else if (GetHelper(key))
            {
                allOffsets = index[key];
            }
            else
            {
                return(null);
            }


            DataItems <KeyType, ValType> di = null;

            if (allOffsets != null)
            {
                List <DataBlockInfo> offsets = new List <DataBlockInfo>();
                int startTSIndex             = allOffsets.BinarySearch(new DataBlockInfo(startTimeStamp, 0), new DataBlockInfoComparer());
                int endTSIndex = allOffsets.BinarySearch(new DataBlockInfo(endTimeStamp, 0), new DataBlockInfoComparer());


                if (startTSIndex < 0)
                {
                    startTSIndex = ~startTSIndex;
                }
                if (endTSIndex < 0)
                {
                    endTSIndex = ~endTSIndex - 1;
                }


                for (int i = startTSIndex; i <= endTSIndex; i++)
                {
                    offsets.Add(allOffsets.ElementAt(i));
                }

                /*
                 * foreach (DataBlockInfo tso in allOffsets)
                 * {
                 *  if (tso.Between(startTimeStamp, endTimeStamp))
                 *  {
                 *      offsets.Add(tso);
                 *  }
                 * }
                 */
                di = new DataItems <KeyType, ValType>(offsets, this, key);
                if (logger != null)
                {
                    logger.Log("End ValueDataStream Get Offset");
                }
            }
            return(di);
        }