// This file is part of the Herezh++ application. // // The finite element software Herezh++ is dedicated to the field // of mechanics for large transformations of solid structures. // It is developed by Gérard Rio (APP: IDDN.FR.010.0106078.000.R.P.2006.035.20600) // INSTITUT DE RECHERCHE DUPUY DE LÔME (IRDL) . // // Herezh++ is distributed under GPL 3 license ou ultérieure. // // Copyright (C) 1997-2021 Université Bretagne Sud (France) // AUTHOR : Gérard Rio // E-MAIL : gerardrio56@free.fr // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, // or (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty // of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. // See the GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // // For more information, please consult: . /************************************************************************ * DATE: 23/01/97 * * $ * * AUTEUR: G RIO (mailto:gerardrio56@free.fr) * * $ * * PROJET: Herezh++ * * $ * ************************************************************************ * BUT: création d'un conteneur liste stl, qui comporte en plus * * une surcharge de lecture écriture. * * Idem pour LaList. * * $ * * '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' * * MODIFICATIONS: * * ! date ! auteur ! but ! * * ------------------------------------------------------------ * * !24/8/2003! rio ! introduction de LaList ! * * $ * ************************************************************************/ #ifndef LIST_IO_H #define LIST_IO_H #include #include #include #include #include "LaList.h" #include "Sortie.h" #include "ParaGlob.h" using namespace std; //introduces namespace std /** @defgroup Les_list_io * * BUT: création de conteneure type listes stl, qui comportent en plus * une surcharge de lecture écriture. * Idem pour LaList. * * * \author Gérard Rio * \version 1.0 * \date 23/01/97 * \brief création de conteneurs type listes stl avec surcharge de lecture écriture * */ /// @addtogroup Les_list_io /// @{ /// //------------------------------------------------------------------ //! List_io classe template identique à list de stl, avec en plus une lecture et écriture //------------------------------------------------------------------ /// \author Gérard Rio /// \version 1.0 /// \date 23/01/97 template class List_io : public LaLIST { // surcharge de l'operator de lecture friend istream & operator >> (istream & entree, List_io & ) { // du au pb de lecture de pointeur cout << "\n erreur dans la lecture d'une list_io, la methode n'est pas utilisable en template " << "\n friend istream & operator >> (... "; Sortie(1); return entree; } // --- information pour créer un programme de lecture cohérent avec l'écriture ---- // exemple de surcharge de l'operator de lecture // friend istream & operator >> (istream & entree, List_io& a) // { string nom; entree >> nom; // #ifdef MISE_AU_POINT // if (nom != "debut_List_IO=") // { cout << "\n erreur dans la lecture d'une list_io, on ne trouve pas le mot cle: debut_List_IO= " // << "\n friend istream & operator >> (... "; // Sortie(1); // } // #endif // int taille;entree >> taille; // lecture de la taille // T un_elem; // for (int i=1;i<=taille;i++) // { entree >> un_elem; // lecture // a.push_back(un_elem); // enregistrement // } // return entree; // } // fin --- information pour créer un programme de lecture cohérent avec l'écriture ---- // surcharge de l'operator d'ecriture friend ostream & operator << (ostream & sort, const List_io & a) { // tout d'abord un indicateur donnant le type sort << "\n debut_List_IO= " << "(taille= " << a.size() << " ) "; typename List_io::const_iterator iter_courant,iter_fin; iter_fin = a.end(); for (iter_courant=a.begin();iter_courant!=iter_fin;iter_courant++) { sort << setprecision(ParaGlob::NbdigdoCA()) << (*iter_courant) ; sort << " "; } sort << "\n"; return sort; } public: // on définit également une opération de lecture et d'écriture pour // les itérators, ce qui permettera de créer des tableaux d'iterator // surcharge de l'operator de lecture, a priori pas utile friend istream & operator >> (istream & entree, typename LaLIST::iterator& ) { cout << "erreur, cette surcharge ne doit pas être utilisée " << "List_io::iterator, operator << \n"; Sortie(1); return entree; } // surcharge de l'operator d'ecriture, a priori pas utile friend ostream & operator << (ostream & sort, const typename LaLIST::iterator ) { cout << "erreur, cette surcharge ne doit pas être utilisée " << "List_io::iterator, operator >> \n"; Sortie(1); return sort; } // surcharge de l'operator de lecture, a priori pas utile friend istream & operator >> (istream & entree, typename LaLIST::const_iterator& ) { cout << "erreur, cette surcharge ne doit pas être utilisée " << "List_io::const_iterator, operator << \n"; Sortie(1); return entree; } // surcharge de l'operator d'ecriture, a priori pas utile friend ostream & operator << (ostream & sort, const typename LaLIST::const_iterator& ) { cout << "erreur, cette surcharge ne doit pas être utilisée " << "List_io::const_iterator_io, operator >> \n"; Sortie(1); return sort; } public : // CONSTRUCTEURS : // List_io (const List_io& li): list(li) {}; // List_io (Allocator::size_type n, const T& a): list(n,a) {}; // DESTRUCTEUR : // METHODES PUBLIQUES : private : // VARIABLES PROTEGEES : // CONSTRUCTEURS : // DESTRUCTEUR : // METHODES PROTEGEES : }; /// @} // end of group /// @addtogroup Les_list_io /// @{ /// //------------------------------------------------------------------ //! LaLIST_io classe template identique à List_io: existe pour des raisons historiques et en prévision de changements futurs éventuelles (?) //------------------------------------------------------------------ /// \author Gérard Rio /// \version 1.0 /// \date 24/8/2003 // idem pour LaList template class LaLIST_io : public LaLIST { // surcharge de l'operator de lecture friend istream & operator >> (istream & entree, LaLIST_io& ) // l'opérateur de lecture n'est pas surchargeable car on n'a pas de // critére d'arrêt de la lecture (on en faire mais pour l'instant pas // utile { cout << "erreur, cette surcharge ne doit pas être utilisée " << "LaLIST_io, operator >> \n"; Sortie(1); return entree; } // surcharge de l'operator d'ecriture friend ostream & operator << (ostream & sort, const LaLIST_io& a) { // tout d'abord un indicateur donnant le type sort << "\nLaLIST_IO= "; typename LaLIST_io::const_iterator iter_courant,iter_fin; iter_fin = a.end(); for (iter_courant=a.begin();iter_courant!=iter_fin;iter_courant++) { sort << setw (22) << (*iter_courant) ; sort << " "; } sort << "\n"; return sort; } public: // on définit également une opération de lecture et d'écriture pour // les itérators, ce qui permettera de créer des tableaux d'iterator // surcharge de l'operator de lecture, a priori pas utile friend istream & operator >> (istream & entree, typename LaLIST::iterator& ) { cout << "erreur, cette surcharge ne doit pas être utilisée " << "LaLIST_io::iterator, operator << \n"; Sortie(1); return entree; } // surcharge de l'operator d'ecriture, a priori pas utile friend ostream & operator << (ostream & sort, const typename LaLIST::iterator ) { cout << "erreur, cette surcharge ne doit pas être utilisée " << "LaLIST_io::iterator, operator >> \n"; Sortie(1); return sort; } // surcharge de l'operator de lecture, a priori pas utile friend istream & operator >> (istream & entree, typename LaLIST::const_iterator& ) { cout << "erreur, cette surcharge ne doit pas être utilisée " << "LaLIST_io::const_iterator, operator << \n"; Sortie(1); return entree; } // surcharge de l'operator d'ecriture, a priori pas utile friend ostream & operator << (ostream & sort, const typename LaLIST::const_iterator& ) { cout << "erreur, cette surcharge ne doit pas être utilisée " << "LaLIST_io::const_iterator_io, operator >> \n"; Sortie(1); return sort; } public : // CONSTRUCTEURS : // DESTRUCTEUR : // METHODES PUBLIQUES : private : // VARIABLES PROTEGEES : // CONSTRUCTEURS : // DESTRUCTEUR : // METHODES PROTEGEES : }; /// @} // end of group #endif