]> git.llucax.com Git - z.facultad/75.06/emufs.git/blob - emufs/idx.h
Ya funciona nuevamente el Arbol B+ con su test correspondiente, pero ahora ya se...
[z.facultad/75.06/emufs.git] / emufs / idx.h
1 /* vim: set noexpandtab tabstop=4 shiftwidth=4:
2  *----------------------------------------------------------------------------
3  *                                  emufs
4  *----------------------------------------------------------------------------
5  * This file is part of emufs.
6  *
7  * emufs is free software; you can redistribute it and/or modify it under the
8  * terms of the GNU General Public License as published by the Free Software
9  * Foundation; either version 2 of the License, or (at your option) any later
10  * version.
11  *
12  * emufs is distributed in the hope that it will be useful, but WITHOUT ANY
13  * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
14  * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
15  * details.
16  *
17  * You should have received a copy of the GNU General Public License along
18  * with emufs; if not, write to the Free Software Foundation, Inc., 59 Temple
19  * Place, Suite 330, Boston, MA  02111-1307  USA
20  *----------------------------------------------------------------------------
21  * Creado:  jue abr  8 18:11:46 ART 2004
22  * Autores: Nicolás Dimov <sagardua@uolsinectis.com.ar>
23  *          Leandro Lucarella <llucare@fi.uba.ar>
24  *----------------------------------------------------------------------------
25  *
26  * $Id$
27  *
28  */
29
30 /** \file
31  *
32  * Manejo de archivos de índice de registros.
33  * 
34  * Interfaz del manejo de archivos de índice de registros.
35  *
36  */
37
38 #ifndef _EMUFS_IDX_H
39 #define _EMUFS_IDX_H
40
41 #include <string.h>
42 #include <unistd.h>
43 #include "emufs.h"
44
45 #define EMUFS_IDX_EXT ".idx"
46
47 /** Estructura que define el archivo .idx
48   *\param id_reg ID del registro.
49   *\param location Numero de bloque.
50   */
51 typedef struct emufs_idx_t {
52         EMUFS_REG_ID id_reg;
53         EMUFS_BLOCK_ID location;
54 } EMUFS_IDX;
55
56
57 /** Abre el archivo */
58 FILE* emufs_idx_abrir(EMUFS*, const char*);
59
60 /** Crea el archivo vacio */
61 int emufs_idx_crear(EMUFS*);
62
63 /** Devuelve el mayor id libre para un nuevo registro  */
64 EMUFS_REG_ID emufs_idx_buscar_mayor_id_libre(EMUFS*, int*);
65
66 /** Busca el bloque al que pertenece el id \c reg_id */
67 EMUFS_BLOCK_ID emufs_idx_buscar_registro(EMUFS*, EMUFS_REG_ID reg_id);
68
69 /** Agrega un nuevo registro EMUFS_IDX al archivo .idx si no existe
70   * el id \c reg_id, si existe coloca en el campo location el valor 
71   * indicado en \c block_id
72   */
73 int emufs_idx_agregar(EMUFS*, EMUFS_BLOCK_ID block_id, EMUFS_REG_ID reg_id);
74
75 /** Coloca el valor -1 en el campo location, del registro que contenga el 
76   * id \c reg_id, para indicar que ese id no existe */
77 int emufs_idx_borrar(EMUFS*, EMUFS_REG_ID reg_id);
78
79 /** Retorna un array con los Ids validos del archivo IDX
80  *
81  *  EL ARRAY DEBE SER LIBERADO!
82  *  \param emu EMUFS
83  *  \param cant Puntero donde guardar la cantidad de items
84  */
85 EMUFS_REG_ID *emufs_idx_get(EMUFS *emu, EMUFS_REG_ID *cant);
86
87 /** Devuelve un nuevo id valido para un nuevo registro */
88 EMUFS_REG_ID emufs_idx_get_new_id(EMUFS*, int*);
89
90 /** Retorna 0 si \c ID existe */
91 int emufs_idx_existe_id(EMUFS *emu, int ID);
92
93 /** Acutaliza el valor de \c bloque segun \c ID */
94 int emufs_idx_actualizar(EMUFS *emu, int ID, EMUFS_BLOCK_ID bloque);
95
96 /** Obtiene el tamaño del archivo de índice. */
97 long emufs_idx_get_file_size(EMUFS*, int*);
98
99 #endif /* _EMUFS_IDX_H */