00001 #ifndef OPTFRAME_NSSEQ_HPP_
00002 #define OPTFRAME_NSSEQ_HPP_
00003
00004 #include "NS.hpp"
00005
00006 using namespace std;
00007
00008 class IteratorOutOfBound
00009 {
00010 private:
00011 int id;
00012 public:
00013 IteratorOutOfBound(int _id) :
00014 id(_id)
00015 {
00016 }
00017
00018 int getId()
00019 {
00020 return id;
00021 }
00022 };
00023
00024 template<class R, class M = OPTFRAME_DEFAULT_MEMORY>
00025 class NSIterator
00026 {
00027 public:
00028 virtual ~NSIterator()
00029 {
00030 }
00031
00032 virtual void first() = 0;
00033 virtual void next() = 0;
00034 virtual bool isDone() = 0;
00035 virtual Move<R, M>& current() = 0;
00036 };
00037
00038 template<class R, class M = OPTFRAME_DEFAULT_MEMORY>
00039 class NSSeq: public NS<R, M>
00040 {
00041 public:
00042
00043 using NS<R, M>::move;
00044
00045 virtual ~NSSeq()
00046 {
00047 }
00048
00049 virtual Move<R, M>& move(const R&) = 0;
00050
00051 virtual NSIterator<R, M>& getIterator(const R&) = 0;
00052 virtual NSIterator<R, M>& getIterator(const M&, const R& r)
00053 {
00054 return getIterator(r);
00055 }
00056
00057 virtual void print() = 0;
00058 };
00059
00060 #endif