/// <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; }
/// <summary> /// Constructor. /// </summary> /// <param name="underlying"></param> /// <param name="range"></param> public OrderedListDictionaryKeys( OrderedListDictionary <TK, TV> underlying, BoundRange <TK> range) { _underlying = underlying; _range = range; }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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(); } }
/// <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()); }
/// <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); }
/// <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); }
/// <summary> /// Constructor. /// </summary> /// <param name="underlying"></param> public OrderedListDictionaryKeys(OrderedListDictionary <TK, TV> underlying) { _underlying = underlying; _range = new BoundRange <TK>(null, null, _underlying.KeyComparer); }
/// <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); }
public IEnumerable <KeyValuePair <TK, TV> > EnumerateRange(BoundRange <TK> range) { return(EnumerateRange( range.Lower, range.Upper)); }
/// <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)); }