1 // Copyright (c) 2011-present, Facebook, Inc.  All rights reserved.
2 //  This source code is licensed under both the GPLv2 (found in the
3 //  COPYING file in the root directory) and Apache 2.0 License
4 //  (found in the LICENSE.Apache file in the root directory).
5 
6 package org.rocksdb;
7 
8 /**
9  * Enum CompressionType
10  *
11  * <p>DB contents are stored in a set of blocks, each of which holds a
12  * sequence of key,value pairs. Each block may be compressed before
13  * being stored in a file. The following enum describes which
14  * compression method (if any) is used to compress a block.</p>
15  */
16 public enum CompressionType {
17 
18   NO_COMPRESSION((byte) 0x0, null),
19   SNAPPY_COMPRESSION((byte) 0x1, "snappy"),
20   ZLIB_COMPRESSION((byte) 0x2, "z"),
21   BZLIB2_COMPRESSION((byte) 0x3, "bzip2"),
22   LZ4_COMPRESSION((byte) 0x4, "lz4"),
23   LZ4HC_COMPRESSION((byte) 0x5, "lz4hc"),
24   XPRESS_COMPRESSION((byte) 0x6, "xpress"),
25   ZSTD_COMPRESSION((byte)0x7, "zstd"),
26   DISABLE_COMPRESSION_OPTION((byte)0x7F, null);
27 
28   /**
29    * <p>Get the CompressionType enumeration value by
30    * passing the library name to this method.</p>
31    *
32    * <p>If library cannot be found the enumeration
33    * value {@code NO_COMPRESSION} will be returned.</p>
34    *
35    * @param libraryName compression library name.
36    *
37    * @return CompressionType instance.
38    */
getCompressionType(String libraryName)39   public static CompressionType getCompressionType(String libraryName) {
40     if (libraryName != null) {
41       for (CompressionType compressionType : CompressionType.values()) {
42         if (compressionType.getLibraryName() != null &&
43             compressionType.getLibraryName().equals(libraryName)) {
44           return compressionType;
45         }
46       }
47     }
48     return CompressionType.NO_COMPRESSION;
49   }
50 
51   /**
52    * <p>Get the CompressionType enumeration value by
53    * passing the byte identifier to this method.</p>
54    *
55    * @param byteIdentifier of CompressionType.
56    *
57    * @return CompressionType instance.
58    *
59    * @throws IllegalArgumentException If CompressionType cannot be found for the
60    *   provided byteIdentifier
61    */
getCompressionType(byte byteIdentifier)62   public static CompressionType getCompressionType(byte byteIdentifier) {
63     for (final CompressionType compressionType : CompressionType.values()) {
64       if (compressionType.getValue() == byteIdentifier) {
65         return compressionType;
66       }
67     }
68 
69     throw new IllegalArgumentException(
70         "Illegal value provided for CompressionType.");
71   }
72 
73   /**
74    * <p>Returns the byte value of the enumerations value.</p>
75    *
76    * @return byte representation
77    */
getValue()78   public byte getValue() {
79     return value_;
80   }
81 
82   /**
83    * <p>Returns the library name of the compression type
84    * identified by the enumeration value.</p>
85    *
86    * @return library name
87    */
getLibraryName()88   public String getLibraryName() {
89     return libraryName_;
90   }
91 
CompressionType(final byte value, final String libraryName)92   CompressionType(final byte value, final String libraryName) {
93     value_ = value;
94     libraryName_ = libraryName;
95   }
96 
97   private final byte value_;
98   private final String libraryName_;
99 }
100