MOOSE - Multiscale Object Oriented Simulation Environment
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
ProcOpFunc.h
Go to the documentation of this file.
1 /**********************************************************************
2 ** This program is part of 'MOOSE', the
3 ** Messaging Object Oriented Simulation Environment.
4 ** Copyright (C) 2003-2009 Upinder S. Bhalla. and NCBS
5 ** It is made available under the terms of the
6 ** GNU Lesser General Public License version 2.1
7 ** See the file COPYING.LIB for the full notice.
8 **********************************************************************/
9 
10 #ifndef _PROC_OPFUNC_H
11 #define _PROC_OPFUNC_H
12 
18 /*
19 class ProcOpFuncBase: public OpFunc
20 {
21  public:
22  // This key extra function does Process calls.
23  virtual void proc( char* obj, const Eref& e, ProcPtr p ) const = 0;
24  private:
25 };
26 
27 template< class T > class ProcOpFunc: public ProcOpFuncBase
28 {
29  public:
30  ProcOpFunc( void ( T::*func )( const Eref& e, ProcPtr ) )
31  : func_( func )
32  {;}
33 
34  bool checkFinfo( const Finfo* s ) const {
35  return dynamic_cast< const SrcFinfo1< ProcPtr >* >( s );
36  }
37 
38  bool checkSet( const SetGet* s ) const {
39  return dynamic_cast< const SetGet1< ProcPtr >* >( s );
40  }
41 
42  bool strSet( const Eref& tgt,
43  const string& field, const string& arg ) const {
44  ProcInfo p;
45  stringstream ss( arg );
46  double dt = 1;
47  ss >> dt;
48  if ( dt <= 0 )
49  dt = 1;
50  p.dt = dt;
51  return SetGet1< ProcPtr >::set( tgt.objId(), field, &p );
52  }
53 
54  void op( const Eref& e, const double* buf ) const {
55  Conv< ProcPtr > arg1( buf );
56  (reinterpret_cast< T* >( e.data() )->*func_)( e, *arg1 ) ;
57  }
58 
59 
60  // This key extra function does Process calls.
61  void proc( char* obj, const Eref& e, ProcPtr p ) const {
62  ( reinterpret_cast< T* >( obj )->*func_)( e, p );
63  }
64 
65  string rttiType() const {
66  return "void";
67  }
68 
69  private:
70  void ( T::*func_ )( const Eref& e, ProcPtr );
71 };
72 */
73 template< class T > class ProcOpFunc: public EpFunc1< T, ProcPtr >
74 {
75  public:
76  ProcOpFunc( void ( T::*func )( const Eref& e, ProcPtr ) )
77  : EpFunc1< T, ProcPtr >( func )
78  {;}
79 
80  string rttiType() const {
81  return "const ProcInfo*";
82  }
83 };
84 
85 #endif //_PROC_OPFUNC_H
Definition: EpFunc.h:64
string rttiType() const
Definition: ProcOpFunc.h:80
Definition: Eref.h:26
ProcOpFunc(void(T::*func)(const Eref &e, ProcPtr))
Definition: ProcOpFunc.h:76