WitnessMergeFn.hpp

Go to the documentation of this file.
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