cisst-saw
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
mtsFunctionWrite.h
Go to the documentation of this file.
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /* ex: set filetype=cpp softtabstop=4 shiftwidth=4 tabstop=4 cindent expandtab: */
3 
4 /*
5 
6  Author(s): Peter Kazanzides, Anton Deguet
7 
8  (C) Copyright 2007-2014 Johns Hopkins University (JHU), All Rights Reserved.
9 
10 --- begin cisst license - do not edit ---
11 
12 This software is provided "as is" under an open source license, with
13 no warranty. The complete license can be found in license.txt and
14 http://www.cisst.org/cisst/license.txt.
15 
16 --- end cisst license ---
17 */
18 
19 
25 #ifndef _mtsFunctionWrite_h
26 #define _mtsFunctionWrite_h
27 
28 
33 
34 // Always include last
36 
38 public:
40  typedef mtsExecutionResult(mtsFunctionWrite::*ActionType)(const mtsGenericObject &) const;
41 protected:
45 
46 #ifndef SWIG
47  template <typename _userType, bool>
49  public:
50  static mtsExecutionResult Call(mtsFunctionWrite::ActionType executeMethod, const mtsFunctionWrite * function, const _userType & argument) {
51  mtsGenericObjectProxyRef<_userType> argumentWrapped(argument);
52  return (function->*executeMethod)(argumentWrapped);
53  }
54  };
55  template <typename _userType>
56  class ConditionalWrap<_userType, true> {
57  public:
58  static mtsExecutionResult Call(mtsFunctionWrite::ActionType executeMethod, const mtsFunctionWrite * function, const _userType & argument) {
59  return (function->*executeMethod)(argument);
60  }
61  };
62 #endif
63 
64 public:
67  mtsFunctionWrite(const bool isProxy = false);
68 
70  virtual ~mtsFunctionWrite();
71 
72  // documented in base class
73  bool Detach(void);
74 
75  // documented in base class
76  bool IsValid(void) const;
77 
83  bool Bind(CommandType * command);
84 
88  { return ExecuteGeneric(argument); }
89 
90  mtsExecutionResult ExecuteGeneric(const mtsGenericObject & argument) const;
91  mtsExecutionResult ExecuteBlockingGeneric(const mtsGenericObject & argument) const;
92 
93 #ifndef SWIG
94 
95  template <class _userType>
96  mtsExecutionResult operator()(const _userType & argument) const
97  { return Execute(argument); }
98 
99  template <class _userType>
100  mtsExecutionResult Execute(const _userType & argument) const {
102  }
103 
104  template <class _userType>
105  mtsExecutionResult ExecuteBlocking(const _userType & argument) const {
107  }
108 #endif
109 
111  CommandType * GetCommand(void) const;
112 
114  const mtsGenericObject * GetArgumentPrototype(void) const;
115 
117  void ToStream(std::ostream & outputStream) const;
118 
119 };
120 
121 #endif // _mtsFunctionWrite_h
122 
#define CISST_EXPORT
Definition: cmnExportMacros.h:50
mtsExecutionResult ExecuteGeneric(const mtsGenericObject &argument) const
mtsExecutionResult Execute(const _userType &argument) const
Definition: mtsFunctionWrite.h:100
virtual void ToStream(std::ostream &outputStream) const =0
Base class for data object in cisstMultiTask.
Definition: mtsGenericObject.h:56
Defines a base class for a command with one argument.
mtsExecutionResult operator()(const _userType &argument) const
Definition: mtsFunctionWrite.h:96
Definition: mtsFunctionBase.h:38
Defines a base function object to allow heterogeneous containers of functions.
mtsCommandWriteBase CommandType
Definition: mtsFunctionWrite.h:39
virtual bool Detach(void)=0
Definition: mtsCommandWriteBase.h:40
static mtsExecutionResult Call(mtsFunctionWrite::ActionType executeMethod, const mtsFunctionWrite *function, const _userType &argument)
Definition: mtsFunctionWrite.h:50
mtsExecutionResult(mtsFunctionWrite::* ActionType)(const mtsGenericObject &) const
Definition: mtsFunctionWrite.h:40
Forward declarations and #define for cisstMultiTask.
Definition: mtsGenericObjectProxy.h:46
Definition: mtsExecutionResult.h:34
mtsExecutionResult ExecuteBlockingGeneric(const mtsGenericObject &argument) const
Rules of exporting.
static mtsExecutionResult Call(mtsFunctionWrite::ActionType executeMethod, const mtsFunctionWrite *function, const _userType &argument)
Definition: mtsFunctionWrite.h:58
Definition: mtsFunctionWrite.h:37
mtsExecutionResult ExecuteBlocking(const _userType &argument) const
Definition: mtsFunctionWrite.h:105
CommandType * Command
Definition: mtsFunctionWrite.h:44
Definition: mtsFunctionWrite.h:48
mtsExecutionResult operator()(const mtsGenericObject &argument) const
Definition: mtsFunctionWrite.h:87
virtual bool IsValid(void) const =0