Vowpal Wabbit
Typedefs | Functions
parse_dispatch_loop.h File Reference
#include <functional>

Go to the source code of this file.

Typedefs

using dispatch_fptr = std::function< void(vw &, v_array< example * > &)>
 

Functions

void parse_dispatch (vw &all, dispatch_fptr dispatch)
 

Typedef Documentation

◆ dispatch_fptr

using dispatch_fptr = std::function<void(vw&, v_array<example*>&)>

Definition at line 5 of file parse_dispatch_loop.h.

Function Documentation

◆ parse_dispatch()

void parse_dispatch ( vw all,
dispatch_fptr  dispatch 
)
inline

Definition at line 7 of file parse_dispatch_loop.h.

References v_array< T >::clear(), label_parser::default_label, v_array< T >::delete_v(), vw::do_reset_source, parser::done, parser::exc_ptr, VW::vw_exception::Filename(), VW::get_unused_example(), parser::in_pass_counter, VW::vw_exception::LineNumber(), lock_done(), parser::lp, vw::max_examples, vw::num_bits, vw::numpasses, vw::p, vw::pass_length, vw::passes_complete, v_array< T >::push_back(), parser::reader, reset_source(), VW::setup_examples(), v_array< T >::size(), and VW::vw_exception::what().

Referenced by LEARNER::generic_driver_onethread(), and main_parse_loop().

8 {
9  v_array<example*> examples = v_init<example*>();
10  size_t example_number = 0; // for variable-size batch learning algorithms
11 
12  try
13  {
14  while (!all.p->done)
15  {
16  examples.push_back(&VW::get_unused_example(&all)); // need at least 1 example
17  if (!all.do_reset_source && example_number != all.pass_length && all.max_examples > example_number &&
18  all.p->reader(&all, examples) > 0)
19  {
20  VW::setup_examples(all, examples);
21  example_number += examples.size();
22  dispatch(all, examples);
23  }
24  else
25  {
26  reset_source(all, all.num_bits);
27  all.do_reset_source = false;
28  all.passes_complete++;
29 
30  // setup an end_pass example
31  all.p->lp.default_label(&examples[0]->l);
32  examples[0]->end_pass = true;
33  all.p->in_pass_counter = 0;
34 
35  if (all.passes_complete == all.numpasses && example_number == all.pass_length)
36  {
37  all.passes_complete = 0;
38  all.pass_length = all.pass_length * 2 + 1;
39  }
40  dispatch(all, examples); // must be called before lock_done or race condition exists.
41  if (all.passes_complete >= all.numpasses && all.max_examples >= example_number)
42  lock_done(*all.p);
43  example_number = 0;
44  }
45 
46  examples.clear();
47  }
48  }
49  catch (VW::vw_exception& e)
50  {
51  std::cerr << "vw example #" << example_number << "(" << e.Filename() << ":" << e.LineNumber() << "): " << e.what()
52  << std::endl;
53 
54  // Stash the exception so it can be thrown on the main thread.
55  all.p->exc_ptr = std::current_exception();
56  }
57  catch (std::exception& e)
58  {
59  std::cerr << "vw: example #" << example_number << e.what() << std::endl;
60 
61  // Stash the exception so it can be thrown on the main thread.
62  all.p->exc_ptr = std::current_exception();
63  }
64  lock_done(*all.p);
65  examples.delete_v();
66 }
std::exception_ptr exc_ptr
Definition: parser.h:108
void(* default_label)(void *)
Definition: label_parser.h:12
const char * Filename() const
Definition: vw_exception.cc:37
const char * what() const noexcept override
Definition: vw_exception.cc:35
uint32_t num_bits
Definition: global_data.h:398
size_t size() const
Definition: v_array.h:68
parser * p
Definition: global_data.h:377
int(* reader)(vw *, v_array< example *> &examples)
Definition: parser.h:70
void reset_source(vw &all, size_t numbits)
Definition: parser.cc:126
void push_back(const T &new_ele)
Definition: v_array.h:107
void clear()
Definition: v_array.h:88
size_t numpasses
Definition: global_data.h:451
size_t passes_complete
Definition: global_data.h:452
size_t pass_length
Definition: global_data.h:450
bool do_reset_source
Definition: global_data.h:498
int LineNumber() const
Definition: vw_exception.cc:39
void delete_v()
Definition: v_array.h:98
example & get_unused_example(vw *all)
Definition: parser.cc:664
size_t max_examples
Definition: global_data.h:539
uint32_t in_pass_counter
Definition: parser.h:83
bool done
Definition: parser.h:90
label_parser lp
Definition: parser.h:102
void lock_done(parser &p)
Definition: parser.cc:571
void setup_examples(vw &all, v_array< example *> &examples)
Definition: parser.cc:673