// FICHIER : ReferenceNE.h
// CLASSE : ReferenceNE

/************************************************************************
 *    UNIVERSITE DE BRETAGNE SUD (UBS)  --- I.U.P/I.U.T. DE LORIENT     *
 ************************************************************************
 *           LABORATOIRE DE GENIE MECANIQUE ET MATERIAUX (LG2M)         *
 * Centre de Recherche Rue de Saint Maudé - 56325 Lorient cedex         *
 * tel. 02.97.87.45.70 fax. 02.97.87.45.72 http://www-lg2m.univ-ubs.fr  *
 ************************************************************************
 *     DATE:        23/01/97                                            *
 *                                                                $     *
 *     AUTEUR:      G RIO   (mailto:gerard.rio@univ-ubs.fr)             *
 *                  Tel 0297874571   fax : 02.97.87.45.72               *
 *                                                                $     *
 *     PROJET:      Herezh++                                            *
 *                                                                $     *
 ************************************************************************
 *     BUT:  Def, stockage et manipulation des références pour les      *
 *           noeuds et les éléments.                                    *
 *                                                                $     *
 *     ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''     *                                                                      *
 *     VERIFICATION:                                                    *
 *                                                                      *
 *     !  date  !   auteur   !       but                          !     *
 *     ------------------------------------------------------------     *
 *     !        !            !                                    !     *
 *                                                                $     *
 *     ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''     *
 *     MODIFICATIONS:                                                   *
 *     !  date  !   auteur   !       but                          !     *
 *     ------------------------------------------------------------     *
 *                                                                $     *
 ************************************************************************/


#ifndef REFERENCENE_H
#define REFERENCENE_H




class ReferenceNE : public Reference 
{
	public :

		// CONSTRUCTEURS :
		
		// Constructeur par defaut
		ReferenceNE ( string nom = "rien_actuellement");
		
		// Constructeur fonction d'un tableau des numeros de la reference
		// du nb de maillage, du type de ref
		ReferenceNE (const Tableau<int>& tab,int nbmaille , int indic, string nom = "rien_actuellement");
		
		// Constructeur fonction d'un nom de  reference
		// du nb de maillage, du type de ref		
		ReferenceNE (string nom,int nbmaille , int indic);
				
		// Constructeur de copie
		ReferenceNE (const ReferenceNE& ref);
		
		
		// DESTRUCTEUR :
		
		~ReferenceNE ();
		
		
		// METHODES :
		
		inline Reference& operator= (const Reference& ref)
		// Surcharge de l'operateur = : realise l'egalite entre deux references
		{	indic = ref.indic;
		    nbmaille = ref.nbmaille;
		    nom_ref = ref.nom_ref;
			tab_num = ref.tab_num;
			return (*this);
		};
		
		inline Tableau<int>& Tab_num ()
		// Retourne le tableau des numeros de la reference
		{	return tab_num;	};
		
		inline string Nom () const
		// Retourne le nom associe a la reference
		{	return nom_ref;	};
		
		inline int Indic () const 
		// Retourne le type de reference 
		{	return indic;	};
		
		inline int Nbmaille()  const 
		// Retourne le numero du maillage auquelle la reference se rattache 
		{	return nbmaille;	};
		
		inline int& Numero(int i)
		// Retourne le ieme element du tableau des numeros
		// de la reference (acces lecture et ecriture)
		{	return tab_num(i);	};

		inline int Numero(int i) const 
		// Retourne le ieme element du tableau des numeros
		// de la reference (acces lecture uniquement)
		{	return tab_num(i);	};
		
		
		inline int Taille ()  const 
		// Retourne le nombre de numeros de la reference
		{	return tab_num.Taille();	};
		
		inline void Change_nom (string nouveau_nom)
		// Remplace l'ancien nom de la reference par nouveau_nom
		{ nom_ref = nouveau_nom;	};
		
		inline void Affiche () const 
		// Affiche les donnees liees a la reference
		{	cout << "\nNom de la reference : " << nom_ref 
		         << " , maillage nb =" << nbmaille << ", de type = " << indic << '\n';
			cout << "Taille du tableau : " << tab_num.Taille() << " .\n";
			cout << "Composante(s) :\n\t[  ";
			for (int i=1;i<=tab_num.Taille();i++)
				cout << tab_num(i) << "  ";
			cout << "]\n\n";
		};
			
				 
	protected :
		
		string nom_ref; // nom de la reference
		int nbmaille; // numero du maillage auquelle la reference se rapporte
		int indic; // indic = 1 : il s'agit de reference de noeud
		           // indic = 2 : il s'agit de reference d'element
		          // =3 -> surface, =4 -> arrete
		Tableau<int> tab_num; // tableau des numeros de la reference	
		
};


#endif
		
				