/******************************************
*
* 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);
}
}