2
// Taken from PodSleuth (http://git.gnome.org/cgit/podsleuth)
5
// Aaron Bockover <abockover@novell.com>
7
// Copyright (c) 2007-2009 Novell, Inc. (http://www.novell.com)
9
// Permission is hereby granted, free of charge, to any person obtaining a copy
10
// of this software and associated documentation files (the "Software"), to deal
11
// in the Software without restriction, including without limitation the rights
12
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
13
// copies of the Software, and to permit persons to whom the Software is
14
// furnished to do so, subject to the following conditions:
16
// The above copyright notice and this permission notice shall be included in
17
// all copies or substantial portions of the Software.
19
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
22
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
23
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
24
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
28
using System.Collections;
29
using System.Collections.Generic;
30
using MonoDevelop.Core;
33
namespace MonoDevelop.MacDev.Plist
35
public class PlistDictionary : PlistObjectBase, IEnumerable<KeyValuePair<string, PlistObjectBase>>
37
private List<string> keys;
38
private Dictionary<string, PlistObjectBase> dict = new Dictionary<string, PlistObjectBase> ();
40
public PlistDictionary () : this(false)
44
public PlistDictionary (bool keepOrder)
47
keys = new List<string> ();
51
public PlistDictionary (Dictionary<string, PlistObjectBase> value) : this(value, false)
55
public PlistDictionary (Dictionary<string, PlistObjectBase> value, bool keepOrder) : this(keepOrder)
57
foreach (KeyValuePair<string, PlistObjectBase> item in value) {
58
Add (item.Key, item.Value);
62
public PlistDictionary (IDictionary value) : this(value, false)
66
public PlistDictionary (IDictionary value, bool keepOrder) : this(keepOrder)
68
foreach (DictionaryEntry item in value) {
69
Add ((string)item.Key, ObjectToPlistObject (item.Value));
73
public override void Write (System.Xml.XmlWriter writer)
75
writer.WriteStartElement ("dict");
76
foreach (KeyValuePair<string, PlistObjectBase> item in this) {
77
writer.WriteElementString ("key", item.Key);
78
item.Value.Write (writer);
80
writer.WriteEndElement ();
92
public void Add (string key, PlistObjectBase value)
98
if (dict.ContainsKey (key)) {
99
Console.WriteLine ("Warning: ignoring duplicate key: {0} (null? {1} empty? {2})", key, key == null, key == "");
101
dict.Add (key, value);
105
public bool Remove (string key)
111
return dict.Remove (key);
114
public bool ContainsKey (string key)
116
return dict.ContainsKey (key);
119
public PlistObjectBase this[string key] {
120
get { return dict[key]; }
123
if (!dict.ContainsKey (key))
130
public PlistObjectBase TryGetValue (string key)
132
PlistObjectBase value;
133
if (dict.TryGetValue (key, out value))
139
get { return dict.Count; }
142
private IEnumerator<KeyValuePair<string, PlistObjectBase>> GetEnumeratorFromKeys ()
144
foreach (string key in keys) {
145
yield return new KeyValuePair<string, PlistObjectBase> (key, dict[key]);
149
public IEnumerator<KeyValuePair<string, PlistObjectBase>> GetEnumerator ()
151
return keys == null ? dict.GetEnumerator () : GetEnumeratorFromKeys ();
154
IEnumerator IEnumerable.GetEnumerator ()
156
return GetEnumerator ();