예제 #1
0
            public void Remove(TValue value)
            {
                TKey key;

                lock (ValuesToKey) {
                    key = ValuesToKey[value];
                    ValuesToKey.Remove(value);
                }

                lock (KeyToValues) {
                    HashSet <TValue> values;
                    if (!KeyToValues.TryGetValue(key, out values))
                    {
                        return;
                    }

                    lock (values) {
                        values.Remove(value);
                        if (values.Count == 0)
                        {
                            KeyToValues.Remove(key);
                        }
                    }
                }
            }
예제 #2
0
            public IEnumerable <TValue> GetFromKey(TKey key)
            {
                lock (KeyToValues) {
                    HashSet <TValue> values;
                    if (KeyToValues.TryGetValue(key, out values))
                    {
                        return(values);
                    }
                }

                return(Enumerable.Empty <TValue>());
            }
예제 #3
0
            public void Add(TKey key, TValue value)
            {
                lock (KeyToValues) {
                    HashSet <TValue> values;
                    if (!KeyToValues.TryGetValue(key, out values))
                    {
                        values = new HashSet <TValue>();
                        KeyToValues.Add(key, values);
                    }

                    lock (values)
                        values.Add(value);
                }

                lock (ValuesToKey) ValuesToKey.Add(value, key);
            }