/*############################################
# (\__/)    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
#			modification: 17 février 2012
			Description : ajoute de fonction
						  saisirInt
#			modification: 20 février 2012
			Description : ajoute de fonction
						  saisirString
						  saisirCharValide
						  dansListe
###########################################
         (\_/)   directive du pr�processeur
        ( . . ) /
###########################################*/

#include "martinrobinson.hpp"

using namespace std;

const int maxInt = numeric_limits<int>::max();

/*       (\_/)   Prototype de fonction
        ( . . ) /
###########################################*/

	/*  (\_/) fonction de stream standar
	___( . . )_/________________*/
	//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();
	}
	//system(clear)
	void viderEcran()
	{
		for (int i=0;i<25;i++)
			cout << '\n';
	}
	//system(pause)
	void attendre()
	{
		cout << "Appuyer sur entrer pour continuer ... ";
		viderCin();
		cin.ignore(maxInt,'\n');
	}
	//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;
	}
	int saisirIntPositif(string message)
	{
		int nbPos;		//nombre positif
		do
		{
			nbPos = saisirInt(message);
		}while(nbPos<=0);	//tanque pas positif 
		return nbPos;
	}

	//saisi de string
	string saisirString(string message)
	{
		  string saisie;    //string de sortie
		  while (saisie=="") //tanque que l'utilisateur appuye sur entrer sans rien ecrire
		  {
				cout << '\n' << message << '\n';
				getline(cin,saisie);
		  }
		  return saisie;
	}

	//saisi de charactere
	char saisirChar(string message)
	{
		viderCin();
		cout << message << endl;
		return cin.get();
	}
	//saisi de charactere et validation majusculation
	char saisirCharValide(string message,string liste)
	{
		char saisie;
		do
		{
			saisie =saisirChar(message);
		}while(!dansListe(toupper(saisie),liste));
		return saisie;
	}

	/*  (\_/) fichier
	___( . . )_/________________*/
	bool estVide(ifstream & fichier)
	{
		return fichier.peek() == ifstream::traits_type::eof();
	}


	/*  (\_/) string
	___( . . )_/________________*/
	bool dansListe(char choix, string liste)
	{
		for (int i=0;i<liste.length();i++)	//chaque charactere de la liste
		{
			if (choix == liste[i])	//s'il sont pareil en majuscule
				return true;
		}
		return false;
	}

/*       (\_/)   fini
        ( . . ) /
###########################################*/
