/*
 * Devuelve un vector de los ids de las canciones de un autor dado.
 */
std::vector<IDdocumento_t> ResolvedorConsultas::get_id_canciones_autor(std::string & autor)
{
	std::vector<IDdocumento_t> ids;

	indiceSecundarioAutor.abrir(directorioSalida+'/'+std::string(FILENAME_IDX_SECUN_AUTOR),"rb+");
	IterArbolBMas buscador(indiceSecundarioAutor);
	ClaveX claveInicio;
	claveInicio.set_clave(autor + (char)0);
	int res = buscador.comienzo(">=",claveInicio);
	if (res != RES_ERROR)
	{
		ClaveX claveFin;
		std::string autorSiguiente = autor;
		autorSiguiente[autorSiguiente.size()-1] = (char)(autor[autor.size()-1] + 1);
		claveFin.set_clave(autorSiguiente);

		RegistroClave otraCancion;
		while (buscador.leer_siguiente(otraCancion) != RES_FIN && otraCancion.get_clave() < claveFin)
		{
			ClaveX clave = otraCancion.get_clave();
			std::string autorMasId;
			clave.get_clave(autorMasId);

			std::string soloID;
			soloID.append(autorMasId.begin()+autor.size(), autorMasId.end());
			std::istringstream ss(soloID);
			int idDoc;
			ss >> idDoc;

			ids.push_back(idDoc);
		}
	}
Example #2
0
void lerIndice(char* tipo, char* entrada, char* arqBuscas){
	Palavra** hash;
	Documento2* listaDocs = NULL;
	int tamHash = 0;

	listaDocs = recriarListaDocs(entrada, listaDocs);

	//RECRIA O INDICE E TESTA ISSO
	// while(listaDocs!=NULL){
	// 	printf("%s\n", listaDocs->nomeDoc);
	// 	listaDocs = listaDocs->proximo;	
	// }

	hash = recriarHash(entrada, &tamHash);

	buscador(arqBuscas, tipo, hash, tamHash);
}