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

#include "islandenor.h"
#include <fstream>

using namespace std;

//Feladat: 	        Felsoroló konstruálása
//Bemenő adatok:    string fname    - magasság értékeket tartalmazó fájl neve
//Kimenő adatok:    vector<int> v   - magasság értékeket tartalmazó tömb (adattag)
//                  int i           - feldolgozás határa (adattag)
//Tevékenység:	    A v tömb feltöltése a fájl adatai alapján, i:=0
IslandEnor::IslandEnor(const string &fname)
{
    ifstream f(fname.c_str());
    if(f.fail()) throw OPENERROR;

    int e;
    f >> e;
    while (!f.eof())
    {
        v.push_back(e);
        f >> e;
    }

    f.close();
}

//Feladat: 	        A soron következő sziget kezdetének és hosszának kiszámolása
//Bemenő adatok:    vector<int> v  - magasság értékeket tartalmazó tömb (adattag)
//                  int i          - tömb indexe (adattag)
//Kimenő adatok:    int i          - tömb indexe (adattag)
//                  bool end       - nincs már sziget (adattag)
//                  Island current - az első sziget adatai (adattag)
//Tevékenység:	    Megkeresi a következő sziget elejét,
//                  ha megtalálja, akkor kiszámolja a sziget hosszát;
//                  ha nem talál szigetet, akkor az end értékét hamisra állítja
void IslandEnor::Next()
{
     while(i<(int)v.size() && v[i]==0) ++i;

     end = i==(int)v.size();
     if(!end){
        current.start = i;
        current.length = 0;
        for(; i<(int)v.size() && v[i]>0; ++i){
            ++current.length;
        }
    }
}
