public BluedotDictionary(LazyLoadingBehaviour lazyLoading = null, DirtyTrackingBehaviour dirtyTracking = null, ReadOnlyBehaviour readOnly = null, WeakReferenceBehaviour weakReference = null) { LazyLoading = lazyLoading; DirtyTracking = dirtyTracking; ReadOnly = readOnly; WeakReference = weakReference; if (LazyLoading != null && LazyLoading.Values) { _lazyKeys = new HashSet <TKey>(); } if (DirtyTracking != null && DirtyTracking.Values) { _dirtyKeys = new HashSet <TKey>(); } if (WeakReference != null && WeakReference.Values) { _weakDictionary = new Dictionary <TKey, WeakReference <TValue> >(); } else { _strongDictionary = new Dictionary <TKey, TValue>(); } }
public static ISet <T> AsReadOnlySet <T>(this ISet <T> set, ReadOnlyBehaviour behaviour = ReadOnlyBehaviour.CreateProxy) { switch (behaviour) { case ReadOnlyBehaviour.CastIfPossible: case ReadOnlyBehaviour.CreateProxy: return(new SetProxy <T>(set)); case ReadOnlyBehaviour.CopyElements: return(new SetProxy <T>(new HashSet <T>(set))); default: throw new ArgumentException(); } }
public static IReadOnlyList <T> AsReadOnly <T>(this IList <T> list, ReadOnlyBehaviour behaviour = ReadOnlyBehaviour.CastIfPossible) { switch (behaviour) { case ReadOnlyBehaviour.CastIfPossible: return(list as IReadOnlyList <T> ?? new ListProxy <T>(list)); case ReadOnlyBehaviour.CreateProxy: return(new ListProxy <T>(list)); case ReadOnlyBehaviour.CopyElements: return(new List <T>(list)); default: throw new ArgumentException(); } }
public static IReadOnlyCollection <T> AsReadOnly <T>(this ICollection <T> collection, ReadOnlyBehaviour behaviour = ReadOnlyBehaviour.CastIfPossible) { switch (behaviour) { case ReadOnlyBehaviour.CastIfPossible: return(collection as IReadOnlyCollection <T> ?? new CollectionProxy <T>(collection)); case ReadOnlyBehaviour.CreateProxy: return(new CollectionProxy <T>(collection)); case ReadOnlyBehaviour.CopyElements: return(new List <T>(collection)); default: throw new ArgumentException(); } }
public static IReadOnlyDictionary <TKey, TValue> AsReadOnly <TKey, TValue>(this IDictionary <TKey, TValue> dictionary, ReadOnlyBehaviour behaviour = ReadOnlyBehaviour.CastIfPossible) { switch (behaviour) { case ReadOnlyBehaviour.CastIfPossible: return(dictionary as IReadOnlyDictionary <TKey, TValue> ?? new DictionaryProxy <TKey, TValue>(dictionary)); case ReadOnlyBehaviour.CreateProxy: return(new DictionaryProxy <TKey, TValue>(dictionary)); case ReadOnlyBehaviour.CopyElements: return(new Dictionary <TKey, TValue>(dictionary)); default: throw new ArgumentException(); } }