/// <summary>Commits the object header onto the stream.</summary> /// <remarks> /// Commits the object header onto the stream. /// <p> /// Once the header has been written, the object representation must be fully /// output, or packing must abort abnormally. /// </remarks> /// <param name="otp">the object to pack. Header information is obtained.</param> /// <param name="rawLength"> /// number of bytes of the inflated content. For an object that is /// in whole object format, this is the same as the object size. /// For an object that is in a delta format, this is the size of /// the inflated delta instruction stream. /// </param> /// <exception cref="System.IO.IOException">the underlying stream refused to accept the header. /// </exception> public void WriteHeader(ObjectToPack otp, long rawLength) { if (otp.IsDeltaRepresentation()) { if (packWriter.IsDeltaBaseAsOffset()) { ObjectToPack baseInPack = otp.GetDeltaBase(); if (baseInPack != null && baseInPack.IsWritten()) { long start = count; int n = EncodeTypeSize(Constants.OBJ_OFS_DELTA, rawLength); Write(headerBuffer, 0, n); long offsetDiff = start - baseInPack.GetOffset(); n = headerBuffer.Length - 1; headerBuffer[n] = unchecked ((byte)(offsetDiff & unchecked ((int)(0x7F)))); while ((offsetDiff >>= 7) > 0) { headerBuffer[--n] = unchecked ((byte)(unchecked ((int)(0x80)) | (--offsetDiff & unchecked ( (int)(0x7F))))); } Write(headerBuffer, n, headerBuffer.Length - n); return; } } int n_1 = EncodeTypeSize(Constants.OBJ_REF_DELTA, rawLength); otp.GetDeltaBaseId().CopyRawTo(headerBuffer, n_1); Write(headerBuffer, 0, n_1 + Constants.OBJECT_ID_LENGTH); } else { int n = EncodeTypeSize(otp.GetType(), rawLength); Write(headerBuffer, 0, n); } }
/// <summary>Commits the object header onto the stream.</summary> /// <remarks> /// Commits the object header onto the stream. /// <p> /// Once the header has been written, the object representation must be fully /// output, or packing must abort abnormally. /// </remarks> /// <param name="otp">the object to pack. Header information is obtained.</param> /// <param name="rawLength"> /// number of bytes of the inflated content. For an object that is /// in whole object format, this is the same as the object size. /// For an object that is in a delta format, this is the size of /// the inflated delta instruction stream. /// </param> /// <exception cref="System.IO.IOException">the underlying stream refused to accept the header. /// </exception> public void WriteHeader(ObjectToPack otp, long rawLength) { if (otp.IsDeltaRepresentation()) { if (packWriter.IsDeltaBaseAsOffset()) { ObjectToPack baseInPack = otp.GetDeltaBase(); if (baseInPack != null && baseInPack.IsWritten()) { long start = count; int n = EncodeTypeSize(Constants.OBJ_OFS_DELTA, rawLength); Write(headerBuffer, 0, n); long offsetDiff = start - baseInPack.GetOffset(); n = headerBuffer.Length - 1; headerBuffer[n] = unchecked((byte)(offsetDiff & unchecked((int)(0x7F)))); while ((offsetDiff >>= 7) > 0) { headerBuffer[--n] = unchecked((byte)(unchecked((int)(0x80)) | (--offsetDiff & unchecked( (int)(0x7F))))); } Write(headerBuffer, n, headerBuffer.Length - n); return; } } int n_1 = EncodeTypeSize(Constants.OBJ_REF_DELTA, rawLength); otp.GetDeltaBaseId().CopyRawTo(headerBuffer, n_1); Write(headerBuffer, 0, n_1 + Constants.OBJECT_ID_LENGTH); } else { int n = EncodeTypeSize(otp.GetType(), rawLength); Write(headerBuffer, 0, n); } }
/// <returns>type of the object in this window entry.</returns> internal virtual int Type() { return(@object.GetType()); }