aboutsummaryrefslogtreecommitdiffstats
path: root/org.eclipse.jgit/src/org/eclipse/jgit/transport/PackedObjectInfo.java
blob: fae26cda95b4ce3f451ea901595c971a1b9e8fd9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
/*
 * Copyright (C) 2008-2009, Robin Rosenberg <robin.rosenberg@dewire.com>
 * Copyright (C) 2008, Shawn O. Pearce <spearce@spearce.org> and others
 *
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Distribution License v. 1.0 which is available at
 * https://www.eclipse.org/org/documents/edl-v10.php.
 *
 * SPDX-License-Identifier: BSD-3-Clause
 */

package org.eclipse.jgit.transport;

import org.eclipse.jgit.lib.AnyObjectId;
import org.eclipse.jgit.lib.Constants;
import org.eclipse.jgit.lib.ObjectIdOwnerMap;

/**
 * Description of an object stored in a pack file, including offset.
 * <p>
 * When objects are stored in packs Git needs the ObjectId and the offset
 * (starting position of the object data) to perform random-access reads of
 * objects from the pack. This extension of ObjectId includes the offset.
 */
public class PackedObjectInfo extends ObjectIdOwnerMap.Entry {
	private long offset;

	private int crc;

	private int type = Constants.OBJ_BAD;

	private long sizeBeforeInflating;

	private long fullSize;

	PackedObjectInfo(final long headerOffset, final int packedCRC,
			final AnyObjectId id) {
		super(id);
		offset = headerOffset;
		crc = packedCRC;
	}

	/**
	 * Create a new structure to remember information about an object.
	 *
	 * @param id
	 *            the identity of the object the new instance tracks.
	 */
	public PackedObjectInfo(AnyObjectId id) {
		super(id);
	}

	/**
	 * Get offset in pack when object has been already written
	 *
	 * @return offset in pack when object has been already written, or 0 if it
	 *         has not been written yet
	 */
	public long getOffset() {
		return offset;
	}

	/**
	 * Set the offset in pack when object has been written to.
	 *
	 * @param offset
	 *            offset where written object starts
	 */
	public void setOffset(long offset) {
		this.offset = offset;
	}

	/**
	 * Get the 32 bit CRC checksum for the packed data.
	 *
	 * @return the 32 bit CRC checksum for the packed data.
	 */
	public int getCRC() {
		return crc;
	}

	/**
	 * Record the 32 bit CRC checksum for the packed data.
	 *
	 * @param crc
	 *            checksum of all packed data (including object type code,
	 *            inflated length and delta base reference) as computed by
	 *            {@link java.util.zip.CRC32}.
	 */
	public void setCRC(int crc) {
		this.crc = crc;
	}

	/**
	 * Get the object type.
	 *
	 * @return the object type. The default type is OBJ_BAD, which is considered
	 *         as unknown or invalid type.
	 * @since 4.9
	 */
	public int getType() {
		return type;
	}

	/**
	 * Record the object type if applicable.
	 *
	 * @param type
	 *            the object type.
	 * @since 4.9
	 */
	public void setType(int type) {
		this.type = type;
	}

	/**
	 * Size in storage
	 *
	 * @param sizeBeforeInflating
	 *            size before inflating
	 */
	void setSize(long sizeBeforeInflating) {
		this.sizeBeforeInflating = sizeBeforeInflating;
	}

	/**
	 * Size in storage (maybe deflated and/or deltified).
	 *
	 * This is the size in storage. In packs, this is the bytes used by the
	 * object contents (themselves or as deltas) compressed by zlib (deflated).
	 *
	 * @return size in storage
	 */
	long getSize() {
		return sizeBeforeInflating;
	}

	/**
	 * Real (materialized) size of the object (inflated, undeltified)
	 *
	 * @param size
	 *            size of the object in bytes, without compressing nor
	 *            deltifying
	 * @since 6.4
	 */
	public void setFullSize(long size) {
		this.fullSize = size;
	}

	/**
	 * Get full size (inflated, undeltified)
	 *
	 * @return size of the object (inflated, undeltified)
	 *
	 * @since 6.4
	 */
	public long getFullSize() {
		return fullSize;
	}
}