#include "include\\zlib.h"
#pragma comment(lib, "lib\\zdll")
#include <vector>
#include <iostream>
using namespace std;
class CompressStream
{
public:
CompressStream(int compressLevel = Z_DEFAULT_COMPRESSION)
{
_strm.zalloc = 0;
_strm.zfree = 0;
_strm.next_in = NULL;
_strm.avail_in = 0;
_strm.next_out = _temp_buffer;
_strm.avail_out = _BUFSIZE;
deflateInit(&_strm, compressLevel);
}
~CompressStream()
{
deflateEnd(&_strm);
}
int write(uint8_t* data, size_t len)
{
_in.insert(_in.end(), data, data + len);
return _compress();
}
void read(uint8_t* data, size_t* readLen, size_t maxLen)
{
if (_out.size() < maxLen) { maxLen = _out.size(); }
memcpy(data, _out.data(), maxLen);
_out.erase(_out.begin(), _out.begin() + maxLen);
*readLen = maxLen;
}
private:
int _compress()
{
_strm.next_in = _in.data();
_strm.avail_in = _in.size();
int res = Z_OK;
while (res == Z_OK)
{
//cout << _strm.avail_in << ' ' << _strm.avail_out << endl;
if (_strm.avail_out == 0)
{
_out.insert(_out.end(), _temp_buffer, _temp_buffer + _BUFSIZE);
_strm.next_out = _temp_buffer;
_strm.avail_out = _BUFSIZE;
}
res = deflate(&_strm, Z_FINISH);
}
_out.insert(_out.end(), _temp_buffer, _temp_buffer + _BUFSIZE - _strm.avail_out);
_in.clear();
if (res != Z_STREAM_END) { return res; }
else { return Z_OK; }
}
std::vector<uint8_t> _in;
std::vector<uint8_t> _out;
static const size_t _BUFSIZE = 128 * 1024;
uint8_t _temp_buffer[_BUFSIZE];
z_stream _strm;
};
void main()
{
CompressStream cs;
for (int i = 0; i < 10; ++i)
{
cout << cs.write((unsigned char*)"My BUFF", 7) << endl;
}
system("pause");
}
На первый write все хорошо, 2 и следующие возвращают Z_BUF_ERROR
Виртуальный выделенный сервер (VDS) становится отличным выбором
Нужно срочно собрать Boost 1_62_0 на Windows 7 x64 SP1Нет файла corecrt
Суть проблемы: Написал я регулярное выражение, которое ищет '{' и оглядывается назад, чтобы посмотреть, нет ли там признака коментариев, и когда...
ЗдравствуйтеМне нужно определить аргументы командной строки и исходя из полученых команд проделать некие действия
Есть класс, в котором есть поле вектора из unique_ptr (Animals - тоже класс), а так же методы чтения и записи в файл этого вектора классаВот фрагмент...