Ejemplo n.º 1
0
 /// <summary>
 /// Constructor.
 /// </summary>
 /// <param name="underlying"></param>
 /// <param name="range"></param>
 public BTreeDictionaryValues(
     BTree <TK, KeyValuePair <TK, TV> > underlying,
     BoundRange <TK> range)
 {
     _underlying = underlying;
     _range      = range;
 }
Ejemplo n.º 2
0
 /// <summary>
 /// Constructor.
 /// </summary>
 /// <param name="underlying"></param>
 /// <param name="range"></param>
 public OrderedListDictionaryKeys(
     OrderedListDictionary <TK, TV> underlying,
     BoundRange <TK> range)
 {
     _underlying = underlying;
     _range      = range;
 }
Ejemplo n.º 3
0
 /// <summary>
 ///     Constructor.
 /// </summary>
 public BTreeDictionaryView(
     BTreeDictionary <TK, TV> parent,
     BoundRange <TK> range)
 {
     _parent = parent;
     _range  = range;
     _keys   = new BTreeDictionaryKeys <TK, TV>(_parent.Underlying, _range);
     _values = new BTreeDictionaryValues <TK, TV>(_parent.Underlying, _range);
 }
Ejemplo n.º 4
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="parent"></param>
 /// <param name="range"></param>
 internal OrderedListDictionaryView(
     OrderedListDictionary <TK, TV> parent,
     BoundRange <TK> range)
 {
     _parent = parent;
     _range  = range;
     _keys   = new OrderedListDictionaryKeys <TK, TV>(_parent, _range);
     _values = new OrderedListDictionaryValues <TK, TV>(_parent, _range);
 }
Ejemplo n.º 5
0
        /// <summary>
        /// Initializes a new instance of the <see cref="OrderedListDictionary{TK,TV}"/> class.
        /// </summary>
        /// <param name="keyComparer">The key comparer.</param>
        public OrderedListDictionary(IComparer <TK> keyComparer)
        {
            _itemList     = new List <KeyValuePair <TK, TV> >();
            _itemComparer = new KeyValuePairComparer(keyComparer, false);

            var range = new BoundRange <TK>(null, null, keyComparer);

            _keys   = new OrderedListDictionaryKeys <TK, TV>(this, range);
            _values = new OrderedListDictionaryValues <TK, TV>(this, range);
        }
Ejemplo n.º 6
0
        /// <summary>
        /// Initializes a new instance of the <see cref="OrderedListDictionary{TK,TV}" /> class.
        /// </summary>
        /// <param name="itemList">The item list.</param>
        /// <param name="comparer">The comparer.</param>
        internal OrderedListDictionary(
            List <KeyValuePair <TK, TV> > itemList,
            KeyValuePairComparer comparer)
        {
            _itemList     = itemList;
            _itemComparer = comparer;

            var range = new BoundRange <TK>(null, null, comparer.KeyComparer);

            _keys   = new OrderedListDictionaryKeys <TK, TV>(this, range);
            _values = new OrderedListDictionaryValues <TK, TV>(this, range);
        }
Ejemplo n.º 7
0
        /// <summary>
        /// Initializes a new instance of the <see cref="OrderedListDictionary{TK,TV}"/> class.
        /// </summary>
        public OrderedListDictionary()
        {
            var comparer = Comparers.Default <TK>();

            //var comparer = Comparer<TK>.Default;
            _itemList     = new List <KeyValuePair <TK, TV> >();
            _itemComparer = new KeyValuePairComparer(comparer, false);

            var range = new BoundRange <TK>(null, null, comparer);

            _keys   = new OrderedListDictionaryKeys <TK, TV>(this, range);
            _values = new OrderedListDictionaryValues <TK, TV>(this, range);
        }
Ejemplo n.º 8
0
        /// <summary>
        ///     Returns an enumerator starting at a key-value with the greatest key less than
        ///     or equal to the given key.
        /// </summary>
        /// <returns></returns>
        internal static IEnumerable <KeyValuePair <TK, TV> > Enumerate <TK, TV>(
            BTree <TK, KeyValuePair <TK, TV> > underlying,
            BoundRange <TK> range)
        {
            var isEnd  = GetEndPredicate(range.Upper, range.Comparer);
            var cursor = GetStartCursor(underlying, range.Lower);

            while (cursor.IsNotEnd && !isEnd(cursor.Key))
            {
                yield return(cursor.Value);

                cursor.MoveNext();
            }
        }
Ejemplo n.º 9
0
        /// <summary>
        /// Returns the count of items in the underlying btree within a bounded range.
        /// </summary>
        /// <param name="underlying"></param>
        /// <param name="range"></param>
        /// <typeparam name="TK"></typeparam>
        /// <typeparam name="TV"></typeparam>
        /// <returns></returns>
        internal static int Count <TK, TV>(
            BTree <TK, KeyValuePair <TK, TV> > underlying,
            BoundRange <TK> range)
        {
            if (range.IsUnbounded)
            {
                return(underlying.Count);
            }

            // This is a much more complex question when there is a lower bound
            // or upper bound.  In this case, we *currently* need to count the
            // items between the lower and upper found.
            return(Enumerate(underlying, range).Count());
        }
Ejemplo n.º 10
0
        /// <summary>
        /// Returns the last key-value pair in the dictionary.  If the dictionary
        /// is empty, this method throws an InvalidOperationException.
        /// </summary>
        internal static KeyValuePair <TK, TV> LastKeyValuePair <TK, TV>(
            BTree <TK, KeyValuePair <TK, TV> > underlying,
            BoundRange <TK> range)
        {
            var upper  = range.Upper;
            var cursor = upper != null
                ? upper.IsInclusive
                    ? underlying.GreaterThanOrEqual(upper.Value, underlying.RootCursor)
                    : underlying.GreaterThan(upper.Value, underlying.RootCursor)
                : underlying.End().MovePrevious();

            if (cursor.IsEnd)
            {
                throw new InvalidOperationException();
            }

            return(cursor.Value);
        }
Ejemplo n.º 11
0
        /// <summary>
        /// Returns the first key-value pair in the dictionary.  If the dictionary
        /// is empty, this method throws an InvalidOperationException.
        /// </summary>
        internal static KeyValuePair <TK, TV> FirstKeyValuePair <TK, TV>(
            BTree <TK, KeyValuePair <TK, TV> > underlying,
            BoundRange <TK> range)
        {
            var lower  = range.Lower;
            var cursor = lower != null
                ? lower.IsInclusive
                    ? underlying.LessThanOrEqual(lower.Value, underlying.RootCursor)
                    : underlying.LessThan(lower.Value, underlying.RootCursor)
                : underlying.Begin();

            if (cursor.IsEnd)
            {
                throw new InvalidOperationException();
            }

            return(cursor.Value);
        }
Ejemplo n.º 12
0
 /// <summary>
 /// Constructor.
 /// </summary>
 /// <param name="underlying"></param>
 public OrderedListDictionaryKeys(OrderedListDictionary <TK, TV> underlying)
 {
     _underlying = underlying;
     _range      = new BoundRange <TK>(null, null, _underlying.KeyComparer);
 }
Ejemplo n.º 13
0
 /// <summary>
 /// Constructor.
 /// </summary>
 /// <param name="underlying"></param>
 public BTreeDictionaryValues(BTree <TK, KeyValuePair <TK, TV> > underlying)
 {
     _underlying = underlying;
     _range      = new BoundRange <TK>(null, null, _underlying.KeyComparer);
 }
Ejemplo n.º 14
0
 public IEnumerable <KeyValuePair <TK, TV> > EnumerateRange(BoundRange <TK> range)
 {
     return(EnumerateRange(
                range.Lower,
                range.Upper));
 }
Ejemplo n.º 15
0
 /// <summary>
 /// Returns the count within a range.
 /// </summary>
 /// <param name="range"></param>
 /// <returns></returns>
 public int CountInRange(BoundRange <TK> range)
 {
     return(CountInRange(range.Lower, range.Upper));
 }