Point3D const StatusStructure::process_event(Event* event, EventStructure& event_structure) { Point3D result(0.f, 0.f, -1.f); Event::EventType type(event->get_type()); switch (type) { case Event::START: { StartEvent* start_event(reinterpret_cast<StartEvent*>(event)); //std::cout << "Processing " << *start_event << std::endl; add_line(start_event, event_structure); } break; case Event::END: { EndEvent* end_event(reinterpret_cast<EndEvent*>(event)); //std::cout << "Processing " << *end_event << std::endl; remove_line(end_event, event_structure); } break; case Event::INTERSECTION: { IntersectionEvent* intersection_event(reinterpret_cast<IntersectionEvent*>(event)); //std::cout << "Processing " << *intersection_event << std::endl; swap(intersection_event, event_structure); result = intersection_event->get_position(); } break; default: break; } // std::cout << std::endl; return result; }
static uword perfmon_periodic_process (vlib_main_t * vm, vlib_node_runtime_t * rt, vlib_frame_t * f) { perfmon_main_t *pm = &perfmon_main; f64 now; uword *event_data = 0; uword event_type; int i; while (1) { if (pm->state == PERFMON_STATE_RUNNING) vlib_process_wait_for_event_or_clock (vm, pm->timeout_interval); else vlib_process_wait_for_event (vm); now = vlib_time_now (vm); event_type = vlib_process_get_events (vm, (uword **) & event_data); switch (event_type) { case PERFMON_START: for (i = 0; i < vec_len (event_data); i++) start_event (pm, now, event_data[i]); break; /* Handle timeout */ case ~0: handle_timeout (vm, pm, now); break; default: clib_warning ("Unexpected event %d", event_type); break; } vec_reset_length (event_data); } return 0; /* or not */ }