예제 #1
0
        /// <summary>
        ///		Find first leaf data [sub]folder and data file in it containing items dated at, earlier or later than the
        ///		<paramref name="seekTime"/>
        /// </summary>
        /// <param name="seekTime">
        ///		Specifies the start of date-time range (inclusive) to find data in
        /// </param>
        /// <param name="backwards">
        ///		To which side from <paramref name="seekTime"/> to look for data
        /// </param>
        /// <returns>
        ///		First (according to <paramref name="seekTime"/>) data file containing the required data;
        ///		<see langword="null"/> if none found
        /// </returns>
        public IRepositoryFile Seek(DateTime seekTime, bool backwards)
        {
            _log.DebugFormat("Seeking data folder for reader, descr: {0}"
                             , this.IsVirtualRoot ? "Virtual Root" : this._folderDescriptor.ToString());

            IRepositoryFileName dataFile = null;
            IRepositoryFile     retval   = null;

            if (IsLeafFolder)
            {
                LoadFiles(false);
                dataFile = _dataFileBrowser.GetFile(seekTime, backwards);
                if (null != dataFile)
                {
                    _log.DebugFormat("Seek found file: {0}", dataFile.FileName);
                    retval = GetContainedRepositoryFile(dataFile);
                }
            }
            else
            {
                LoadSubFolders(false);

                IDirectedEnumerable <IDataFolder> sequence = GetSubfoldersSequence(seekTime, backwards);

                for (
                    IEnumerator <IDataFolder> scanner = sequence.GetEnumerator();
                    scanner.MoveNext() && null == retval;
                    )
                {
                    retval = scanner.Current.Seek(seekTime, backwards);
                }
            }
            return(retval);
        }
예제 #2
0
        // Iterate over ]x1...]
        public static void IterExcEnd <T>(ISorted <T> coll, T x1)
            where T : IComparable <T>
        {
            var x1HasSucc = Successor(coll, x1, out var x1Succ);
            IDirectedEnumerable <T> range = x1HasSucc ? coll.RangeFrom(x1Succ) : new ArrayList <T>();

            Print(range);
        }
예제 #3
0
        // Iterate over ]x1...x2[
        public static void IterExcExc <T>(ISorted <T> coll, T x1, T x2)
            where T : IComparable <T>
        {
            bool x1HasSucc = Successor(coll, x1, out T x1Succ);
            IDirectedEnumerable <T> range = x1HasSucc ? coll.RangeFromTo(x1Succ, x2) : new ArrayList <T>();

            Print(range);
        }
예제 #4
0
        // Iterate over [...x2]
        public static void IterBeginInc <T>(ISorted <T> coll, T x2)
            where T : IComparable <T>
        {
            var x2HasSucc = Successor(coll, x2, out var x2Succ);
            IDirectedEnumerable <T> range = x2HasSucc ? coll.RangeTo(x2Succ) : coll.RangeAll();

            Print(range);
        }
예제 #5
0
        // Iterate over ]x1...]

        public static void IterExcEnd <T>(ISorted <T> coll, T x1)
            where T : IComparable <T>
        {
            bool x1HasSucc = Successor(coll, x1, out T x1Succ);
            IDirectedEnumerable <T> range =
                x1HasSucc ? coll.RangeFrom(x1Succ) : new ArrayList <T>();

            foreach (T x in range)
            {
                Console.Write("{0} ", x);
            }
            Console.WriteLine();
        }
예제 #6
0
        // Iterate over [...x2]

        public static void IterBeginInc <T>(ISorted <T> coll, T x2)
            where T : IComparable <T>
        {
            bool x2HasSucc = Successor(coll, x2, out T x2Succ);
            IDirectedEnumerable <T> range =
                x2HasSucc ? coll.RangeTo(x2Succ) : coll.RangeAll();

            foreach (T x in range)
            {
                Console.Write("{0} ", x);
            }
            Console.WriteLine();
        }
        // Iterate over [x1...x2]

        public static void IterIncInc <T>(ISorted <T> coll, T x1, T x2)
            where T : IComparable <T>
        {
            T    x2Succ;
            bool x2HasSucc = Successor(coll, x2, out x2Succ);
            IDirectedEnumerable <T> range =
                x2HasSucc ? coll.RangeFromTo(x1, x2Succ) : coll.RangeFrom(x1);

            foreach (T x in range)
            {
                Console.Write("{0} ", x);
            }
            Console.WriteLine();
        }
예제 #8
0
 public ProjectedDirectedEnumerable(IDirectedEnumerable <KeyValuePair <K, V> > directedpairs) : base(directedpairs)
 {
 }
예제 #9
0
 public MappedDirectedEnumerable(IDirectedEnumerable <T> directedenumerable)
 {
     this.directedenumerable = directedenumerable;
 }
예제 #10
0
 private static void Print <T>(IDirectedEnumerable <T> items)
 {
     Console.WriteLine(string.Join(", ", items));
 }
예제 #11
0
 /// <summary>
 /// Wrap a directed enumerable in a read-only wrapper
 /// </summary>
 /// <param name="directedenumerable">the collection to wrap</param>
 public GuardedDirectedEnumerable(IDirectedEnumerable <T> directedenumerable)
     : base(directedenumerable)
 {
     this.directedenumerable = directedenumerable;
 }
예제 #12
0
 public MappedDirectedEnumerable(IDirectedEnumerable<T> directedEnumerable)
 {
     _directedEnumerable = directedEnumerable;
 }