
#include "LectBloc_T.h"

// lecture d'un bloc
void LectBloc::Lecture(UtilLecture & entreePrinc,LesReferences& lesRef,
      char * motcle,string message)
  { MotCle motCle; // ref aux mots cle
    if (strstr(entreePrinc.tablcar,motcle)!=NULL)
      { entreePrinc.NouvelleDonnee();
        list <T> lili;
        T elem;
//        double t1; string s1;
        while ( !motCle.SimotCle(entreePrinc.tablcar))
         { elem.Lecture(entreePrinc);
    //     *(entreePrinc.entree) >> elem.Nomref() >> t1;
           // on regarde si cela correspond bien a une reference existante
           if (!lesRef.Existe(elem.nomRef()))
             { cout << "\n erreur, la ref "<< elem.nomRef() << " de " << motcle << "ne correspond a aucun element"
                   << " de la liste de reference lue !! \n";
               elem.Affiche();   
               cout << " LectBloc::Lecture( etc ..."
                   << endl;
               entreePrinc.MessageBuffer(message);  
               exit (1);     
              }
           // on verifie que l'on n'utilise pas deux fois la meme reference
           // pour deux cibles differentes
           list <T>::iterator ii;
           for (ii=lili.begin() ; ii != lili.end(); ii++)
                if (((*ii).nomRef() == elem.nomRef()) && ((*ii)::Valeur != elem::valeur))
                  { cout << "\n erreur , un meme nom de reference est utilisee pour"
                         << " deux cibles differentes \n"
                      << "  nom de la ref = " << elem.nomRef() 
                      << ", valeurs des deux cibles ="
                      << (*ii)::Valeur <<", "<< elem::valeur ;
                    cout << " LectBloc::Lecture( etc etc .." << endl;
                    entreePrinc.MessageBuffer(message);                     
                    exit (1);          
                   }
                
           // stockage
           lili.push_back(elem);
           entreePrinc.NouvelleDonnee();
         }
        // enregistrement des infos 
        tabElem.Change_taille(lili.size());
        list <T>::iterator i;
        int j;
        for (i=lili.begin(),j=1 ; i != lili.end(); i++,j++)
           tabEpaiss(j) = *i;              
      }      
   };