void CyclingAgenda::pop(Derivation& d) {
	assert(!this->empty());

	while (current_agenda().empty()) advance_index();
	Debug::log(5) << "Popped from agenda #" << _current_index << "\n";
	current_agenda().pop(d);
	advance_index();
}
示例#2
0
文件: srv_log.c 项目: valisc/freeciv
/**************************************************************************
  Log player tech messages.
**************************************************************************/
void real_tech_log(const char *file, const char *function, int line,
                   enum log_level level, bool notify,
                   const struct player *pplayer, struct advance *padvance,
                   const char *msg, ...)
{
  char buffer[500];
  char buffer2[500];
  va_list ap;

  if (!valid_advance(padvance) || advance_by_number(A_NONE) == padvance) {
    return;
  }

  fc_snprintf(buffer, sizeof(buffer), "%s::%s (want %d, dist %d) ",
              player_name(pplayer),
              advance_name_by_player(pplayer, advance_number(padvance)),
              pplayer->ai_common.tech_want[advance_index(padvance)],
              num_unknown_techs_for_goal(pplayer, advance_number(padvance)));

  va_start(ap, msg);
  fc_vsnprintf(buffer2, sizeof(buffer2), msg, ap);
  va_end(ap);

  cat_snprintf(buffer, sizeof(buffer), "%s", buffer2);
  if (notify) {
    notify_conn(NULL, NULL, E_AI_DEBUG, ftc_log, "%s", buffer);
  }
  do_log(file, function, line, FALSE, level, "%s", buffer);
}
示例#3
0
/**************************************************************************
  Log player tech messages.
**************************************************************************/
void TECH_LOG(int level, const struct player *pplayer,
              struct advance *padvance, const char *msg, ...)
{
  char buffer[500];
  char buffer2[500];
  va_list ap;
  int minlevel = MIN(LOGLEVEL_TECH, level);

  if (!valid_advance(padvance) || advance_by_number(A_NONE) == padvance) {
    return;
  }

  if (BV_ISSET(pplayer->debug, PLAYER_DEBUG_TECH)) {
    minlevel = LOG_TEST;
  } else if (minlevel > fc_log_level) {
    return;
  }

  my_snprintf(buffer, sizeof(buffer), "%s::%s (want %d, dist %d) ", 
              player_name(pplayer),
              advance_name_by_player(pplayer, advance_number(padvance)), 
              pplayer->ai_data.tech_want[advance_index(padvance)], 
              num_unknown_techs_for_goal(pplayer, advance_number(padvance)));

  va_start(ap, msg);
  my_vsnprintf(buffer2, sizeof(buffer2), msg, ap);
  va_end(ap);

  cat_snprintf(buffer, sizeof(buffer), "%s", buffer2);
  if (BV_ISSET(pplayer->debug, PLAYER_DEBUG_TECH)) {
    notify_conn(NULL, NULL, E_AI_DEBUG, ftc_log, "%s", buffer);
  }
  freelog(minlevel, "%s", buffer);
}
示例#4
0
void *rbuf_pop_front(struct ringbuffer *rb, void *pop_value, os_size_t len)
{
    haddock_assert(rb && rb->buf && pop_value && len == rb->hdr.blk_size);
    if (rb->hdr.len == 0)
        return NULL;
    
    haddock_memcpy(pop_value, (char *)rb->buf + len * rb->hdr.start, len);
    advance_index(rb->hdr.start, rb->hdr.capacity);
    rb->hdr.len -= 1;

    return pop_value; 
}
示例#5
0
os_int8 rbuf_push_back(struct ringbuffer *rb, void *data, os_size_t len)
{
    haddock_assert(rb && rb->buf && data && len == rb->hdr.blk_size);
    if (rb->hdr.len == rb->hdr.capacity)
        return -1;

    haddock_memcpy((char *)rb->buf + len * rb->hdr.end, data, len);
    advance_index(rb->hdr.end, rb->hdr.capacity);
    rb->hdr.len += 1;
    
    return 0;
}