private int AddData(object value)
{
int index = this.objectTable.Count, count = 0, bufferIndex = 0;
byte[] buffer = value as byte[];
if (buffer == null)
{
using (MemoryStream stream = new MemoryStream())
{
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(stream, value);
stream.Position = 0;
buffer = new byte[stream.Length];
while (0 < (count = stream.Read(buffer, 0, buffer.Length - bufferIndex)))
{
bufferIndex += count;
}
}
}
BinaryPlistItem item = new BinaryPlistItem(value);
item.SetByteValue(buffer);
if (buffer.Length < 15)
{
item.Marker.Add((byte)((byte)0x40 | (byte)buffer.Length));
}
else
{
item.Marker.Add(0x4F);
AddIntegerCount(item.Marker, buffer.Length);
}
this.objectTable.Add(item);
this.objectTableSize += item.Size;
return index;
}