1 #include "barrio.h" 2 #include <cmath> 3 4 Barrio::Barrio(std::string nombre) { 5 this->nombre = nombre; 6 this->paradas = new List<Parada*>; // crea la lista para las paradas 7 } 8 9 std::string Barrio::getNombre() { 10 return this->nombre; 11 } 12 13 List<Parada*> *Barrio::getParadas() { 14 return this->paradas; 15 } 16 17 void Barrio::addParada(std::string calle, 18 std::string direccion, 19 double coordX, double coordY, std::vector<int> lineas) { 20 21 this->paradas->insert(new Parada(calle, direccion, coordX, coordY, lineas)); 22 } 23 24 int Barrio::getSizeListaDeParadas() { // CONSIGNA 1 25 return this->paradas->getSize(); 26 } 27 28 double Barrio::getDistancia(double x1,double y1,double x2,double y2){ //CONSIGAN 2 29 double dX = (x2 - x1); 30 double dY = (y2 - y1); 31 32 return std::sqrt(dX*dX + dY*dY); 33 } 34 35 // lon -> X; lat -> Y; 36 Parada *Barrio::paradaMasCercana(double lon, double lat) { //CONSIGNA 2 37 double distancia; 38 double distanciaMin; 39 40 Parada *resultado, *aux; 41 42 resultado = aux = NULL; 43 44 this->paradas->startCursor(); 45 while(this->paradas->forwardCursor()){ 46 aux = this->paradas->getCursorData(); 47 48 if(resultado == NULL) { 49 resultado = aux; 50 distanciaMin = getDistancia(lon, lat, aux->getCoordX(), aux->getCoordY()); 51 } 52 else { 53 distancia = getDistancia(lon, lat, aux->getCoordX(),aux->getCoordY()); 54 55 if(distancia < distanciaMin) { 56 resultado = aux; 57 distanciaMin = distancia; 58 } 59 } 60 } 61 62 return resultado; 63 } 64 65 bool Barrio::lineaEnParada(int linea, std::vector<int> *listaDeLineas) { //CONSIGNA 3 66 if(listaDeLineas == NULL) { 67 return false; 68 } 69 70 for(size_t i = 0; i < listaDeLineas->size(); ++i) { 71 if((*listaDeLineas)[i] == linea) { 72 return true; 73 } 74 } 75 76 return false; 77 } 78 79 List<Parada*> *Barrio::listaDeParadasPorLinea(int linea) { //CONSIGNA 3 80 Parada *parada; 81 List<Parada*> *resultado; 82 std::vector<int> *listaDeLineas; 83 84 resultado = new List<Parada*>; 85 86 this->paradas->startCursor(); 87 while(this->paradas->forwardCursor()){ 88 parada = this->paradas->getCursorData(); 89 listaDeLineas = parada->getLineas(); 90 91 if(lineaEnParada(linea, listaDeLineas)) { 92 resultado->insert(parada); 93 } 94 } 95 96 if(resultado->getSize() == 0) { 97 delete resultado; 98 return NULL; 99 } 100 101 return resultado; 102 } 103 104 unsigned int Barrio::getCantidadDeParadasPorLinea(int linea) { //CONSIGNA 4 105 Parada *parada; 106 unsigned int cantidadDeParadas; 107 108 cantidadDeParadas = 0; 109 110 this->paradas->startCursor(); 111 while(this->paradas->forwardCursor()) { 112 parada = this->paradas->getCursorData(); 113 for(size_t i = 0; i < parada->getLineas()->size(); ++i) { 114 if((*parada->getLineas())[i] == linea) { 115 cantidadDeParadas++; 116 } 117 } 118 } 119 120 return cantidadDeParadas; 121 } 122 123 Barrio::~Barrio() { 124 Parada *delParada; 125 126 this->paradas->startCursor(); 127 while(this->paradas->forwardCursor()){ 128 delParada = this->paradas->getCursorData(); 129 // std::cout << "Eliminando parada `" << delParada->getDireccion() << "`\n"; 130 delete delParada; 131 } 132 133 delete this->paradas; 134 }
