// Copyright Epic Games, Inc. All Rights Reserved. using System; using System.Collections.Generic; using System.Text; using System.Xml.Serialization; using System.Runtime.Serialization; using System.Collections; namespace UnrealControls { [Serializable] public struct SerializableKeyValuePair { TKey mKey; TValue mValue; public TKey Key { get { return mKey; } set { mKey = value; } } public TValue Value { get { return mValue; } set { mValue = value; } } public SerializableKeyValuePair(KeyValuePair Pair) { mKey = Pair.Key; mValue = Pair.Value; } } [Serializable] public class SerializableDictionary : ICollection>, IEnumerable>, IEnumerable { Dictionary mInternalDictionary = new Dictionary(); public SerializableDictionary() { } protected SerializableDictionary(SerializationInfo si, StreamingContext context) { IDictionary iDic = mInternalDictionary; List> Data = si.GetValue("Data", typeof(List>)) as List>; foreach(SerializableKeyValuePair CurPair in Data) { iDic.Add(CurPair.Key, CurPair.Value); } } #region IDictionary Members public void Add(TKey key, TValue value) { mInternalDictionary.Add(key, value); } public bool ContainsKey(TKey key) { return mInternalDictionary.ContainsKey(key); } [XmlIgnore] public ICollection Keys { get { return mInternalDictionary.Keys; } } public bool Remove(TKey key) { return mInternalDictionary.Remove(key); } public bool TryGetValue(TKey key, out TValue value) { return mInternalDictionary.TryGetValue(key, out value); } [XmlIgnore] public ICollection Values { get { return mInternalDictionary.Values; } } [XmlIgnore] public TValue this[TKey key] { get { return mInternalDictionary[key]; } set { mInternalDictionary[key] = value; } } #endregion #region ICollection> Members public void Add(SerializableKeyValuePair item) { IDictionary iDic = mInternalDictionary; iDic.Add(new KeyValuePair(item.Key, item.Value)); } public void Clear() { mInternalDictionary.Clear(); } public bool Contains(SerializableKeyValuePair item) { IDictionary iDic = mInternalDictionary; return iDic.Contains(new KeyValuePair(item.Key, item.Value)); } public void CopyTo(SerializableKeyValuePair[] array, int arrayIndex) { foreach(KeyValuePair CurPair in mInternalDictionary) { array[arrayIndex] = new SerializableKeyValuePair(CurPair); ++arrayIndex; } } [XmlIgnore] public int Count { get { return mInternalDictionary.Count; } } [XmlIgnore] public bool IsReadOnly { get { IDictionary iDic = mInternalDictionary; return iDic.IsReadOnly; } } public bool Remove(SerializableKeyValuePair item) { IDictionary iDic = mInternalDictionary; return iDic.Remove(new KeyValuePair(item.Key, item.Value)); } #endregion #region IEnumerable> Members public IEnumerator> GetEnumerator() { foreach(KeyValuePair CurPair in mInternalDictionary) { yield return new SerializableKeyValuePair(CurPair); } } #endregion #region IEnumerable Members System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() { foreach(KeyValuePair CurPair in mInternalDictionary) { yield return new SerializableKeyValuePair(CurPair); } } #endregion } }