int main() {
	std::string line;

	Events events;

	while (std::getline(std::cin, line)) {
		std::vector<std::string> elements;
		boost::split(elements, line, boost::is_any_of("/"));
		if (elements.size() != 4) {
			std::cerr << "Warning: elements.size() != 4" << std::endl;
			continue;
		}
		Event e;
		e.player = elements[0];
		e.map = elements[1];
		e.lapTime = parseLapTime(elements[2]);
		e.date = parseDate(elements[3]);

		events.push_back(e);
	}

	std::cout << "Number of events: " << events.size() << std::endl;

	std::sort(events.begin(), events.end());

	std::cout << "Last event: " << events.back() << std::endl;

	Ranking ranking = getRankings(events, boost::posix_time::time_from_string("2014-01-03 22:00:00.000"));
	for ( unsigned i = 0; i < 20 && i < ranking.size(); ++i ) {
		std::cout << i+1 << ".: " << ranking[i].getPlayer() << ", Time: " << ranking[i].getTotalLapTime() << std::endl;
	}

	std::cout << "Current leader = " << ranking[0].getTotalLapTime() << std::endl;
}
예제 #2
0
// Create the tmp_insns table to hold all the instructions for the function-to-be-listed and all the instructions of all
// the functions that are mentioned in events.
static void
gather_instructions(const SqlDatabase::TransactionPtr tx, int func_id, const Events &events)
{
    std::set<std::string> func_ids;
    func_ids.insert(StringUtility::numberToString(func_id));
    for (Events::const_iterator ei=events.begin(); ei!=events.end(); ++ei)
        func_ids.insert(StringUtility::numberToString(ei->second.func_id));
    std::string sql = "create temporary table tmp_insns as"
                      " select * from semantic_instructions"
                      " where func_id in ("+StringUtility::join_range(", ", func_ids.begin(), func_ids.end())+")";
    tx->execute(sql);
}
예제 #3
0
파일: services.cpp 프로젝트: artpaul/acto
//-------------------------------------------------------------------------------------------------
void TimerActor::delete_event(const acto::actor_ref& actor) {
	for (Events::iterator i = m_events.begin(); i != m_events.end(); i++) {
		if ((*i)->actor == actor) {
			// 1. Удалить системный таймер
			//
			// NOTE: Так как последний параметр INVALID_HANDLE_VALUE, то
			//       функция возвратит управление только тогда, когда завершится
			//       выполнение соответствующей TimerProc.
			::DeleteTimerQueueTimer( m_timers, (*i)->timer, INVALID_HANDLE_VALUE );
			// 2. Удалить экземпляр события
			delete (*i);
			// 3. Удалить элемент из списка
			m_events.erase( i );
			// -
			break;
		}
	}
}
예제 #4
0
void EventQueue::appendEvents(Events& events)
{
    OpenThreads::ScopedLock<OpenThreads::Mutex> lock(_eventQueueMutex);
    _eventQueue.insert(_eventQueue.end(), events.begin(), events.end());
}
예제 #5
0
 const_iterator begin () const
 {
     return m_events.begin();
 }
예제 #6
0
 iterator begin ()
 {
     return m_events.begin();
 }
int main(int argc, char *argv[]) {
	int c;
	bool use_cors = false;
	std::string remote_str, filename;
	sockaddr_in local, remote;
	timeval tm_start, tm_end;
	uint32_t delay = DEFAULT_DELAY;
	uint8_t relaynum = DEFAULT_RLNUM;

	// default arguments
	memset(&local, 0, sizeof(local));
	local.sin_family = AF_INET;
	local.sin_port = htons(DEFAULT_PORT);
	local.sin_addr.s_addr = htonl(INADDR_ANY);

	replay = 1;

	while((c = getopt(argc, argv, "cd:l:n:p:r:")) != -1) {
		switch(c) {
		case 'c':
			use_cors = true;
			break;
		case 'd':
			delay = atoi(optarg);
			break;
		case 'l':
			local.sin_port = htons(atoi(optarg));
			break;
		case 'n':
			replay = atoi(optarg);
			break;
		case 'p':
			relaynum = atoi(optarg);
			break;
		case 'r':
			remote_str = optarg;
			break;
		case '?':
			PrintUsage();
			break;
		}
	}
	if (optind != argc - 1) {
		cout << "must specify an input file" << endl;
		PrintUsage();
		return -1;
	}  
	filename = argv[optind];

	if (remote_str.empty()) {
		cout << "must specify remote addr -- ip:port" << endl;
		PrintUsage();
		return -1;
	}
	size_t pos = remote_str.find(":");
	memset(&remote, 0, sizeof(remote));
	remote.sin_family = AF_INET;
	remote.sin_port = htons(atoi(remote_str.substr(pos+1).c_str()));
	remote.sin_addr.s_addr = inet_addr(remote_str.substr(0, pos).c_str());

	cout << "use_cors: " << (use_cors ? "yes" : "no") << endl;
	cout << "local addr: " << sockaddr2str(local) << endl;
	cout << "remote addr: " << sockaddr2str(remote) << endl;
	cout << "replay time: " << replay << endl;
	cout << "delay requirement: " << delay << "ms" << endl;
	cout << "relay path number: " << (int)relaynum << endl;
	cout << "input file: " << filename << endl; 

	Events events;
	if (ReadRtpData(filename, &events) < 0) {
		return -1;
	}

	int sock;
	if ((sock = InitSock(local)) < 0) {
		return -1;
	}

  int flags;
  if ((flags = fcntl(sock, F_GETFL, 0)) < 0) {
    cerr << "fcntl(GETFL) error" << endl;
    return -1;
  }

  if (fcntl(sock, F_SETFL, flags | O_NONBLOCK) < 0) {
    cerr << "fcntl(SETFL) error" << endl;
    return -1;
  }

	Requirement req;
	memset(&req, 0, sizeof(req));
	req.delay = delay;
	req.relaynum = relaynum;

	Feature feature;
	memset(&feature, 0, sizeof(feature));
	feature.delay = delay;
	feature.significance = 0;
	feature.seculevel = 0;
	feature.channelnum = relaynum;

	vector<string> rsparams, mmparams;
	rsparams.push_back("SimpleRlysltr");
	rsparams.push_back("rsltr.conf");
	rsparams.push_back("300000");	// probe interval
	rsparams.push_back("300");	// timeout seconds

	mmparams.push_back("SimpleMpathManager");

	CorsSocket *cors_sk = NULL;
  if (use_cors) {
    cors_sk = new CorsSocket(sock, rsparams, mmparams);
	  cors_sk->init(req, remote.sin_addr.s_addr, remote.sin_port);
  }

	pthread_t recv_tid, timer_tid;
	if (use_cors) {
		pthread_create(&recv_tid, NULL, recv_thread, cors_sk);
	}
	// pthread_create(&timer_tid, NULL, timer_thread, &events);

	int index = 0;
  int sended = 0;
  int target = 0;
  timeval tm_used, tm_begin;
  // gettimeofday(&tm_begin, NULL);
	Events::iterator it;
	for (; replay > 0; replay--) {
		for (it = events.begin(); it != events.end(); ++it) {
			timeval timeout = it->delta;
			select(0, NULL, NULL, NULL, &timeout);
      if (use_cors) {
        cors_sk->sendto(it->pkt, 
                       it->len,
                       remote.sin_addr.s_addr,
                       remote.sin_port,
                       feature);
      } else {
        sendto(sock, it->pkt, it->len, 0, 
               (sockaddr *)&remote, sizeof(remote));
      }
      sended++;
		}
	}
#if 0
	while (true) {
		pthread_mutex_lock(&timer_mutex);
		while (timer_sig == -1) {
			pthread_cond_wait(&timer_cond, &timer_mutex);
		}
		index = timer_sig;
		timer_sig = -1;
		pthread_mutex_unlock(&timer_mutex);
		
    if (index == -2) {
      target = events.size();
    } else {
      target = index + 1;
    }
    for (int i = sended; i < target; i++) {
		  //gettimeofday(&tm_start, NULL);
      // tm_used = CalcDelta(tm_start, tm_begin);
      //cout << "#### main() send " << i << " at " << tm_start.tv_sec
      //     << "." << setw(6) << setfill('0') << tm_start.tv_usec << endl;
      if (use_cors) {
		    // gettimeofday(&tm_start, NULL);
        // tm_used = CalcDelta(tm_start, tm_begin);
        // cout << "#### main() send " << i << " at " << tm_start.tv_sec
        //     << "." << setw(6) << setfill('0') << tm_start.tv_usec << endl;
        // Arguments *arg = new Arguments;
        // arg->cors = &cors_sk;
        // arg->buf = events[i].pkt;
        // arg->len = events[i].len;
        // arg->addr = &remote;
        // arg->feature = &feature;
        // pthread_t send_tid;
        // pthread_create(&send_tid, NULL, send_thread, arg);
        cors_sk.sendto(events[i].pkt,
                       events[i].len,
                       remote.sin_addr.s_addr,
                       remote.sin_port,
                       feature);
        
		    // gettimeofday(&tm_end, NULL);
        // cout << "#### main() finish send at " << tm_end.tv_sec
        //      << "." << setw(6) << setfill('0') << tm_end.tv_usec << endl;
        // tm_used = CalcDelta(tm_end, tm_start);
        // cout << "#### main() time_used = " << tm_used.tv_sec
        //      << "." << setw(6) << setfill('0') << tm_used.tv_usec << endl;
      } else {
		    // gettimeofday(&tm_start, NULL);
        // tm_used = CalcDelta(tm_start, tm_begin);
        // cout << "#### main() send " << i << " at " << tm_start.tv_sec
        //     << "." << setw(6) << setfill('0') << tm_start.tv_usec << endl;
        sendto(sock, events[i].pkt,
               events[i].len, 0,
               (sockaddr *)&remote, sizeof(remote));
		    // gettimeofday(&tm_end, NULL);
        // cout << "#### main() finish send at " << tm_end.tv_sec
        //      << "." << setw(6) << setfill('0') << tm_end.tv_usec << endl;
        // tm_used = CalcDelta(tm_end, tm_start);
        // cout << "#### main() time_used = " << tm_used.tv_sec
        //      << "." << setw(6) << setfill('0') << tm_used.tv_usec << endl;
      }
      sended++;
    }
    if (index == -2) 
      break;

		// if (index == -2) {
    //   for (int i = sended; i < events.size)
    //   break;
    // } else {
    //   for (int i = sended; i <= index; i++) {
		// 	  if (use_cors)
		// 		  cors_sk.sendto(events[i].pkt,
		// 					           events[i].len,
		// 					           remote.sin_addr.s_addr,
		// 					           remote.sin_port,
		// 					           feature);
		// 	  else
		// 		  sendto(sock, events[i].pkt,
		// 			       events[i].len, 0,
		// 			       (sockaddr *)&remote, sizeof(remote));
    //     sended++;
    //   }
		// }
		// cout << "time_used main = " 
		//	    << tm_end.tv_usec - tm_start.tv_usec << endl;
	}
#endif
  cout << "total send: " << sended << " packets" << endl;
	if (use_cors)
    cors_sk->close();
	close(sock);

	return 0;
}