/*
// Copyright 2017 2018 Intel Corporation All Rights Reserved.
//
// The source code, information and material ("Material") contained herein is
// owned by Intel Corporation or its suppliers or licensors, and title
// to such Material remains with Intel Corporation or its suppliers or
// licensors. The Material contains proprietary information of Intel
// or its suppliers and licensors. The Material is protected by worldwide
// copyright laws and treaty provisions. No part of the Material may be used,
// copied, reproduced, modified, published, uploaded, posted, transmitted,
// distributed or disclosed in any way without Intel's prior express written
// permission. No license under any patent, copyright or other intellectual
// property rights in the Material is granted to or conferred upon you,
// either expressly, by implication, inducement, estoppel or otherwise.
// Any license under such intellectual property rights must be express and
// approved by Intel in writing.
//
// Unless otherwise agreed by Intel in writing,
// you may not remove or alter this notice or any other notice embedded in
// Materials by Intel or Intel's suppliers or licensors in any way.
*/
/*
The example below shows how to use the functions:
ippsEncodeLZ4HashTableGetSize_8u
ippsEncodeLZ4HashTableInit_8u
ippsEncodeLZ4Safe_8u
*/
#include <stdio.h>
#include <string.h>
#include <ippdc.h>
#include <ipps.h>
/* Next two defines are created to simplify code reading and understanding */
#define EXIT_MAIN exitLine: /* Label for Exit */
#define check_sts(st) if((st) != ippStsNoErr) goto exitLine; /* Go to Exit if Intel(R) Integrated Primitives (Intel(R) IPP) function returned status different from ippStsNoErr */
#define TEST_SIZE (1024)
#define COMPR_LEN (TEST_SIZE / 20)
int main(void)
{
Ipp8u *srcBuf = NULL, *comprBuf = NULL, *hashTable = NULL;
IppStatus st = ippStsNoErr;
int i, hashSize, remBytes, srcLen, dstLen;
srcBuf = ippsMalloc_8u(TEST_SIZE);
comprBuf = ippsMalloc_8u(COMPR_LEN);
/* Initialize source buffer */
check_sts( st = ippsVectorJaehne_8u(srcBuf, TEST_SIZE, IPP_MAX_8U) )
for(i = 0; i < TEST_SIZE; i++)
srcBuf[i] >>= 6; /* Decrease source data entropy */
/* Init and allocate hash table */
check_sts( st = ippsEncodeLZ4HashTableGetSize_8u(&hashSize) )
hashTable = ippsMalloc_8u(hashSize);
check_sts( st = ippsEncodeLZ4HashTableInit_8u(hashTable, TEST_SIZE) )
/* Compress source data */
remBytes = TEST_SIZE;
while(remBytes > 0)
{
srcLen = remBytes;
dstLen = COMPR_LEN;
/* Compressing into knowingly small buffer */
st = ippsEncodeLZ4Safe_8u((const Ipp8u*)srcBuf + TEST_SIZE - remBytes, &srcLen,
comprBuf, &dstLen, hashTable);
if(st == ippStsDstSizeLessExpected)
{
/* Print compression result */
printf("Compression: %d bytes compressed into %d bytes\n", srcLen, dstLen);
}
else if(st < ippStsNoErr)
{
printf("Error in compression function\n");
break;
}
remBytes -= srcLen;
}
EXIT_MAIN
ippsFree(srcBuf);
ippsFree(comprBuf);
ippsFree(hashTable);
return (int)st;
}