private int AddString(string value)
{
if (!this.uniques.Contains(value))
{
int index = this.objectTable.Count;
bool ascii = value.IsAscii();
byte[] buffer;
BinaryPlistItem item = new BinaryPlistItem(value);
if (value.Length < 15)
{
item.Marker.Add((byte)((byte)(ascii ? 0x50 : 0x60) | (byte)value.Length));
}
else
{
item.Marker.Add((byte)(ascii ? 0x5F : 0x6F));
AddIntegerCount(item.Marker, value.Length);
}
if (ascii)
{
buffer = Encoding.ASCII.GetBytes(value);
}
else
{
buffer = Encoding.Unicode.GetBytes(value);
if (BitConverter.IsLittleEndian)
{
for (int i = 0; i < buffer.Length; i++)
{
byte l = buffer[i];
buffer[i] = buffer[++i];
buffer[i] = l;
}
}
}
item.SetByteValue(buffer);
this.objectTable.Add(item);
this.objectTableSize += item.Size;
this.uniques.SetIndex(value, index);
return index;
}
return this.uniques.GetIndex(value);
}