From 78c328f1bddc2aba9fee652ff6e112e16293013f Mon Sep 17 00:00:00 2001
From: Vojtech Moravec <vojtech.moravec.st@vsb.cz>
Date: Mon, 10 Aug 2020 10:54:52 +0200
Subject: [PATCH] Add new 'flag'-method `supportParallelLoading` to
 IPlaneLoader.

Method `supportParallelLoading` returns true if the current loader can
utilize more threads when loading plane data.

For example ImageJBufferLoader can use more threads, because all data
are already in memory.

On the other hand SCIFIOLoader fails to utilize more threads with single
IReader, we would have to create per-thread reader.
---
 .../java/azgracompress/io/loader/IPlaneLoader.java     | 10 ++++++++++
 .../azgracompress/io/loader/ImageJBufferLoader.java    |  5 +++++
 2 files changed, 15 insertions(+)

diff --git a/src/main/java/azgracompress/io/loader/IPlaneLoader.java b/src/main/java/azgracompress/io/loader/IPlaneLoader.java
index 0ed068f..7e20bac 100644
--- a/src/main/java/azgracompress/io/loader/IPlaneLoader.java
+++ b/src/main/java/azgracompress/io/loader/IPlaneLoader.java
@@ -10,6 +10,16 @@ import java.io.IOException;
  * Interface for dataset loaders.
  */
 public interface IPlaneLoader {
+
+    /**
+     * Check whether current loader supports threading.
+     *
+     * @return True if current loader can use more threads for loading.
+     */
+    default boolean supportParallelLoading() {
+        return false;
+    }
+
     /**
      * Get dimensions of the image, for which the loader was created.
      *
diff --git a/src/main/java/azgracompress/io/loader/ImageJBufferLoader.java b/src/main/java/azgracompress/io/loader/ImageJBufferLoader.java
index 1544151..c43bcfc 100644
--- a/src/main/java/azgracompress/io/loader/ImageJBufferLoader.java
+++ b/src/main/java/azgracompress/io/loader/ImageJBufferLoader.java
@@ -20,6 +20,11 @@ public final class ImageJBufferLoader extends BasicLoader implements IPlaneLoade
         assert (this.bufferInputData.getPixelType() == InputData.PixelType.Gray16);
     }
 
+    @Override
+    public boolean supportParallelLoading() {
+        return true;
+    }
+
     private void copyShortArrayIntoBuffer(short[] srcArray, int[] destBuffer, int destOffset, int copyLen) {
         for (int i = 0; i < copyLen; i++) {
             destBuffer[destOffset + i] = TypeConverter.shortToInt(srcArray[i]);
-- 
GitLab