Пример #1
0
 // For function pointers, the manager is trivial
 static inline any_pointer
 manager(any_pointer function_ptr,
         functor_manager_operation_type op,
         function_ptr_tag)
 {
   if (op == clone_functor_tag)
     return function_ptr;
   else
     return make_any_pointer(static_cast<void (*)()>(0));
 }
Пример #2
0
        static inline any_pointer
        get(any_pointer f, functor_manager_operation_type op)
        {
          switch (op) {
          case clone_functor_tag: return f;

          case destroy_functor_tag:
            return make_any_pointer(reinterpret_cast<void*>(0));

          case check_functor_type_tag:
            {
              std::type_info* t = static_cast<std::type_info*>(f.obj_ptr);
              return BOOST_FUNCTION_COMPARE_TYPE_ID(typeid(F), *t)?
                f
                : make_any_pointer(reinterpret_cast<void*>(0));
            }
          }

          // Clears up a warning with GCC 3.2.3
          return make_any_pointer(reinterpret_cast<void*>(0));
        }
 /* Dispatch to an appropriate manager based on whether we have a
    function pointer or a function object pointer. */
 static any_pointer
 manage(any_pointer functor_ptr, functor_manager_operation_type op)
 {
     if (op == check_functor_type_tag) {
         std::type_info* type =
             static_cast<std::type_info*>(functor_ptr.obj_ptr);
         return (BOOST_FUNCTION_COMPARE_TYPE_ID(typeid(Functor), *type)?
                 functor_ptr
                 : make_any_pointer(reinterpret_cast<void*>(0)));
     }
     else {
         typedef typename get_function_tag<functor_type>::type tag_type;
         return manager(functor_ptr, op, tag_type());
     }
 }