diff options
author | jcorgan <jcorgan@221aa14e-8319-0410-a670-987f0aec2ac5> | 2006-08-04 16:07:06 +0000 |
---|---|---|
committer | jcorgan <jcorgan@221aa14e-8319-0410-a670-987f0aec2ac5> | 2006-08-04 16:07:06 +0000 |
commit | c5b588b8f182374d83918d810e6c59b3bd804d7e (patch) | |
tree | b6a57dd725e90f559427778bc5ac6429b336889d /gr-error-correcting-codes/src/lib/libecc/decoder.h | |
parent | 79cf92c9a63c1887693cdff226aca116fc89ea95 (diff) |
Merge CVS changes from FIRST_MIGRATION_2006_07_26 into trunk.
git-svn-id: http://gnuradio.org/svn/gnuradio/trunk@3138 221aa14e-8319-0410-a670-987f0aec2ac5
Diffstat (limited to 'gr-error-correcting-codes/src/lib/libecc/decoder.h')
-rw-r--r-- | gr-error-correcting-codes/src/lib/libecc/decoder.h | 70 |
1 files changed, 51 insertions, 19 deletions
diff --git a/gr-error-correcting-codes/src/lib/libecc/decoder.h b/gr-error-correcting-codes/src/lib/libecc/decoder.h index 76a24b20a..860800110 100644 --- a/gr-error-correcting-codes/src/lib/libecc/decoder.h +++ b/gr-error-correcting-codes/src/lib/libecc/decoder.h @@ -23,37 +23,69 @@ #ifndef INCLUDED_DECODER_H #define INCLUDED_DECODER_H -#include "code_types.h" - -// the 'decoder' class is a virtual class upon which all decoder types -// can be built. +#include "code_io.h" class decoder { + /* + * class decoder + * A virtual class upon which all decoder types can be built. + * This class provides the basic methods and variables + * generic for all decoders. + */ public: decoder () {}; virtual ~decoder () {}; - virtual size_t compute_n_input_metrics (size_t n_output_bits) = 0; - virtual size_t compute_n_output_bits (size_t n_input_metrics) = 0; - virtual size_t decode (const char** in_buf, - char** out_buf, + /* + * compute_n_...: to be defined by inheriting classes, in order to + * allow for user-functions to figure out how many inputs are + * required to generate a given number of outputs, and vice versa. + * Can't define them without knowing the decoder type. + * + * Compute the number of input items (metrics, floats, whatevers) + * needed to produce 'n_output' bits, and the number of output bits + * which will be produced by 'n_input' items ... for a single stream + * only. + */ + + virtual size_t compute_n_input_items (size_t n_output_bits) = 0; + virtual size_t compute_n_output_bits (size_t n_input_items) = 0; + + /* + * decode: given the input and output buffers, either decode up to + * the number of output bits or decode the number of input items + * ... if the buffers support either decoding amounts. + */ + + virtual size_t decode (const code_input_ptr in_buf, + code_output_ptr out_buf, size_t n_bits_to_output); - virtual size_t decode (const char** in_buf, - size_t n_metrics_to_input, - char** out_buf); + virtual size_t decode (const code_input_ptr in_buf, + size_t n_items_to_input, + code_output_ptr out_buf); + +/* for remote access to internal info */ + + inline const size_t block_size_bits () {return (d_block_size_bits);}; + inline const size_t n_code_inputs () {return (d_n_code_inputs);}; + inline const size_t n_code_outputs () {return (d_n_code_outputs);}; + inline const size_t total_n_dec_bits () {return (d_total_n_dec_bits);}; protected: - virtual void decode_private (const char** in_buf, char** out_buf) = 0; - virtual char get_next_input (const char** in_buf, size_t code_input_n) = 0; - virtual void output_bit (char t_out_bit, char** out_buf, - size_t t_output_stream) = 0; + /* + * decode_private: decode the given in_buf and write the output bits + * to the out_buf, using internal class variables. This function is + * called from the publically available "encode()" methods, which + * first set the internal class variables before executing. + */ + + virtual void decode_private () = 0; size_t d_block_size_bits, d_n_code_inputs, d_n_code_outputs; - size_t d_n_dec_bits; - size_t d_in_buf_ndx, d_out_buf_ndx; - size_t d_in_bit_shift, d_out_bit_shift; - size_t d_n_input_metrics_left, d_n_output_bits_left; + size_t d_total_n_dec_bits; + code_input_ptr d_in_buf; + code_output_ptr d_out_buf; }; #endif /* INCLUDED_DECODER_H */ |