Aleph-w  1.9
General library for algorithms and data structures
Aleph::Huffman_Encoder_Engine Class Reference

#include <Huffman.H>

Public Member Functions

 Huffman_Encoder_Engine ()
 Constructor de codificador.
 
void save_tree (ostream &output)
 
void save_tree_in_array_of_chars (const string &array_name, ostream &output)
 
BinNode< string > *& get_root ()
 Retorna la raíz del árbol decodificador de Huffman.
 
BinNode< string > * generate_huffman_tree (const bool &with_freqs=false)
 
void load_tree (ifstream &input)
 
Freq_Node *& get_freq_root ()
 Retorna la raíz de un árbol de frecuencias.
 
void set_freq (const string &str, const size_t &freq)
 
void read_input (char *input, const bool &with_freqs=false)
 
void read_input (ifstream &input, const bool &with_freqs=false)
 
void set_end_of_stream (const string &str)
 Define el símbolo fin de entrada.
 
size_t encode (char *input, BitArray &bit_stream)
 
size_t encode (ifstream &input, BitArray &bit_stream)
 

Detailed Description

Codificador de Huffman.

See also
Huffman_Decoder_Engine

Member Function Documentation

◆ encode() [1/2]

size_t Aleph::Huffman_Encoder_Engine::encode ( char *  input,
BitArray bit_stream 
)
inline

Codifica el texto input.

encode(input,bit_stream) lee la entrada input, la codifica y escribe el texto codificado en el arreglo de bits bit_stream.

Parameters
[in]inputcadena de caracteres contentiva del texto a codificar.
[out]bit_streamel arreglo de bits donde escribir el texto codificado.
Returns
la longitud de total del texto codificado.
Exceptions
domain_errorsi el árbol de prefijos no ha sido generado mediante el método generate_huffman_tree()
+ Here is the call graph for this function:

◆ encode() [2/2]

size_t Aleph::Huffman_Encoder_Engine::encode ( ifstream &  input,
BitArray bit_stream 
)
inline

Codifica el texto input.

encode(input,bit_stream) lee la entrada input, la codifica y escribe el texto codificado en el arreglo de bits bit_stream.

Parameters
[in]inputarchivo con los caracteres del texto a codificar.
[out]bit_streamel arreglo de bits donde escribir el texto codificado.
Returns
la longitud de total del texto codificado.
Exceptions
domain_errorsi el árbol de prefijos no ha sido generado mediante el método generate_huffman_tree()
+ Here is the call graph for this function:

◆ generate_huffman_tree()

BinNode<string>* Aleph::Huffman_Encoder_Engine::generate_huffman_tree ( const bool &  with_freqs = false)
inline

Genera el árbol de prefijos de Huffman.

generate_huffman_tree(with_freqs) ejecuta el algoritmo de Huffman para generar el árbol de prefijos en función del texto leído. Si with_freqs es true, entonces los nodos del árbol generado contienen las frecuencias de aparición de los símbolos.

Parameters
[in]with_freqssi el valor es true, entonces los nodos del árbol generado contendrán las frecuencias de aparición de los símbolos. De lo contrario, el árbol sólo contiene los símbolos.
Returns
la raíz del árbol binario de prefijos. Este árbol binario es el decodificador y es entrada de la clase Huffman_Decoder_Engine.
Exceptions
bad_allocsi no hay suficiente memoria.
See also
build_prefix_encoding Huffman_Decoder_Engine
+ Here is the call graph for this function:

◆ load_tree()

void Aleph::Huffman_Encoder_Engine::load_tree ( ifstream &  input)
inline

Carga y construye un árbol binario desde un archivo.

load_tree(input) lee el archivo referenciado por input, el cual contiene un árbol de Huffman previamente guardado con Huffman_Encoder_Engine::save_tree() y lo restaura en memoria.

Parameters
[in]inputreferencia al archivo donde se encuentra guardado el árbol bina1rio.
Exceptions
std::bad_allocsin no hay suficiente para construir arreglo de bits intermedio o para construir el árbol binario.
See also
load_tree() Huffman_Encoder_Engine::save_tree()
+ Here is the call graph for this function:

◆ read_input() [1/2]

void Aleph::Huffman_Encoder_Engine::read_input ( char *  input,
const bool &  with_freqs = false 
)
inline

Lee una cadena caracteres, contabiliza las frecuencias de sus distintos símbolos y genera el árbol binario de prefijos.

read_input(input, with_freqs) lee la cadena de caracteres input, contabiliza las frecuencias de aparición de cada símbolo y finalmente genera el árbol binario de prefijos.

Parameters
[in]inputcadena de caracteres a codificar.
[in]with_freqssi el valor es true, entonces también se genera el árbol de prefijos con las frecuencias en cada símbolo.
Exceptions
bad_allocsi no hay suficiente memoria.

◆ read_input() [2/2]

void Aleph::Huffman_Encoder_Engine::read_input ( ifstream &  input,
const bool &  with_freqs = false 
)
inline

Lee un archivo, contabiliza las frecuencias de sus distintos símbolos y genera el árbol binario de prefijos.

read_input(input, with_freqs) lee el archivo de entrada input, contabiliza las frecuencias de aparición de cada símbolo y finalmente genera el árbol binario de prefijos.

Parameters
[in]inputarchivo contentivo de los caracteres a codificar.
[in]with_freqssi el valor es true, entonces también se genera el árbol de prefijos con las frecuencias en cada símbolo.
Exceptions
bad_allocsi no hay suficiente memoria.

◆ save_tree()

void Aleph::Huffman_Encoder_Engine::save_tree ( ostream &  output)
inline

Guarda un árbol de Huffman en un archivo.

Guarda el árbol de Huffman correspondiente al texto codificado en un archivo.

El método utilizado es a través del código prefijo en bits del árbol y luego la secuencia prefija de las hojas del árbol correspondientes a los símbolos del texto.

Parameters
[out]outputun stream correctamente abierto donde se guarda el árbol.
Exceptions
std::domain_errorsi el árbol aún no ha sido generado.
See also
Huffman_Decoder_Engine::load_tree() save_tree() load_tree()

◆ save_tree_in_array_of_chars()

void Aleph::Huffman_Encoder_Engine::save_tree_in_array_of_chars ( const string &  array_name,
ostream &  output 
)
inline

Genera declaraciones de arreglos de bits y de claves para un árbol de Huffman.

save_tree_in_array_of_chars(array_name, output) genera declaraciones para dos arreglos con los que se puede definir un árbol binario. Las declaraciones son escritas en un archivo texto, ya abierto, direccionado por el stream output. La declaración resultante tiene la forma genérica siguiente:

const unsigned char array_name_cdp[n] = { lista de unsigned char };

const char * array_name_k[] = { lista de claves en prefijo };

El primer arreglo es de bits y guarda la topología del árbol bajo un código prefijo de bits (una palabra de Lukasiewicz). El segundo arreglo, guarda los contenidos de los nodos y está ordenado en la secuencia prefija. Los valores de las claves son dados por la clase Get_Key()(root, str) el cual debe retornar una constante char* que represente el contenido del nodo.

La clase Get_Key()(), observadora del contenido del nodo, debe ser muy cuidadosamente programada. Su estructura general es la siguiente:

string operator() (Node * p) const;

Donde p es el nodo actual dentro del recorrido prefijo del árbol binario. El resultado de esta llamada es colocado como valor constante del arreglo array_name.

Parameters
[in]array_nameEl nombre del arreglo de contenidos de los nodos del árbol
[out]outputstream abierto donde se escriben las declaraciones de los arreglos, así como sus valores.
[out]outputun stream correctamente abierto donde se guarda el árbol.
Exceptions
std::domain_errorsi el árbol aún no ha sido generado.
See also
Huffman_Encoder_Engine::load_tree() save_tree_in_array_of_chars()

◆ set_freq()

void Aleph::Huffman_Encoder_Engine::set_freq ( const string &  str,
const size_t &  freq 
)
inline

Define la frecuencia de aparición de un símbolo.

set_freq(str, freq) instruye al codificador que al símbolo str se le asocia una frecuencia de aparición freq.

Parameters
[in]strsímbolo.
[in]freqfrecuencia del símbolo
Exceptions
bad_allocsi no hay suficiente memoria.
+ Here is the call graph for this function:

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

Leandro Rabindranath León