static void SetIfNotPresent(PlistDictionary dict, string key, PlistObjectBase value) { if (!dict.ContainsKey(key)) { dict[key] = value; } }
private void PrepareStringPool(PlistObjectBase value) { if (value is PlistArray) { var array = (PlistArray)value; for (int i = 0; i < array.Count; i++) { PrepareStringPool(array[i]); } } else if (value is PlistDictionary) { var dict = (PlistDictionary)value; foreach (var pair in dict) { if (!_stringPool.ContainsKey(pair.Key)) { _stringPool.Add(pair.Key, _stringPool.Count); } PrepareStringPool(pair.Value); } } else if (value is PlistString) { if (!_stringPool.ContainsKey(value.AsString)) { _stringPool.Add(value.AsString, _stringPool.Count); } } }
protected void WriteValue(ContentWriter output, PlistObjectBase value) { if (value is PlistArray) { output.Write((byte)PlistDocument.ValueType.Array); var array = (PlistArray)value; output.Write(array.Count); for (int i = 0; i < array.Count; i++) { WriteValue(output, array[i]); } } else if (value is PlistBoolean) { output.Write((byte)PlistDocument.ValueType.Bool); output.Write(value.AsBool); } else if (value is PlistData) { output.Write((byte)PlistDocument.ValueType.Data); output.Write(value.AsBinary); } else if (value is PlistDate) { output.Write((byte)PlistDocument.ValueType.Date); output.WriteObject(value.AsDate); } else if (value is PlistDictionary) { output.Write((byte)PlistDocument.ValueType.Dictionary); var dict = (PlistDictionary)value; output.Write(dict.Count); foreach (var pair in dict) { output.Write(pair.Key); WriteValue(output, pair.Value); } } else if (value is PlistInteger) { output.Write((byte)PlistDocument.ValueType.Integer); output.Write(value.AsInt); } else if (value is PlistNull) { output.Write((byte)PlistDocument.ValueType.Null); } else if (value is PlistReal) { output.Write((byte)PlistDocument.ValueType.Real); output.Write(value.AsFloat); } else if (value is PlistString) { output.Write((byte)PlistDocument.ValueType.String); output.Write(value.AsString); } }