aboutsummaryrefslogtreecommitdiff
path: root/core/packer.h
blob: a3b258f9b1039698e0a03614380155b6a69fd9be (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#ifndef PACKER_H
#define PACKER_H

#include "../third-party/lzma/LzmaEnc.h"

class IArchitecture;

struct PackerInputStream
{
	ISeqInStream p;
	IArchitecture *file;
	Data *data;
	size_t size;
	size_t pos;
	PackerInputStream(IArchitecture *file_, size_t size_);
	PackerInputStream(Data *data_);
};

struct PackerOutputStream
{
	ISeqOutStream p;
	Data *data;
	PackerOutputStream(Data *data_);
};

struct PackerProgress
{
	ICompressProgress p;
	IArchitecture *file;
	uint64_t last_pos;
	PackerProgress(IArchitecture *file_);
};

class Packer
{
public:
	Packer();
	~Packer();
	bool Code(IArchitecture *file, size_t size, Data *data);
	bool Code(IArchitecture *file, Data *in_data, Data *out_data);
	bool WriteProps(Data *data);
private:
	bool Code(IArchitecture *file, PackerInputStream &in, PackerOutputStream &out);

	CLzmaEncHandle encoder_;
	CLzmaEncProps props_;
};

#endif