00001 00002 // FILE orderctrl.h 00003 00004 00005 #ifndef INCLUDED_ORDCTRL_H 00006 #define INCLUDED_ORDCTRL_H 00007 00008 00009 #include "odesolv.h" 00010 00011 00017 class ORDER_CTRL : private NAME 00018 { 00019 00020 public: 00021 00022 NAME::GetName; 00023 00032 ORDER_CTRL( int kmax, const string & name ); 00033 00041 virtual int CompOrder( PtrODESolver Solver ) = 0; 00042 00047 int GetMaxOrder() const; 00048 00056 void SetCurOrder( int k ); 00057 00064 int GetCurOrder() const; 00065 00067 virtual ~ORDER_CTRL() {;} 00068 00069 00070 private: 00071 00073 int CurOrder; 00074 00076 int MaxOrder; 00077 00078 }; 00079 00080 00082 typedef ORDER_CTRL* PtrOrderCtrl; 00083 00084 00085 inline ORDER_CTRL :: ORDER_CTRL( int kmax, const string & name ) : 00086 NAME(name), 00087 CurOrder(kmax), MaxOrder(kmax) 00088 { 00089 assert( kmax>0 ); 00090 } 00091 00092 00093 inline int ORDER_CTRL :: GetMaxOrder() const 00094 { 00095 assert( MaxOrder>0 ); 00096 return MaxOrder; 00097 } 00098 00099 00100 inline void ORDER_CTRL :: SetCurOrder( int k ) 00101 { 00102 assert( k>0 && k <= GetMaxOrder() ); 00103 CurOrder = k; 00104 } 00105 00106 00107 inline int ORDER_CTRL :: GetCurOrder() const 00108 { 00109 assert( CurOrder > 0 ); 00110 return CurOrder; 00111 } 00112 00113 #endif