//Készítette:       Gregorics Tibor
//Dátum:            2009.01.28.
//Feladat:          Leghosszabb sziget kereséséhez a szigetek sorszámát és hosszát felsoroló típus

#include "islandenor.h"

//Feladat: 	        Felsoroló konstruálása
//Bemenő adatok:    ifstream f     - magasság értékeket tartalmazó fájl
//Kimenő adatok:    ifstream f     - magasság értékeket tartalmazó fájl
//                  int df         - utolára beolvasott érték
//                  Island current - az első sziget adatai
//                  bool end       - nincs több sziget jelző (biztos hamis)
//Tevékenység:	    Szigetszámozás inicializálása
IslandEnor::IslandEnor(const std::string &fname)
{
    f.open(fname.c_str());
    if(f.fail()) throw OPENERROR;
    current.no = 0;
}

//Feladat: 	        A soron következő sziget sorszámának és hosszának kiszámolása
//Bemenő adatok:    ifstream f     - magasság értékeket tartalmazó fájl
//Kimenő adatok:    ifstream f     - magasság értékeket tartalmazó fájl
//                  int df         - utolára beolvasott érték
//                  Island current - az első sziget adatai
//                  bool end       - nincs több sziget jelző (biztos hamis)
//Tevékenység:	    Sziget elejének keresése (kiválasztás)
//                  Ha talál (a fájl még nem üres), akkor
//                  end:=false,
//                  a szigetsorszám növelése,
//                  sziget hosszának kiszámolása (feltételig tartó összegzés)
//                  különben end:=true.
void IslandEnor::Next()
{
    f >> df;        // az olvasás előtt (ha ez nem a legelső olvasás) a df==0
    while(!f.eof() && df==0) f >> df;
    end = f.eof();
    if(!end){
        ++current.no;
        current.length = 0;
        while(!f.eof() && df>0){
            ++current.length;
            f >> df;
        }
    }
}
