PermutationEnumerator.h

Go to the documentation of this file.
00001 
00002 #ifndef _PermutationEnumerator_H_
00003 #define _PermutationEnumerator_H_
00004 
00005 #include "VectorEnumerator.h"
00006 #include "Permutation.h"
00007 
00008 
00009 //---------------------------------------------------------------------------//
00010 //------------------------ PermutationEnumerator ----------------------------//
00011 //---------------------------------------------------------------------------//
00012 
00013 
00014 class PermutationEnumerator : public VectorEnumerator
00015 {
00016 
00018   //                                                     //
00019   //  Constructors                                       //
00020   //                                                     //
00022   
00023  public:
00024 
00026   PermutationEnumerator( int L ) : theLength(L), theUsedElements( L , false ) { }
00027 
00028 
00030   PermutationEnumerator operator= ( const PermutationEnumerator& );
00031   
00032   
00034   PermutationEnumerator( const PermutationEnumerator& );
00035 
00037   //                                                     //
00038   //  Accessors                                          //
00039   //                                                     //
00041   
00042  public:
00043 
00044   Permutation getPermutation( ) const { return Permutation( getSeq( ).begin( ) , getSeq( ).begin( )+theLength ); }
00045 
00046   virtual bool seqOK            ( ) const { 
00047     int last_value = getSeq( )[getLength( )-1];
00048     return !theUsedElements[last_value]  &&  getLength( )<=theLength;
00049   }
00050 
00051   virtual bool seqLimit         ( ) const {
00052     return getLength( ) > theLength;
00053   }
00054   virtual bool seqComplete      ( ) const {
00055     return theLength==getLength( ); 
00056   }
00057 
00058   virtual int  start (         ) const {
00059     return 0;
00060   }
00061   virtual int  next  ( int cur ) const {
00062     return cur+1;
00063   }
00064   virtual bool finish( int cur ) const {
00065     return cur>=theLength;
00066   }
00067 
00068   virtual void stepTo( ) { 
00069     int last_value = getSeq( )[getLength( )-1];
00070     theUsedElements[last_value] = true;
00071   }
00072   virtual void stepBack( int cur ) { 
00073     int last_value = getSeq( )[getLength( )];
00074     theUsedElements[last_value] = false;
00075   }
00076 
00077 
00079   //                                                     //
00080   //  Data members                                       //
00081   //                                                     //
00083   
00084  private:
00085   
00087   int theLength;
00088   
00090   vector< bool > theUsedElements;
00091 };
00092 
00093 #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