/******************************************
*
* Cedric Pradalier 2001
* mail : http://cedric.pradalier.free.fr/mail.html
*
*****************************************/
#include "output.h"
#include "corresp.h"
#include "treillis.h"
#include <stdio.h>
/************************************************
Implementation de la representation des
correspondances /
/ Ligne2
----------------C---------------------
/ Correspondance
/
/ Ligne 1
************************************************/
CCorresp::CCorresp()
{
arrivee = depart = HNULL;
precedent = NULL;
ligne = NULL;
arret = NULL;
sens = nonsens;
}
CCorresp::CCorresp(CArrets * A,CLignes * L,SensTrajet s)
{
arrivee = depart = HNULL;
precedent = NULL;
ligne = L;
arret = A;
sens = s;
}
CCorresp::CCorresp(const CCorresp & C)
{
arrivee = C.arrivee;
depart = C.depart;
precedent = NULL;
ligne = C.ligne;
arret = C.arret;
sens = C.sens;
}
CCorresp::~CCorresp()
{
}
void CCorresp::Print()
{
sprintf(outbuf,"Ligne : %s -- Arret : %s \n",ligne->mName,arret->mNom);FlushBuffer();
sprintf(outbuf,"Arrivee : ");FlushBuffer();arrivee.Print();
sprintf(outbuf," <-> Depart : ");FlushBuffer();depart.Print();
sprintf(outbuf,"\n");FlushBuffer();
}
/* Fonction virtuelle : egalite dans les objets
Utile pour eviter les doublons dans un ensemble
Sous cette forme, c'est inutile, mais ca l'a ete
et ca pourrait le redevenir */
bool CCorresp::IsEqual(CObjet * obj)
{
return false;
}
/* Extraction d'un itineraire sous forme de treillis:
En fait, celui-ci doit deja etre construit physiquement,
Il n'y a plus qu'a rajouter la tete */
CObjet * CCorresp::ExtraitTreillis(CArrets* Dep,CArrets * Dest,CHoraire limite)
{
// sprintf(outbuf,"bouh \n");FlushBuffer();
CTreillis * iti = new CTreillis(ligne,Dest,limite);
CCorresp * corr = this->precedent;
while (corr != NULL)
{
iti->PushLigne(corr->ligne);
corr = corr->precedent;
}
iti->SetDepart(Dep);
// sprintf(outbuf,"baah\n");FlushBuffer();
return (CObjet *)iti;
}
/* Extraction d'un itineraire :
En fait, celui-ci doit deja etre construit physiquement,
Il n'y a plus qu'a rajouter la tete */
CItineraire * CCorresp::ExtraitItineraire(CArrets * Dest)
{
// sprintf(outbuf,"bouh \n");FlushBuffer();
CItineraire * iti = new CItineraire(this);
iti->Add(Dest,ligne,s_aller);
// sprintf(outbuf,"baah\n");FlushBuffer();
return iti;
}
/* On transmet */
void CCorresp::ExtraitAccessibles(CEnsemble * E,CBDLignes * pBDL)
{
ligne->LignesAccessibles(E,pBDL,this);
}
/* Test si une suite de correspondance
(presque un itineraire) utilise la ligne L
Parcours sequentiel sans finesse */
int CCorresp::Contains(CLignes * L)
{
CCorresp * corr = this;
while (corr != NULL)
{
if (strcmp(corr->ligne->mName,L->mName) == 0)
return 1;
corr = corr->precedent;
}
return 0;
}