#define STORE( STOR, SELECTOR, SUPPORTED_BY ) struct STOR { \ using IsStore = IsStoreT; \ static constexpr const char *symbol = \ "template < typename Provider, typename Generator, typename Hasher, typename Stat >\n" \ "using _Store = ::divine::visitor::" #STOR "< Provider, Generator, Hasher, Stat >;\n"; \ static constexpr const char *key = #STOR; \ using SupportedBy = SUPPORTED_BY; \ static bool select( Meta &meta ) { \ return SELECTOR; \ static_cast< void >( meta ); \ } \ } using ForCompressions = Not< Or< algorithm::Info, algorithm::Simulate > >; STORE( NTreeStore, meta.algorithm.compression == Tree, ForCompressions ); STORE( DefaultStore, true, Any ); // ... using Stores = TypeList< NTreeStore, HcStore, DefaultStore >; // ... using Instantiate = TypeList< algorithm::Algorithms, generator::Generators, transform::Transforms, visitor::Visitors, store::Stores, topology::Topologies, statistics::Statistics >;