-# - Find Qatzip
+# - Find qatzip
# Find the qatzip compression library and includes
#
-# QATZIP_INCLUDE_DIR - where to find qatzip.h, etc.
-# QATZIP_LIBRARIES - List of libraries when using qatzip.
-# QATZIP_FOUND - True if qatzip found.
+# qatzip_INCLUDE_DIR - where to find qatzip.h, etc.
+# qatzip_LIBRARIES - List of libraries when using qatzip.
+# qatzip_FOUND - True if qatzip found.
-find_path(QATZIP_INCLUDE_DIR NAMES qatzip.h)
-
-find_library(QATZIP_LIBRARIES NAMES qatzip)
+find_path(qatzip_INCLUDE_DIR NAMES qatzip.h)
+find_library(qatzip_LIBRARIES NAMES qatzip HINTS /usr/local/lib64/)
include(FindPackageHandleStandardArgs)
-find_package_handle_standard_args(qatzip DEFAULT_MSG QATZIP_LIBRARIES QATZIP_INCLUDE_DIR)
+find_package_handle_standard_args(qatzip DEFAULT_MSG qatzip_LIBRARIES qatzip_INCLUDE_DIR)
mark_as_advanced(
- QATZIP_LIBRARIES
- QATZIP_INCLUDE_DIR)
+ qatzip_LIBRARIES
+ qatzip_INCLUDE_DIR)
+
+if(qatzip_FOUND AND NOT TARGET qatzip::qatzip)
+ add_library(qatzip::qatzip SHARED IMPORTED)
+ set_target_properties(qatzip::qatzip PROPERTIES
+ INTERFACE_INCLUDE_DIRECTORIES "${qatzip_INCLUDE_DIR}"
+ IMPORTED_LINK_INTERFACE_LANGUAGES "C"
+ IMPORTED_LOCATION "${qatzip_LIBRARIES}")
+endif()
* Foundation. See file COPYING.
*
*/
-
+#include <qatzip.h>
#include "QatAccel.h"
+void QzSessionDeleter::operator() (struct QzSession_S *session) {
+ if (NULL != session->internal) {
+ qzTeardownSession(session);
+ qzClose(session);
+ }
+ delete session;
+}
+
/* Estimate data expansion after decompression */
static const unsigned int expansion_ratio[] = {5, 20, 50, 100, 200};
-QatAccel::~QatAccel() {
- if (NULL != session.internal) {
- qzTeardownSession(&session);
- qzClose(&session);
- }
+QatAccel::QatAccel() {
+ session.reset(new struct QzSession_S);
+ memset(session.get(), 0, sizeof(struct QzSession_S));
}
+QatAccel::~QatAccel() {}
+
bool QatAccel::init(const std::string &alg) {
QzSessionParams_T params = {(QzHuffmanHdr_T)0,};
int rc;
if (rc != QZ_OK)
return false;
- rc = qzInit(&session, QZ_SW_BACKUP_DEFAULT);
+ rc = qzInit(session.get(), QZ_SW_BACKUP_DEFAULT);
if (rc != QZ_OK && rc != QZ_DUPLICATE && rc != QZ_NO_HW)
return false;
- rc = qzSetupSession(&session, ¶ms);
+ rc = qzSetupSession(session.get(), ¶ms);
if (rc != QZ_OK && rc != QZ_DUPLICATE && rc != QZ_NO_HW ) {
- qzTeardownSession(&session);
- qzClose(&session);
+ qzTeardownSession(session.get());
+ qzClose(session.get());
return false;
}
for (auto &i : in.buffers()) {
const unsigned char* c_in = (unsigned char*) i.c_str();
unsigned int len = i.length();
- unsigned int out_len = qzMaxCompressedLength(len);
+ unsigned int out_len = qzMaxCompressedLength(len, session.get());
bufferptr ptr = buffer::create_small_page_aligned(out_len);
- int rc = qzCompress(&session, c_in, &len, (unsigned char *)ptr.c_str(), &out_len, 1);
+ int rc = qzCompress(session.get(), c_in, &len, (unsigned char *)ptr.c_str(), &out_len, 1);
if (rc != QZ_OK)
return -1;
out.append(ptr, 0, out_len);
bufferptr ptr = buffer::create_small_page_aligned(out_len);
if (joint)
- rc = qzDecompress(&session, (const unsigned char*)tmp.c_str(), &len, (unsigned char*)ptr.c_str(), &out_len);
+ rc = qzDecompress(session.get(), (const unsigned char*)tmp.c_str(), &len, (unsigned char*)ptr.c_str(), &out_len);
else
- rc = qzDecompress(&session, (const unsigned char*)cur_ptr.c_str(), &len, (unsigned char*)ptr.c_str(), &out_len);
+ rc = qzDecompress(session.get(), (const unsigned char*)cur_ptr.c_str(), &len, (unsigned char*)ptr.c_str(), &out_len);
if (rc == QZ_DATA_ERROR) {
if (!joint) {
tmp.append(cur_ptr.c_str(), cur_ptr.length());