wasSharp – Diff between revs 25 and 27

Subversion Repositories:
Rev:
Only display areas with differencesRegard whitespace
Rev 25 Rev 27
1 /////////////////////////////////////////////////////////////////////////// 1 ///////////////////////////////////////////////////////////////////////////
2 // Copyright (C) Wizardry and Steamworks 2013 - License: GNU GPLv3 // 2 // Copyright (C) Wizardry and Steamworks 2013 - License: GNU GPLv3 //
3 // Please see: http://www.gnu.org/licenses/gpl.html for legal details, // 3 // Please see: http://www.gnu.org/licenses/gpl.html for legal details, //
4 // rights of fair usage, the disclaimer and warranty conditions. // 4 // rights of fair usage, the disclaimer and warranty conditions. //
5 /////////////////////////////////////////////////////////////////////////// 5 ///////////////////////////////////////////////////////////////////////////
6   6  
7 using System; 7 using System;
8 using System.Collections.Generic; 8 using System.Collections.Generic;
9 using System.IO; 9 using System.IO;
10 using System.Xml; 10 using System.Xml;
11 using System.Xml.Schema; 11 using System.Xml.Schema;
12 using System.Xml.Serialization; 12 using System.Xml.Serialization;
13   13  
14 namespace wasSharp.Collections.Generic 14 namespace wasSharp.Collections.Generic
15 { 15 {
16 /// <summary> 16 /// <summary>
17 /// A serializable sorted dictionary class. 17 /// A serializable sorted dictionary class.
18 /// </summary> 18 /// </summary>
19 /// <typeparam name="TKey">the key</typeparam> 19 /// <typeparam name="TKey">the key</typeparam>
20 /// <typeparam name="TValue">the value</typeparam> 20 /// <typeparam name="TValue">the value</typeparam>
21 [XmlRoot("SortedDictionary")] 21 [XmlRoot("SortedDictionary")]
22 public class SerializableSortedDictionary<TKey, TValue> 22 public class SerializableSortedDictionary<TKey, TValue>
23 : SortedDictionary<TKey, TValue>, IXmlSerializable 23 : SortedDictionary<TKey, TValue>, IXmlSerializable
24 { 24 {
25 #region IXmlSerializable Members 25 #region IXmlSerializable Members
26   26  
27 public SerializableSortedDictionary(IEnumerable<KeyValuePair<TKey, TValue>> kvp) 27 public SerializableSortedDictionary(IEnumerable<KeyValuePair<TKey, TValue>> kvp)
28 { 28 {
29 foreach (var i in kvp) 29 foreach (var i in kvp)
30 { 30 {
31 Add(i.Key, i.Value); 31 Add(i.Key, i.Value);
32 } 32 }
33 } 33 }
34   34  
35 public SerializableSortedDictionary() 35 public SerializableSortedDictionary()
36 { 36 {
37 } 37 }
38   38  
39 /// <summary> 39 /// <summary>
40 /// Deep-clones the serializable dictionary. 40 /// Deep-clones the serializable dictionary.
41 /// </summary> 41 /// </summary>
42 /// <returns>a deep clone of the original dictionary</returns> 42 /// <returns>a deep clone of the original dictionary</returns>
43 public SerializableSortedDictionary<TKey, TValue> Clone() 43 public SerializableSortedDictionary<TKey, TValue> Clone()
44 { 44 {
45 SerializableSortedDictionary<TKey, TValue> clone; 45 SerializableSortedDictionary<TKey, TValue> clone;
46 try 46 try
47 { 47 {
48 using (var writer = new MemoryStream()) 48 using (var writer = new MemoryStream())
49 { 49 {
50 var serializer = 50 var serializer =
51 new XmlSerializer( 51 new XmlSerializer(
52 typeof(SerializableDictionary<TKey, TValue>)); 52 typeof(SerializableDictionary<TKey, TValue>));
53 serializer.Serialize(writer, this); 53 serializer.Serialize(writer, this);
54 writer.Position = 0; 54 writer.Position = 0;
55 clone = (SerializableSortedDictionary<TKey, TValue>) 55 clone = (SerializableSortedDictionary<TKey, TValue>)
56 new XmlSerializer( 56 new XmlSerializer(
57 typeof(SerializableSortedDictionary<TKey, TValue>)) 57 typeof(SerializableSortedDictionary<TKey, TValue>))
58 .Deserialize(writer); 58 .Deserialize(writer);
59 } 59 }
60 } 60 }
61 /* cloning failed so return an empty dictionary */ 61 /* cloning failed so return an empty dictionary */
62 catch (Exception) 62 catch (Exception)
63 { 63 {
64 clone = new SerializableSortedDictionary<TKey, TValue>(); 64 clone = new SerializableSortedDictionary<TKey, TValue>();
65 } 65 }
66 return clone; 66 return clone;
67 } 67 }
68   68  
69 public XmlSchema GetSchema() 69 public XmlSchema GetSchema()
70 { 70 {
71 return null; 71 return null;
72 } 72 }
73   73  
74 public void ReadXml(XmlReader reader) 74 public void ReadXml(XmlReader reader)
75 { 75 {
76 var keySerializer = new XmlSerializer(typeof(TKey)); 76 var keySerializer = new XmlSerializer(typeof(TKey));
77 var valueSerializer = new XmlSerializer(typeof(TValue)); 77 var valueSerializer = new XmlSerializer(typeof(TValue));
78   78  
79 var wasEmpty = reader.IsEmptyElement; 79 var wasEmpty = reader.IsEmptyElement;
80 reader.Read(); 80 reader.Read();
81   81  
82 if (wasEmpty) 82 if (wasEmpty)
83 return; 83 return;
84   84  
85 while (!reader.NodeType.Equals(XmlNodeType.EndElement)) 85 while (!reader.NodeType.Equals(XmlNodeType.EndElement))
86 { 86 {
87 reader.ReadStartElement("Item"); 87 reader.ReadStartElement("Item");
88   88  
89 reader.ReadStartElement("Key"); 89 reader.ReadStartElement("Key");
90 var key = (TKey) keySerializer.Deserialize(reader); 90 var key = (TKey)keySerializer.Deserialize(reader);
91 reader.ReadEndElement(); 91 reader.ReadEndElement();
92   92  
93 reader.ReadStartElement("Value"); 93 reader.ReadStartElement("Value");
94 var value = (TValue) valueSerializer.Deserialize(reader); 94 var value = (TValue)valueSerializer.Deserialize(reader);
95 reader.ReadEndElement(); 95 reader.ReadEndElement();
96   96  
97 Add(key, value); 97 Add(key, value);
98   98  
99 reader.ReadEndElement(); 99 reader.ReadEndElement();
100 reader.MoveToContent(); 100 reader.MoveToContent();
101 } 101 }
102 reader.ReadEndElement(); 102 reader.ReadEndElement();
103 } 103 }
104   104  
105 public void WriteXml(XmlWriter writer) 105 public void WriteXml(XmlWriter writer)
106 { 106 {
107 var keySerializer = new XmlSerializer(typeof(TKey)); 107 var keySerializer = new XmlSerializer(typeof(TKey));
108 var valueSerializer = new XmlSerializer(typeof(TValue)); 108 var valueSerializer = new XmlSerializer(typeof(TValue));
109   109  
110 foreach (var key in Keys) 110 foreach (var key in Keys)
111 { 111 {
112 writer.WriteStartElement("Item"); 112 writer.WriteStartElement("Item");
113   113  
114 writer.WriteStartElement("Key"); 114 writer.WriteStartElement("Key");
115 keySerializer.Serialize(writer, key); 115 keySerializer.Serialize(writer, key);
116 writer.WriteEndElement(); 116 writer.WriteEndElement();
117   117  
118 writer.WriteStartElement("Value"); 118 writer.WriteStartElement("Value");
119 var value = this[key]; 119 var value = this[key];
120 valueSerializer.Serialize(writer, value); 120 valueSerializer.Serialize(writer, value);
121 writer.WriteEndElement(); 121 writer.WriteEndElement();
122   122  
123 writer.WriteEndElement(); 123 writer.WriteEndElement();
124 } 124 }
125 } 125 }
126   126  
127 #endregion 127 #endregion IXmlSerializable Members
128 } 128 }
129 } 129 }
130   130  
131
Generated by GNU Enscript 1.6.5.90.
-  
132   -  
133   -  
134   -