|
@@ -1,71 +0,0 @@
|
|
-namespace Invercargill {
|
|
|
|
-
|
|
|
|
- public abstract class Associative<TKey, TValue> : Collection<KeyValuePair<TKey, TValue>>, KeyValues<TKey, TValue> {
|
|
|
|
-
|
|
|
|
- public abstract new void @set(TKey key, TValue value);
|
|
|
|
- public abstract bool try_get(TKey key, out TValue value);
|
|
|
|
- public abstract void clear(TKey key);
|
|
|
|
- public abstract bool has(TKey key);
|
|
|
|
-
|
|
|
|
- public virtual Enumerable<TKey> get_keys() {
|
|
|
|
- return select<TKey>(kv => kv.key);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public virtual Enumerable<TKey> get_values() {
|
|
|
|
- return select<TKey>(kv => kv.key);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public virtual TValue? get_or_default(TKey key) {
|
|
|
|
- TValue val;
|
|
|
|
- if(try_get(key, out val)) {
|
|
|
|
- return val;
|
|
|
|
- }
|
|
|
|
- return null;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public virtual new TValue @get(TKey key) throws IndexError {
|
|
|
|
- TValue val;
|
|
|
|
- if(try_get(key, out val)) {
|
|
|
|
- return val;
|
|
|
|
- }
|
|
|
|
- throw new IndexError.KEY_NOT_FOUND("The specified key was not found in the associative collection");
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public virtual void set_all(Enumerable<KeyValuePair<TKey, TValue>> key_values) {
|
|
|
|
- foreach (var pair in key_values) {
|
|
|
|
- @set(pair.key, pair.value);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public virtual void clear_all(Enumerable<TKey> keys) {
|
|
|
|
- foreach (var key in keys) {
|
|
|
|
- clear(key);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public virtual Enumerable<KeyValuePair<TKey, TValue>> get_all(Enumerable<TKey> keys) {
|
|
|
|
- var vec = new Vector<KeyValuePair<TKey, TValue>>();
|
|
|
|
- foreach (var key in keys) {
|
|
|
|
- TValue item;
|
|
|
|
- if(try_get(key, out item)) {
|
|
|
|
- vec.add(new KeyValuePair<TKey, TValue>(key, item));
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- return vec.seal();
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public override void add (KeyValuePair<TKey, TValue> item) {
|
|
|
|
- @set(item.key, item.value);
|
|
|
|
- }
|
|
|
|
- public override void remove_first_where (Invercargill.PredicateDelegate<Invercargill.KeyValuePair<TKey,TValue>> predicate) {
|
|
|
|
- var key = first_or_default(predicate);
|
|
|
|
- if(key != null) {
|
|
|
|
- clear(key);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- public override void remove_where (Invercargill.PredicateDelegate<Invercargill.KeyValuePair<TKey,TValue>> predicate) {
|
|
|
|
- clear_all(where(predicate).select<TKey>(i => i.key));
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
-}
|
|
|