summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile.am1
-rw-r--r--include/BHeap.h2
-rw-r--r--include/BinHeap.h2
-rw-r--r--include/CList.h2
-rw-r--r--include/FHeap.h2
-rw-r--r--include/HTree.h6
-rw-r--r--include/Huffman.h10
-rw-r--r--include/Makefile.am2
-rw-r--r--include/PCommon.h2
-rw-r--r--include/PLList.h2
-rw-r--r--lib/FHeap.cc3
-rw-r--r--lib/HTree.cc29
-rw-r--r--lib/Huffman.cc31
-rw-r--r--lib/Makefile.am3
-rw-r--r--lib/PCommon.cc1
-rw-r--r--lib/SList.cc1
-rw-r--r--po/PriorityLists.pot78
-rw-r--r--po/cat-id-tbl.c11
-rw-r--r--po/de.po78
-rw-r--r--po/fr.po78
-rw-r--r--src/Makefile.am5
-rw-r--r--src/main.cc54
-rw-r--r--src/test.cc3
23 files changed, 325 insertions, 81 deletions
diff --git a/Makefile.am b/Makefile.am
index 3ba0f71..875db83 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,5 +1,4 @@
localedir = $(datadir)/locale
SUBDIRS = lib include doc po intl src
-AM_CFLAGS = -Wall -Wstrict-prototypes -g
INCLUDES = -I. -I$(includedir) -I../include
diff --git a/include/BHeap.h b/include/BHeap.h
index d67ab29..9c31467 100644
--- a/include/BHeap.h
+++ b/include/BHeap.h
@@ -17,7 +17,7 @@ class BHeap:public PriorityList {
public:
BHeap(void); // Constructor
- ~BHeap(void); // Destructor
+ virtual ~BHeap(void); // Destructor
virtual int rn(void);
virtual Key_t ReadKey(Cell C);
virtual Datas_t ReadDatas(Cell C);
diff --git a/include/BinHeap.h b/include/BinHeap.h
index 8273365..41872f7 100644
--- a/include/BinHeap.h
+++ b/include/BinHeap.h
@@ -14,7 +14,7 @@ typedef class BinHeap:public PriorityList { private:
void PackUp(int i);
public:
BinHeap(void); // Constructor
- ~BinHeap(void); // Destructor
+ virtual ~BinHeap(void); // Destructor
virtual int rn(void);
diff --git a/include/CList.h b/include/CList.h
index 147fe71..1bc7fe2 100644
--- a/include/CList.h
+++ b/include/CList.h
@@ -18,7 +18,7 @@ class CList {
public:
CList(void);
- ~CList(void);
+ virtual ~CList(void);
virtual Datas_t ReadDatas(Cell C);
virtual Key_t ReadKey(Cell C);
diff --git a/include/FHeap.h b/include/FHeap.h
index 65d9253..6cbbeb6 100644
--- a/include/FHeap.h
+++ b/include/FHeap.h
@@ -19,7 +19,7 @@ typedef class FHeap:public PriorityList {
public:
FHeap(void); // Constructor
- ~FHeap(void); // Destructor
+ virtual ~FHeap(void); // Destructor
virtual int rn(void);
diff --git a/include/HTree.h b/include/HTree.h
index 18150b1..c153415 100644
--- a/include/HTree.h
+++ b/include/HTree.h
@@ -11,12 +11,14 @@ class HTree {
private:
HTree * left, *right;
int freq;
- Datas_t objet;
+ char * objet;
public:
- HTree(int n_freq, char *n_objet);
+ HTree(int n_freq, char * n_objet);
HTree(HTree * n_left, HTree * n_right);
~HTree();
ostream & Trace(ostream & os, int d = 0);
+ int ReadFreq(void);
+ char * ReadObj(void);
};
#else
diff --git a/include/Huffman.h b/include/Huffman.h
new file mode 100644
index 0000000..aacbf79
--- /dev/null
+++ b/include/Huffman.h
@@ -0,0 +1,10 @@
+#ifndef __HUFFMAN_H__
+#define __HUFFMAN_H__
+
+#include "PCommon.h"
+#include "HTree.h"
+
+HTree * Coder(PriorityList * P);
+void HInsert(PriorityList * P, int freq, char * object);
+
+#endif \ No newline at end of file
diff --git a/include/Makefile.am b/include/Makefile.am
index c0518e5..eeda5cf 100644
--- a/include/Makefile.am
+++ b/include/Makefile.am
@@ -1 +1 @@
-include_HEADERS = PCommon.h PLList.h FHeap.h BHeap.h BinHeap.h CList.h SList.h PTypes.h
+include_HEADERS = PCommon.h PLList.h FHeap.h BHeap.h BinHeap.h CList.h SList.h PTypes.h Huffman.h
diff --git a/include/PCommon.h b/include/PCommon.h
index 1d90a21..e1190fb 100644
--- a/include/PCommon.h
+++ b/include/PCommon.h
@@ -28,7 +28,7 @@ class PriorityList {
public:
PriorityList(void);
- ~PriorityList(void);
+ virtual ~PriorityList(void);
virtual Key_t ReadKey(Cell C);
virtual Datas_t ReadDatas(Cell C);
diff --git a/include/PLList.h b/include/PLList.h
index 6e9af25..c722900 100644
--- a/include/PLList.h
+++ b/include/PLList.h
@@ -10,7 +10,7 @@ class PLList:public PriorityList { private:
public:
PLList(void);
- ~PLList(void);
+ virtual ~PLList(void);
virtual Key_t ReadKey(Cell C);
virtual Datas_t ReadDatas(Cell C);
diff --git a/lib/FHeap.cc b/lib/FHeap.cc
index 9f3dc24..158a1e5 100644
--- a/lib/FHeap.cc
+++ b/lib/FHeap.cc
@@ -136,8 +136,6 @@ Father(NULL), Child(NULL), Left(this), Right(this), Degree(0), Mark(false)
FHeap::~FHeap(void)
{
- FHeap *T;
-
if (Child) {
delete Child;
}
@@ -277,6 +275,7 @@ bool FHeap::Lower_Key(Cell x, Key_t NKey)
}
if (NKey < Child->Key)
Child = tx;
+ return true;
}
Key_t FHeap::Delete(Datas_t & Datas, Cell x)
diff --git a/lib/HTree.cc b/lib/HTree.cc
index b8731e4..682ac14 100644
--- a/lib/HTree.cc
+++ b/lib/HTree.cc
@@ -30,10 +30,18 @@ HTree::~HTree()
ostream & HTree::Trace(ostream & os, int d)
{
static char cmpr[MAX_HDEPTH + 1];
+ static int tsize;
+ static int rsize;
+ static int dsize;
+
+ if (!d) tsize = rsize = dsize = 0;
if (objet) {
cmpr[d] = '\0';
- os << objet << " = " << cmpr << endl;
+ os << objet << " (" << freq << ") = " << cmpr << endl;
+ tsize += freq * strlen(cmpr);
+ rsize += freq * strlen(objet);
+ dsize += ((strlen(cmpr) >> 3) + (strlen(cmpr) & 7 ? 1 : 0)) + strlen(objet) + 2;
} else {
if (left) {
cmpr[d] = '0';
@@ -44,5 +52,24 @@ ostream & HTree::Trace(ostream & os, int d)
right->Trace(os, d + 1);
}
}
+
+ if (!d) {
+ os << _("Bitstream length : ") << tsize << _(" bits (= ") << ((tsize >> 3) + (tsize & 7 ? 1 : 0)) << _(" bytes)\n");
+ os << _("Real size input : ") << (rsize << 3) << _(" bits (= ") << rsize << _(" bytes)\n");
+ os << _("Size squeezed by : ") << 100.0 - 100.0 * tsize / (rsize << 3) << _(" percents\n");
+ os << _("Dictionnary size : ") << (dsize << 3) << _(" bits (= ") << dsize << _(" bytes)\n");
+ os << _("Total bitstream length : ") << tsize + (dsize << 3) << _(" bits (= ") << ((tsize >> 3) + (tsize & 7 ? 1 : 0) + dsize) << _(" bytes)\n");
+ os << _("Real gain (4 bytes header) : ") << 100.0 - 100.0 * ((tsize >> 3) + (tsize & 7 ? 1 : 0) + dsize + 4) / rsize << _(" percents\n");
+ }
return os;
}
+
+int HTree::ReadFreq(void)
+{
+ return freq;
+}
+
+char *HTree::ReadObj(void)
+{
+ return objet;
+}
diff --git a/lib/Huffman.cc b/lib/Huffman.cc
new file mode 100644
index 0000000..aadf927
--- /dev/null
+++ b/lib/Huffman.cc
@@ -0,0 +1,31 @@
+#include <stdio.h>
+#include <iostream.h>
+#include "config.h"
+#include "Huffman.h"
+
+HTree *Coder(PriorityList * P)
+{
+ int n = P->n(), i, f1, f2;
+ HTree *x, *y, *z;
+ Datas_t tx, ty;
+
+ x = y = z = NULL;
+
+ for (i = 0; i < n - 1; i++) {
+ f1 = P->Extract_Min(tx);
+ f2 = P->Extract_Min(ty);
+ x = (HTree *) tx;
+ y = (HTree *) ty;
+ z = new HTree(x, y);
+ P->Insert(z->ReadFreq(), z);
+ }
+
+ P->Extract_Min(((Datas_t) z));
+ return z;
+}
+
+void HInsert(PriorityList * P, int freq, char *object)
+{
+ HTree * leaf = new HTree(freq, object);
+ P->Insert(freq, (Datas_t) leaf);
+}
diff --git a/lib/Makefile.am b/lib/Makefile.am
index 71b12e7..10ae1fd 100644
--- a/lib/Makefile.am
+++ b/lib/Makefile.am
@@ -1,10 +1,11 @@
localedir = $(datadir)/locale
DEFS = -DLOCALEDIR=\"$(localedir)\" @DEFS@
AM_CFLAGS = -O3 -Wall -Wstrict-prototypes $(CFLAGS)
+AM_CXXFLAGS = -O3 -Wall -Wstrict-prototypes $(CXXFLAGS)
INCLUDES = -I. -I.. -I$(includedir) -I../include
lib_LTLIBRARIES = libPriorityLists.la
-libPriorityLists_la_SOURCES = PCommon.cc BHeap.cc FHeap.cc BinHeap.cc PLList.cc CList.cc SList.cc HTree.cc
+libPriorityLists_la_SOURCES = PCommon.cc BHeap.cc FHeap.cc BinHeap.cc PLList.cc CList.cc SList.cc HTree.cc Huffman.cc
libPriorityLists_la_LDFLAGS = -version-info $(PriorityLists_VERSION_INFO)
diff --git a/lib/PCommon.cc b/lib/PCommon.cc
index b833a10..1dc3127 100644
--- a/lib/PCommon.cc
+++ b/lib/PCommon.cc
@@ -50,6 +50,7 @@ PriorityList *PriorityList::GenericUnion(PriorityList * P)
IKey = P->Extract_Min(IDatas);
Insert(IKey, IDatas);
}
+ return this;
}
diff --git a/lib/SList.cc b/lib/SList.cc
index c65d299..ae2f54f 100644
--- a/lib/SList.cc
+++ b/lib/SList.cc
@@ -1,4 +1,5 @@
#include <stdio.h>
+#include "config.h"
#include "SList.h"
/**********************\
diff --git a/po/PriorityLists.pot b/po/PriorityLists.pot
index ac0d923..81d06a9 100644
--- a/po/PriorityLists.pot
+++ b/po/PriorityLists.pot
@@ -6,7 +6,7 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
-"POT-Creation-Date: 2001-03-04 01:43+0100\n"
+"POT-Creation-Date: 2001-03-05 02:26+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -44,81 +44,81 @@ msgstr ""
msgid " keys (real count). Expecting "
msgstr ""
-#: src/test.cc:51 src/test.cc:120
+#: src/test.cc:51 src/test.cc:119
msgid "Incorrect order."
msgstr ""
-#: src/test.cc:67
+#: src/test.cc:66
msgid "Size of a PriorityList cell: "
msgstr ""
-#: src/test.cc:68
+#: src/test.cc:67
msgid "Size of a BHeap cell : "
msgstr ""
-#: src/test.cc:69
+#: src/test.cc:68
msgid "Size of a FHeap cell : "
msgstr ""
-#: src/test.cc:70
+#: src/test.cc:69
msgid "Size of a PLList header : "
msgstr ""
-#: src/test.cc:71
+#: src/test.cc:70
msgid "Size of a CList cell : "
msgstr ""
-#: src/test.cc:72
+#: src/test.cc:71
msgid "Size of a SList cell : "
msgstr ""
-#: src/test.cc:73
+#: src/test.cc:72
msgid "Size of a BinHeap header : "
msgstr ""
-#: src/test.cc:74
+#: src/test.cc:73
msgid "Size of a BinHeap cell : "
msgstr ""
-#: src/test.cc:88
+#: src/test.cc:87
msgid "Creating a priority list and adding keys:\n"
msgstr ""
-#: src/test.cc:100 src/test.cc:107 src/test.cc:111
+#: src/test.cc:99 src/test.cc:106 src/test.cc:110
msgid ""
"Ok.\n"
"List browsing...\n"
msgstr ""
-#: src/test.cc:102
+#: src/test.cc:101
msgid ""
"Ok.\n"
"Extract_Min + List browsing...\n"
msgstr ""
-#: src/test.cc:105
+#: src/test.cc:104
msgid ""
"Ok.\n"
"Lower_Key(-12) over 59...\n"
msgstr ""
-#: src/test.cc:109
+#: src/test.cc:108
msgid ""
"Ok.\n"
"Delete over 54...\n"
msgstr ""
-#: src/test.cc:115
+#: src/test.cc:114
msgid ""
"Ok.\n"
"Extracting datas...\n"
msgstr ""
-#: src/test.cc:117
+#: src/test.cc:116
msgid "Minimum #"
msgstr ""
-#: src/test.cc:123
+#: src/test.cc:122
msgid ""
"Ok.\n"
"\n"
@@ -129,15 +129,15 @@ msgstr ""
msgid " * Head cell. ("
msgstr ""
-#: lib/BHeap.cc:224 lib/FHeap.cc:162
+#: lib/BHeap.cc:224 lib/FHeap.cc:160
msgid "Insert: not over Head."
msgstr ""
-#: lib/BHeap.cc:226 lib/BHeap.cc:246 lib/FHeap.cc:184
+#: lib/BHeap.cc:226 lib/BHeap.cc:246 lib/FHeap.cc:182
msgid "Insert: No more memory."
msgstr ""
-#: lib/BHeap.cc:268 lib/FHeap.cc:194 lib/PLList.cc:150
+#: lib/BHeap.cc:268 lib/FHeap.cc:192 lib/PLList.cc:150
msgid "Extract_Min: Priority List is empty."
msgstr ""
@@ -160,3 +160,39 @@ msgid ""
" * Head cell\n"
" |\n"
msgstr ""
+
+#: lib/HTree.cc:57
+msgid "Bitstream length : "
+msgstr ""
+
+#: lib/HTree.cc:57 lib/HTree.cc:58 lib/HTree.cc:60 lib/HTree.cc:61
+msgid " bits (= "
+msgstr ""
+
+#: lib/HTree.cc:57 lib/HTree.cc:58 lib/HTree.cc:60 lib/HTree.cc:61
+msgid " bytes)\n"
+msgstr ""
+
+#: lib/HTree.cc:58
+msgid "Real size input : "
+msgstr ""
+
+#: lib/HTree.cc:59
+msgid "Size squeezed by : "
+msgstr ""
+
+#: lib/HTree.cc:59 lib/HTree.cc:62
+msgid " percents\n"
+msgstr ""
+
+#: lib/HTree.cc:60
+msgid "Dictionnary size : "
+msgstr ""
+
+#: lib/HTree.cc:61
+msgid "Total bitstream length : "
+msgstr ""
+
+#: lib/HTree.cc:62
+msgid "Real gain (4 bytes header) : "
+msgstr ""
diff --git a/po/cat-id-tbl.c b/po/cat-id-tbl.c
index b7c079f..831b93c 100644
--- a/po/cat-id-tbl.c
+++ b/po/cat-id-tbl.c
@@ -59,6 +59,15 @@ All the tests were successfull\n", 25},
{"\
* Head cell\n\
|\n", 33},
+ {"Bitstream length : ", 34},
+ {" bits (= ", 35},
+ {" bytes)\n", 36},
+ {"Real size input : ", 37},
+ {"Size squeezed by : ", 38},
+ {" percents\n", 39},
+ {"Dictionnary size : ", 40},
+ {"Total bitstream length : ", 41},
+ {"Real gain (4 bytes header) : ", 42},
};
-int _msg_tbl_length = 33;
+int _msg_tbl_length = 42;
diff --git a/po/de.po b/po/de.po
index ac0d923..81d06a9 100644
--- a/po/de.po
+++ b/po/de.po
@@ -6,7 +6,7 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
-"POT-Creation-Date: 2001-03-04 01:43+0100\n"
+"POT-Creation-Date: 2001-03-05 02:26+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -44,81 +44,81 @@ msgstr ""
msgid " keys (real count). Expecting "
msgstr ""
-#: src/test.cc:51 src/test.cc:120
+#: src/test.cc:51 src/test.cc:119
msgid "Incorrect order."
msgstr ""
-#: src/test.cc:67
+#: src/test.cc:66
msgid "Size of a PriorityList cell: "
msgstr ""
-#: src/test.cc:68
+#: src/test.cc:67
msgid "Size of a BHeap cell : "
msgstr ""
-#: src/test.cc:69
+#: src/test.cc:68
msgid "Size of a FHeap cell : "
msgstr ""
-#: src/test.cc:70
+#: src/test.cc:69
msgid "Size of a PLList header : "
msgstr ""
-#: src/test.cc:71
+#: src/test.cc:70
msgid "Size of a CList cell : "
msgstr ""
-#: src/test.cc:72
+#: src/test.cc:71
msgid "Size of a SList cell : "
msgstr ""
-#: src/test.cc:73
+#: src/test.cc:72
msgid "Size of a BinHeap header : "
msgstr ""
-#: src/test.cc:74
+#: src/test.cc:73
msgid "Size of a BinHeap cell : "
msgstr ""
-#: src/test.cc:88
+#: src/test.cc:87
msgid "Creating a priority list and adding keys:\n"
msgstr ""
-#: src/test.cc:100 src/test.cc:107 src/test.cc:111
+#: src/test.cc:99 src/test.cc:106 src/test.cc:110
msgid ""
"Ok.\n"
"List browsing...\n"
msgstr ""
-#: src/test.cc:102
+#: src/test.cc:101
msgid ""
"Ok.\n"
"Extract_Min + List browsing...\n"
msgstr ""
-#: src/test.cc:105
+#: src/test.cc:104
msgid ""
"Ok.\n"
"Lower_Key(-12) over 59...\n"
msgstr ""
-#: src/test.cc:109
+#: src/test.cc:108
msgid ""
"Ok.\n"
"Delete over 54...\n"
msgstr ""
-#: src/test.cc:115
+#: src/test.cc:114
msgid ""
"Ok.\n"
"Extracting datas...\n"
msgstr ""
-#: src/test.cc:117
+#: src/test.cc:116
msgid "Minimum #"
msgstr ""
-#: src/test.cc:123
+#: src/test.cc:122
msgid ""
"Ok.\n"
"\n"
@@ -129,15 +129,15 @@ msgstr ""
msgid " * Head cell. ("
msgstr ""
-#: lib/BHeap.cc:224 lib/FHeap.cc:162
+#: lib/BHeap.cc:224 lib/FHeap.cc:160
msgid "Insert: not over Head."
msgstr ""
-#: lib/BHeap.cc:226 lib/BHeap.cc:246 lib/FHeap.cc:184
+#: lib/BHeap.cc:226 lib/BHeap.cc:246 lib/FHeap.cc:182
msgid "Insert: No more memory."
msgstr ""
-#: lib/BHeap.cc:268 lib/FHeap.cc:194 lib/PLList.cc:150
+#: lib/BHeap.cc:268 lib/FHeap.cc:192 lib/PLList.cc:150
msgid "Extract_Min: Priority List is empty."
msgstr ""
@@ -160,3 +160,39 @@ msgid ""
" * Head cell\n"
" |\n"
msgstr ""
+
+#: lib/HTree.cc:57
+msgid "Bitstream length : "
+msgstr ""
+
+#: lib/HTree.cc:57 lib/HTree.cc:58 lib/HTree.cc:60 lib/HTree.cc:61
+msgid " bits (= "
+msgstr ""
+
+#: lib/HTree.cc:57 lib/HTree.cc:58 lib/HTree.cc:60 lib/HTree.cc:61
+msgid " bytes)\n"
+msgstr ""
+
+#: lib/HTree.cc:58
+msgid "Real size input : "
+msgstr ""
+
+#: lib/HTree.cc:59
+msgid "Size squeezed by : "
+msgstr ""
+
+#: lib/HTree.cc:59 lib/HTree.cc:62
+msgid " percents\n"
+msgstr ""
+
+#: lib/HTree.cc:60
+msgid "Dictionnary size : "
+msgstr ""
+
+#: lib/HTree.cc:61
+msgid "Total bitstream length : "
+msgstr ""
+
+#: lib/HTree.cc:62
+msgid "Real gain (4 bytes header) : "
+msgstr ""
diff --git a/po/fr.po b/po/fr.po
index e51904b..43ffaaf 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -6,7 +6,7 @@
msgid ""
msgstr ""
"Project-Id-Version: PriorityList-1.0.0\n"
-"POT-Creation-Date: 2001-03-04 01:43+0100\n"
+"POT-Creation-Date: 2001-03-05 02:26+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Nicolas Noble <pixel@nobis-crew.org>\n"
"Language-Team: French <fr@li.org>\n"
@@ -46,47 +46,47 @@ msgstr "Liste corrompue."
msgid " keys (real count). Expecting "
msgstr " clefs (compte réel) alors que nous attendions "
-#: src/test.cc:51 src/test.cc:120
+#: src/test.cc:51 src/test.cc:119
msgid "Incorrect order."
msgstr "Ordre incorrect."
-#: src/test.cc:67
+#: src/test.cc:66
msgid "Size of a PriorityList cell: "
msgstr "Taille d'une cellule du type PriorityList: "
-#: src/test.cc:68
+#: src/test.cc:67
msgid "Size of a BHeap cell : "
msgstr "Taille d'une cellule du type BHeap : "
-#: src/test.cc:69
+#: src/test.cc:68
msgid "Size of a FHeap cell : "
msgstr "Taille d'une cellule du type FHeap : "
-#: src/test.cc:70
+#: src/test.cc:69
msgid "Size of a PLList header : "
msgstr "Taille d'un entète du type PLList : "
-#: src/test.cc:71
+#: src/test.cc:70
msgid "Size of a CList cell : "
msgstr "Taille d'une cellule du type CList : "
-#: src/test.cc:72
+#: src/test.cc:71
msgid "Size of a SList cell : "
msgstr "Taille d'une cellule du type SList : "
-#: src/test.cc:73
+#: src/test.cc:72
msgid "Size of a BinHeap header : "
msgstr "Taille d'un entête du type BinHeap : "
-#: src/test.cc:74
+#: src/test.cc:73
msgid "Size of a BinHeap cell : "
msgstr "Taille d'une cellule du type BinHeap : "
-#: src/test.cc:88
+#: src/test.cc:87
msgid "Creating a priority list and adding keys:\n"
msgstr "Création d'une liste de priorité et ajout de clefs:\n"
-#: src/test.cc:100 src/test.cc:107 src/test.cc:111
+#: src/test.cc:99 src/test.cc:106 src/test.cc:110
msgid ""
"Ok.\n"
"List browsing...\n"
@@ -94,7 +94,7 @@ msgstr ""
"Ok.\n"
"Exploration de la liste...\n"
-#: src/test.cc:102
+#: src/test.cc:101
msgid ""
"Ok.\n"
"Extract_Min + List browsing...\n"
@@ -102,7 +102,7 @@ msgstr ""
"Ok.\n"
"Extract_Min + Exploration de la liste...\n"
-#: src/test.cc:105
+#: src/test.cc:104
msgid ""
"Ok.\n"
"Lower_Key(-12) over 59...\n"
@@ -110,7 +110,7 @@ msgstr ""
"Ok.\n"
"Lower_Key(-12) sur 59...\n"
-#: src/test.cc:109
+#: src/test.cc:108
msgid ""
"Ok.\n"
"Delete over 54...\n"
@@ -118,7 +118,7 @@ msgstr ""
"Ok.\n"
"Delete sur 54...\n"
-#: src/test.cc:115
+#: src/test.cc:114
msgid ""
"Ok.\n"
"Extracting datas...\n"
@@ -126,11 +126,11 @@ msgstr ""
"Ok.\n"
"Extraction des données...\n"
-#: src/test.cc:117
+#: src/test.cc:116
msgid "Minimum #"
msgstr "Minimum #"
-#: src/test.cc:123
+#: src/test.cc:122
msgid ""
"Ok.\n"
"\n"
@@ -144,15 +144,15 @@ msgstr ""
msgid " * Head cell. ("
msgstr " * Cellule d'entête. ("
-#: lib/BHeap.cc:224 lib/FHeap.cc:162
+#: lib/BHeap.cc:224 lib/FHeap.cc:160
msgid "Insert: not over Head."
msgstr "Insert: pas sur l'entête."
-#: lib/BHeap.cc:226 lib/BHeap.cc:246 lib/FHeap.cc:184
+#: lib/BHeap.cc:226 lib/BHeap.cc:246 lib/FHeap.cc:182
msgid "Insert: No more memory."
msgstr "Insert: Plus de mémoire."
-#: lib/BHeap.cc:268 lib/FHeap.cc:194 lib/PLList.cc:150
+#: lib/BHeap.cc:268 lib/FHeap.cc:192 lib/PLList.cc:150
msgid "Extract_Min: Priority List is empty."
msgstr "Extract_Min: File de priorité vide."
@@ -179,3 +179,39 @@ msgid ""
msgstr ""
" * Cellule d'entête.\n"
" |\n"
+
+#: lib/HTree.cc:57
+msgid "Bitstream length : "
+msgstr "Taille du flux de bits : "
+
+#: lib/HTree.cc:57 lib/HTree.cc:58 lib/HTree.cc:60 lib/HTree.cc:61
+msgid " bits (= "
+msgstr " bits (= "
+
+#: lib/HTree.cc:57 lib/HTree.cc:58 lib/HTree.cc:60 lib/HTree.cc:61
+msgid " bytes)\n"
+msgstr " octets)\n"
+
+#: lib/HTree.cc:58
+msgid "Real size input : "
+msgstr "Taille réelle de l'entrée : "
+
+#: lib/HTree.cc:59
+msgid "Size squeezed by : "
+msgstr "Taille réduite de : "
+
+#: lib/HTree.cc:59 lib/HTree.cc:62
+msgid " percents\n"
+msgstr " pourcents\n"
+
+#: lib/HTree.cc:60
+msgid "Dictionnary size : "
+msgstr "Taille du dictionnaire : "
+
+#: lib/HTree.cc:61
+msgid "Total bitstream length : "
+msgstr "Taille totale du flux de bits : "
+
+#: lib/HTree.cc:62
+msgid "Real gain (4 bytes header) : "
+msgstr "Gain réel (entête de 4 octets) : "
diff --git a/src/Makefile.am b/src/Makefile.am
index 03bcc4f..173e832 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -1,12 +1,15 @@
localedir = $(datadir)/locale
DEFS = -DLOCALEDIR=\"$(localedir)\" @DEFS@
AM_CFLAGS = -O3 -Wall -Wstrict-prototypes $(CFLAGS)
+AM_CXXFLAGS = -O3 -Wall -Wstrict-prototypes $(CXXFLAGS)
INCLUDES = -I. -I.. -I$(includedir) -I../include
-bin_PROGRAMS = testTas
+bin_PROGRAMS = testTas Huffman
testTas_SOURCES = test.cc
+Huffman_SOURCES = main.cc
LDADD = ../lib/libPriorityLists.la
testTas_LDADD = $(LDADD)
+Huffman_LDADD = $(LDADD)
diff --git a/src/main.cc b/src/main.cc
new file mode 100644
index 0000000..520f6ec
--- /dev/null
+++ b/src/main.cc
@@ -0,0 +1,54 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include "config.h"
+#include "BHeap.h"
+#include "FHeap.h"
+#include "BinHeap.h"
+#include "PLList.h"
+#include "Huffman.h"
+
+void exception(int e, char *msg)
+{
+ fprintf(stderr, "%s\n", msg);
+ exit(-1);
+}
+
+PriorityList *newlist(void)
+{
+ return new BinHeap;
+}
+
+void Count(FILE * strm, PriorityList * P)
+{
+ int tab[256], i;
+ char *t;
+
+ for (i = 0; i < 256; i++) {
+ tab[i] = 0;
+ }
+
+ while ((i = getc(strm)) != EOF) {
+ tab[i]++;
+ }
+
+ for (i = 0; i < 256; i++) {
+ if (tab[i]) {
+ t = (char *) malloc(2);
+ t[0] = i;
+ t[1] = 0;
+ HInsert(P, tab[i], t);
+ }
+ }
+}
+
+int main(int argc, char **argv)
+{
+ PriorityList *P = newlist();
+ HTree *H;
+
+ Count(stdin, P);
+
+ H = Coder(P);
+ H->Trace(cout);
+ return 0;
+}
diff --git a/src/test.cc b/src/test.cc
index 5a1bce5..bc53810 100644
--- a/src/test.cc
+++ b/src/test.cc
@@ -20,7 +20,7 @@ void exception(int e, char *msg)
PriorityList *newlist(void)
{
- return new BinHeap;
+ return new FHeap;
}
void DoCombTest(int number)
@@ -59,7 +59,6 @@ void FullTest(void)
{
PriorityList *T;
Datas_t Datas;
- char msg[10240];
Cell C1, C2;
Key_t K;
int i;