00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef RTOPPACK_UNARY_FUNC_PTR_DECL_HPP
00030 #define RTOPPACK_UNARY_FUNC_PTR_DECL_HPP
00031
00032 #include "RTOpPack_RTOpT.hpp"
00033
00034 namespace RTOpPack {
00035
00043 template<class Scalar>
00044 class TOpUnaryFuncPtr : public RTOpT<Scalar> {
00045 public:
00046
00048 typedef void (*unary_func_ptr_t) ( const Scalar x[], int x_dim, Scalar out[] );
00049
00051 TOpUnaryFuncPtr();
00052
00054 TOpUnaryFuncPtr(
00055 unary_func_ptr_t unary_func_ptr
00056 ,const std::string &op_name
00057 );
00058
00070 void initialize(
00071 unary_func_ptr_t unary_func_ptr
00072 ,const std::string &op_name
00073 );
00074
00084 void set_initialized(
00085 unary_func_ptr_t *unary_func_ptr = NULL
00086 ,std::string *op_name = NULL
00087 );
00088
00091
00093 const char* op_name() const;
00095 void apply_op(
00096 const int num_vecs, const SubVectorT<Scalar> sub_vecs[]
00097 ,const int num_targ_vecs, const MutableSubVectorT<Scalar> targ_sub_vecs[]
00098 ,ReductTarget *reduct_obj
00099 ) const;
00100
00102
00103 private:
00104
00105 std::string op_name_;
00106 unary_func_ptr_t unary_func_ptr_;
00107
00108
00109 TOpUnaryFuncPtr(const TOpUnaryFuncPtr&);
00110 TOpUnaryFuncPtr& operator=(const TOpUnaryFuncPtr&);
00111
00112 };
00113
00114 }
00115
00116 #endif // RTOPPACK_UNARY_FUNC_PTR_DECL_HPP