// Copyright (c) CypherCore All rights reserved. // Licensed under the GNU GENERAL PUBLIC LICENSE. See LICENSE file in the project root for full license information. namespace System.Collections.Generic { public class MultiMapEnumerator : IEnumerator> { MultiMap _map; IEnumerator _keyEnumerator; IEnumerator _valueEnumerator; public MultiMapEnumerator(MultiMap map) { _map = map; Reset(); } object IEnumerator.Current { get { return Current; } } public KeyValuePair Current { get { return new KeyValuePair(_keyEnumerator.Current, _valueEnumerator.Current); } } public void Dispose() { _keyEnumerator = null; _valueEnumerator = null; _map = null; } public bool MoveNext() { if (!_valueEnumerator.MoveNext()) { if (!_keyEnumerator.MoveNext()) return false; _valueEnumerator = _map[_keyEnumerator.Current].GetEnumerator(); _valueEnumerator.MoveNext(); return true; } return true; } public void Reset() { _keyEnumerator = _map.Keys.GetEnumerator(); _valueEnumerator = new List().GetEnumerator(); } } public class SortedMultiMapEnumerator : IEnumerator> { SortedMultiMap _map; IEnumerator _keyEnumerator; IEnumerator _valueEnumerator; public SortedMultiMapEnumerator(SortedMultiMap map) { _map = map; Reset(); } object IEnumerator.Current { get { return Current; } } public KeyValuePair Current { get { return new KeyValuePair(_keyEnumerator.Current, _valueEnumerator.Current); } } public void Dispose() { _keyEnumerator = null; _valueEnumerator = null; _map = null; } public bool MoveNext() { if (!_valueEnumerator.MoveNext()) { if (!_keyEnumerator.MoveNext()) return false; _valueEnumerator = _map[_keyEnumerator.Current].GetEnumerator(); _valueEnumerator.MoveNext(); return true; } return true; } public void Reset() { _keyEnumerator = _map.Keys.GetEnumerator(); _valueEnumerator = new List().GetEnumerator(); } } }