aboutsummaryrefslogtreecommitdiff
path: root/core/packer.h
diff options
context:
space:
mode:
Diffstat (limited to 'core/packer.h')
-rw-r--r--core/packer.h49
1 files changed, 49 insertions, 0 deletions
diff --git a/core/packer.h b/core/packer.h
new file mode 100644
index 0000000..a3b258f
--- /dev/null
+++ b/core/packer.h
@@ -0,0 +1,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