/*############################################
# (\__/)    Librairie   : Facilitateur d'exercise
# ( . .)    Auteur      : Martin Robinson
# c(")(")   Conception  : 27 Janvier 2012
#		    Description : Une librairie qui
#						  contient toute les
#						  fonction redondantes
#						  d'un programme �
#						  l'autre
#			modification: 14 février 2012
#			Description : ajout de fonction
#						  de saisie clavier
#			modificatoin: 17 février 2012
			Description : ajoute de fonction
						  saisirInt
						  saisirChar
###########################################
         (\_/)   directive du pr�processeur
        ( . . ) /
###########################################*/

#include "martinrobinson.hpp"

using namespace std;

const int maxInt = numeric_limits<int>::max();

/*       (\_/)   Prototype de fonction
        ( . . ) /
###########################################*/

	/*  (\_/) Effacer l'ecran
	___( . . )_/________________*/
	void viderEcran()
	{
		for (int i=0;i<25;i++)
			cout << '\n';
	}
	/*  (\_/) Appuyer sur entrer pour continuer
	___( . . )_/________________*/
	void attendre()
	{
		cout << "Appuyer sur entrer pour continuer ... ";
		viderCin();
		cin.ignore(maxInt,'\n');
	}

	/*  (\_/) vider input stream
	___( . . )_/________________*/
	void viderCin()
	{
		cin.clear();					//vider les flags
		cin.seekg(0,ios_base::end);
		if (!cin.fail())
			cin.ignore(maxInt,'\n');	//vider le buffer
		else
			cin.clear();
	}

	/*  (\_/) verifie si le fichier est vide
	___( . . )_/________________*/
	bool estVide(ifstream & fichier)
	{
		return fichier.peek() == ifstream::traits_type::eof();
	}

	/*  (\_/) Voulez vous continuer?
	___( . . )_/________________*/
	bool questionOuiNon(string question)
	{
		viderCin();
		char reponse;
		do
		{
			cout << question << endl;
			reponse = toupper(cin.get());			//saisie d'un caractère
		}while(reponse != 'O' && reponse != 'N');	//tanque ce n'est pas les caractères demandés
		return reponse == 'O';
	}

	/*  (\_/) saisi de float
	___( . . )_/________________*/
	float saisirFloat(string message)
	{
		viderCin();
		float n;		//le nombre sera contenu temporairement ici
		do
		{
			cout << message << endl;
			cin >> n;			//saisie d'une float
		}while (cin.fail());	//tanque ce n'est pas reussie
		return n;
	}

	/*  (\_/) utilise la saisie de float et valide que c'est plus grand que zéro
	___( . . )_/________________*/
	float saisirFloatPositif(string message)
	{
			float tmp = saisirFloat(message);
			while(tmp <= 0)		//tanque le resultat n'est pas positif
			{
				cout <<  " vous devez entrer une valeur positive et non nulle ";
				tmp = saisirFloat(message);		//resaisire
			}
			return tmp;
	}

	/*  (\_/) saisi de int
	___( . . )_/________________*/
	int saisirInt(string message)
	{
		viderCin();
		int n;		//le nombre sera contenu temporairement ici
		do
		{
			cout << message << endl;
			cin >> n;			//saisie d'une float
		}while (cin.fail());	//tanque ce n'est pas reussie
		return n;
	}

	/*  (\_/) saisi de charactere
	___( . . )_/________________*/
	char saisirChar(string message)
	{
		viderCin();
		cout << message << endl;
		return cin.get();
	}
	char saisirChar(string message, string charAutorise)
	{
		char c;
		do
		{
			viderCin();
			cout << message << endl;
			c = cin.get();
		}while (charAutorise.find(c) >= charAutorise.length());
		return c;
	}
	/*  (\_/) zone sinistree
	___( . . )_/________________*/
	//template <class T>
	//T saisirNombre(string message)
	//{
	//	T n;
	//	do
	//	{
	//		cout << message << endl;
	//		cin >> n;
	//	}while (cin.fail());
	//	return n;
	//}

	//template <class T>
	//T saisirNombrePositif(string message)
	//{
	//	T tmp = saisirNombre<T>(message);
	//	while(tmp <= 0)
	//	{
	//		cout <<  " vous devez entrer une valeur positive et non nulle ";
	//		tmp = saisirNombre<T>(message);
	//	}
	//	return tmp;
	//}

/*       (\_/)   fini
        ( . . ) /
###########################################*/
