Page d'accueil Description du projet
/******************************************
 *
 *   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;
}