decompressore Class Reference

La classe che si occupa della decompressione. More...

#include <decompressore.h>

List of all members.

Public Member Functions

 decompressore (const char file[], const char fileo[])
 il costruttore.

Protected Member Functions

nodehuffman (heap H, int last)
 funzione che genera l'lalbero.
int riempibuffer (IOl &in)
 funzione che provvede a riempire il buffer.
void traduci (IOl &in)
 funzione che traduce il contenuto del buffer.
void cancella (node *&tree)
 funzione che distrugge l'albero di Huffman.
void ultimo ()
 traduce il contenuto dell'ultimo byte.
int traduci (char c)
 questa funzione traduce un carattere nel suo corrispondente valore intero.
int elevato (int a, int b)
 funzione che eleva l'intero a a potenza b.

Protected Attributes

int num
 numero di diversi caratteri nel file.
int * occorrenze
 array che tiene il conto dei caratteri tradotti.
fstream stream
 stream dove si scrive.
frequenza ** pf
 puntatore alle frequenze dei caratteri.
noderoot
 albero delle codifiche.
int buffer [8]
 buffer che tiene in memoria il carattere precedentemente letto.
int contatore
 contatore che mi scorre il buffer.
nodepun
 puntatore che scorre l'albero di Huffman.


Detailed Description

La classe che si occupa della decompressione.

per decomprimere il file il decompressore deve essere in grado di recuperare le codifiche dei caratteri, per farlo riceve le frequenze dalla classe IOl e tramite il suo metodo huffman si costruisce l'albero delle codifiche che corrisponderà al medesimo albero che si era costruito a suo tempo il compressore, e inizia successivamente la traduzione.

See also:
compressore

Definition at line 19 of file decompressore.h.


Constructor & Destructor Documentation

decompressore::decompressore const char  file[],
const char  fileo[]
 

il costruttore.

è il costruttore stesso che esegue tutte le operazioni della decompressione richiamando i diversi metodi, inoltre si occupa anche di distruggere gli oggetti allocati in memoria dinamica che, dopo l'utilizzo, risultano inutili; Complessità: O(n * log n) + O (m * log n), quindi la complessità può variare a seconda di che tipo di file sto comprimendo/decomprimendo, tuttavia a dimensione tendente all'infinito la complessità è O(m * log n).

Parameters:
file | file da cui leggere la codifica (tramite IOl).
fileo | file dove scrivere la decompressione.

Definition at line 62 of file decompressore.cpp.

References buffer, cancella(), contatore, node::freq, huffman(), heap::lastn(), IOl::leggi(), num, occorrenze, pf, pun, riempibuffer(), root, stream, traduci(), and heap::v.


Member Function Documentation

void decompressore::cancella node *&  tree  )  [protected]
 

funzione che distrugge l'albero di Huffman.

essa è una funzione ricorsiva che mi cancella l'albero generato essa viene invocata dal costruttore nonappena l'albero risulta inutile e solo ingombante; Complessità: O(n).

Parameters:
tree | è la variabile di ricorsione.
See also:
root, huffman()

Definition at line 242 of file decompressore.cpp.

Referenced by decompressore().

int decompressore::elevato int  a,
int  b
[protected]
 

funzione che eleva l'intero a a potenza b.

ho definito questa funzione perché opera solo sugli interi, è necessaria per la traduci(char c), non uso la pow predefinita per evitare che la conversione in double e da double causi problemi; Complessità: O(1).

Parameters:
a | base.
b | esponente.

Definition at line 4 of file decompressore.cpp.

Referenced by traduci().

node * decompressore::huffman heap  H,
int  last
[protected]
 

funzione che genera l'lalbero.

è identica a quella nella classe compressore; Complessità: O(n * log n).

Parameters:
H | oggetto di tipo heap, generato a pratire da pf.
last | ultimo indice dello heap.
Returns:
puntatore alla radice dell'albero, memorizzato in root
See also:
root, pf, heap

Definition at line 127 of file decompressore.cpp.

References heap::estrai(), node::freq, heap::inserisci(), node::left, and node::right.

Referenced by decompressore().

int decompressore::riempibuffer IOl in  )  [protected]
 

funzione che provvede a riempire il buffer.

utilizza la classe IOl, che restituisce tramire la funzione leggi il prossimo bit, ogni volta che se ne ha bisogno viene riempito il buffer, la codifica al suo interno corrisponderà all'ultimo carattere letto dal file codificato; Complessità: O(1).

Parameters:
in | riferimento a oggetto di classe IOl.
Returns:
restituisce un valore o di successo (1) o di errore (-1)
See also:
buffer, IOl

Definition at line 141 of file decompressore.cpp.

References buffer, contatore, and IOl::leggi().

Referenced by decompressore(), and traduci().

int decompressore::traduci char  c  )  [protected]
 

questa funzione traduce un carattere nel suo corrispondente valore intero.

è necessario definire questa funzione perché se si utilizza la conversione esplicita possono essere tradotti in modo scorretto certi caratteri dell'ASCII esteso; Complessità: O(1).

Parameters:
c | carattere da tradurre.
Returns:
il valore intero corrispondente
See also:
elevato()

Definition at line 16 of file decompressore.cpp.

References elevato().

void decompressore::traduci IOl in  )  [protected]
 

funzione che traduce il contenuto del buffer.

è una funzione iterativa, ad ogni ciclo traduce il contenuto del buffer e provvede a riempirlo ulteriormente, fino a che la funzione leggi() della classe IOl non restituisce -1, e questo significa che il file è terminato, e invoca in tal caso la funzione ultimo() che traduce il contenuto dell'ultimo byte; Complessità: O(m * log n). Questa complessità è stata valutata nel modo seguente: se ogni carattere risiede in una foglia si ha che ogni scorrimento (corrispondente ad un carattere) richiede di arrivare fino ad una foglia, quindi, siccome sia n il numero delle foglie il livello medio è log n, per ogni carattere da decomprimere si avrà una media di log n operazioni elementali, quindi la complessità della funzione risulta essere O(m * log n)

Parameters:
in | riferimento a oggetto di tipo IOl.
See also:
IOl, ultimo(), riempibuffer()

Definition at line 162 of file decompressore.cpp.

References buffer, node::c, contatore, IOl::leggi(), occorrenze, pun, riempibuffer(), root, and stream.

Referenced by decompressore(), and ultimo().

void decompressore::ultimo  )  [protected]
 

traduce il contenuto dell'ultimo byte.

è identica alla funzione traduci, tranne per il fatto che nella decodifica appena si trova un carattere che ha già raggiunto il numero di volte che deve comparire, essa non da errore, ma esce semplicemente tornando al costruttore; Complessità: O(1).

See also:
traduci (), pun

Definition at line 213 of file decompressore.cpp.

References buffer, contatore, occorrenze, pun, root, stream, and traduci().


Member Data Documentation

int decompressore::buffer[8] [protected]
 

buffer che tiene in memoria il carattere precedentemente letto.

è stato necessario definire questo buffer, in modo tale che quando non posso più leggere (fine file compresso) posso comunque decodificare l'ultima sequenza di 8 bit passandola alla funzione ultimo(). sa contatore, riempibuffer(), traduci(), ultimo(), riempibuffer()

Definition at line 62 of file decompressore.h.

Referenced by decompressore(), riempibuffer(), traduci(), and ultimo().

int decompressore::contatore [protected]
 

contatore che mi scorre il buffer.

quando il contatore ha esaminato tutto il buffer, esso viene riempito tramite la riempibuffer(). sa buffer, riempibuffer()

Definition at line 69 of file decompressore.h.

Referenced by decompressore(), riempibuffer(), traduci(), and ultimo().

int* decompressore::occorrenze [protected]
 

array che tiene il conto dei caratteri tradotti.

durante la traduzione del file compresso, ogni volta che viene scritto un carattere, viene anche incrementata di uno la sua occorrenza, in questo modo posso confrontare con pf, ossia il numero di volte che un carattere dovrebbe comparire. sa pf, traduci(), ultimo()

Definition at line 33 of file decompressore.h.

Referenced by decompressore(), traduci(), and ultimo().

frequenza** decompressore::pf [protected]
 

puntatore alle frequenze dei caratteri.

puntatore per la memorizzazione delle frequenze presenti nel file gia dall'apertura, utilizzo la classe IOl per riempirlo

See also:
IOl, compressore.

Definition at line 47 of file decompressore.h.

Referenced by decompressore().

node* decompressore::pun [protected]
 

puntatore che scorre l'albero di Huffman.

una volta che la huffman() (identica a quella del compressore) ha generato l'albero, in fase di traduzione mi serve un puntatore che, scorrendo l'albero secondo la codifica nel file, quando arriva ad una foglia viene stampato il carrattere corrispondente. sa root, huffman(), traduci (), ultimo()

Definition at line 78 of file decompressore.h.

Referenced by decompressore(), traduci(), and ultimo().

node* decompressore::root [protected]
 

albero delle codifiche.

puntatore per la memorizzazione dell'albero costruito a partire dalle frequenza in pf, esso deve coincidere con quello che si era costruito il costruttore in fase di compressione.

Definition at line 54 of file decompressore.h.

Referenced by decompressore(), traduci(), and ultimo().

fstream decompressore::stream [protected]
 

stream dove si scrive.

viene aperto in modalità di scrittura binaria in modo che se nel file originale erano presenti certi caratteri, essi vengono ristampati esattamente come erano.

Definition at line 40 of file decompressore.h.

Referenced by decompressore(), traduci(), and ultimo().


The documentation for this class was generated from the following files:
Generated on Sat May 20 14:57:56 2006 for Huffzip by  doxygen 1.4.6-NO