Main Page   Class Hierarchy   Compound List   File List   Compound Members   File Members  

/magnus/back_end/Matrix/include/HomomorphismBuilder.h

Go to the documentation of this file.
00001 /*
00002  *   $Id: HomomorphismBuilder.h,v 1.3 1999/11/24 22:17:03 bormotov Exp $
00003  */
00004 
00005 // Copyright (C) 1994 The New York Group Theory Cooperative
00006 // See magnus/doc/COPYRIGHT for the full notice.
00007 
00008 // Contents: Definition of the HomomorphismBuilder class.
00009 //
00010 // Principal Authors: Dmitry Bormotov
00011 //
00012 // Status: in development
00013 //
00014 // Revision History:
00015 //
00016 
00017 
00018 #ifndef _HOMOMORPHISM_BUILDER_H_
00019 #define _HOMOMORPHISM_BUILDER_H_
00020 
00021 
00022 #include "FPGroup.h"
00023 #include "Matrix.h"
00024 
00025 
00026 // ------------------------- HomomorphismBuilder ----------------------------//
00027 
00028 
00029 template <class R> class HomomorphismBuilder 
00030 {
00031 
00032  public:
00033 
00034 
00035   /////////////////////////////////////////////////////////////////////////
00036   //                                                                     //
00037   // Constructors:                                                       //
00038   //                                                                     //
00039   /////////////////////////////////////////////////////////////////////////
00040 
00041   HomomorphismBuilder(FPGroup& G, int sizeOfMatrix = 2) : group( G ), 
00042     matrixSize( sizeOfMatrix ), bDone( false ), bStart( false ),
00043     homomorphism( G.numberOfGenerators() ), 
00044     invertedMatrices( G.numberOfGenerators() )
00045   {
00046   #if SAFETY > 0
00047     if( sizeOfMatrix < 2 )
00048       error("HomomorphismBuilder::HomomorphismBuilder( FPGroup&, int ) :"
00049             "size of matrix must be 2 or more.");
00050     if( G.numberOfGenerators() == 0 ) 
00051       error("HomomorphismBuilder::HomomorphismBuilder( FPGroup&, int ) :"
00052             "The group must be non trivial.");
00053   #endif  
00054   }
00055   
00056 
00057   /////////////////////////////////////////////////////////////////////////
00058   //                                                                     //
00059   // Activation members:                                                 //
00060   //                                                                     //
00061   /////////////////////////////////////////////////////////////////////////
00062 
00063   void startComputation( ) 
00064   {
00065   #if SAFETY > 0   
00066     if ( bStart )
00067       error("void HomomorphismBuilder::startComputation( ) : "
00068             "the computation has been already started.");
00069   #endif
00070   
00071     bStart = true;
00072     bDone = false;
00073 
00074   #ifdef DEBUG
00075     iterCount = 0;
00076   #endif
00077   }  
00078 
00079 
00080   void continueComputation( );
00081 
00082 
00083   /////////////////////////////////////////////////////////////////////////
00084   //                                                                     //
00085   // Status Queries:                                                     //
00086   //                                                                     //
00087   /////////////////////////////////////////////////////////////////////////
00088 
00089   bool done( ) const { return bDone; }
00090 
00091 
00092   /////////////////////////////////////////////////////////////////////////
00093   //                                                                     //
00094   // Accessors:                                                          //
00095   //                                                                     //
00096   /////////////////////////////////////////////////////////////////////////
00097 
00098   VectorOf< Matrix<R> > getHomomorphism( ) const 
00099   {
00100   #if SAFETY > 0
00101     if ( !bDone )
00102       error("VectorOf< Matrix<R> > HomomorphismBuilder::getHomomorpism() const"
00103             " : tried to get result before the computation is finished.");
00104   #endif
00105 
00106     return homomorphism;
00107   }
00108 
00109 
00110   /////////////////////////////////////////////////////////////////////////
00111   //                                                                     //
00112   // Data Members:                                                       //
00113   //                                                                     //
00114   /////////////////////////////////////////////////////////////////////////
00115 
00116   bool bDone;
00117   bool bStart;
00118   
00119   VectorOf< Matrix<R> > homomorphism;
00120   VectorOf< Matrix<R> > invertedMatrices;
00121   int matrixSize;
00122   FPGroup& group;
00123 
00124 
00125   /////////////////////////////////////////////////////////////////////////
00126   //                                                                     //
00127   // Private methods:                                                    //
00128   //                                                                     //
00129   /////////////////////////////////////////////////////////////////////////
00130     
00131   void finishComputation( ) 
00132   {
00133     bDone = true;
00134     bStart = false;
00135     
00136   #ifdef DEBUG
00137     cout << iterCount << endl;
00138   #endif
00139   }
00140   
00141 
00142   /////////////////////////////////////////////////////////////////////////
00143   //                                                                     //
00144   //  Debugging stuff:                                                   //
00145   //                                                                     //
00146   /////////////////////////////////////////////////////////////////////////
00147 
00148 #ifdef DEBUG
00149 
00150   int iterCount;
00151 
00152   friend int main( );
00153 
00154 #endif
00155 
00156 };
00157 
00158 
00159 
00160 #endif
00161 
00162 
00163 

Generated at Tue Jun 19 09:49:37 2001 for Magnus Classes by doxygen1.2.6 written by Dimitri van Heesch, © 1997-2001