⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gitscheme.c

📁 这是在PCA下的基于IPP库示例代码例子,在网上下了IPP的库之后,设置相关参数就可以编译该代码.
💻 C
字号:
/*//////////////////////////////// "gitscheme.c" /////////////////////////////////                  INTEL CORPORATION PROPRIETARY INFORMATION//     This software is supplied under the terms of a license agreement or//     nondisclosure agreement with Intel Corporation and may not be copied//     or disclosed except in accordance with the terms of that agreement.//          Copyright(c) 2005 Intel Corporation. All Rights Reserved.//////     higher level functions of IPP DC ( data compression ) domain for//     BWT, MTF, RLE and Huffman encoding/decoding usage*/#include "gitscheme.h"Ipp8u *pTmp;/* macro for exchanging two variables-pointers*/#define EXCHANGEBUFFERS(PSRC, PDST) pTmp = PSRC; PSRC = PDST; PDST = pTmpint Compress2StateInitAlloc( gitState **ppState, int blocksize, IppGITStrategyHint strategyHint ) {    IppStatus st;    int totalSize = 0,        bwtSize   = 0,        gitSize   = 0,        maxsize   = blocksize << 1;    IppGITState_8u *pGState = NULL;    /* allocation of additional buffer for BWT */    if( ippStsNoErr != ( st = ippsBWTFwdGetSize_8u( maxsize, &bwtSize ) ) )        return st;    totalSize += bwtSize;    if( ippStsNoErr != ( st = ippsEncodeGITGetSize_8u( maxsize, maxsize, &gitSize ) ) )        return st;    totalSize += gitSize;    (*ppState)                = (gitState *)ippsMalloc_8u(sizeof(gitState));    (*ppState)->mainstream    = (Ipp8u *)ippsMalloc_8u( sizeof(Ipp8u) * totalSize );    (*ppState)->pBwtAddBuffer = (*ppState)->mainstream;    (*ppState)->pGITState     = (*ppState)->mainstream + bwtSize;    (*ppState)->bwtBufferSize = bwtSize;    (*ppState)->gitStateSize  = gitSize;    (*ppState)->strategyHint  = strategyHint;    (*ppState)->blocksize     = blocksize;    pGState = (IppGITState_8u *)((*ppState)->pGITState);    if( ippStsNoErr != ( st = ippsEncodeGITInit_8u( maxsize, maxsize, pGState ) ) )        return st;    return ippStsNoErr;}int Decompress2StateInitAlloc( gitState **ppState, int blocksize, IppGITStrategyHint strategyHint ) {    IppStatus st;    int totalSize = 0,        bwtSize   = 0,        gitSize   = 0;    IppGITState_8u *pGState = NULL;    /* allocation of additional buffer for BWT */    if( ippStsNoErr != ( st = ippsBWTInvGetSize_8u( blocksize << 1, &bwtSize ) ) )        return st;    totalSize += bwtSize;    if( ippStsNoErr != ( st = ippsDecodeGITGetSize_8u( blocksize, &gitSize ) ) )        return st;    totalSize += gitSize;    (*ppState)                  = (gitState *)ippsMalloc_8u(sizeof(gitState));    (*ppState)->mainstream      = (Ipp8u *)ippsMalloc_8u( sizeof(Ipp8u) * totalSize);    (*ppState)->pBwtAddBuffer   = (*ppState)->mainstream;    (*ppState)->pGITState       = ((*ppState)->pBwtAddBuffer + bwtSize);    (*ppState)->bwtBufferSize   =  bwtSize;    (*ppState)->gitStateSize    =  gitSize;    (*ppState)->strategyHint    =  strategyHint;    (*ppState)->blocksize       =  blocksize;    pGState = (IppGITState_8u *)((*ppState)->pGITState);    if( ippStsNoErr != ( st = ippsDecodeGITInit_8u( blocksize << 1, pGState ) ) )        return st;    return ippStsNoErr;}int Compress2( Ipp8u **ppSrc, int SrcLen, Ipp8u **ppDst, int *pDstLen, gitState *pState ) {    int     st;    int         bwtLen              = *pDstLen;    Ipp8u *     pBwtAddBuffer       = pState->pBwtAddBuffer;    Ipp8u *     pSrc                = *ppSrc;    Ipp8u *     pDst                = *ppDst;    IppGITState_8u * pGITState      = (IppGITState_8u *)pState->pGITState;    IppGITStrategyHint strategyHint = pState->strategyHint;    if( ippStsNoErr != ( st = ForwardBWT( pSrc, SrcLen, pDst, &bwtLen, pBwtAddBuffer ) ) ) {        fprintf(stderr, "Error <%d> while trying forward BWT Transformation. Exiting.\n", st );        return st;    }    EXCHANGEBUFFERS(pSrc, pDst);    if( ippStsNoErr != ( st = EncodeGIT( pSrc, bwtLen, pDst, pDstLen, pGITState, strategyHint ) ) ) {        fprintf(stderr, "Error <%d> while trying to encode GIT. Exiting.\n", st );        return st;    }    *ppSrc = pSrc;    *ppDst = pDst;    return st;}int Decompress2( Ipp8u **ppSrc, int SrcLen, Ipp8u **ppDst, int *pDstLen, gitState *pState ) {    int st;    int gitLen                      = *pDstLen;    Ipp8u * pBwtAddBuffer           = pState->pBwtAddBuffer;    IppGITState_8u  * pGITState     = (IppGITState_8u *)pState->pGITState;    IppGITStrategyHint strategyHint = pState->strategyHint;    Ipp8u *pSrc                     = *ppSrc;    Ipp8u *pDst                     = *ppDst;    if( ippStsNoErr != ( st = DecodeGIT( pSrc, SrcLen, pDst, &gitLen, pGITState, strategyHint ) ) ) {        fprintf(stderr, "Error <%d> while trying to decode GIT. Exiting.\n", st );        return st;    }    EXCHANGEBUFFERS(pSrc, pDst);    if( ippStsNoErr != ( st = InverseBWT( pSrc, gitLen, pDst, pDstLen, pBwtAddBuffer ) ) ) {        fprintf(stderr, "Error <%d> while trying backward BWT Transformation. Exiting.\n", st );        return st;    }    *ppSrc = pSrc;    *ppDst = pDst;    return st;}void Free2State( gitState *pState ) {    ippsFree(pState->mainstream);    ippsFree(pState);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -