internal string WriteObject(byte[] aContent, EObjectType aType)
{
byte zero = 0;
byte space = (byte)' ';
byte[] type = Object.TypeBytes(aType);
byte[] length = ASCIIEncoding.ASCII.GetBytes(aContent.Length.ToString());
byte[] obj = new byte[type.Length + length.Length + aContent.Length + 2];
Array.Copy(type, 0, obj, 0, type.Length);
obj[type.Length] = space;
Array.Copy(length, 0, obj, type.Length + 1, length.Length);
obj[type.Length + length.Length + 1] = zero;
Array.Copy(aContent, 0, obj, type.Length + length.Length + 2, aContent.Length);
string id = Hash.String(iHash.Compute(obj));
DirectoryInfo folder = iFolderObjects.CreateSubdirectory(id.Substring(0, 2));
String path = Path.Combine(folder.FullName, id.Substring(2));
if (File.Exists(path))
{
return (id);
}
var file = new FileStream(path, FileMode.CreateNew, FileAccess.Write);
DeflaterOutputStream deflater = new DeflaterOutputStream(file);
using (var writer = new BinaryWriter(deflater))
{
writer.Write(obj);
deflater.Finish();
}
return (id);
}