next up previous contents index
Next: Move-To-Front Coder II ( Up: Lossless Compression Previous: Burrows-Wheeler Transform ( BWTCoder   Contents   Index


Move-To-Front Coder ( MTFCoder )

Definition

A Move-To-Front coder is used for preprocessing the input before it is fed to the actual compressor. Encoding works as follows: The coder maintains a list L containing all the 256 characters that can appear in the input. Whenever it receives an input character c it looks up the position i of c in L , outputs i and moves c to the front of L .
Let us look at an example. Assume that the position of every character in the initial list is equal to its ASCII-code. When we encode the sequence aaabbbbaab we obtain the output 97, 0, 0, 98, 0, 0, 0, 1, 0, 1 . So a MTFCoder has the following properties:

Therefore this coder is often used as an intermediate coding step between a Burrows-Wheeler transform (see Section BWTCoder) and a compressing coder.

#include < LEDA/coding/MTF.h >

Creation

MTFCoder C(streambuf* src_stream = 0, streambuf* tgt_stream = 0, bool own_streams = false)
    creates an instance C which uses the given source and target streams. If own_streams is set, then C is responsible for the destruction of the streams, otherwise the pointers src_stream and tgt_stream must be valid during the life-time of C.

MTFCoder C(const char* src_file_name, const char* tgt_file_name)
    creates an instance C which uses file-streams for input and output.

Operations

Standard Operations

void C.encode() encodes the source stream and writes the output to the target stream.

void C.decode() decodes the source stream and writes the output to the target stream.

uint32 C.encode_memory_chunk(const char* in_buf, uint32 in_len, char* out_buf, uint32 out_len)
    encodes the memory chunk starting at in_buf with size in_len into the buffer starting at out_buf with size out_len. The function returns actual length of the encoded chunk which may be smaller than out_len. If the output buffer is too small for the encoded data the failure flag will be set (see below).

uint32 C.decode_memory_chunk(const char* in_buf, uint32 in_len, char* out_buf, uint32 out_len)
    decodes a memory chunk. The meaning of the parameters and the return value is the same as in the previous function.

streambuf* C.get_src_stream() returns the current source stream.

void C.set_src_stream(streambuf* src_stream, bool own_stream = false)
    sets the source stream (cf. constructor).

void C.set_src_file(const char* file_name)
    sets a file as source stream.

streambuf* C.get_tgt_stream() returns the current target stream.

void C.set_tgt_stream(streambuf* tgt_stream, bool own_Stream = false)
    sets the target stream (cf. constructor).

void C.set_tgt_file(const char* file_name)
    sets a file as target stream.

void C.reset() puts C in exactly the same state as the default constructor.

bool C.failed() returns true if an error occured.

bool C.finished() returns true if the coding is finished.

string C.get_description() provides a description for C.


next up previous contents index
Next: Move-To-Front Coder II ( Up: Lossless Compression Previous: Burrows-Wheeler Transform ( BWTCoder   Contents   Index
Christian Uhrig 2017-04-07