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 }