예제 #1
0
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;
}
예제 #2
0
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 */
}