Ejemplo n.º 1
0
Archivo: deque.c Proyecto: osa1/tiny
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;
}
Ejemplo n.º 2
0
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();
}
Ejemplo n.º 3
0
Archivo: deque.c Proyecto: osa1/tiny
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;
    }
}
Ejemplo n.º 4
0
Archivo: deque.c Proyecto: osa1/tiny
void deque_push_back(deque* d, void* p)
{
    deque_reserve(d);
    d->buf[find_back(d)] = p;
    ++d->size;
}