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

/magnus/back_end/Group/include/PowerSeriesWP.h

Go to the documentation of this file.
00001 /*
00002  *   $Id: PowerSeriesWP.h,v 1.1 1999/11/23 22:28:06 bormotov Exp $
00003  */
00004 
00005 // Copyright (C) 1999 The New York Group Theory Cooperative
00006 // See magnus/doc/COPYRIGHT for the full notice.
00007 //
00008 // Contents: Definition of class PowerSeriesWP
00009 //
00010 // Principal Author: Dmitry Bormotov
00011 //
00012 // Status: in use
00013 //
00014 // Revision History:
00015 //
00016 
00017 
00018 #ifndef _PowerSeriesWP_H_
00019 #define _PowerSeriesWP_H_
00020 
00021 #include "FreeGroup.h"
00022 #include "Word.h"
00023 
00024 
00025 // ---------------------------- PowerSeriesWP ------------------------------ //
00026 
00027 
00028 // Alternative way to solve the word problem for a free nilpotent group
00029 
00030 class PowerSeriesWP {
00031 
00032 public:
00033 
00034   /////////////////////////////////////////////////////////////////////////
00035   //                                                                     //
00036   // Constructors:                                                       //
00037   //                                                                     //
00038   /////////////////////////////////////////////////////////////////////////
00039  
00040   PowerSeriesWP( const FreeGroup& group, int nClass );
00041 
00042   // copy constructor, destructor and operators =, == supplied by compiler.
00043 
00044 
00045   /////////////////////////////////////////////////////////////////////////
00046   //                                                                     //
00047   // Accessors:                                                          //
00048   //                                                                     //
00049   /////////////////////////////////////////////////////////////////////////
00050 
00051   bool isTrivial(const Word& w);
00052 
00053 
00054 private:
00055 
00056   /////////////////////////////////////////////////////////////////////////
00057   //                                                                     //
00058   // Data types:                                                         //
00059   //                                                                     //
00060   /////////////////////////////////////////////////////////////////////////
00061 
00062   struct State { 
00063     
00064     State( int Coef = 1, int WPos = 0, int VPos = 0, int Power = 1) { 
00065       coef = Coef; wPos = WPos; vPos = VPos, power = Power; }
00066     
00067     int coef; int wPos; int vPos; int power; 
00068   };
00069 
00070   struct Stack{ 
00071     
00072     Stack( int c ) : stackLen(0) { states = new State[c]; }
00073     
00074     ~Stack( ) { delete [] states; }
00075     
00076     void put( State s ) { states[stackLen++] = s; }
00077     
00078     void get( State& s) 
00079       { 
00080         if( stackLen > 0 )
00081           s = states[--stackLen];
00082       }
00083     
00084     int length( ) { return stackLen; }
00085     
00086     State& state() { return states[stackLen - 1]; }
00087     
00088     private:
00089     
00090     State* states;
00091     int stackLen;
00092   };
00093   
00094   /////////////////////////////////////////////////////////////////////////
00095   //                                                                     //
00096   // Private functions:                                                  //
00097   //                                                                     //
00098   /////////////////////////////////////////////////////////////////////////
00099 
00100 
00101   /////////////////////////////////////////////////////////////////////////
00102   //                                                                     //
00103   // Data members:                                                       //
00104   //                                                                     //
00105   /////////////////////////////////////////////////////////////////////////
00106 
00107   FreeGroup F;
00108   int c;
00109 };
00110 
00111 #endif

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