// Solucion problema directorios examen Prog. Avanzada 20/1/2004 #include "SistemaFicheros.h" //************************************************************************************ // Descriptor //************************************************************************************ Descriptor::Descriptor (string n) : nombre(n) {} string Descriptor::Nombre () const{ return nombre; } //************************************************************************************ // DescriptorFichero //************************************************************************************ DescriptorFichero::DescriptorFichero (string n, int t, Fecha f) : Descriptor(n), tamanyo(t), fecha(f) {}; void DescriptorFichero::MostrarDatos() const { cout << "{Fichero: " << nombre << ", Ocupa: " << tamanyo << ", Fecha: " << fecha << "}"; } int DescriptorFichero::Ocupacion () const { return tamanyo; } //************************************************************************************ // DescriptorEnlaceSimbolico //************************************************************************************ DescriptorEnlaceSimbolico::DescriptorEnlaceSimbolico (string n, Descriptor *d) : Descriptor(n), fichero(d) {}; void DescriptorEnlaceSimbolico::MostrarDatos() const { cout << "{Enlace: " << nombre << ", Ocupa: " << Ocupacion() << ", Apunta a: "; fichero->MostrarDatos(); cout << "}"; } int DescriptorEnlaceSimbolico::Ocupacion () const { return fichero->Nombre().size(); } //************************************************************************************ // DescriptorDirectorio //************************************************************************************ DescriptorDirectorio::DescriptorDirectorio (string n) : Descriptor(n), lista(NULL) {}; DescriptorDirectorio::Nodo::Nodo (Descriptor *d, Nodo *s) : info(d), sig(s) {}; void DescriptorDirectorio::MostrarDatos() const { cout << "{Directorio: " << nombre << ", Ocupa: " << Ocupacion() << "}"; } void DescriptorDirectorio::MostrarDatos(string n) const { for (Nodo *aux = lista; aux != NULL; aux = aux->sig) if (aux->info->Nombre() == n){ aux->info->MostrarDatos(); return; } cout << "No se ha encontrado " << n << " en el directorio " << Nombre(); } int DescriptorDirectorio::Ocupacion () const { int total = 0; for (Nodo *aux = lista; aux != NULL; aux = aux->sig) total += aux->info->Ocupacion(); return total; } void DescriptorDirectorio::Insertar (Descriptor *d) { lista = new Nodo (d, lista); }