#include "wyraz.h"
#include <iostream>
#include <cstdlib>
#include <string>
#include <map>
#include <set>
#include <algorithm>
#include <iostream>
#include <fstream>
#include <functional>

using namespace std;

/* Program tworzy slownik wyrazow pojawiajacych sie w tekscie.
   Plik do odczytu mozemy podac jeko argument programu, np.:
   slownik.exe plik.txt

   Jezeli nie podamy pliku wejsciowego wowczas slowa czytane sa ze standardowego strumiena wejsciowego, np:
   slownik.exe < plik.txt
   lub
   more plik.txt | slownik.exe
   */

int main(int argc, char *argv[])
{
	ifstream plik;
	if(argc==2)
	{
		plik.open(argv[1]);
		if(!plik) 
		{
			cerr << "Blad! Nie moge odczytac pliku: " << argv[1] << endl;
			return 1;
		}
	}

	// Powiazanie strumienia z ktorego bedziemy czytac ze strumieniem weksciowym cin lub ze strumieniem z pliku
	istream &is = (plik.is_open()) ? plik : cin;    // do powiazania strumieni mozna tez uzyc metody rdbuf(), np: istrem is(cin.rdbuf());

	Wyraz w;

	// Tworzymy slownik
	map<Wyraz,int> slownik;
	while(is >> w) slownik[w]++;

	//Wyswietlamy slownik
	map<Wyraz,int>::iterator it;
	for(it=slownik.begin(); it!=slownik.end(); it++)
		cout << (*it).first << " " <<  (*it).second << endl;

	if(plik.is_open()) plik.close();

	return 0;
}