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
00030 #ifndef RTOPPACK_UNARY_FUNC_PTR_DECL_HPP
00031 #define RTOPPACK_UNARY_FUNC_PTR_DECL_HPP
00032
00033 #include "RTOpPack_RTOpT.hpp"
00034
00035 namespace RTOpPack {
00036
00044 template<class Scalar>
00045 class TOpUnaryFuncPtr : public RTOpT<Scalar> {
00046 public:
00047
00049 typedef void (*unary_func_ptr_t) ( const Scalar x[], int x_dim, Scalar out[] );
00050
00052 TOpUnaryFuncPtr();
00053
00055 TOpUnaryFuncPtr(
00056 unary_func_ptr_t unary_func_ptr
00057 ,const std::string &op_name
00058 );
00059
00071 void initialize(
00072 unary_func_ptr_t unary_func_ptr
00073 ,const std::string &op_name
00074 );
00075
00085 void set_initialized(
00086 unary_func_ptr_t *unary_func_ptr = NULL
00087 ,std::string *op_name = NULL
00088 );
00089
00092
00094 const char* op_name() const;
00096 void apply_op(
00097 const int num_vecs, const ConstSubVectorView<Scalar> sub_vecs[]
00098 ,const int num_targ_vecs, const SubVectorView<Scalar> targ_sub_vecs[]
00099 ,ReductTarget *reduct_obj
00100 ) const;
00101
00103
00104 private:
00105
00106 std::string op_name_;
00107 unary_func_ptr_t unary_func_ptr_;
00108
00109
00110 TOpUnaryFuncPtr(const TOpUnaryFuncPtr&);
00111 TOpUnaryFuncPtr& operator=(const TOpUnaryFuncPtr&);
00112
00113 };
00114
00115 }
00116
00117 #endif // RTOPPACK_UNARY_FUNC_PTR_DECL_HPP