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



#include "arrets.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "corresp.h"
#include "bdlignes.h"
#include "lignes.h"
#include "output.h"

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

  Fichier de representation des arrets

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



CArrets::CArrets()
{
    mNom=NULL;
    mId=0;
    mNbLignesPresentes=0;
    tLignesPresentes=NULL;
}




CArrets::~CArrets()
{
//  sprintf(outbuf,"deleting arrets %s\n",mNom);FlushBuffer();
    free(mNom);
    delete [] tLignesPresentes;
}

void strtrim(char * s)
{
    int i;
    i=0;
    while (s[i] != 0) i++;
    i -= 1;
    while ((s[i] == ' ') || (s[i] == '\t')) i--;
    s[i+1] = 0;
}

/* Lecture d'un fichier : fp doit etre deja ouvert 
   Le fichier doit suivre les spec definies dans Regles
   Et Le prochain champ doit effectivement etre la definition
   d'un arret.
   Sinon, le fscanf ne marche pas.
   On lit ensuite toutes les lignes presentes a cet arret */
int CArrets::Read(FILE * fp)
{
    char tnom[80];
    int i=0;
    fscanf(fp,"%d %[^:\t] : %d",&mId,tnom,&mNbLignesPresentes);
    strtrim(tnom);
    tLignesPresentes=new int[mNbLignesPresentes];
    for (i=0;i<mNbLignesPresentes;i++)
        fscanf(fp,"%d",&(tLignesPresentes[i]));
    mNom = (char *) malloc((strlen(tnom)+1) * sizeof(char));
    strcpy(mNom,tnom);
    return 0;
}

/* Si on a juste besoin de lire l'Id de l'arret,
   La Base de donnee est deja formee */
int CArrets::ReadId(FILE * fp)
{
    char ligne[80];
    int i;
    fgets(ligne,80,fp);
    sscanf(ligne,"%d",&i);
    return i;
}

/* Affichage */
void CArrets::Print()
{
    sprintf(outbuf,"%i : %s -> ",mId,mNom);FlushBuffer();
    for(int i=0;i<mNbLignesPresentes;i++)
        sprintf(outbuf,"%i ",tLignesPresentes[i]);FlushBuffer();
    sprintf(outbuf,"\n");FlushBuffer();
}


void CArrets::PrintMin()
{
    sprintf(outbuf,"%03i = %s\n",mId,mNom);FlushBuffer();
}


/* Extraction des lignes presente a un arret 
   Simple ajout des elem du tableau dans l'ensemble E
   pour pouvoir supprimer les doublons */
void CArrets::ExtraitPresentes(CEnsemble * E,void * pBDL)
{

    CBDLignes * pBD = (CBDLignes *) pBDL;
    CLignes * ind;
    for (int i=0;i<mNbLignesPresentes;i++)
        if ((ind = pBD->Find(tLignesPresentes[i])) != NULL)
        {
            CCorresp * nouveau = new CCorresp(this,ind,s_aller);
        //  nouveau->AddInterdit(mId);
            E->add((CObjet *) nouveau);

        }
}