Main Page | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Class Members

plComputableObject.h

00001 /*=============================================================================
00002  * Product        : OpenPL 
00003  * File           : plComputableObject.h
00004  * Author         : Juan-Manuel Ahuactzin
00005  * Creation       : Wed Jun  6 12:01:46 2001
00006  *
00007  *=============================================================================
00008  *     (c) Copyright 2000, Centre National de la Recherche Scientifique,
00009  *                              all rights reserved
00010  *=============================================================================
00011  *
00012  *------------------------- Description ---------------------------------------
00013  *   
00014  *   
00015  *-----------------------------------------------------------------------------
00016 */
00017 
00018 
00019 #ifndef _plComputableObject_h_
00020 #define _plComputableObject_h_
00021 
00022 #include <plObject.h>
00023 #include <plMath.h>
00024 #include <plSignature.h>
00025 #include <plVariablesConjunction.h>
00026 #include <plValues.h>
00027 #include <plDataValues.h>
00028 
00029 /*****************************************************************************
00030  *                           External Classes
00031  *****************************************************************************/
00032 class kplComputableObject;
00033 class kplVariable;
00034 
00035 
00036 /*****************************************************************************
00037  *                           Classes Definitions
00038  *****************************************************************************/
00039 
00045 class plComputableObjectList : public plObject
00046 {
00047   //friend class plComputableObject;
00048 public:
00049   typedef list <kplComputableObject *> kplCOL;
00050   typedef kplCOL::iterator iterator;
00051   typedef kplCOL::const_iterator const_iterator;    
00052   
00053 protected :
00054   kplCOL internList;
00055 public :
00056   plComputableObjectList() {}
00057   
00058   plComputableObjectList(const plComputableObject & obj);
00059   
00060   plComputableObjectList(const plComputableObjectList & l);
00061 
00062   ~plComputableObjectList();
00063 
00064   plComputableObjectList &operator=(const plComputableObjectList & l);
00065   
00066   plComputableObjectList operator^(const plComputableObject &f1) const;
00067 
00068   plComputableObjectList operator*(const plComputableObject &f1) const;
00069   
00070   plComputableObjectList operator*(const plComputableObjectList &r_list) const;
00071   
00072   const plComputableObjectList& operator*=(const plComputableObject &f1);
00073   
00074   const plComputableObjectList& operator*=(const plComputableObjectList &r_list);
00075   
00076   void push_back(kplComputableObject * o);
00077   void push_back(const plComputableObject & o); 
00078   
00079   iterator begin() {return internList.begin();}
00080   const_iterator begin() const {return internList.begin();}
00081   
00082   iterator end() {return internList.end();}
00083   const_iterator end() const {return internList.end();}
00084   
00085   unsigned int size() const {return internList.size();}
00086 
00087   void clear();
00088 };
00089 
00090 
00091 
00094 class plComputableObject : public plObject
00095 {
00096   
00097  protected:
00098   
00099   plSignature signature;
00100 
00102   list <kplVariable *> head_variables;
00103 
00107   unsigned int variables_size;
00108 
00110   list <kplVariable*> search_variables;
00111   
00113   list <kplVariable*> known_variables;
00114 
00118   mutable plDataValues head_variables_data_values;
00119 
00123   mutable plDataValues known_variables_data_values;
00124 
00127   virtual plProbValue kernel_compute(const plDataValues &params) const=0;
00128 
00130   virtual void kernel_rename(const map 
00131                  <kplVariable*, kplVariable *> &rename_map)=0;
00132 
00134   virtual void Output(ostream &out) const;
00135   
00136 public:
00138   void set_variables(const list <kplVariable*> search_vars, 
00139              const list <kplVariable*> known_vars);
00140 
00143   void set_variables(const list <kplVariable*> search_vars);
00144   
00145   
00146 
00148   bool is(const plComputableObjectType& type) const;
00149 
00150 
00153   bool is_some_on_signature(const plSignature& prototype_signature) const;
00154 
00156   plVariablesConjunction get_head_plvariables() const;
00157 
00159   plVariablesConjunction get_search_plvariables() const;
00160 
00163   plVariablesConjunction get_known_plvariables() const;
00164 
00166   plComputableObject();
00167 
00169   virtual ~plComputableObject();
00170 
00173   virtual plProbValue compute(const plValues &parameter)const;
00174 
00177   virtual plProbValue compute(int *parameter)const;
00178 
00181   virtual plProbValue compute(unsigned int *parameter)const;
00182   
00185   virtual plProbValue compute(long int *parameter)const;
00186   
00189   virtual plProbValue compute(float *parameter)const;
00190   
00193   virtual plProbValue compute(double *parameter)const;
00194 
00197   virtual plProbValue compute(long double *parameter)const;
00198 
00201   virtual plProbValue compute(int parameter)const;
00202 
00203   /* *Computes the value of the function, by using a single unsigned
00204       integer parameter. */
00205   virtual plProbValue compute(unsigned int parameter)const;
00206 
00209   virtual plProbValue compute(long int parameter)const;
00210 
00213   virtual plProbValue compute(float parameter)const;
00214 
00217   virtual plProbValue compute(double parameter)const;
00218 
00221 #ifndef RAVI_INTERFACE
00222   virtual plProbValue compute(long double parameter)const;
00223 #endif
00224 
00227   virtual plProbValue compute(const vector <int> &parameter)const;
00228 
00231   virtual plProbValue compute(const vector <unsigned int> &parameter)const;
00232   
00235   virtual plProbValue compute(const vector <long int> &parameter)const;
00236   
00239   virtual plProbValue compute(const vector <float> &parameter)const;
00240   
00243   virtual plProbValue compute(const vector <double> &parameter)const;
00244 
00247   virtual plProbValue compute(const vector <long double> &parameter)const;
00248 
00252   virtual kplComputableObject*  get_root_kernel()const =0 ;
00253 
00257 #ifndef RAVI_INTERFACE
00258   const list <kplVariable*> get_head_variables() const;
00259 #endif
00260 
00262   bool rename(const plVariablesConjunction &new_variables);
00263 
00265   virtual ostream& write_head(ostream &out) const=0;
00266 
00268   virtual ostream& write_body(ostream &out) const = 0;
00269 
00270 
00271   plComputableObjectList operator^(const plComputableObject &f2)const;
00272 
00273   plComputableObjectList operator^(const plComputableObjectList &v_list)const ;
00274 
00275   plComputableObjectList operator*(const plComputableObject &f2)const ;
00276 
00277   plComputableObjectList operator*(const plComputableObjectList &v_list)const;
00278 
00282   virtual void replace(const plVariablesConjunction &left_vars, const plVariablesConjunction &right_vars, 
00283            plCndKernel &new_cnd_kernel) = 0;
00284   
00288   virtual void replace(const plVariablesConjunction &left_vars, plKernel &new_kernel) = 0;
00289 
00290 };
00291 
00292 
00293 
00294 
00295 ostream & operator<<(ostream & out, const plComputableObjectList & klist);
00296 
00297 
00298 
00299 #endif
00300 

Generated on Fri Apr 1 10:58:12 2005 for ProBT by  doxygen 1.4.1