+class wxMacFunctor
+{
+public :
+ wxMacFunctor(){}
+ virtual ~wxMacFunctor() {}
+ virtual void* operator()() = 0 ;
+ static void* CallBackProc(void *param)
+ {
+ wxMacFunctor* f = (wxMacFunctor*) param ;
+ void *result = (*f)() ;
+ return result ;
+ }
+} ;
+
+template<typename classtype,typename param1type>
+class wxMacObjectFunctor1 : public wxMacFunctor
+{
+ typedef void (classtype::*function)( param1type p1 ) ;
+ typedef void (classtype::*ref_function)( const param1type& p1 ) ;
+public :
+ wxMacObjectFunctor1( classtype *obj , function f , param1type p1 ) :
+ wxMacFunctor( )
+ {
+ m_object = obj ;
+ m_function = f ;
+ m_param1 = p1 ;
+ }
+
+ wxMacObjectFunctor1( classtype *obj , ref_function f , param1type p1 ) :
+ wxMacFunctor( )
+ {
+ m_object = obj ;
+ m_refFunction = f ;
+ m_param1 = p1 ;
+ }
+
+ ~wxMacObjectFunctor1() {}
+
+ virtual void* operator()()
+ {
+ (m_object->*m_function)(m_param1) ;
+ return NULL ;
+ }
+private :
+ classtype* m_object ;
+ param1type m_param1 ;
+ union
+ {
+ function m_function ;
+ ref_function m_refFunction ;
+ } ;
+} ;
+
+template<typename classtype, typename param1type>
+void* wxMacMPRemoteCall( classtype *object , void (classtype::*function)( param1type p1 ) , param1type p1 )
+{
+ wxMacObjectFunctor1<classtype,param1type> params(object,function,p1) ;
+ void *result =
+ MPRemoteCall( wxMacFunctor::CallBackProc , ¶ms , kMPOwningProcessRemoteContext ) ;
+ return result ;
+}
+
+template<typename classtype, typename param1type>
+void* wxMacMPRemoteCall( classtype *object , void (classtype::*function)( const param1type& p1 ) , param1type p1 )
+{
+ wxMacObjectFunctor1<classtype,param1type> params(object,function,p1) ;
+ void *result =
+ MPRemoteCall( wxMacFunctor::CallBackProc , ¶ms , kMPOwningProcessRemoteContext ) ;
+ return result ;
+}
+
+template<typename classtype, typename param1type>
+void* wxMacMPRemoteGUICall( classtype *object , void (classtype::*function)( param1type p1 ) , param1type p1 )
+{
+ wxMutexGuiLeave() ;
+ void *result = wxMacMPRemoteCall( object , function , p1 ) ;
+ wxMutexGuiEnter() ;
+ return result ;
+}
+
+template<typename classtype, typename param1type>
+void* wxMacMPRemoteGUICall( classtype *object , void (classtype::*function)( const param1type& p1 ) , param1type p1 )
+{
+ wxMutexGuiLeave() ;
+ void *result = wxMacMPRemoteCall( object , function , p1 ) ;
+ wxMutexGuiEnter() ;
+ return result ;
+}
+