source: josm/trunk/src/org/tukaani/xz/index/IndexBase.java@ 13350

Last change on this file since 13350 was 13350, checked in by stoecker, 7 years ago

see #15816 - add XZ support

File size: 1.6 KB
Line 
1/*
2 * IndexBase
3 *
4 * Author: Lasse Collin <lasse.collin@tukaani.org>
5 *
6 * This file has been put into the public domain.
7 * You can do whatever you want with this file.
8 */
9
10package org.tukaani.xz.index;
11
12import org.tukaani.xz.common.Util;
13import org.tukaani.xz.XZIOException;
14
15abstract class IndexBase {
16 private final XZIOException invalidIndexException;
17 long blocksSum = 0;
18 long uncompressedSum = 0;
19 long indexListSize = 0;
20 long recordCount = 0;
21
22 IndexBase(XZIOException invalidIndexException) {
23 this.invalidIndexException = invalidIndexException;
24 }
25
26 private long getUnpaddedIndexSize() {
27 // Index Indicator + Number of Records + List of Records + CRC32
28 return 1 + Util.getVLISize(recordCount) + indexListSize + 4;
29 }
30
31 public long getIndexSize() {
32 return (getUnpaddedIndexSize() + 3) & ~3;
33 }
34
35 public long getStreamSize() {
36 return Util.STREAM_HEADER_SIZE + blocksSum + getIndexSize()
37 + Util.STREAM_HEADER_SIZE;
38 }
39
40 int getIndexPaddingSize() {
41 return (int)((4 - getUnpaddedIndexSize()) & 3);
42 }
43
44 void add(long unpaddedSize, long uncompressedSize) throws XZIOException {
45 blocksSum += (unpaddedSize + 3) & ~3;
46 uncompressedSum += uncompressedSize;
47 indexListSize += Util.getVLISize(unpaddedSize)
48 + Util.getVLISize(uncompressedSize);
49 ++recordCount;
50
51 if (blocksSum < 0 || uncompressedSum < 0
52 || getIndexSize() > Util.BACKWARD_SIZE_MAX
53 || getStreamSize() < 0)
54 throw invalidIndexException;
55 }
56}
Note: See TracBrowser for help on using the repository browser.