예제 #1
0
extern void compress(FILE* input_stream, FILE* output_stream)
{
    FREQTAB* frequency_table;
    HTREE* huffman_tree;
    CODETAB* code_table;

    /*Häufigkeitstabelle erstellen*/
    frequency_table = create_freqtab(input_stream);

#ifdef DEBUG_HUFFMAN
    /*Häufigkeitstabelle auf Bildschirm ausgeben*/
    freqtab_print(frequency_table);
    fflush(stdout);
#endif

    /*Inputstream zurücksetzen*/
    rewind(input_stream);

    /*Huffmanbaum erstellen*/
    huffman_tree = create_htree_from_freqtab(frequency_table);

#ifdef DEBUG_HUFFMAN
    /*Huffmanbaum auf Bildschirm ausgeben*/
    htree_print(huffman_tree);
    fflush(stdout);
#endif

    /*Codebuch erstellen*/
    code_table = create_codetab(huffman_tree);

#ifdef DEBUG_HUFFMAN
    /*Codebuch auf Bildschirm ausgeben*/
    codetab_print(code_table);
    fflush(stdout);
#endif

    /*Codebuch an den Anfang der Datei schreiben*/
    write_codetab(output_stream, code_table);

    /*Inhalt komprimieren*/
    encode_content(input_stream, output_stream, code_table,
                   freqtab_get_content_length(frequency_table));

    /*Resourcen wieder freigeben*/
    delete_freqtab(&frequency_table);
    delete_htree(&huffman_tree);
    delete_codetab(&code_table);
    
    return;
}
예제 #2
0
static void
encode_bean (GString *g, gpointer bean)
{
	if (DESCR(bean) == &descr_struct_CHUNKS)
		return encode_chunk (g, bean);
	if (DESCR(bean) == &descr_struct_CONTENTS)
		return encode_content (g, bean);
	if (DESCR(bean) == &descr_struct_CONTENTS_HEADERS)
		return encode_header (g, bean);
	if (DESCR(bean) == &descr_struct_ALIASES)
		return encode_alias (g, bean);
	if (DESCR(bean) == &descr_struct_PROPERTIES)
		return encode_property (g, bean);
	g_assert_not_reached ();
}