00001 /*============================================================================= 00002 * Product : OpenPL 00003 * File : plProduct.h 00004 * Author : Kamel Mekhnacha 00005 * Creation : Wed Nov 7 13:06:08 CET 2003 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 #ifndef _plProduct_h_ 00019 #define _plProduct_h_ 00020 00021 #include <plComputableObject.h> 00022 00023 class kplComputableObject; 00024 00028 class plProduct :public plComputableObject 00029 { 00030 public: 00031 00033 plProduct(); 00034 00036 plProduct(const plComputableObjectList &func_lis); 00037 00039 plProduct(const plProduct&pr); 00040 00042 plProduct &operator=(const plProduct &pr); 00043 00045 ~plProduct(); 00046 00050 void replace(const plVariablesConjunction &left_vars, 00051 const plVariablesConjunction &right_vars, 00052 plCndKernel &new_cnd_kernel); 00053 00057 void replace(const plVariablesConjunction &left_vars, plKernel &new_kernel); 00058 00059 ostream& write_head(ostream &out) const; 00060 00061 ostream& write_body(ostream &out) const; 00062 00063 kplComputableObject* get_root_kernel()const; 00064 00065 protected: 00066 00067 kplComputableObject *product; 00068 00069 protected: 00070 00071 plProbValue kernel_compute(const plDataValues ¶ms) const; 00072 00073 void kernel_rename(const map <kplVariable*, kplVariable *> &rename_map); 00074 00075 friend class plCndKernel; 00076 friend class plKernel; 00077 00078 }; 00079 00080 #endif