---++ Modulo Cinque * Chi ha 2 o 3 moduli può fare questo modulo per migliorare il voto * *Data di consegna*: 15 aprile 2007 * Argomento: indicizzazione del database * Per chi: chi come minimo ha fatto almeno un modulo *buono* * Valutazione: come al solito * almeno 2 moduli perfetti * oppure 3 buoni * meno qualche cosa per patch, warning e non aderenza alle specifiche * con discussione orale dei moduli consegnati ---+++ Specifiche Le regole da seguire nell'implementazione del modulo 5 sono le stesse degli altri moduli. In particolare si dovrà rispettare la struttura generale del progetto. La nuova versione dell'include di interfaccia e il sorgente di test sono contenuti nell'archivio [[%ATTACHURL%/Modulo5.tar.gz][Modulo5.tar.gz]]. ---++++ Funzioni da implementare *Creazione degli indici* <verbatim> int BuildIndexFile(int handle, char *fieldname); Crea il file contenente l'indice per un certo campo del database L'indice e' un file binario contenente una successione di coppie <valore campo><numero del record> (per semplicita', il file indice non ha header) La dimensione degli elementi delle coppie contenuti negli indici sono determinate da: <valore campo> la stessa dimensione dichiarata nello header del DBF <numero record> intero long (4 bytes) I dati contenuti nell'indice vanno memorizzati in network byte order (NBO). Le coppie sono ordinate in ordine crescente rispetto a <valore campo>. Per confrontare i valori, usare le seguenti regole: stringhe usare strcmp interi confronto numerico date ordine crescente di data logical FALSE < TRUE Nel caso di due record contenenti lo stesso valore nell campo indicizzato, si deve mantenere l'ordine in cui occorrono nel database. In altre parole, le coppie con lo stesso valore sono ordinate in ordine crescente rispetto al numero del record. Argomenti: int handle handle del database (già aperto) char *fieldname nome del campo per il quale va creato l'indice Il nome del file indice da creare e' "<database name>.<field name>.ndx" Valori di ritorno: La funzione restituisce un codice di errore negativo in caso di errore, o LP_OK quando la creazione dell'indice puo' essere completata con successo. Errori: (l'insieme puo' essere esteso con altre situazioni di errore individuate durante l'implementazione) LPC_BAD_ARG argomenti non validi o errati </verbatim> *Ricerca di un valore in un indice* <verbatim> int SearchRecordPosition(int handle, FIELD_VALUE_t *FieldValue, long *position); Cerca il valore di un campo nel corrispondente file indice e restituisce il numero di un record contenente il valore. Argomenti: int handle handle del database (già aperto) char *fieldname nome del campo e suo valore da cercare long *numrec in : numero di record da cui cominciare la ricerca out: il primo record contenente il valore con numero strettamente maggiore del numero di record ricevuto in input Valori di ritorno: Se NumRecStart e' il valore ricevuto in input attraverso numrec, restituisce in numrec il numero del primo record contenente il valore con numero strettamente maggiore di NumRecStart, se tale record esiste, e ritorna LPC_OK. Ad esempio, per cercare il primo record occorre fornire come input 0 in numrec. Se non ci sono record in posizione maggiore di NumRecStart, ritorna LPC_NOT_FOUND. In caso di errore, ritorna un codice di errore negativo. Errori: (l'insieme puo' essere esteso con altre situazioni di errore individuate durante l'implementazione) LPC_BAD_ARG LPC_ERR_READ errori nel leggere dall'indice </verbatim> *Aggiornamento incrementale degli indici* <verbatim> int IncrementalReindex(int handle, FIELD_VALUE_t *FieldValue, int isInsertion, long numrec); Aggiorna il file contenente l'indice a seguito dell'inserimento/cancellazione di un solo record nel database. Argomenti: int handle, handle del database (già aperto) FIELD_VALUE_t *FieldValue nome del campo e suo valore da inserire/cancellare dall'indice int isInsertion tipo di operazione eseguita valori possibili: ADD_RECORD inserimento DEL_RECORD cancellazione long numrec numero del record aggiunto/eliminato dal database Valori di ritorno: La funzione restituisce un codice di errore negativo in caso di errore, o LP_OK quando l'aggiornamento del'indice puo' essere completato con successo. Errori: (l'insieme puo' essere esteso con altre situazioni di errore individuate durante l'implementazione) LPC_BAD_ARG Note: Quando si inserisce un nuovo record nel database occorre aggiornare l'indice inserendo nell'opportuna posizione una nuova coppia <valore campo> <numero record>. Quando si cancella un reecord, occorre cancellare dall'indice la coppia corrispondente al record eliminato. In entrambi i casi occorre aggiornare le coppie relative ai record che hanno cambiato posizione a causa dell'inserimento/cancellazione (quelli che prima dell'inserimento avevano un numero di record maggiore o uguale di numrec). Le costanti ADD_RECORD e DEL_RECORD sono definite nell'interfaccia. </verbatim> -- Users.AndreaSterbini - 05 Jun 2006 * Set ALLOWTOPICCHANGE = Users.DocentiGroup * [[%ATTACHURL%/Modulo5.tar.gz][Modulo5.tar.gz]]: Modulo Cinque
Attachments
Attachments
Topic attachments
I
Attachment
History
Action
Size
Date
Who
Comment
gz
Modulo5.tar.gz
r1
manage
86.8 K
2007-03-14 - 12:44
StefanoGuerrini
Modulo Cinque
This topic: Labprog2
>
WebHome4435dda
>
AnnoAcc0506
>
ModuloCinque
Topic revision: r12 - 2007-03-15 - StefanoGuerrini
Copyright © 2008-2025 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki?
Send feedback