void *deque_pop_back(deque* d) { if (d->size == 0) return NULL; int back = find_back(d); void* ret = d->buf[(back + 1) % d->cap]; --d->size; return ret; }
void LogParser::get_lines(int nl, stack<string>* sl) { ifstream fi; fi.open(get_log_path().c_str(), ios::ate); int end_log=fi.tellg(); while(nl>0) { int pos=find_back(&fi, end_log, 0, '\n'); string line=get_single_line(&fi, pos, end_log); sl->push(line); end_log=pos; --nl; } fi.close(); }
void deque_reserve(deque* d) { assert(d->size <= d->cap); assert(d->cap != 0); if (d->size == d->cap) { int new_cap = d->cap * 2; void** new_buf = malloc(sizeof(void*) * new_cap); int i = 0; int back = (find_back(d) + 1) % d->cap; while (i < d->size) { new_buf[i] = d->buf[(back + i) % d->cap]; ++i; } free(d->buf); d->buf = new_buf; d->cap = new_cap; d->front = i; } }
void deque_push_back(deque* d, void* p) { deque_reserve(d); d->buf[find_back(d)] = p; ++d->size; }