diff options
Diffstat (limited to 'vowpalwabbit/learner.h')
-rw-r--r-- | vowpalwabbit/learner.h | 76 |
1 files changed, 38 insertions, 38 deletions
diff --git a/vowpalwabbit/learner.h b/vowpalwabbit/learner.h index 46f8222e..7cef426f 100644 --- a/vowpalwabbit/learner.h +++ b/vowpalwabbit/learner.h @@ -10,7 +10,7 @@ license as described in the file LICENSE. using namespace std; struct vw; -void return_simple_example(vw& all, void*, example* ec); +void return_simple_example(vw& all, void*, example& ec); namespace LEARNER { @@ -34,9 +34,9 @@ namespace LEARNER struct learn_data { void* data; learner* base; - void (*learn_f)(void* data, learner& base, example*); - void (*predict_f)(void* data, learner& base, example*); - void (*update_f)(void* data, learner& base, example*); + void (*learn_f)(void* data, learner& base, example&); + void (*predict_f)(void* data, learner& base, example&); + void (*update_f)(void* data, learner& base, example&); }; struct save_load_data{ @@ -48,13 +48,13 @@ namespace LEARNER struct finish_example_data{ void* data; learner* base; - void (*finish_example_f)(vw&, void* data, example*); + void (*finish_example_f)(vw&, void* data, example&); }; void generic_driver(vw* all); inline void generic_sl(void*, io_buf&, bool, bool) {} - inline void generic_learner(void* data, learner& base, example*) + inline void generic_learner(void* data, learner& base, example&) { cout << "calling generic learner\n";} inline void generic_func(void* data) {} @@ -62,25 +62,25 @@ namespace LEARNER const learn_data generic_learn_fd = {NULL, NULL, generic_learner, NULL, NULL}; const func_data generic_func_fd = {NULL, NULL, generic_func}; - template<class R, void (*T)(R*, learner& base, example* ec)> - inline void tlearn(void* d, learner& base, example* ec) - { T((R*)d, base, ec); } + template<class R, void (*T)(R&, learner& base, example& ec)> + inline void tlearn(void* d, learner& base, example& ec) + { T(*(R*)d, base, ec); } - template<class R, void (*T)(R*, io_buf& io, bool read, bool text)> + template<class R, void (*T)(R&, io_buf& io, bool read, bool text)> inline void tsl(void* d, io_buf& io, bool read, bool text) - { T((R*)d, io, read, text); } + { T(*(R*)d, io, read, text); } - template<class R, void (*T)(R*)> - inline void tfunc(void* d) { T((R*)d); } + template<class R, void (*T)(R&)> + inline void tfunc(void* d) { T(*(R*)d); } - template<class R, void (*T)(vw& all, R*, example*)> - inline void tend_example(vw& all, void* d, example* ec) - { T(all, (R*)d, ec); } + template<class R, void (*T)(vw& all, R&, example&)> + inline void tend_example(vw& all, void* d, example& ec) + { T(all, *(R*)d, ec); } - template <class T, void (*learn)(T* data, learner& base, example*), void (*predict)(T* data, learner& base, example*)> + template <class T, void (*learn)(T* data, learner& base, example&), void (*predict)(T* data, learner& base, example&)> struct learn_helper { - void (*learn_f)(void* data, learner& base, example*); - void (*predict_f)(void* data, learner& base, example*); + void (*learn_f)(void* data, learner& base, example&); + void (*predict_f)(void* data, learner& base, example&); learn_helper() { learn_f = tlearn<T,learn>; @@ -103,38 +103,38 @@ public: size_t increment; //called once for each example. Must work under reduction. - inline void learn(example* ec, size_t i=0) + inline void learn(example& ec, size_t i=0) { - ec->ft_offset += (uint32_t)(increment*i); + ec.ft_offset += (uint32_t)(increment*i); learn_fd.learn_f(learn_fd.data, *learn_fd.base, ec); - ec->ft_offset -= (uint32_t)(increment*i); + ec.ft_offset -= (uint32_t)(increment*i); } - template <class T, void (*u)(T* data, learner& base, example*)> + template <class T, void (*u)(T& data, learner& base, example&)> inline void set_learn() { learn_fd.learn_f = tlearn<T,u>; learn_fd.update_f = tlearn<T,u>; } - inline void predict(example* ec, size_t i=0) + inline void predict(example& ec, size_t i=0) { - ec->ft_offset += (uint32_t)(increment*i); + ec.ft_offset += (uint32_t)(increment*i); learn_fd.predict_f(learn_fd.data, *learn_fd.base, ec); - ec->ft_offset -= (uint32_t)(increment*i); + ec.ft_offset -= (uint32_t)(increment*i); } - template <class T, void (*u)(T* data, learner& base, example*)> + template <class T, void (*u)(T& data, learner& base, example&)> inline void set_predict() { learn_fd.predict_f = tlearn<T,u>; } - inline void update(example* ec, size_t i=0) + inline void update(example& ec, size_t i=0) { - ec->ft_offset += (uint32_t)(increment*i); + ec.ft_offset += (uint32_t)(increment*i); learn_fd.update_f(learn_fd.data, *learn_fd.base, ec); - ec->ft_offset -= (uint32_t)(increment*i); + ec.ft_offset -= (uint32_t)(increment*i); } - template <class T, void (*u)(T* data, learner& base, example*)> + template <class T, void (*u)(T& data, learner& base, example&)> inline void set_update() { learn_fd.update_f = tlearn<T,u>; @@ -142,14 +142,14 @@ public: //called anytime saving or loading needs to happen. Autorecursive. inline void save_load(io_buf& io, bool read, bool text) { save_load_fd.save_load_f(save_load_fd.data, io, read, text); if (save_load_fd.base) save_load_fd.base->save_load(io, read, text); } - template <class T, void (*sl)(T*, io_buf&, bool, bool)> + template <class T, void (*sl)(T&, io_buf&, bool, bool)> inline void set_save_load() { save_load_fd.save_load_f = tsl<T,sl>; save_load_fd.data = learn_fd.data; save_load_fd.base = learn_fd.base;} //called to clean up state. Autorecursive. - template <class T, void (*f)(T*)> + template <class T, void (*f)(T&)> void set_finish() { finisher_fd = tuple_dbf(learn_fd.data,learn_fd.base, tfunc<T, f>); } inline void finish() { @@ -164,24 +164,24 @@ public: void end_pass(){ end_pass_fd.func(end_pass_fd.data); if (end_pass_fd.base) end_pass_fd.base->end_pass(); }//autorecursive - template <class T, void (*f)(T*)> + template <class T, void (*f)(T&)> void set_end_pass() {end_pass_fd = tuple_dbf(learn_fd.data, learn_fd.base, tfunc<T,f>);} //called after parsing of examples is complete. Autorecursive. void end_examples() { end_examples_fd.func(end_examples_fd.data); if (end_examples_fd.base) end_examples_fd.base->end_examples(); } - template <class T, void (*f)(T*)> + template <class T, void (*f)(T&)> void set_end_examples() {end_examples_fd = tuple_dbf(learn_fd.data,learn_fd.base, tfunc<T,f>);} //Called at the beginning by the driver. Explicitly not recursive. void init_driver() { init_fd.func(init_fd.data);} - template <class T, void (*f)(T*)> + template <class T, void (*f)(T&)> void set_init_driver() { init_fd = tuple_dbf(learn_fd.data,learn_fd.base, tfunc<T,f>); } //called after learn example for each example. Explicitly not recursive. - inline void finish_example(vw& all, example* ec) { finish_example_fd.finish_example_f(all, finish_example_fd.data, ec);} - template<class T, void (*f)(vw& all, T*, example*)> + inline void finish_example(vw& all, example& ec) { finish_example_fd.finish_example_f(all, finish_example_fd.data, ec);} + template<class T, void (*f)(vw& all, T&, example&)> void set_finish_example() {finish_example_fd.data = learn_fd.data; finish_example_fd.finish_example_f = tend_example<T,f>;} |