int Servicios::recuperarLibro(unsigned int idLibro, Libro **libro) { unsigned int offset = 0; string pathArbolPrimario = Parametros().getParametro(CARPETA_DATOS); pathArbolPrimario += NOMBRE_BMAS_PRIMARIO; ArbolBMasNumerico *arbolP = new ArbolBMasNumerico(pathArbolPrimario, TAMANIO_BLOQUE_BMAS_NUMERICO); resultadoOperacion resultado(OK) ; Registro* registro = arbolP->buscarRegistroNumerico(idLibro, &resultado); if (registro && resultado.getDescripcion() == "ENCONTRADO"){ offset = registro->getReferencias()->front(); } else{ return ERROR_LIBRO_INEXISTENTE; } string rutaArcLibros = Parametros().getParametro(ARCHIVO_LIBROS); if (rutaArcLibros == "") return ERROR_RUTA_ARCHIVO_LIBROS; ArchivoLibros *archivo = new ArchivoLibros(rutaArcLibros); *libro = (archivo->recuperarLibro(offset)); delete archivo; delete arbolP; return 0; }
int Servicios::quitarArchivo(string unId) { unsigned int id = atoi(unId.c_str()); unsigned int offset = 0; cout<<"Eliminando libro "<<id<<"..."<<endl; //recuperar el offset del primario string pathArbolPrimario = Parametros().getParametro(CARPETA_DATOS); pathArbolPrimario += NOMBRE_BMAS_PRIMARIO; if (pathArbolPrimario == "") return ERROR_RUTA_BMAS_PRIMARIO; ArbolBMasNumerico *arbolP = new ArbolBMasNumerico(pathArbolPrimario, TAMANIO_BLOQUE_BMAS_NUMERICO); resultadoOperacion resultado(OK); Registro* registro = arbolP->buscarRegistroNumerico(id, &resultado); //TODO ver si esta recuperando bien el offset if (registro && resultado.getDescripcion() == "ENCONTRADO") offset = registro->getReferencias()->front(); else return ERROR_LIBRO_INEXISTENTE; //quitar de el archivo de registros variables string arcLibros = Parametros().getParametro(ARCHIVO_LIBROS); ArchivoLibros *archivo = new ArchivoLibros(arcLibros); Libro *libro = archivo->recuperarLibro(offset); // cout <<"Autor: "<< libro->getAutor() <<endl; // cout <<"Editorial: "<< libro->getEditorial() <<endl; // cout <<"Titulo: "<< libro->getTitulo() <<endl; // cout <<"Id: "<< libro->getId() <<endl; // cout <<"Cant.palabras: " << libro->getCantPalabras() << endl; // cout << "Presione ENTER para continuar...." << endl; // cin.get(); // cout << "SACO EL LIBRO DEL ARCHIVO DE REGISTROS VARIABLES" << endl; archivo->suprimirLibro(offset); //quitar del primario //cout << "QUITO DEL PRIMARIO EL ID" << endl; arbolP->eliminarNumerico(libro->getId()); delete arbolP; //quitar de los indices //cout << "SACO DE LOS INDICES" << endl; //cout << "SACO DE AUTORES" << endl; sacarDelArbol(NOMBRE_BMAS_AUTORES,libro->getAutor(),libro->getId()); //cout << "Presione ENTER para continuar...." << endl; //cin.get(); //cout << "SACO DE EDITORIALES" << endl; sacarDelArbol(NOMBRE_BMAS_EDITORIALES,libro->getEditorial(),libro->getId()); ///cout << "Presione ENTER para continuar...." << endl; //cin.get(); //cout << "SACO DE TITULOS" << endl; sacarDelHash(NOMBRE_HASH_TITULOS,libro->getTitulo(),libro->getId()); //cout << "Presione ENTER para continuar...." << endl; //cin.get(); //cout << "SACO PALABRAS" << endl; //cout << "Procesando la quita del indice..." << endl; set<string> *palabras = libro->getListaPalabras(); for (set<string>::iterator it = palabras->begin(); it != palabras->end(); it++) { sacarDelHash(NOMBRE_HASH_PALABRAS, *it ,libro->getId()); } //quitar de la lista de libros sin procesar //cout << "SACO DE LOS INDICES SIN PROCESAR" <<endl; SinIndice *listas = SinIndice().getInstancia(); listas->sacarLibroDeTodasLasListas(id); delete archivo; /*******************AGREGADO ENTREGA II*************************/ string pathArbolPalabras = Parametros().getParametro(CARPETA_DATOS); pathArbolPalabras += NOMBRE_BMAS_PALABRAS; pathArbolPalabras += "_" + Util().UIntToString(id); resultadoOperacion resultadoOp(OK); ArbolBMasAlfabetico *arbolPal = new ArbolBMasAlfabetico(pathArbolPalabras, TAMANIO_BLOQUE_BMAS_PALABRAS); //recorrer el arbol de palabras Registro *reg = arbolPal->buscarRegistro("a",&resultadoOp); unsigned int lista; while (reg != NULL) { lista = reg->getReferenciai(1); ListasIds().eliminarLista(lista); reg = arbolPal->siguiente(); } arbolPal->~ArbolBMasAlfabetico(); Util().eliminarArchivo(pathArbolPalabras); /*******************AGREGADO ENTREGA II*************************/ return 0; }