/* * Copyright (C) 2012-2020 CypherCore * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ 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(); } } }