0a1 > #line 1 "examples/overlap/main.cmm" 20c21 < bool Overlap( virtual Shape&, virtual Shape&); --- > bool Overlap( Shape &cmm_0, Shape &cmm_1); 22c23 < bool Overlap_( static Square& /*a*/, static Triangle& /*b*/) --- > bool (*Overlap_cmm_getimpl( Shape &cmm_0, Shape &cmm_1))( Shape &cmm_0, Shape &cmm_1);bool Overlap_( Square& /*a*/, Triangle& /*b*/) 27c28 < bool Overlap_( static Triangle& /*a*/, static Square& /*b*/) --- > bool Overlap_( Triangle& /*a*/, Square& /*b*/) 32c33 < bool Overlap_( static Shape& /*a*/, static Square& /*b*/) --- > bool Overlap_( Shape& /*a*/, Square& /*b*/) 38c39 < bool Overlap_( static Square& /*b*/, static Shape& /*a*/) --- > bool Overlap_( Square& /*b*/, Shape& /*a*/) 97a99,218 > } > > #line 101 "examples/overlap/main.cmm.cmm-s.cpp" > // These are also in cmm's dispatch.h header. > #ifndef CMM_DISPATCH_H > #include > struct cmm_virtualfn; > struct cmm_implementation; > typedef bool (*cmm_matchfn)( const void** params); > typedef void (*cmm_fnptr)( void); > > extern cmm_virtualfn& > cmm_get_virtualfn( > const char* virt_spec); > extern cmm_implementation& > cmm_register_implementation( > const char* virt_spec, > const char* impl_spec, > cmm_matchfn fn_match, > cmm_fnptr fn_call); > extern cmm_fnptr > cmm_lookup( > cmm_virtualfn& virtfn, > const void** params, > const std::type_info** types); > extern cmm_fnptr > cmm_lookup( > cmm_virtualfn& virtfn, > const void** params, > const int* types); > struct cmm_implementation_holder > { > cmm_implementation_holder( > const char* virt_spec, > const char* impl_spec, > cmm_matchfn fn_match, > cmm_fnptr fn_call); > > ~cmm_implementation_holder(); > > cmm_implementation& handle; > }; > #endif > > bool Overlap_cmm_implcall2_2_5Shape6Square2_5Shape8Triangle( Shape &cmm_0, Shape &cmm_1) > { > return Overlap_( *static_cast /*non-template virtual param*/< Square*>( &cmm_0), *static_cast /*non-template virtual param*/< Triangle*>( &cmm_1)); > } > bool Overlap_cmm_impmatch2_2_5Shape6Square2_5Shape8Triangle( void const **cmmtypes) > { > if ( !dynamic_cast< const Square*>( static_cast< const Shape*>( cmmtypes[ 0]))) return false; > if ( !dynamic_cast< const Triangle*>( static_cast< const Shape*>( cmmtypes[ 1]))) return false; > return true; > } > static cmm_implementation_holder Overlap_2_2_5Shape6Square2_5Shape8Triangle_placeholder( > "7Overlap2_1_5Shape1_5Shape", > "8Overlap_2_2_5Shape6Square2_5Shape8Triangle", > Overlap_cmm_impmatch2_2_5Shape6Square2_5Shape8Triangle, > reinterpret_cast< cmm_fnptr>( Overlap_cmm_implcall2_2_5Shape6Square2_5Shape8Triangle)); > bool Overlap_cmm_implcall2_2_5Shape8Triangle2_5Shape6Square( Shape &cmm_0, Shape &cmm_1) > { > return Overlap_( *static_cast /*non-template virtual param*/< Triangle*>( &cmm_0), *static_cast /*non-template virtual param*/< Square*>( &cmm_1)); > } > bool Overlap_cmm_impmatch2_2_5Shape8Triangle2_5Shape6Square( void const **cmmtypes) > { > if ( !dynamic_cast< const Triangle*>( static_cast< const Shape*>( cmmtypes[ 0]))) return false; > if ( !dynamic_cast< const Square*>( static_cast< const Shape*>( cmmtypes[ 1]))) return false; > return true; > } > static cmm_implementation_holder Overlap_2_2_5Shape8Triangle2_5Shape6Square_placeholder( > "7Overlap2_1_5Shape1_5Shape", > "8Overlap_2_2_5Shape8Triangle2_5Shape6Square", > Overlap_cmm_impmatch2_2_5Shape8Triangle2_5Shape6Square, > reinterpret_cast< cmm_fnptr>( Overlap_cmm_implcall2_2_5Shape8Triangle2_5Shape6Square)); > bool Overlap_cmm_implcall2_1_5Shape2_5Shape6Square( Shape &cmm_0, Shape &cmm_1) > { > return Overlap_( *static_cast /*non-template virtual param*/< Shape*>( &cmm_0), *static_cast /*non-template virtual param*/< Square*>( &cmm_1)); > } > bool Overlap_cmm_impmatch2_1_5Shape2_5Shape6Square( void const **cmmtypes) > { > if ( !dynamic_cast< const Shape*>( static_cast< const Shape*>( cmmtypes[ 0]))) return false; > if ( !dynamic_cast< const Square*>( static_cast< const Shape*>( cmmtypes[ 1]))) return false; > return true; > } > static cmm_implementation_holder Overlap_2_1_5Shape2_5Shape6Square_placeholder( > "7Overlap2_1_5Shape1_5Shape", > "8Overlap_2_1_5Shape2_5Shape6Square", > Overlap_cmm_impmatch2_1_5Shape2_5Shape6Square, > reinterpret_cast< cmm_fnptr>( Overlap_cmm_implcall2_1_5Shape2_5Shape6Square)); > bool Overlap_cmm_implcall2_2_5Shape6Square1_5Shape( Shape &cmm_0, Shape &cmm_1) > { > return Overlap_( *static_cast /*non-template virtual param*/< Square*>( &cmm_0), *static_cast /*non-template virtual param*/< Shape*>( &cmm_1)); > } > bool Overlap_cmm_impmatch2_2_5Shape6Square1_5Shape( void const **cmmtypes) > { > if ( !dynamic_cast< const Square*>( static_cast< const Shape*>( cmmtypes[ 0]))) return false; > if ( !dynamic_cast< const Shape*>( static_cast< const Shape*>( cmmtypes[ 1]))) return false; > return true; > } > static cmm_implementation_holder Overlap_2_2_5Shape6Square1_5Shape_placeholder( > "7Overlap2_1_5Shape1_5Shape", > "8Overlap_2_2_5Shape6Square1_5Shape", > Overlap_cmm_impmatch2_2_5Shape6Square1_5Shape, > reinterpret_cast< cmm_fnptr>( Overlap_cmm_implcall2_2_5Shape6Square1_5Shape)); > inline bool (*Overlap_cmm_getimpl( Shape &cmm_0, Shape &cmm_1))( Shape &cmm_0, Shape &cmm_1) > { > static cmm_virtualfn& virtualfn = cmm_get_virtualfn( "7Overlap2_1_5Shape1_5Shape"); > typedef bool (*cmm_fntype)( Shape &cmm_0, Shape &cmm_1); > const void* params[] = { &cmm_0, &cmm_1}; > const std::type_info* types[] = { &typeid( cmm_0), &typeid( cmm_1)}; > return (cmm_fntype) (void*) cmm_lookup( virtualfn, params, types); > } > inline bool Overlap( Shape &cmm_0, Shape &cmm_1) > { > static cmm_virtualfn& virtualfn = cmm_get_virtualfn( "7Overlap2_1_5Shape1_5Shape"); > typedef bool (*cmm_fntype)( Shape &cmm_0, Shape &cmm_1); > const void* params[] = { &cmm_0, &cmm_1}; > const std::type_info* types[] = { &typeid( cmm_0), &typeid( cmm_1)}; > cmm_fntype cmm_fn=reinterpret_cast< cmm_fntype>( cmm_lookup( virtualfn, params, types)); > return cmm_fn( cmm_0, cmm_1);