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; }
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; }
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; }