00001 #ifndef wali_witness_WITNESS_MERGE_FN_GUARD 00002 #define wali_witness_WITNESS_MERGE_FN_GUARD 1 00003 00004 /*! 00005 * @author Nicholas Kidd 00006 */ 00007 00008 #include "wali/Common.hpp" 00009 #include "wali/SemElem.hpp" 00010 #include "wali/MergeFn.hpp" 00011 #include "wali/witness/Witness.hpp" 00012 00013 namespace wali 00014 { 00015 namespace witness 00016 { 00017 class WitnessMergeFn; 00018 00019 typedef ref_ptr<WitnessMergeFn> witness_merge_fn_t; 00020 00021 class WitnessMergeFn : public MergeFn 00022 { 00023 public: 00024 WitnessMergeFn( witness_t witness_rule, merge_fn_t user_merge ); 00025 00026 virtual ~WitnessMergeFn(); 00027 00028 virtual sem_elem_t apply_f( sem_elem_t w1, sem_elem_t w2 ); 00029 00030 virtual std::ostream& print( std::ostream& o ) const; 00031 00032 virtual bool equal(merge_fn_t mf); 00033 00034 merge_fn_t get_user_merge(); 00035 00036 protected: 00037 sem_elem_t priv_do_apply( sem_elem_t w1,sem_elem_t w2 ); 00038 00039 protected: 00040 witness_t witness_rule; 00041 merge_fn_t user_merge; 00042 00043 }; // class WitnessMergeFn 00044 00045 } // namespace witness 00046 00047 } // namespace wali 00048 00049 #endif // wali_witness_WITNESS_MERGE_FN_GUARD 00050