
//
// To jest przykładowy kod z podrozdziału 10.11.3 „Zmienianie reprezentacji" książki 
// "Programowanie. Teoria i praktyka z wykorzystaniem C++" Bjarne'a Stroustrupa.
//

#include "std_lib_facilities.h"

//------------------------------------------------------------------------------

vector<string> month_input_tbl;    // month_input_tbl[0]=="jan"

//------------------------------------------------------------------------------

void init_input_tbl(vector<string>& tbl)
// Inicjacja wektora reprezentacji danych wejściowych.
    tbl.push_back("jan");
    tbl.push_back("feb");
    tbl.push_back("mar");
    tbl.push_back("apr");
    tbl.push_back("may");
    tbl.push_back("jun");
    tbl.push_back("jul");
    tbl.push_back("aug");
    tbl.push_back("sep");
    tbl.push_back("oct");
    tbl.push_back("nov");
    tbl.push_back("dec");
}

//------------------------------------------------------------------------------

int month_to_int(string s)
// Czy s jest nazwą miesiąca? Jeśli tak, zwraca jej indeks z zakresu <0,11>, w przeciwnym przypadku zwraca –1.
{
    for (int i=0; i<12; ++i) if (month_input_tbl[i]==s) return i;
    return -1;
}

//------------------------------------------------------------------------------

vector<string> month_print_tbl;    // month_print_tbl[0]=="January"

//------------------------------------------------------------------------------

void init_print_tbl(vector<string>& tbl)
// Inicjacja wektora reprezentacji wyjściowych.
{
    tbl.push_back("Styczeń");
    tbl.push_back("Luty");
    tbl.push_back("Marzec");
    tbl.push_back("Kwiecień");
    tbl.push_back("Maj");
    tbl.push_back("Czerwiec");
    tbl.push_back("Lipiec");
    tbl.push_back("Sierpień");
    tbl.push_back("Wrzesień");
    tbl.push_back("Październik");
    tbl.push_back("Listopad");
    tbl.push_back("Grudzień");
}

//------------------------------------------------------------------------------

string int_to_month(int i)
// Zakres numerów miesięcy: [0:11].
{
    if (i<0 || 12<=i) error("Nieprawidłowy indeks miesiąca.");
    return month_print_tbl[i];
}

//------------------------------------------------------------------------------

int main()
try
{
    // Inicjacja tablic reprezentacji:
    init_print_tbl(month_print_tbl);
    init_input_tbl(month_input_tbl);
}
catch (exception& e) {
    cerr << "Błąd: " << e.what() << '\n'; 
    return 1;
}
catch (...) {
    cerr << "Nieznany wyjątek!\n"; 
    return 2;
}

//------------------------------------------------------------------------------
