Page d'accueil Description du projet
/******************************************
 *
 *   Cedric Pradalier   2001
 *   mail : http://cedric.pradalier.free.fr/mail.html
 *
 *****************************************/



#include "bdlignes.h"
#include "output.h"
#include "lignes_gen.h"

/***************************************************


  instanciation de la base de lignes


****************************************************/


/* Constructeur : Lecture sequentielle du fichier de
   specification des lignes.
   Attention, cette fonction doit etre la seule a 
   instancier des lignes.
   Attention au format -> Regles
*/
CBDLignes::CBDLignes(char * filename,CBDArrets * Liste)
{
    FILE * fp;
    int i,id;
    char temp[80];
    char rep[80];
    char Type;
    if ((fp = fopen(filename,"r")) == NULL)
    {
        sprintf(outbuf,"Impossible d'ouvrir %s\n",filename);FlushBuffer();
        exit(1);
    }
    // Le nombre de ligne :
    fscanf(fp,"#lignes = %d \n",&NbLignes);
    tLignes = new (CLignes*)[NbLignes];
    for(i=0;i<NbLignes;i++)
    {
        fscanf(fp,"%d %c %s # %[^\n] \n",&id,&Type,rep,temp);
        // Le caratere Type permet de savoir si
        // la ligne contient des horaires generiques
        if (Type == '=')
            tLignes[i]=new CLignes(rep,temp,id);
        else /* Type == '*' */
            tLignes[i]=new CLignesGen(rep,temp,id);
        tLignes[i]->Read(Liste);
        tLignes[i]->FindSensUnique();
    }
    fclose(fp);
}



/* Destructeur : Cette fonction est la seule 
   a pouvoir detruire des lignes */
CBDLignes::~CBDLignes()
{
    for (int i=0;i<NbLignes;i++)
    {
        delete tLignes[i];
    }
    delete [] tLignes;
}

void CBDLignes::Print()
{
    sprintf(outbuf,"Listes des Lignes disponibles : \n");FlushBuffer();
    for(int i=0;i<NbLignes;i++)
        tLignes[i]->Print();
}



/* Recherche sequentielle brutale de la
   ligne identifiee par Id */
CLignes * CBDLignes::Find(int Id)
{
    int i=0;
    while (i<NbLignes) 
    {
        if (tLignes[i]->mId == Id)
            return tLignes[i];
        i++;
    }
    return NULL;
}

/* Mise a jour des horaires pour les lignes
   contenus dans la base en fonction de la date
   Attention au fichier calendrier */
int CBDLignes::LoadHoraires(CDate D,CBDArrets * Liste)
{
    TypeHoraire t;
    for(int i=0;i<NbLignes;i++)
    {
        t = tLignes[i]->FindTypeHoraire(D);
        tLignes[i]->LoadHoraires(t,Liste);
    }
}