1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 | #include <iostream> #include <boost/mpl/front.hpp> #include <boost/mpl/pop_front.hpp> #include <boost/mpl/push_front.hpp> #include <boost/mpl/push_back.hpp> #include <boost/mpl/pop_back.hpp> #include <boost/mpl/fold.hpp> #include <boost/mpl/transform.hpp> #include <boost/mpl/vector.hpp> #include <boost/mpl/set.hpp> #include <boost/mpl/back_inserter.hpp> #include <boost/fusion/include/set.hpp> #include <boost/fusion/include/mpl.hpp> /**********definition of nodes**************/ struct node_base {}; struct node_a : public node_base { node_a(){std::cout << "node_a::Ctor"<< std::endl;} }; struct node_b : public node_base { node_b(){std::cout << "node_b::Ctor"<< std::endl;} }; struct node_c : public node_base { node_c(){std::cout << "node_c::Ctor"<< std::endl;} }; struct empty_node {}; /***********definition of table*************/ struct my_table : ::boost::mpl::vector3< ::boost::mpl::vector3<node_a, node_b, node_c> ,::boost::mpl::vector3<node_b, node_c, node_a> ,::boost::mpl::vector3<node_c, node_a, node_b> > {}; /*************meta-functions**************/ struct make_tag_vector_ { template<class NODE1, class NODE2> struct apply { typedef typename ::boost::mpl::vector<NODE1>::type type; }; }; struct fold_table { template<class LIST, class VECTOR> struct apply { typedef typename ::boost::mpl::front<VECTOR>::type parent; typedef typename ::boost::mpl::pop_front<VECTOR>::type children; typedef typename ::boost::mpl::pop_back<children>::type tmp; typedef typename ::boost::mpl::push_front<tmp, empty_node>::type right_shift_children; typedef typename ::boost::mpl::transform< children , right_shift_children , make_tag_vector_ , ::boost::mpl::back_inserter<LIST> >::type type; }; }; template<class TABLE> struct create_table { typedef typename ::boost::mpl::fold< TABLE , ::boost::mpl::vector0<> , fold_table >::type type; }; /**********process table**************/ typedef create_table<my_table>::type table_type; typedef ::boost::mpl::reverse_fold< table_type , ::boost::mpl::set0<> , ::boost::mpl::insert< ::boost::mpl::placeholders::_1 , ::boost::mpl::front< ::boost::mpl::placeholders::_2> > >::type node_set_type; /**********result of node_set_type is :**************/ // struct node_c // struct node_a // struct node_b /**********convert to fusion set type**************/ typedef ::boost::fusion::result_of::as_set<node_set_type> fusion_set_type; /**********create fusion set instance**************/ fusion_set_type::type instance; int main( int argc, char* argv[] ) { } |
I2luY2x1ZGUgPGlvc3RyZWFtPgoKI2luY2x1ZGUgPGJvb3N0L21wbC9mcm9udC5ocHA+CiNpbmNsdWRlIDxib29zdC9tcGwvcG9wX2Zyb250LmhwcD4KI2luY2x1ZGUgPGJvb3N0L21wbC9wdXNoX2Zyb250LmhwcD4KI2luY2x1ZGUgPGJvb3N0L21wbC9wdXNoX2JhY2suaHBwPgojaW5jbHVkZSA8Ym9vc3QvbXBsL3BvcF9iYWNrLmhwcD4KI2luY2x1ZGUgPGJvb3N0L21wbC9mb2xkLmhwcD4KI2luY2x1ZGUgPGJvb3N0L21wbC90cmFuc2Zvcm0uaHBwPgojaW5jbHVkZSA8Ym9vc3QvbXBsL3ZlY3Rvci5ocHA+CiNpbmNsdWRlIDxib29zdC9tcGwvc2V0LmhwcD4KI2luY2x1ZGUgPGJvb3N0L21wbC9iYWNrX2luc2VydGVyLmhwcD4KI2luY2x1ZGUgPGJvb3N0L2Z1c2lvbi9pbmNsdWRlL3NldC5ocHA+CiNpbmNsdWRlIDxib29zdC9mdXNpb24vaW5jbHVkZS9tcGwuaHBwPgoKLyoqKioqKioqKipkZWZpbml0aW9uIG9mIG5vZGVzKioqKioqKioqKioqKiovCnN0cnVjdCBub2RlX2Jhc2UKe307CnN0cnVjdCBub2RlX2EgOiBwdWJsaWMgbm9kZV9iYXNlCnsKbm9kZV9hKCl7c3RkOjpjb3V0IDw8ICJub2RlX2E6OkN0b3IiPDwgc3RkOjplbmRsO30KfTsKc3RydWN0IG5vZGVfYiA6IHB1YmxpYyBub2RlX2Jhc2UKewpub2RlX2IoKXtzdGQ6OmNvdXQgPDwgIm5vZGVfYjo6Q3RvciI8PCBzdGQ6OmVuZGw7fQp9OwpzdHJ1Y3Qgbm9kZV9jIDogcHVibGljIG5vZGVfYmFzZQp7Cm5vZGVfYygpe3N0ZDo6Y291dCA8PCAibm9kZV9jOjpDdG9yIjw8IHN0ZDo6ZW5kbDt9Cn07CgpzdHJ1Y3QgZW1wdHlfbm9kZSB7fTsKCi8qKioqKioqKioqKmRlZmluaXRpb24gb2YgdGFibGUqKioqKioqKioqKioqLwpzdHJ1Y3QgbXlfdGFibGUgOiA6OmJvb3N0OjptcGw6OnZlY3RvcjM8Cjo6Ym9vc3Q6Om1wbDo6dmVjdG9yMzxub2RlX2EsIG5vZGVfYiwgbm9kZV9jPgosOjpib29zdDo6bXBsOjp2ZWN0b3IzPG5vZGVfYiwgbm9kZV9jLCBub2RlX2E+Ciw6OmJvb3N0OjptcGw6OnZlY3RvcjM8bm9kZV9jLCBub2RlX2EsIG5vZGVfYj4KPiB7fTsKCi8qKioqKioqKioqKioqbWV0YS1mdW5jdGlvbnMqKioqKioqKioqKioqKi8Kc3RydWN0IG1ha2VfdGFnX3ZlY3Rvcl8Kewp0ZW1wbGF0ZTxjbGFzcyBOT0RFMSwgY2xhc3MgTk9ERTI+CnN0cnVjdCBhcHBseQp7CiAgICB0eXBlZGVmIHR5cGVuYW1lIDo6Ym9vc3Q6Om1wbDo6dmVjdG9yPE5PREUxPjo6dHlwZSB0eXBlOwp9Owp9OwoKc3RydWN0IGZvbGRfdGFibGUKewp0ZW1wbGF0ZTxjbGFzcyBMSVNULCBjbGFzcyBWRUNUT1I+CnN0cnVjdCBhcHBseQp7CiAgICB0eXBlZGVmIHR5cGVuYW1lIDo6Ym9vc3Q6Om1wbDo6ZnJvbnQ8VkVDVE9SPjo6dHlwZSBwYXJlbnQ7CiAgICB0eXBlZGVmIHR5cGVuYW1lIDo6Ym9vc3Q6Om1wbDo6cG9wX2Zyb250PFZFQ1RPUj46OnR5cGUgY2hpbGRyZW47CiAgICB0eXBlZGVmIHR5cGVuYW1lIDo6Ym9vc3Q6Om1wbDo6cG9wX2JhY2s8Y2hpbGRyZW4+Ojp0eXBlIHRtcDsKICAgIHR5cGVkZWYgdHlwZW5hbWUgOjpib29zdDo6bXBsOjpwdXNoX2Zyb250PHRtcCwgZW1wdHlfbm9kZT46OnR5cGUgcmlnaHRfc2hpZnRfY2hpbGRyZW47CgogICAgdHlwZWRlZiB0eXBlbmFtZSA6OmJvb3N0OjptcGw6OnRyYW5zZm9ybTwKICAgICAgICBjaGlsZHJlbgogICAgICAgICwgcmlnaHRfc2hpZnRfY2hpbGRyZW4KICAgICAgICAsIG1ha2VfdGFnX3ZlY3Rvcl8KICAgICAgICAsIDo6Ym9vc3Q6Om1wbDo6YmFja19pbnNlcnRlcjxMSVNUPgogICAgPjo6dHlwZSB0eXBlOwp9Owp9OwoKdGVtcGxhdGU8Y2xhc3MgVEFCTEU+CnN0cnVjdCBjcmVhdGVfdGFibGUKewp0eXBlZGVmIHR5cGVuYW1lIDo6Ym9vc3Q6Om1wbDo6Zm9sZDwgCiAgICBUQUJMRQogICAgLCA6OmJvb3N0OjptcGw6OnZlY3RvcjA8PgogICAgLCBmb2xkX3RhYmxlCj46OnR5cGUgdHlwZTsKfTsKCi8qKioqKioqKioqcHJvY2VzcyB0YWJsZSoqKioqKioqKioqKioqLwp0eXBlZGVmIGNyZWF0ZV90YWJsZTxteV90YWJsZT46OnR5cGUgdGFibGVfdHlwZTsKCnR5cGVkZWYgOjpib29zdDo6bXBsOjpyZXZlcnNlX2ZvbGQ8CnRhYmxlX3R5cGUKLCA6OmJvb3N0OjptcGw6OnNldDA8PgosIDo6Ym9vc3Q6Om1wbDo6aW5zZXJ0PAogICAgOjpib29zdDo6bXBsOjpwbGFjZWhvbGRlcnM6Ol8xCiAgICAsIDo6Ym9vc3Q6Om1wbDo6ZnJvbnQ8IDo6Ym9vc3Q6Om1wbDo6cGxhY2Vob2xkZXJzOjpfMj4KPgo+Ojp0eXBlIG5vZGVfc2V0X3R5cGU7CgovKioqKioqKioqKnJlc3VsdCBvZiBub2RlX3NldF90eXBlIGlzIDoqKioqKioqKioqKioqKi8KLy8gc3RydWN0IG5vZGVfYwovLyBzdHJ1Y3Qgbm9kZV9hCi8vIHN0cnVjdCBub2RlX2IKCi8qKioqKioqKioqY29udmVydCB0byBmdXNpb24gc2V0IHR5cGUqKioqKioqKioqKioqKi8KdHlwZWRlZiA6OmJvb3N0OjpmdXNpb246OnJlc3VsdF9vZjo6YXNfc2V0PG5vZGVfc2V0X3R5cGU+IGZ1c2lvbl9zZXRfdHlwZTsKCi8qKioqKioqKioqY3JlYXRlIGZ1c2lvbiBzZXQgaW5zdGFuY2UqKioqKioqKioqKioqKi8KZnVzaW9uX3NldF90eXBlOjp0eXBlIGluc3RhbmNlOwoKaW50IG1haW4oIGludCBhcmdjLCBjaGFyKiBhcmd2W10gKQp7Cn0K
-
upload with new input
-
result: Success time: 0s memory: 2724 kB returned value: 0
node_c::Ctor node_a::Ctor node_b::Ctor


