metaSMT git
|
00001 #pragma once 00002 00003 #include "../tags/Logics.hpp" 00004 00005 #include <boost/mpl/map/map50.hpp> 00006 #include <boost/mpl/string.hpp> 00007 #include <boost/utility/enable_if.hpp> 00008 00009 namespace metaSMT { 00010 00011 namespace predtags = ::metaSMT::logic::tag; 00012 namespace bvtags = ::metaSMT::logic::QF_BV::tag; 00013 namespace arraytags = ::metaSMT::logic::Array::tag; 00014 namespace mpl = boost::mpl; 00015 00016 typedef mpl::map42< 00017 mpl::pair<predtags::true_tag, mpl::string<'t', 'r', 'u', 'e'> > 00018 , mpl::pair<predtags::false_tag, mpl::string<'f', 'a', 'l', 's', 'e'> > 00019 , mpl::pair<bvtags::bvult_tag, mpl::string<'b', 'v', 'u', 'l', 't'> > 00020 , mpl::pair<bvtags::bvneg_tag, mpl::string<'b', 'v', 'n', 'e', 'g'> > 00021 , mpl::pair<bvtags::bvnot_tag, mpl::string<'b', 'v', 'n', 'o', 't'> > 00022 00023 , mpl::pair<bvtags::bvand_tag, mpl::string<'b', 'v', 'a', 'n', 'd'> > 00024 , mpl::pair<bvtags::bvor_tag, mpl::string<'b', 'v', 'o', 'r'> > 00025 , mpl::pair<bvtags::bvnand_tag, mpl::string<'b', 'v', 'n', 'a', 'n', 'd'> > 00026 , mpl::pair<bvtags::bvnor_tag, mpl::string<'b', 'v', 'n', 'o', 'r'> > 00027 , mpl::pair<bvtags::bvxor_tag, mpl::string<'b', 'v', 'x', 'o', 'r'> > 00028 00029 , mpl::pair<bvtags::bvxnor_tag, mpl::string<'b', 'v', 'x', 'n', 'o', 'r'> > 00030 , mpl::pair<bvtags::bvadd_tag, mpl::string<'b', 'v', 'a', 'd', 'd'> > 00031 , mpl::pair<bvtags::bvsub_tag, mpl::string<'b', 'v', 's', 'u', 'b'> > 00032 , mpl::pair<bvtags::bvmul_tag, mpl::string<'b', 'v', 'm', 'u', 'l'> > 00033 , mpl::pair<bvtags::bvudiv_tag, mpl::string<'b', 'v', 'u', 'd', 'i', 'v'> > 00034 , mpl::pair<bvtags::bvsrem_tag, mpl::string<'b', 'v', 's', 'r', 'e', 'm'> > 00035 , mpl::pair<bvtags::bvsdiv_tag, mpl::string<'b', 'v', 's', 'd', 'i', 'v'> > 00036 , mpl::pair<bvtags::bvurem_tag, mpl::string<'b', 'v', 'u', 'r', 'e', 'm'> > 00037 , mpl::pair<bvtags::bvsle_tag, mpl::string<'b', 'v', 's', 'l', 'e'> > 00038 00039 , mpl::pair<bvtags::bvslt_tag, mpl::string<'b', 'v', 's', 'l', 't'> > 00040 , mpl::pair<bvtags::bvsge_tag, mpl::string<'b', 'v', 's', 'g', 'e'> > 00041 , mpl::pair<bvtags::bvsgt_tag, mpl::string<'b', 'v', 's', 'g', 't'> > 00042 , mpl::pair<bvtags::bvule_tag, mpl::string<'b', 'v', 'u', 'l', 'e'> > 00043 , mpl::pair<bvtags::bvult_tag, mpl::string<'b', 'v', 'u', 'l', 't'> > 00044 00045 , mpl::pair<bvtags::bvuge_tag, mpl::string<'b', 'v', 'u', 'g', 'e'> > 00046 , mpl::pair<bvtags::bvugt_tag, mpl::string<'b', 'v', 'u', 'g', 't'> > 00047 , mpl::pair<predtags::implies_tag, mpl::string<'i', 'm', 'p', 'l', 'i', 'e', 's'> > 00048 , mpl::pair<predtags::equal_tag, mpl::string<'='> > 00049 , mpl::pair<predtags::xor_tag, mpl::string<'x', 'o', 'r'> > 00050 00051 , mpl::pair<predtags::and_tag, mpl::string<'a', 'n', 'd'> > 00052 , mpl::pair<predtags::or_tag, mpl::string<'o', 'r'> > 00053 , mpl::pair<bvtags::bit0_tag, mpl::string<'b', 'i', 't', '0'> > 00054 , mpl::pair<bvtags::bit1_tag, mpl::string<'b', 'i', 't', '1'> > 00055 , mpl::pair<predtags::ite_tag, mpl::string<'i', 't', 'e'> > 00056 00057 , mpl::pair<predtags::not_tag, mpl::string<'n', 'o', 't'> > 00058 , mpl::pair<bvtags::bvcomp_tag, mpl::string<'b', 'v', 'c', 'o', 'm', 'p'> > 00059 , mpl::pair<bvtags::concat_tag, mpl::string<'c', 'o', 'n', 'c', 'a', 't'> > 00060 , mpl::pair<arraytags::select_tag, mpl::string<'s', 'e', 'l', 'e', 'c', 't'> > 00061 , mpl::pair<arraytags::store_tag, mpl::string<'s', 't', 'o', 'r', 'e'> > 00062 , mpl::pair<bvtags::bvshl_tag, mpl::string<'b', 'v', 's', 'h', 'l'> > 00063 , mpl::pair<bvtags::bvshr_tag, mpl::string<'b', 'v', 'l', 's', 'h', 'r'> > 00064 , mpl::pair<bvtags::bvashr_tag, mpl::string<'b', 'v', 'a', 's', 'h', 'r'> > 00065 > SMT_NameMap; 00066 00067 00068 template<typename Tag> 00069 inline typename boost::enable_if< 00070 typename mpl::has_key< SMT_NameMap, Tag>::type 00071 , std::string 00072 >::type 00073 get_tag_name(Tag const &t) { 00074 typedef typename mpl::at< SMT_NameMap, Tag >::type name; 00075 return mpl::c_str<name>::value; 00076 } 00077 00078 template<typename Tag> 00079 inline typename boost::disable_if< 00080 typename mpl::has_key< SMT_NameMap, Tag>::type 00081 , std::string 00082 >::type 00083 get_tag_name(Tag const &t) { 00084 return "unknown_name"; 00085 } 00086 00087 00088 typedef mpl::map< 00089 mpl::pair<predtags::nequal_tag, mpl::pair<predtags::not_tag, predtags::equal_tag > > 00090 , mpl::pair<predtags::nand_tag, mpl::pair<predtags::not_tag, predtags::and_tag > > 00091 , mpl::pair<predtags::nor_tag, mpl::pair<predtags::not_tag, predtags::or_tag > > 00092 , mpl::pair<predtags::xnor_tag, mpl::pair<predtags::not_tag, predtags::xor_tag > > 00093 , mpl::pair<bvtags::bvnand_tag, mpl::pair<bvtags::bvnot_tag, bvtags::bvand_tag > > 00094 , mpl::pair<bvtags::bvnor_tag, mpl::pair<bvtags::bvnot_tag, bvtags::bvor_tag > > 00095 , mpl::pair<bvtags::bvxnor_tag, mpl::pair<bvtags::bvnot_tag, bvtags::bvxor_tag > > 00096 > SMT_Negated_Map; 00097 00098 00099 00100 } // metaSMT