Thanks for the kind words Nania. Using the match finder is actually quite simple. Include MatchTable.h and then declare a MatchTable object with the right storage type. For dictionaries <= 64Mb and maximum search depth <= 62 use:
MatchTable<PackedMatchTable> match_table(dictionary_size, 0, search_depth);
otherwise:
MatchTable<StructuredMatchTable> match_table(dictionary_size, 0, search_depth);
Then create a DataBlock struct with your data buffer pointer, start position and end position, and a ThreadPool, and call BuildTable. To read a match, call GetMatch like this:
MatchResult match = match_table.template GetMatch<kMatchLenMax>(block, index);
If the match is longer than search_depth, the data will be compared to get the full length up to kMatchLenMax.
The problem with incorporating it into existing code is that it's block based, so you need to load an entire dictionary size of data, compress it, memmove some data from the end to the beginning and fill the block with more data. The DataBlock structure has a 0 start position for the first block and then you set it to the overlap (which is 1/8th of the dictionary size in Radyx) after that. You are the most familiar with how your code handles input data so you can probably do the mod more easily than me.
You'll need to build MatchTable.cpp, MatchTableBuilder.cpp, Progress.cpp and ThreadPool.cpp in your project.
Hope this helps