Добавил:
Studfiles2
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Лабораторная работа 2 / Sketcher02 / container / ExternalGraphIterator
.h// 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"
#include "container/Iterator.h"
#include "container/Ribble.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 */