metaSMT git

metaSMT/support/SMT_Tag_Mapping.hpp

Go to the documentation of this file.
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
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines