VectorEnumerator.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #ifndef _VECTORENUMERATOR_H_
00011 #define _VECTORENUMERATOR_H_
00012
00013
00014 #include <vector>
00015 #include <iostream>
00016
00017 using namespace std;
00018
00019
00020
00021
00022
00023
00024
00026
00031 class VectorEnumerator
00032 {
00033
00035
00036
00037
00039
00040 public:
00041
00043 VectorEnumerator( ) : curLength( 0 ) { }
00044
00045
00046
00047
00048
00049
00051
00052
00053
00055
00056 public:
00057
00059 VectorEnumerator& operator++( );
00060
00061
00063 vector< int > operator* ( );
00064
00065
00067 bool end( ) {
00068
00069 if( curLength==-1 )
00070 return true;
00071
00072
00073 if( !seqComplete( ) )
00074 ++(*this);
00075
00076 return (curLength==-1);
00077 }
00078
00079
00081
00082
00083
00085
00086 ostream& printSeq( ostream& os ) const;
00087
00089
00090
00091
00093
00094 protected:
00095
00097 virtual bool seqOK ( ) const = 0;
00099 virtual bool seqLimit ( ) const = 0;
00101 virtual bool seqComplete ( ) const = 0;
00102
00104 virtual int start ( ) const = 0;
00106 virtual int next ( int cur ) const = 0;
00108 virtual bool finish( int cur ) const = 0;
00109
00111 int getLength( ) const { return curLength; }
00113 const vector< int >& getSeq ( ) const { return curVector; }
00114
00116
00119 virtual void stepTo( ) { }
00121
00124 virtual void stepBack( int cur ) { }
00125
00127
00128
00129
00131
00132 private:
00133
00134 int curLength;
00135 vector< int > curVector;
00136
00137 };
00138
00139
00140
00141 #endif