/[xmltv_parser]/trunk/libxmltv/Core/PropertyDictionary.cs
ViewVC logotype

Diff of /trunk/libxmltv/Core/PropertyDictionary.cs

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 94 by william, Sun Mar 10 08:45:58 2013 UTC revision 106 by william, Sun Mar 10 12:25:54 2013 UTC
# Line 17  namespace libxmltv.Core Line 17  namespace libxmltv.Core
17          public PropertyCollection() : this(new List<T>()) { }          public PropertyCollection() : this(new List<T>()) { }
18          public PropertyCollection(ICollection<T> collection) { foreach (var t in collection) { items.Add(t); } }          public PropertyCollection(ICollection<T> collection) { foreach (var t in collection) { items.Add(t); } }
19          public int PropertyCount { get { return items.Count; } }          public int PropertyCount { get { return items.Count; } }
20          public bool IsReadOnly { get { return (items as ICollection<T>).IsReadOnly; } }  
21            public bool IsReadOnly
22            {
23                get
24                {
25                    ICollection<T> collection = (items as ICollection<T>);
26                    if (collection == null)
27                    {
28                        throw new InvalidCastException(string.Format("Unable to cast: '{0}' to '{1}'", items.GetType().Name, typeof(ICollection<T>).Name));
29                    }
30                    return collection.IsReadOnly;
31                }
32            }
33    
34          public void AddProperty(T item) { items.Add(item); }          public void AddProperty(T item) { items.Add(item); }
35          public void ClearProperties() { items.Clear(); }          public void ClearProperties() { items.Clear(); }
36          public bool ContainsProperty(T item) { return items.Contains(item); }          public bool ContainsProperty(T item) { return items.Contains(item); }
# Line 25  namespace libxmltv.Core Line 38  namespace libxmltv.Core
38          public bool RemoveProperty(T item) { return items.Remove(item); }          public bool RemoveProperty(T item) { return items.Remove(item); }
39          public IEnumerator<T> GetEnumerator() { return items.GetEnumerator(); }          public IEnumerator<T> GetEnumerator() { return items.GetEnumerator(); }
40          System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() { return items.GetEnumerator(); }          System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() { return items.GetEnumerator(); }
41    
42            public override string ToString()
43            {
44                return string.Format("Property Count: {0}", PropertyCount);
45            }
46      }      }
47      public class PropertyDictionary : PropertyDictionary<string, object>      public class PropertyDictionary : PropertyDictionary<string, object>, IPropertyDictionary
48      {      {
49          public PropertyDictionary() : base() { }          public PropertyDictionary() : base() { }
50          public PropertyDictionary(IPropertyDictionary dictionary) : base(dictionary) { }          public PropertyDictionary(IPropertyDictionary dictionary) : base(dictionary) { }
# Line 45  namespace libxmltv.Core Line 63  namespace libxmltv.Core
63              public int next;              public int next;
64              public TKey name;              public TKey name;
65              public TValue value;              public TValue value;
66                public override string ToString()
67                {
68                    return new PropertyValuePair<TKey, TValue>(name, value).ToString();
69                }
70          }          }
71          private Entry[] entries          private Entry[] entries
72          {          {
# Line 116  namespace libxmltv.Core Line 138  namespace libxmltv.Core
138          public bool RemoveProperty(TKey key) { return properties.Remove(key); }          public bool RemoveProperty(TKey key) { return properties.Remove(key); }
139          public bool TryGetPropertyValue(TKey key, out TValue value) { return properties.TryGetValue(key, out value); }          public bool TryGetPropertyValue(TKey key, out TValue value) { return properties.TryGetValue(key, out value); }
140          public int PropertyCount { get { return properties.Count; } }          public int PropertyCount { get { return properties.Count; } }
141          public bool IsReadOnly { get { return (properties as ICollection<TKey>).IsReadOnly; } }          public bool IsReadOnly
142          public void AddProperty(PropertyValuePair<TKey, TValue> item) { AddProperty(item.Name, item.Value); }          {
143                get
144                {
145                    IDictionary<TKey, TValue> collection = (properties as IDictionary<TKey, TValue>);
146                    if (collection == null)
147                    {
148                        throw new InvalidCastException(string.Format("Unable to cast: '{0}' to '{1}'", properties.GetType().Name, typeof(IDictionary<TKey, TValue>).Name));
149                    }
150                    return collection.IsReadOnly;
151                }
152            }
153            public void AddProperty(IPropertyValuePair<TKey, TValue> item) { AddProperty(item.Name, item.Value); }
154          public void ClearProperties() { properties.Clear(); }          public void ClearProperties() { properties.Clear(); }
155          public bool ContainsProperty(PropertyValuePair<TKey, TValue> item) { return ContainsProperty(item.Name); }          public bool ContainsProperty(IPropertyValuePair<TKey, TValue> item) { return ContainsProperty(item.Name); }
156          public void CopyPropertiesTo(PropertyValuePair<TKey, TValue>[] array, int arrayIndex)          public void CopyPropertiesTo(IPropertyValuePair<TKey, TValue>[] array, int arrayIndex)
157          {          {
158              var list = properties.ToList().Cast<PropertyValuePair<TKey, TValue>>().ToList();              var list = properties.ToList().Cast<IPropertyValuePair<TKey, TValue>>().ToList();
159              list.CopyTo(array, arrayIndex);              list.CopyTo(array, arrayIndex);
160          }          }
161          public bool RemoveProperty(PropertyValuePair<TKey, TValue> item) { return RemoveProperty(item.Name); }          public bool RemoveProperty(IPropertyValuePair<TKey, TValue> item) { return RemoveProperty(item.Name); }
162          IEnumerator<PropertyValuePair<TKey, TValue>> IEnumerable<PropertyValuePair<TKey, TValue>>.GetEnumerator() { return new PropertyDictionaryEnumerator(this, 2); }          IEnumerator<IPropertyValuePair<TKey, TValue>> IEnumerable<IPropertyValuePair<TKey, TValue>>.GetEnumerator() { return new PropertyDictionaryEnumerator(this, 2); }
163          System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() { return properties.GetEnumerator(); }          System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() { return properties.GetEnumerator(); }
164    
165            public override string ToString()
166            {
167                return string.Format("Property Count: {0}", PropertyCount);
168            }
169          #region enumerator support          #region enumerator support
170          public class PropertyDictionaryEnumerator: IEnumerator<PropertyValuePair<TKey,TValue>>, IDisposable          public class PropertyDictionaryEnumerator : IEnumerator<IPropertyValuePair<TKey, TValue>>, IDisposable
171          {          {
172              private PropertyDictionary<TKey, TValue> dictionary;              private PropertyDictionary<TKey, TValue> dictionary;
173              private int index;              private int index;
174              private PropertyValuePair<TKey, TValue> current;              private IPropertyValuePair<TKey, TValue> current;
175              private int getEnumeratorRetType;              private int getEnumeratorRetType;
176              internal const int DictEntry = 1;              internal const int DictEntry = 1;
177              internal const int KeyValuePair = 2;              internal const int KeyValuePair = 2;
# Line 148  namespace libxmltv.Core Line 185  namespace libxmltv.Core
185                  this.current = new PropertyValuePair<TKey, TValue>();                  this.current = new PropertyValuePair<TKey, TValue>();
186              }              }
187    
188              public PropertyValuePair<TKey, TValue> Current              public IPropertyValuePair<TKey, TValue> Current
189              {              {
190                  get { return this.current; }                  get { return this.current; }
191              }              }
# Line 183  namespace libxmltv.Core Line 220  namespace libxmltv.Core
220                  {                  {
221                      if (this.dictionary.entries[this.index].hashCode >= 0)                      if (this.dictionary.entries[this.index].hashCode >= 0)
222                      {                      {
223                          this.current = new KeyValuePair<TKey, TValue>(this.dictionary.entries[this.index].name, this.dictionary.entries[this.index].value);                          this.current =(IPropertyValuePair<TKey,TValue>)(PropertyValuePair<TKey,TValue>)new KeyValuePair<TKey, TValue>(this.dictionary.entries[this.index].name, this.dictionary.entries[this.index].value);
224                          this.index++;                          this.index++;
225                          return true;                          return true;
226                      }                      }
# Line 200  namespace libxmltv.Core Line 237  namespace libxmltv.Core
237                      ThrowHelper.ThrowInvalidOperationException(ExceptionResource.InvalidOperation_EnumFailedVersion);                      ThrowHelper.ThrowInvalidOperationException(ExceptionResource.InvalidOperation_EnumFailedVersion);
238                  }                  }
239                  this.index = 0;                  this.index = 0;
240                  this.current = new KeyValuePair<TKey, TValue>();                  this.current = (IPropertyValuePair<TKey, TValue>)(PropertyValuePair<TKey, TValue>)new KeyValuePair<TKey, TValue>();
241              }              }
242          }          }
243          #endregion            #endregion  

Legend:
Removed from v.94  
changed lines
  Added in v.106

  ViewVC Help
Powered by ViewVC 1.1.22