VectorEnumerator.h

Go to the documentation of this file.
00001 // Copyright (C) 2000 Alexander Ushakov
00002 // Contents: Definition of class VectorEnumerator
00003 //
00004 // Principal Authors: Alexander Ushakov
00005 //
00006 // Revision History:
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 //--------------------------- VectorEnumerator ------------------------------//
00022 //---------------------------------------------------------------------------//
00023 
00024 
00026 
00031 class VectorEnumerator
00032 {
00033 
00035   //                                                     //
00036   //  Constructors                                       //
00037   //                                                     //
00039   
00040  public:
00041 
00043   VectorEnumerator( ) : curLength( 0 ) { }
00044     
00045     
00046   // copy constructor, assignment operator and destructor are
00047   // supplied by compiler
00048   
00049   
00051   //                                                     //
00052   //  Accessors                                          //
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     // if sequence is not completed we need to complete it
00073     if( !seqComplete( ) )
00074       ++(*this);        
00075     
00076     return (curLength==-1); 
00077   }
00078   
00079   
00081   //                                                     //
00082   //  Debug:                                             //
00083   //                                                     //
00085   
00086   ostream& printSeq( ostream& os ) const;
00087   
00089   //                                                     //
00090   //  Internal functions:                                //
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   //  Data members                                       //
00129   //                                                     //
00131   
00132  private:
00133   
00134   int           curLength;
00135   vector< int > curVector;
00136   
00137 };
00138 
00139 
00140 
00141 #endif
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines

Generated on Mon Sep 26 18:43:45 2011 for CRyptography And Groups (CRAG) by  doxygen 1.6.1