/*
author:     Martin Robinson
program:    Test the DEQUE with cryptic treatment

why:        deque is a sensitive datastructure
            great test is need to prevent memory leak
_________________________________________preprocessor
*/
#include <iostream>

using namespace std;

#include "deque.hpp"

/*
_________________________________________prototype with self explanatory title
*/

void saisie(deque<int>& d);
void afficher(deque<int>&d);
int trouverPlusLongue(deque<int>tab[3]);
void transferer(deque<int>&longue,deque<int>&pair, deque<int>&impair);
/*
_________________________________________main program
*/

int main()
{
    deque<int> tab[3];
    int plusLongue=0;

    //saisir les trois files
    for(int i=0;i<3;i++)
    {
        cout << "saisie de la file " << i+1 << endl;
        saisie(tab[i]);
    }
    
    //choisir la plus longue
    plusLongue = trouverPlusLongue(tab);

    //transfere les impairs dans la prochaine et les pairs dans la suivante
    transferer(tab[plusLongue], tab[(plusLongue+1)%3], tab[(plusLongue+2)%3]);
    
    //afficher les deux files
    for (int i=1;i<=2;i++)
        afficher(tab[(plusLongue+i)%3]);

    system("pause");
    return 0;
}

/*
_________________________________________function
*/

void saisie(deque<int>& d)
{
    int input;
    cout << "entrez plein de chiffre.. taper 0 quand vous serez tanné\n";
    cin >> input;
    while(input != 0)
    {
        d.push_front(input);
        cin >> input;
    }
}

void afficher(deque<int>&d)
{
    while(!d.empty())
        cout << d.pop_front() << " ";
    cout << endl;
}

int trouverPlusLongue(deque<int>tab[3])
{
    int plusLongue=0;
    for(int i=0;i<3;i++)
        if(tab[i].size() > tab[plusLongue].size())
            plusLongue = i;
    return plusLongue;
}

void transferer(deque<int>&longue,deque<int>&pair, deque<int>&impair)
{
    while(!longue.empty())
    {
        int num = longue.pop_back();
        if(num%2)
            impair.push_front(num);
        else
            pair.push_front(num);
    }
}
