#include <Huffman.H>
Métodos públicos | |
Huffman_Encoder_Engine () | |
Constructor de codificador. | |
void | save_tree (ofstream &output) |
void | save_tree_in_array_of_chars (const string &array_name, ofstream &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) |
Codificador de Huffman.
|
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.
[in] | input | cadena de caracteres contentiva del texto a codificar. |
[out] | bit_stream | el arreglo de bits donde escribir el texto codificado. |
domain_error | si el árbol de prefijos no ha sido generado mediante el método generate_huffman_tree() |
Hace referencia a Aleph::DynMapTree< Key, Data, Tree, Compare >::find() y Aleph::BitArray::size().
|
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.
[in] | input | archivo con los caracteres del texto a codificar. |
[out] | bit_stream | el arreglo de bits donde escribir el texto codificado. |
domain_error | si el árbol de prefijos no ha sido generado mediante el método generate_huffman_tree() |
Hace referencia a Aleph::DynMapTree< Key, Data, Tree, Compare >::find() y Aleph::BitArray::size().
|
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.
[in] | with_freqs | si 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. |
bad_alloc | si no hay suficiente memoria. |
Hace referencia a Aleph::GenBinHeap< NodeType, Key, Compare >::getMin(), Aleph::GenBinHeap< NodeType, Key, Compare >::insert(), LLINK, RLINK y Aleph::GenBinHeap< NodeType, Key, Compare >::size().
Referenciado por read_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.
[in] | input | referencia al archivo donde se encuentra guardado el árbol bina1rio. |
std::bad_alloc | sin no hay suficiente para construir arreglo de bits intermedio o para construir el árbol binario. |
Hace referencia a Aleph::destroyRec().
|
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.
[in] | input | cadena de caracteres a codificar. |
[in] | with_freqs | si el valor es true, entonces también se genera el árbol de prefijos con las frecuencias en cada símbolo. |
bad_alloc | si no hay suficiente memoria. |
Hace referencia a generate_huffman_tree() y set_end_of_stream().
|
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.
[in] | input | archivo contentivo de los caracteres a codificar. |
[in] | with_freqs | si el valor es true, entonces también se genera el árbol de prefijos con las frecuencias en cada símbolo. |
bad_alloc | si no hay suficiente memoria. |
Hace referencia a generate_huffman_tree() y set_end_of_stream().
|
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.
[out] | output | un stream correctamente abierto donde se guarda el árbol. |
std::domain_error | si el árbol aún no ha sido generado. |
|
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.
[in] | array_name | El nombre del arreglo de contenidos de los nodos del árbol |
[out] | output | stream abierto donde se escriben las declaraciones de los arreglos, así como sus valores. |
[out] | output | un stream correctamente abierto donde se guarda el árbol. |
std::domain_error | si el árbol aún no ha sido generado. |
|
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.
[in] | str | símbolo. |
[in] | freq | frecuencia del símbolo |
bad_alloc | si no hay suficiente memoria. |
Hace referencia a Aleph::DynMapTree< Key, Data, Tree, Compare >::insert(), Aleph::GenBinHeap< NodeType, Key, Compare >::insert() y Aleph::DynMapTree< Key, Data, Tree, Compare >::test().