1 module testsource.main;
2 
3 import ncompress42;
4 
5 import std.stdio;
6 
7 File source;
8 ubyte[] buffer0, buffer1, buffer2;
9 size_t position;
10 
11 void main(string[] args)
12 {
13 	writeln(args[1]);
14     NCompressCtxt context;
15     source = File(args[1], "rb");
16     buffer2.length = cast(size_t) source.size;
17     buffer2 = source.rawRead(buffer2);
18     extern (C) int memoryReader(ubyte* bytes, size_t numBytes, void* rwCtxt)
19     {
20         import core.stdc.string : memcpy;
21 		writeln(numBytes," is being read from buffer2. Remaining: ", buffer2.length - position);
22         if (position + numBytes < buffer2.length)
23         {
24             memcpy(bytes, buffer2.ptr + position, numBytes);
25             position += numBytes;
26             return cast(int) numBytes;
27         }
28         else if (position + numBytes == buffer2.length)
29         {
30             return 0;
31         }
32         else
33         {
34             numBytes = buffer2.length - position;
35             memcpy(bytes, buffer2.ptr + position, numBytes);
36             position += numBytes;
37             return cast(int) numBytes;
38         }
39     }
40 
41     extern (C) int memoryWriter(const(ubyte)* bytes, size_t numBytes, void* rwCtxt)
42     {
43         //import core.stdc.string : memcpy;
44         const(ubyte)[] buffer3 = bytes[0 .. numBytes];
45         buffer1 ~= buffer3.dup;
46         return numBytes;
47     }
48 
49     context.reader = &memoryReader;
50     context.writer = &memoryWriter;
51     nInitCompress(&context, 0);
52 	writeln("Compression initialized");
53     NCompressError result = nCompress(&context);
54     writeln(result);
55     nFreeCompress(&context);
56     buffer0 = buffer2;
57     buffer2 = buffer1;
58     context.reader = &memoryReader;
59     context.writer = &memoryWriter;
60     nInitDecompress(&context);
61 	position = 0;
62 	buffer1 = [];
63 	writeln("Decompression initialized");
64     result = nDecompress(&context);
65     writeln(result);
66     writeln(buffer1 == buffer0);
67 	writeln(buffer0.length);
68 	writeln(buffer1.length);
69 }