-
Notifications
You must be signed in to change notification settings - Fork 0
/
descomprimir.cpp
42 lines (33 loc) · 971 Bytes
/
descomprimir.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include "bib.h"
bool descomprimir(string arqFonte, string arqFreq, string arqDesc) {
// Abre arquivos
ifstream fonte(arqFonte, ifstream::binary), freq(arqFreq);
ofstream desc(arqDesc, ifstream::binary);
// Variaveis locais
bitset<1> atual;
int * vet = new int[27];
Nodo * raiz, * nodoAtual;
// Le arquivo de frequencias e gera vetor
for (int i = 0; i < 27; i++) {
freq >> vet[i];
}
// Gera arvore e decodifica entrada
raiz = gerarArvore(vet), * nodoAtual;
while(!fonte.eof()) {
nodoAtual = raiz;
while(nodoAtual->getCodigo().length() != 1) {
fonte >> atual;
if (atual[0]) {
nodoAtual = nodoAtual->getDir();
}
else {
nodoAtual = nodoAtual->getEsq();
}
}
if (fonte.eof()) {
break;
}
desc << nodoAtual->getCodigo();
}
return true;
}