Mercurial > hg4j
comparison src/org/tmatesoft/hg/internal/InflaterDataAccess.java @ 420:6c22bdc0bdfd
Respect long offsets in revlogs
author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
---|---|
date | Thu, 22 Mar 2012 22:56:01 +0100 |
parents | fdc1db8f7f61 |
children | fdd7d756dea0 |
comparison
equal
deleted
inserted
replaced
419:7f136a3fa671 | 420:6c22bdc0bdfd |
---|---|
1 /* | 1 /* |
2 * Copyright (c) 2011 TMate Software Ltd | 2 * Copyright (c) 2011-2012 TMate Software Ltd |
3 * | 3 * |
4 * This program is free software; you can redistribute it and/or modify | 4 * This program is free software; you can redistribute it and/or modify |
5 * it under the terms of the GNU General Public License as published by | 5 * it under the terms of the GNU General Public License as published by |
6 * the Free Software Foundation; version 2 of the License. | 6 * the Free Software Foundation; version 2 of the License. |
7 * | 7 * |
38 private final byte[] buffer; | 38 private final byte[] buffer; |
39 private final byte[] singleByte = new byte[1]; | 39 private final byte[] singleByte = new byte[1]; |
40 private int decompressedPos = 0; | 40 private int decompressedPos = 0; |
41 private int decompressedLength; | 41 private int decompressedLength; |
42 | 42 |
43 public InflaterDataAccess(DataAccess dataAccess, int offset, int compressedLength) { | 43 public InflaterDataAccess(DataAccess dataAccess, long offset, int compressedLength) { |
44 this(dataAccess, offset, compressedLength, -1, new Inflater(), new byte[512]); | 44 this(dataAccess, offset, compressedLength, -1, new Inflater(), new byte[512]); |
45 } | 45 } |
46 | 46 |
47 public InflaterDataAccess(DataAccess dataAccess, int offset, int compressedLength, int actualLength) { | 47 public InflaterDataAccess(DataAccess dataAccess, long offset, int compressedLength, int actualLength) { |
48 this(dataAccess, offset, compressedLength, actualLength, new Inflater(), new byte[512]); | 48 this(dataAccess, offset, compressedLength, actualLength, new Inflater(), new byte[512]); |
49 } | 49 } |
50 | 50 |
51 public InflaterDataAccess(DataAccess dataAccess, int offset, int compressedLength, int actualLength, Inflater inflater, byte[] buf) { | 51 public InflaterDataAccess(DataAccess dataAccess, long offset, int compressedLength, int actualLength, Inflater inflater, byte[] buf) { |
52 super(dataAccess, offset, compressedLength); | 52 super(dataAccess, offset, compressedLength); |
53 if (inflater == null || buf == null) { | 53 if (inflater == null || buf == null) { |
54 throw new IllegalArgumentException(); | 54 throw new IllegalArgumentException(); |
55 } | 55 } |
56 this.inflater = inflater; | 56 this.inflater = inflater; |
117 public void seek(int localOffset) throws IOException { | 117 public void seek(int localOffset) throws IOException { |
118 if (localOffset < 0 /* || localOffset >= length() */) { | 118 if (localOffset < 0 /* || localOffset >= length() */) { |
119 throw new IllegalArgumentException(); | 119 throw new IllegalArgumentException(); |
120 } | 120 } |
121 if (localOffset >= decompressedPos) { | 121 if (localOffset >= decompressedPos) { |
122 skip((int) (localOffset - decompressedPos)); | 122 skip(localOffset - decompressedPos); |
123 } else { | 123 } else { |
124 reset(); | 124 reset(); |
125 skip((int) localOffset); | 125 skip(localOffset); |
126 } | 126 } |
127 } | 127 } |
128 | 128 |
129 @Override | 129 @Override |
130 public void skip(final int bytesToSkip) throws IOException { | 130 public void skip(final int bytesToSkip) throws IOException { |