2013-08-24 00:36:43 +00:00
|
|
|
#include <fc/compress/lzma.hpp>
|
2014-01-22 13:28:21 +00:00
|
|
|
#include <fc/exception/exception.hpp>
|
|
|
|
|
|
|
|
|
|
#include <lzma_c.h>
|
2013-08-24 00:36:43 +00:00
|
|
|
|
|
|
|
|
namespace fc {
|
|
|
|
|
|
2014-01-22 13:28:21 +00:00
|
|
|
std::vector<char> lzma_compress(const std::vector<char>& in)
|
|
|
|
|
{
|
|
|
|
|
FC_ASSERT(!in.empty());
|
|
|
|
|
|
|
|
|
|
const unsigned char* in_data = reinterpret_cast<const unsigned char*> (&in[0]);;
|
|
|
|
|
unsigned char* out_data;
|
|
|
|
|
size_t out_len = 0;
|
|
|
|
|
|
|
|
|
|
int ret = simpleCompress(elzma_file_format::ELZMA_lzma, in_data, in.size(),
|
|
|
|
|
&out_data, &out_len);
|
|
|
|
|
|
|
|
|
|
if(ret != 0)
|
2013-08-24 00:36:43 +00:00
|
|
|
{
|
2014-01-22 13:28:21 +00:00
|
|
|
FC_ASSERT(0);
|
|
|
|
|
return std::vector<char>();
|
2013-08-24 00:36:43 +00:00
|
|
|
}
|
2014-01-22 13:28:21 +00:00
|
|
|
|
|
|
|
|
std::vector<char> out(out_data, out_data+out_len);
|
|
|
|
|
|
|
|
|
|
return out;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
std::vector<char> lzma_decompress( const std::vector<char>& compressed )
|
|
|
|
|
{
|
|
|
|
|
FC_ASSERT(!compressed.empty());
|
|
|
|
|
|
|
|
|
|
const unsigned char* in_data = reinterpret_cast<const unsigned char*> (&compressed[0]);;
|
|
|
|
|
unsigned char* out_data;
|
|
|
|
|
size_t out_len = 0;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int ret = simpleDecompress(elzma_file_format::ELZMA_lzma, in_data, compressed.size(),
|
|
|
|
|
&out_data, &out_len);
|
|
|
|
|
|
|
|
|
|
if(ret != 0)
|
2013-08-24 00:36:43 +00:00
|
|
|
{
|
2014-01-22 13:28:21 +00:00
|
|
|
FC_ASSERT(0);
|
|
|
|
|
return std::vector<char>();
|
2013-08-24 00:36:43 +00:00
|
|
|
}
|
2014-01-22 13:28:21 +00:00
|
|
|
|
|
|
|
|
std::vector<char> out(out_data, out_data+out_len);
|
|
|
|
|
|
|
|
|
|
return out;
|
|
|
|
|
}
|
2013-08-24 00:36:43 +00:00
|
|
|
|
|
|
|
|
} // namespace fc
|