Скачиваний:
10
Добавлен:
01.05.2014
Размер:
2.02 Кб
Скачать
// Copyright (C) 1991 - 1999 Rational Software Corporation

#if defined (_MSC_VER) && (_MSC_VER >= 1000)
#pragma once
#endif
#ifndef _INC_EXTERNALGRAPHITERATOR_474088CA0242_INCLUDED
#define _INC_EXTERNALGRAPHITERATOR_474088CA0242_INCLUDED
//////////////////////////////////////////////////////////////////////////
#include "container/Graph.h"
//////////////////////////////////////////////////////////////////////////
template<class T> class Graph;
template<class T> class Iterator;
template<class T> class Ribble;
//////////////////////////////////////////////////////////////////////////
//внешний итератор

template<class T>
class ExternalGraphIterator : public Iterator<T>
{
public:
    
    virtual Ribble<T>* first()
    {
        return _iterator->first();
    }

	
    virtual Ribble<T>* last()
    {
        return _iterator->last();
    }

    
    virtual Ribble<T>* next()
    {
        return _iterator->next();
    }

	
    virtual Ribble<T>* previous()
    {
        return _iterator->previous();
    }

    
    ExternalGraphIterator(const Graph<T>* graph)
    {
        attach(graph);
        cout<<"[ExternalGraphIterator] external iterator created\n";
    }

    
    virtual bool hasNext()
    {
        return _iterator->hasNext();
    }

	
    virtual bool hasPrevious()
    {
        return _iterator->hasPrevious();
    }

    //присоединить итератор к графу
    
    void attach(const Graph<T>* graph)
    {
        _graph = graph;
        _iterator = _graph->getIterator();
    }

    // количество ребер в графе, по которому бегаем
	
    int getGraphRibbleCount()
    {
        return _graph->getRibbleCount();
    }
private:
    //указатель на обходимый граф
    
    const Graph<T>* _graph;

    //указатель на используемый итератор
    
    Iterator<T>* _iterator;
};
//////////////////////////////////////////////////////////////////////////
#endif /* _INC_EXTERNALGRAPHITERATOR_474088CA0242_INCLUDED */
Соседние файлы в папке container