Click here to Skip to main content
15,867,686 members
Articles / Programming Languages / C++

The Compression API: It was about time

Rate me:
Please Sign up or sign in to vote.
4.67/5 (7 votes)
16 Feb 2015CPOL1 min read 27.8K   468   14   4
The ability to compress/decompress data in Win32

Introduction

I guess it is too late, but they finally put it. A compression/decompression api in windows which is easy to use. And, with my class, even easier.

Background

The API is a simple set of functions that allow compression or decompression of data.  Windows supports a number of algorithms (https://msdn.microsoft.com/en-us/library/windows/desktop/hh920921(v=vs.85).aspx) which we can select in our constructor. Windows also supports block-mode, if you want to control the compressor, which is not a feature in our quick class.

Because the API exists only in Windows 8, all our class calls are dynamic (incidentally, the call uses the template from my One-Line call article) . You can check the static member COMPRESSIONAPI::Available() to see if the API is available.  If the API is not available, constructing the object will throw.

Using the code

 

C++
//
    if (!COMPRESSIONAPI::Available())
        BlowThisPC(); // :)
   
    COMPRESSIONAPI c(COMPRESS_ALGORITHM_LZMS);
   
    vector<char> x;
    x.resize(10000);
    strcpy_s(x.data(),10000,"Hello there");
   
    vector<char> rs;
    c.Compress(x.data(),10000,rs);

    vector<char> rs2;
    c.Decompress(rs.data(),rs.size(),rs2);

//

 

Easy. You have the constructor (which specifies the compression algorithm, in this case COMPRESS_ALGORITHM_LZMS.  Then you have 2 member functions, Compress and Decompress. Both take the buffer to work on, it's size, and a vector<char> to put the result. They return S_OK on success and E_FAIL on error.

Internally, my class tests the API in order to find out the exact size neeeded for the buffer. 

History

16 - 2 - 2015 : First Release

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Software Developer
Greece Greece
I'm working in C++, PHP , Java, Windows, iOS, Android and Web (HTML/Javascript/CSS).

I 've a PhD in Digital Signal Processing and Artificial Intelligence and I specialize in Pro Audio and AI applications.

My home page: https://www.turbo-play.com

Comments and Discussions

 
GeneralMy vote of 3 Pin
Cristian Amarie16-Feb-15 3:46
Cristian Amarie16-Feb-15 3:46 
GeneralRe: My vote of 3 Pin
Michael Chourdakis16-Feb-15 3:49
mvaMichael Chourdakis16-Feb-15 3:49 
GeneralRe: My vote of 3 Pin
Axel Rietschin10-May-18 6:18
professionalAxel Rietschin10-May-18 6:18 
GeneralRe: My vote of 3 Pin
Cristian Amarie15-May-18 10:56
Cristian Amarie15-May-18 10:56 
CreateCompressor function (Windows)
"Compressapi.h on Windows 8 and Windows Server 2012"

How this existed for decades? Maybe undocumented.

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.