CLAW Library (a C++ Library Absolutely Wonderful) 1.5.5
Public Types | Public Member Functions | Protected Types | Protected Member Functions | Protected Attributes
claw::rle_decoder< Pattern, InputBuffer, OutputBuffer > Class Template Reference

A class to help decoding run-length encoded (RLE) streams. More...

#include <rle_decoder.hpp>

List of all members.

Public Types

typedef Pattern pattern_type
 The type of the patterns we will read in the input buffer.
typedef InputBuffer input_buffer_type
 The type of the input buffer.
typedef OutputBuffer output_buffer_type
 The type of the output buffer.

Public Member Functions

 rle_decoder ()
 Constructor.
virtual ~rle_decoder ()
 Destructor.
void decode (input_buffer_type &input, output_buffer_type &output)
 Decode a RLE stream.

Protected Types

enum  mode { stop, raw, compressed }
 State of the decompression. More...

Protected Member Functions

virtual void read_mode (input_buffer_type &input, output_buffer_type &output)=0

Protected Attributes

mode m_mode
 Current mode of the decompression.
unsigned int m_count
 Case of m_mode :
pattern_type m_pattern
 The pattern to repeat.

Detailed Description

template<typename Pattern, typename InputBuffer, typename OutputBuffer>
class claw::rle_decoder< Pattern, InputBuffer, OutputBuffer >

A class to help decoding run-length encoded (RLE) streams.

Template parameters :

The Pattern and InputBuffer parameters don't have any type requirement.

The OutputBuffer type must have the following methods :

Author:
Julien Jorge

Definition at line 54 of file rle_decoder.hpp.


Member Typedef Documentation

template<typename Pattern, typename InputBuffer, typename OutputBuffer>
typedef InputBuffer claw::rle_decoder< Pattern, InputBuffer, OutputBuffer >::input_buffer_type

The type of the input buffer.

Reimplemented in claw::graphic::targa::reader::rle_targa_decoder< InputBuffer, OutputBuffer >.

Definition at line 61 of file rle_decoder.hpp.

template<typename Pattern, typename InputBuffer, typename OutputBuffer>
typedef OutputBuffer claw::rle_decoder< Pattern, InputBuffer, OutputBuffer >::output_buffer_type
template<typename Pattern, typename InputBuffer, typename OutputBuffer>
typedef Pattern claw::rle_decoder< Pattern, InputBuffer, OutputBuffer >::pattern_type

The type of the patterns we will read in the input buffer.

Definition at line 58 of file rle_decoder.hpp.


Member Enumeration Documentation

template<typename Pattern, typename InputBuffer, typename OutputBuffer>
enum claw::rle_decoder::mode [protected]

State of the decompression.

Enumerator:
stop 

Stop the decoding.

raw 

Next bytes represent raw data.

compressed 

Next bytes represent compressed data.

Definition at line 70 of file rle_decoder.hpp.

      {
        stop,

        raw,

        compressed
      }; // enum mode

Constructor & Destructor Documentation

template<typename Pattern , typename InputBuffer , typename OutputBuffer >
claw::rle_decoder< Pattern, InputBuffer, OutputBuffer >::rle_decoder ( )

Constructor.

Definition at line 36 of file rle_decoder.tpp.

  : m_mode(stop), m_count(0)
{

} // rle_decoder::rle_decoder()
template<typename Pattern , typename InputBuffer , typename OutputBuffer >
claw::rle_decoder< Pattern, InputBuffer, OutputBuffer >::~rle_decoder ( ) [virtual]

Destructor.

Definition at line 47 of file rle_decoder.tpp.

{

} // rle_decoder::~rle_decoder()

Member Function Documentation

template<typename Pattern , typename InputBuffer , typename OutputBuffer >
void claw::rle_decoder< Pattern, InputBuffer, OutputBuffer >::decode ( input_buffer_type input,
output_buffer_type output 
)

Decode a RLE stream.

Parameters:
inputThe RLE stream.
outputThe raw stream.

Definition at line 60 of file rle_decoder.tpp.

Referenced by claw::graphic::pcx::reader::decompress_line(), claw::graphic::bitmap::reader::load_4bpp_rle(), and claw::graphic::bitmap::reader::load_8bpp_rle().

{
  m_mode = stop;
  read_mode(input, output);
  
  while( m_mode != stop )
    {
      if ( m_mode == compressed )
        output.fill( m_count, m_pattern );
      else
        output.copy( m_count, input );
      
      read_mode(input, output);
    }
} // rle_decoder::decode()
template<typename Pattern, typename InputBuffer, typename OutputBuffer>
virtual void claw::rle_decoder< Pattern, InputBuffer, OutputBuffer >::read_mode ( input_buffer_type input,
output_buffer_type output 
) [protected, pure virtual]

Member Data Documentation

template<typename Pattern, typename InputBuffer, typename OutputBuffer>
unsigned int claw::rle_decoder< Pattern, InputBuffer, OutputBuffer >::m_count [protected]

Case of m_mode :

  • m_mode == raw : The number of the next raw patterns,
  • m_mode == compressed : How many times the pattern is repeated.

Definition at line 101 of file rle_decoder.hpp.

template<typename Pattern, typename InputBuffer, typename OutputBuffer>
mode claw::rle_decoder< Pattern, InputBuffer, OutputBuffer >::m_mode [protected]

Current mode of the decompression.

Definition at line 94 of file rle_decoder.hpp.

template<typename Pattern, typename InputBuffer, typename OutputBuffer>
pattern_type claw::rle_decoder< Pattern, InputBuffer, OutputBuffer >::m_pattern [protected]

The pattern to repeat.

Definition at line 104 of file rle_decoder.hpp.


The documentation for this class was generated from the following files: