This is an automated email from the ASF dual-hosted git repository.

asf-gitbox-commits pushed a commit to branch geoapi-4.0
in repository https://gitbox.apache.org/repos/asf/sis.git

commit 4a5efac0c6675b4d4f17e9d7c2384f38fa485676
Author: Martin Desruisseaux <[email protected]>
AuthorDate: Tue Jun 9 10:15:59 2026 +0200

    Move part of the `org.apache.sis.storage.geotiff.inflater` package
    to `org.apache.sis.io.stream.inflater` for sharing with GeoHEIF.
---
 .../org/apache/sis/storage/geotiff/DataSubset.java |  4 +--
 .../sis/storage/geotiff/inflater/CCITTRLE.java     |  3 +-
 .../geotiff/inflater/HorizontalPredictor.java      | 15 +++++-----
 .../sis/storage/geotiff/inflater/Inflater.java     | 15 ++++++----
 .../apache/sis/storage/geotiff/inflater/LZW.java   | 10 ++++++-
 .../sis/storage/geotiff/inflater/PackBits.java     |  3 +-
 .../storage/geotiff/inflater/PredictorChannel.java |  8 ++++--
 .../org.apache.sis.storage/main/module-info.java   |  4 +++
 .../io/stream/inflater/ComputedByteChannel.java}   | 16 ++++++-----
 .../apache/sis/io/stream}/inflater/Deflate.java    |  9 ++----
 .../sis/io/stream/inflater/InflaterChannel.java}   | 29 ++++++++++----------
 .../sis/io/stream/inflater/package-info.java       | 32 ++++++++++++++++++++++
 12 files changed, 99 insertions(+), 49 deletions(-)

diff --git 
a/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/DataSubset.java
 
b/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/DataSubset.java
index 346440cfa0..f3591d0f4f 100644
--- 
a/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/DataSubset.java
+++ 
b/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/DataSubset.java
@@ -372,8 +372,8 @@ class DataSubset extends TiledGridCoverage {
                      * Tile not yet loaded. Add to a queue of tiles to load 
later.
                      * Notify the input channel about the ranges of bytes to 
read.
                      * This notification is redundant with the same 
notification
-                     * done in `CompressionChannel.setInputRegion(…)`, but 
doing
-                     * all notifications in advance gives a chance to group 
ranges.
+                     * done in `InflaterChannel.setInputRegion(…)`, but doing 
all
+                     * notifications in advance gives a chance to group ranges.
                      */
                     final Tile missing = new Tile(iterator, tileOffsets, 
includedBanks, numTiles);
                     missings[numMissings++] = missing;
diff --git 
a/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/inflater/CCITTRLE.java
 
b/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/inflater/CCITTRLE.java
index 7e748820cd..5877156e7f 100644
--- 
a/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/inflater/CCITTRLE.java
+++ 
b/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/inflater/CCITTRLE.java
@@ -20,6 +20,7 @@ import java.io.IOException;
 import java.nio.ByteBuffer;
 import org.apache.sis.storage.event.StoreListeners;
 import org.apache.sis.io.stream.ChannelDataInput;
+import org.apache.sis.io.stream.inflater.InflaterChannel;
 
 
 /**
@@ -44,7 +45,7 @@ import org.apache.sis.io.stream.ChannelDataInput;
  *
  * @author  Martin Desruisseaux (Geomatys)
  */
-final class CCITTRLE extends CompressionChannel {
+final class CCITTRLE extends InflaterChannel {
     /**
      * Modified Huffman tree for length of runs of white and black colors. 
This array is generated by
      * the {@code CCITTRLETest} class, which will also verifies that those 
values are still corrects.
diff --git 
a/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/inflater/HorizontalPredictor.java
 
b/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/inflater/HorizontalPredictor.java
index cf7b381313..14bb7c2c69 100644
--- 
a/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/inflater/HorizontalPredictor.java
+++ 
b/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/inflater/HorizontalPredictor.java
@@ -19,6 +19,7 @@ package org.apache.sis.storage.geotiff.inflater;
 import java.io.IOException;
 import java.nio.ByteBuffer;
 import org.apache.sis.image.DataType;
+import org.apache.sis.io.stream.inflater.InflaterChannel;
 import org.apache.sis.pending.jdk.JDK13;
 
 
@@ -82,7 +83,7 @@ abstract class HorizontalPredictor extends PredictorChannel {
      * @param  width            number of pixels in the source image.
      * @param  sampleSize       number of bytes in a sample value.
      */
-    HorizontalPredictor(final CompressionChannel input, final int 
samplesPerPixel, final int width, final int sampleSize) {
+    HorizontalPredictor(final InflaterChannel input, final int 
samplesPerPixel, final int width, final int sampleSize) {
         super(input);
         sampleSizeM1   = sampleSize - Byte.BYTES;
         truncationMask = ~sampleSizeM1;
@@ -100,7 +101,7 @@ abstract class HorizontalPredictor extends PredictorChannel 
{
      * @param  width        number of pixels in the source image.
      * @return the predictor, or {@code null} if the given type is unsupported.
      */
-    static HorizontalPredictor create(final CompressionChannel input, final 
DataType dataType,
+    static HorizontalPredictor create(final InflaterChannel input, final 
DataType dataType,
             final int pixelStride, final int width)
     {
         switch (dataType.toPrimitive()) {
@@ -247,7 +248,7 @@ abstract class HorizontalPredictor extends PredictorChannel 
{
         /**
          * Creates a new predictor.
          */
-        Bytes(final CompressionChannel input, final int samplesPerPixel, final 
int width) {
+        Bytes(final InflaterChannel input, final int samplesPerPixel, final 
int width) {
             super(input, samplesPerPixel, width, Byte.BYTES);
             savedValues = new byte[samplesPerPixel];
         }
@@ -304,7 +305,7 @@ abstract class HorizontalPredictor extends PredictorChannel 
{
         /**
          * Creates a new predictor.
          */
-        Shorts(final CompressionChannel input, final int samplesPerPixel, 
final int width) {
+        Shorts(final InflaterChannel input, final int samplesPerPixel, final 
int width) {
             super(input, samplesPerPixel, width, Short.BYTES);
             savedValues = new short[samplesPerPixel];
         }
@@ -368,7 +369,7 @@ abstract class HorizontalPredictor extends PredictorChannel 
{
         /**
          * Creates a new predictor.
          */
-        Integers(final CompressionChannel input, final int samplesPerPixel, 
final int width) {
+        Integers(final InflaterChannel input, final int samplesPerPixel, final 
int width) {
             super(input, samplesPerPixel, width, Integer.BYTES);
             savedValues = new int[samplesPerPixel];
         }
@@ -432,7 +433,7 @@ abstract class HorizontalPredictor extends PredictorChannel 
{
         /**
          * Creates a new predictor.
          */
-        Floats(final CompressionChannel input, final int samplesPerPixel, 
final int width) {
+        Floats(final InflaterChannel input, final int samplesPerPixel, final 
int width) {
             super(input, samplesPerPixel, width, Float.BYTES);
             savedValues = new float[samplesPerPixel];
         }
@@ -496,7 +497,7 @@ abstract class HorizontalPredictor extends PredictorChannel 
{
         /**
          * Creates a new predictor.
          */
-        Doubles(final CompressionChannel input, final int samplesPerPixel, 
final int width) {
+        Doubles(final InflaterChannel input, final int samplesPerPixel, final 
int width) {
             super(input, samplesPerPixel, width, Double.BYTES);
             savedValues = new double[samplesPerPixel];
         }
diff --git 
a/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/inflater/Inflater.java
 
b/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/inflater/Inflater.java
index a79573bc04..659b447b13 100644
--- 
a/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/inflater/Inflater.java
+++ 
b/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/inflater/Inflater.java
@@ -28,6 +28,9 @@ import org.apache.sis.storage.geotiff.base.CompressionMethod;
 import org.apache.sis.storage.geotiff.base.Predictor;
 import org.apache.sis.storage.geotiff.base.Resources;
 import org.apache.sis.io.stream.ChannelDataInput;
+import org.apache.sis.io.stream.inflater.ComputedByteChannel;
+import org.apache.sis.io.stream.inflater.InflaterChannel;
+import org.apache.sis.io.stream.inflater.Deflate;
 import org.apache.sis.storage.event.StoreListeners;
 import static org.apache.sis.pending.jdk.JDK18.ceilDiv;
 
@@ -39,7 +42,7 @@ import static org.apache.sis.pending.jdk.JDK18.ceilDiv;
  *
  * <p>If a decompression algorithm can handle all above-cited aspects directly,
  * it can extend this class directly. If it would be too complicated, an easier
- * approach is to extend {@link CompressionChannel} instead and wrap that 
inflater
+ * approach is to extend {@link InflaterChannel} instead and wrap that inflater
  * in a {@link CopyFromBytes} subclass for managing the sub-region, subsampling
  * and band subset.</p>
  *
@@ -197,7 +200,7 @@ public abstract class Inflater implements Closeable {
             throws IOException, UnsupportedEncodingException
     {
         ArgumentChecks.ensureNonNull("input", input);
-        final CompressionChannel inflater;
+        final InflaterChannel inflater;
         switch (compression) {
             case LZW:      inflater = new LZW     (input, listeners); break;
             case DEFLATE:  inflater = new Deflate (input, listeners); break;
@@ -213,7 +216,7 @@ public abstract class Inflater implements Closeable {
                 throw unsupportedEncoding(listeners, 
Resources.Keys.UnsupportedCompressionMethod_1, compression);
             }
         }
-        final PixelChannel channel;
+        final ComputedByteChannel channel;
         switch (predictor) {
             case NONE: {
                 channel = inflater;
@@ -261,8 +264,8 @@ public abstract class Inflater implements Closeable {
          * will perform a seek operation. As a consequence the buffer content 
become invalid and
          * must be emptied.
          */
-        if (input.channel instanceof PixelChannel) {
-            ((PixelChannel) input.channel).setInputRegion(start, byteCount);
+        if (input.channel instanceof ComputedByteChannel) {
+            ((ComputedByteChannel) input.channel).setInputRegion(start, 
byteCount);
             input.refresh(start);
         }
     }
@@ -311,7 +314,7 @@ public abstract class Inflater implements Closeable {
      */
     @Override
     public final void close() throws IOException {
-        if (input.channel instanceof PixelChannel) {
+        if (input.channel instanceof ComputedByteChannel) {
             input.channel.close();
         }
     }
diff --git 
a/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/inflater/LZW.java
 
b/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/inflater/LZW.java
index e0141af165..532fd83821 100644
--- 
a/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/inflater/LZW.java
+++ 
b/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/inflater/LZW.java
@@ -22,6 +22,7 @@ import java.io.EOFException;
 import java.nio.ByteBuffer;
 import org.apache.sis.storage.geotiff.base.Resources;
 import org.apache.sis.io.stream.ChannelDataInput;
+import org.apache.sis.io.stream.inflater.InflaterChannel;
 import org.apache.sis.storage.event.StoreListeners;
 
 
@@ -36,7 +37,7 @@ import org.apache.sis.storage.event.StoreListeners;
  * @author  Martin Desruisseaux (Geomatys)
  * @author  Rémi Maréchal (Geomatys)
  */
-final class LZW extends CompressionChannel {
+final class LZW extends InflaterChannel {
     /**
      * A 12 bits code meaning that we have exhausted the 4093 available codes
      * and must reset the table to the initial set of 9 bits code.
@@ -471,6 +472,13 @@ final class LZW extends CompressionChannel {
         return target.position() - start;
     }
 
+    /**
+     * Returns the resources for error messages.
+     */
+    private Resources resources() {
+        return Resources.forLocale(listeners.getLocale());
+    }
+
     /**
      * The exception to throw if the decompression process encounters data 
that it cannot process.
      */
diff --git 
a/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/inflater/PackBits.java
 
b/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/inflater/PackBits.java
index cb3ce2ab5a..d29b7b6b4f 100644
--- 
a/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/inflater/PackBits.java
+++ 
b/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/inflater/PackBits.java
@@ -20,6 +20,7 @@ import java.io.IOException;
 import java.nio.ByteBuffer;
 import org.apache.sis.storage.event.StoreListeners;
 import org.apache.sis.io.stream.ChannelDataInput;
+import org.apache.sis.io.stream.inflater.InflaterChannel;
 
 
 /**
@@ -28,7 +29,7 @@ import org.apache.sis.io.stream.ChannelDataInput;
  *
  * @author  Martin Desruisseaux (Geomatys)
  */
-final class PackBits extends CompressionChannel {
+final class PackBits extends InflaterChannel {
     /**
      * Number of bytes to copy literally from the input.
      * Only one of {@code literalCount} and {@link #duplicatedCount} can be 
non-zero.
diff --git 
a/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/inflater/PredictorChannel.java
 
b/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/inflater/PredictorChannel.java
index 223382a214..e80589f39e 100644
--- 
a/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/inflater/PredictorChannel.java
+++ 
b/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/inflater/PredictorChannel.java
@@ -20,6 +20,8 @@ import java.io.IOException;
 import java.nio.ByteBuffer;
 import org.apache.sis.util.ArraysExt;
 import org.apache.sis.pending.jdk.JDK13;
+import org.apache.sis.io.stream.inflater.ComputedByteChannel;
+import org.apache.sis.io.stream.inflater.InflaterChannel;
 
 
 /**
@@ -29,11 +31,11 @@ import org.apache.sis.pending.jdk.JDK13;
  *
  * @author  Martin Desruisseaux (Geomatys)
  */
-abstract class PredictorChannel extends PixelChannel {
+abstract class PredictorChannel extends ComputedByteChannel {
     /**
      * The channel from which to read data.
      */
-    private final CompressionChannel input;
+    private final InflaterChannel input;
 
     /**
      * If {@link #read(ByteBuffer)} could not process some trailing bytes,
@@ -52,7 +54,7 @@ abstract class PredictorChannel extends PixelChannel {
      *
      * @param  input  the channel that decompress data.
      */
-    protected PredictorChannel(final CompressionChannel input) {
+    protected PredictorChannel(final InflaterChannel input) {
         this.input = input;
         deferred = ArraysExt.EMPTY_BYTE;
     }
diff --git a/endorsed/src/org.apache.sis.storage/main/module-info.java 
b/endorsed/src/org.apache.sis.storage/main/module-info.java
index 4a43ba85e5..0155e9b867 100644
--- a/endorsed/src/org.apache.sis.storage/main/module-info.java
+++ b/endorsed/src/org.apache.sis.storage/main/module-info.java
@@ -92,6 +92,10 @@ module org.apache.sis.storage {
             org.apache.sis.console,
             org.apache.sis.gui;                         // In the "optional" 
sub-project.
 
+    exports org.apache.sis.io.stream.inflater to
+            org.apache.sis.storage.geotiff,
+            org.apache.sis.storage.geoheif;             // In the "incubator" 
sub-project.
+
     exports org.apache.sis.storage.xml to
             org.apache.sis.storage.xml,
             org.apache.sis.gui;                         // In the "optional" 
sub-project.
diff --git 
a/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/inflater/PixelChannel.java
 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/io/stream/inflater/ComputedByteChannel.java
similarity index 78%
rename from 
endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/inflater/PixelChannel.java
rename to 
endorsed/src/org.apache.sis.storage/main/org/apache/sis/io/stream/inflater/ComputedByteChannel.java
index 971a653279..cddd8c803b 100644
--- 
a/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/inflater/PixelChannel.java
+++ 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/io/stream/inflater/ComputedByteChannel.java
@@ -14,18 +14,19 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.storage.geotiff.inflater;
+package org.apache.sis.io.stream.inflater;
 
 import java.io.IOException;
 import java.nio.channels.ReadableByteChannel;
 
 
 /**
- * A channel of pixel values after all steps have been completed.
- * The steps may be:
+ * Base class of channels providing values that are computed on-the-fly.
+ * The computation typically uses another channel as its source.
+ * Examples:
  *
  * <ul>
- *   <li>Decompression alone, in which case this class is a subtype of {@link 
CompressionChannel}.</li>
+ *   <li>Decompression alone, in which case this class is a subtype of {@link 
InflaterChannel}.</li>
  *   <li>Decompression followed by some mathematical operation applied on the 
data after decompression.
  *       In that case this class is a subtype of {@link PredictorChannel}.</li>
  * </ul>
@@ -34,15 +35,16 @@ import java.nio.channels.ReadableByteChannel;
  *
  * @author  Martin Desruisseaux (Geomatys)
  */
-abstract class PixelChannel implements ReadableByteChannel {
+public abstract class ComputedByteChannel implements ReadableByteChannel {
     /**
      * Creates a new channel.
      */
-    protected PixelChannel() {
+    protected ComputedByteChannel() {
     }
 
     /**
-     * Prepares this channel for reading a new tile or a new band of a planar 
image.
+     * Prepares this channel for reading a new block of data.
+     * A block may be, for example, a tile or a band of a tile.
      *
      * @param  start      stream position where to start reading.
      * @param  byteCount  number of bytes to read from the input.
diff --git 
a/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/inflater/Deflate.java
 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/io/stream/inflater/Deflate.java
similarity index 90%
rename from 
endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/inflater/Deflate.java
rename to 
endorsed/src/org.apache.sis.storage/main/org/apache/sis/io/stream/inflater/Deflate.java
index d8fa212a5e..49d7bd0eef 100644
--- 
a/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/inflater/Deflate.java
+++ 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/io/stream/inflater/Deflate.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.storage.geotiff.inflater;
+package org.apache.sis.io.stream.inflater;
 
 import java.io.IOException;
 import java.nio.ByteBuffer;
@@ -31,7 +31,7 @@ import org.apache.sis.io.stream.ChannelDataInput;
  * @author  Rémi Marechal (Geomatys)
  * @author  Martin Desruisseaux (Geomatys)
  */
-final class Deflate extends CompressionChannel {
+public final class Deflate extends InflaterChannel {
     /**
      * Access to the ZLIB compression library.
      * Must be released by call to {@link Inflater#end()} after decompression 
is completed.
@@ -45,9 +45,6 @@ final class Deflate extends CompressionChannel {
      *
      * @param  input      the source of data to decompress.
      * @param  listeners  object where to report warnings.
-     * @param  start      stream position where to start reading.
-     * @param  byteCount  number of bytes to read from the input.
-     * @throws IOException if the stream cannot be seek to the given start 
position.
      */
     public Deflate(final ChannelDataInput input, final StoreListeners 
listeners) {
         super(input, listeners);
@@ -55,7 +52,7 @@ final class Deflate extends CompressionChannel {
     }
 
     /**
-     * Prepares this inflater for reading a new tile or a new band of a tile.
+     * Prepares this channel for reading a new block of data.
      *
      * @param  start      stream position where to start reading.
      * @param  byteCount  number of bytes to read from the input.
diff --git 
a/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/inflater/CompressionChannel.java
 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/io/stream/inflater/InflaterChannel.java
similarity index 85%
rename from 
endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/inflater/CompressionChannel.java
rename to 
endorsed/src/org.apache.sis.storage/main/org/apache/sis/io/stream/inflater/InflaterChannel.java
index e24163771d..16d81de18f 100644
--- 
a/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/inflater/CompressionChannel.java
+++ 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/io/stream/inflater/InflaterChannel.java
@@ -14,14 +14,14 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.storage.geotiff.inflater;
+package org.apache.sis.io.stream.inflater;
 
 import java.util.Arrays;
 import java.io.IOException;
 import java.nio.ByteBuffer;
+import java.nio.BufferOverflowException;
 import org.apache.sis.math.MathFunctions;
 import org.apache.sis.storage.StorageConnector;
-import org.apache.sis.storage.geotiff.base.Resources;
 import org.apache.sis.io.stream.ChannelDataInput;
 import org.apache.sis.storage.event.StoreListeners;
 import org.apache.sis.pending.jdk.JDK18;
@@ -35,7 +35,7 @@ import org.apache.sis.pending.jdk.JDK18;
  *
  * @author  Martin Desruisseaux (Geomatys)
  */
-abstract class CompressionChannel extends PixelChannel {
+public abstract class InflaterChannel extends ComputedByteChannel {
     /**
      * Desired size of the buffer where to temporarily copy decompressed data.
      * The actual buffer size may become larger (but not smaller)
@@ -66,13 +66,13 @@ abstract class CompressionChannel extends PixelChannel {
      * @param  input      the source of data to decompress.
      * @param  listeners  object where to report warnings.
      */
-    protected CompressionChannel(final ChannelDataInput input, final 
StoreListeners listeners) {
+    protected InflaterChannel(final ChannelDataInput input, final 
StoreListeners listeners) {
         this.input     = input;
         this.listeners = listeners;
     }
 
     /**
-     * Prepares this inflater for reading a new tile or a new band of a tile.
+     * Prepares this channel for reading a new block of data.
      *
      * @param  start      stream position where to start reading.
      * @param  byteCount  number of bytes to read from the input.
@@ -108,7 +108,7 @@ abstract class CompressionChannel extends PixelChannel {
      * @throws IOException if an error occurred while filling the buffer with 
initial data.
      * @return the data input for uncompressed data.
      */
-    final ChannelDataInput createDataInput(final PixelChannel channel, final 
int scanlineStride, final boolean directBuffer)
+    public final ChannelDataInput createDataInput(final ComputedByteChannel 
channel, final int scanlineStride, final boolean directBuffer)
             throws IOException
     {
         final int capacity;
@@ -127,9 +127,15 @@ abstract class CompressionChannel extends PixelChannel {
 
     /**
      * Copies the given byte <var>n</var> times in the given buffer.
+     * This is a convenience method for an operation frequently found in 
different compression algorithms.
+     *
+     * @param  target  where to append the bytes.
+     * @param  value   the byte to repeat.
+     * @param  count   number of time to repeat the given value.
+     * @throws BufferOverflowException if {@code count} is greater than the 
remaining space in the buffer.
      */
-    static void repeat(final ByteBuffer target, final byte b, int n) {
-        while (--n >= 0) target.put(b);
+    protected static void repeat(final ByteBuffer target, final byte value, 
int count) {
+        while (--count >= 0) target.put(value);
     }
 
     /**
@@ -149,11 +155,4 @@ abstract class CompressionChannel extends PixelChannel {
     public void close() {
         // Do NOT close `input`.
     }
-
-    /**
-     * Returns the resources for error messages.
-     */
-    final Resources resources() {
-        return Resources.forLocale(listeners.getLocale());
-    }
 }
diff --git 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/io/stream/inflater/package-info.java
 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/io/stream/inflater/package-info.java
new file mode 100644
index 0000000000..e1d7c0a718
--- /dev/null
+++ 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/io/stream/inflater/package-info.java
@@ -0,0 +1,32 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Utility classes for the implementation of data stores that need to 
decompress block of data.
+ *
+ * <STRONG>Do not use!</STRONG>
+ *
+ * This package is for internal use by <abbr>SIS</abbr> only.
+ * Classes in this package may change in incompatible ways in any future 
version without notice.
+ *
+ * <p>More implementations of the base classes in this package are provided in 
other modules such as GeoTIFF.
+ * Some of these implementations may move to this package in the future if 
there is a need to share compression
+ * algorithms.</p>
+ *
+ * @author  Martin Desruisseaux (Geomatys)
+ */
+package org.apache.sis.io.stream.inflater;

Reply via email to