bool CommonWriteObject(object @object, bool autoRegister, bool forceInline)
{
if (@object == null)
{
_writer.WriteVInt64(0);
return false;
}
var oid = _transaction.StoreIfNotInlined(@object, autoRegister, forceInline);
if (oid != ulong.MaxValue)
{
_writer.WriteVInt64((long)oid);
return false;
}
if (_objectIdMap == null) _objectIdMap = new Dictionary<object, int>();
int cid;
if (_objectIdMap.TryGetValue(@object, out cid))
{
_writer.WriteVInt64(-cid);
return false;
}
_lastId++;
_objectIdMap.Add(@object, _lastId);
_writer.WriteVInt64(-_lastId);
return true;
}