diff --git a/src/main/java/azgracompress/cache/QuantizationCacheManager.java b/src/main/java/azgracompress/cache/QuantizationCacheManager.java index 83e3998dcf2e2a74fbd4231fcef7a13d10b2def5..02c083aba7a21a2bf23a130a30282d326114e8cb 100644 --- a/src/main/java/azgracompress/cache/QuantizationCacheManager.java +++ b/src/main/java/azgracompress/cache/QuantizationCacheManager.java @@ -7,6 +7,7 @@ import azgracompress.quantization.scalar.SQCodebook; import azgracompress.quantization.vector.VQCodebook; import java.io.*; +import java.util.ArrayList; public class QuantizationCacheManager { @@ -54,7 +55,7 @@ public class QuantizationCacheManager { final File inputFile = new File(trainFile); final String cacheFileName = String.format("%s_%d_%dx%dx%d.qvc", inputFile.getName(), codebookSize, vDim.getX(), vDim.getY(), vDim.getZ()); -// System.out.println("getCacheFilePathForVQ()=" + cacheFileName); + // System.out.println("getCacheFilePathForVQ()=" + cacheFileName); return new File(cacheFolder, cacheFileName); } @@ -286,6 +287,39 @@ public class QuantizationCacheManager { return null; } + + /** + * Tries to load all (different codebook sizes) available cache files for given file and quantization type. + * + * @param compressionParams Parameters used to find cache file. + * @return Cache files which are available for given file and quantization type. + */ + public ArrayList<ICacheFile> loadAvailableCacheFiles(final CompressionOptions compressionParams) { + final ArrayList<ICacheFile> availableCacheFiles = new ArrayList<>(); + + final int originalBPCI = compressionParams.getBitsPerCodebookIndex(); + try { + + for (int bpci = 2; bpci < 9; bpci++) { // 2 to 8 + compressionParams.setBitsPerCodebookIndex(bpci); + final ICacheFile bpciCacheFile = loadCacheFile(compressionParams); + if (bpciCacheFile != null) { + availableCacheFiles.add(bpciCacheFile); + } + } + } finally { + compressionParams.setBitsPerCodebookIndex(originalBPCI); + } + return availableCacheFiles; + } + + /** + * Tries to load cache file for specified file and quantization type. Also Bits Per Codebook index and quantization vector dimensions + * are used when searching for given cache file. + * + * @param compressionParams Parameters used to find cache file. + * @return Quantization cache file or null if requested file doesn't exist. + */ public ICacheFile loadCacheFile(final CompressionOptions compressionParams) { final String path; final int codebookSize = (int) Math.pow(2, compressionParams.getBitsPerCodebookIndex());