예제 #1
0
int fifo_fetch(fifo_t *fifo, uint64_t key, void **ptr) {
  struct fifo_page *page;

  if (!htable_get(fifo->t, key, (void **)&page)) {
    *ptr = page->data;
    return 0;
  }

  if (fifo->active < fifo->nmemb) {
    page = fifo->page + fifo->active;
    page->data = fifo->data + fifo->active * fifo->size;
    page->key = key;
    fifo->active++;
    htable_set(fifo->t, key, (void *)page);
    *ptr = page->data;
    return 1;
  }

  page = fifo->page + fifo->head;
  if (++fifo->head >= fifo->nmemb)
    fifo->head = 0;
  htable_del(fifo->t, page->key);
  htable_set(fifo->t, key, page);
  page->key = key;
  *ptr = page->data;
  return 1;
}
예제 #2
0
int main(void) {
  int value;
  bool done, result;
  char *cmd, *key, *end, *str_value;
  char input[256];
  struct htable* tbl = htable_new();
  if(tbl == NULL) {
    printf("ERROR: tbl == NULL\n");
    return 1;
  }

  while(fgets(input, sizeof(input), stdin)) {
    end = strstr(input, "\n");
    if(!end) break;
    *end = '\0';

    if(strcmp(input, "quit") == 0) break;
    if(strcmp(input, "exit") == 0) break;

    done = false;
    value = 0;
    cmd = input;
    key = strstr(input, " ");
    if(key) {
      *key++ = '\0';
      str_value = strstr(key, " ");
      if(str_value) {
        *str_value++ = '\0';
        value = atoi(str_value);

        if(strcmp(cmd, "set") == 0) {
          done = true;
          result = htable_set(tbl, key, strlen(key), value);
        }
      } else {
        if(strcmp(cmd, "get") == 0) {
          done = true; 
          result = htable_get(tbl, key, strlen(key), &value);
        } else if(strcmp(cmd, "del") == 0) {
          done = true;
          result = htable_del(tbl, key, strlen(key));
        }
      }
    }
    
    if(done == true) {
      printf("+OK, cmd = %s, key = %s, value = %d, result = %d, last_error = %d, size = %d, items = %d\n",
        cmd, key, value, result, tbl->last_error, tbl->size, tbl->items);
    } else {
      printf("-INVALID COMMAND, 'set key value', 'get key', 'del key' or 'quit' expected\n");
    }
  }
  printf("+GOODBYE\n");
  htable_free(tbl);
  return 0;
}
예제 #3
0
static htable_t *lbfgs_params(void)
{
   htable_t *p = new_htable(31, false, false);

   /* these control verbosity */
   htable_set(p, NEW_SYMBOL("iprint-1"), NEW_NUMBER(-1));
   htable_set(p, NEW_SYMBOL("iprint-2"), NEW_NUMBER(0));

   /* these control line search behavior */
   htable_set(p, NEW_SYMBOL("ls-gtol"), NEW_NUMBER(lb3_.gtol));
   htable_set(p, NEW_SYMBOL("ls-stpmin"), NEW_NUMBER(lb3_.stpmin));
   htable_set(p, NEW_SYMBOL("ls-stpmax"), NEW_NUMBER(lb3_.stpmax));

   /* LBFGS parameters */
   htable_set(p, NEW_SYMBOL("lbfgs-m"), NEW_NUMBER(7));
   return p;
}