コード例 #1
0
ファイル: task_manager.c プロジェクト: WellDone/MoMo-Firmware
int taskloop_add(task_callback task)
{
    void *object = task;
    if (ringbuffer_full(&taskqueue.tasks))
        return 0;

    ringbuffer_push(&taskqueue.tasks, &object);

    return 1;
}
コード例 #2
0
ファイル: sample6.c プロジェクト: rlucca/librbe
int main()
{
    struct RingBuffer *h = NULL;
    int x = 10, y = INT_MAX, z = 2863311530, m = -3333;
    int offset_remove = 2;
    int offset_insert = 3;
    int offset_data = 4;

    assert(ringbuffer_init(&h, 3, sizeof(x)) == 0);
    assert(ringbuffer_push(h, (unsigned char *)&x) == RBE_SUCCESS);
    assert(ringbuffer_push(h, (unsigned char *)&y) == RBE_SUCCESS);
    assert(ringbuffer_full(h) != 0);
    assert(ringbuffer_pop(h) == RBE_SUCCESS);
    assert(ringbuffer_push(h, (unsigned char *)&z) == RBE_SUCCESS);
    assert(ringbuffer_full(h) != 0);

    assert(ringbuffer_resize(&h, 5) == RBE_SUCCESS);
    assert(ringbuffer_full(h) == 0);
    assert(ringbuffer_empty(h) == 0);
    assert(ringbuffer_push(h, (unsigned char *)&m) == RBE_SUCCESS);
    assert(ringbuffer_push(h, (unsigned char *)&x) == RBE_SUCCESS);
    assert(ringbuffer_full(h) != 0);

    {   /* checking the data: x y z m x  */
        unsigned *off = (unsigned *) h;
        int *values = (int *) off + offset_data;
        assert(*(off + offset_remove) == 1 * sizeof(x));
        assert(*(off + offset_insert) == 0);
        assert(values[0] == x);
        assert(values[1] == y);
        assert(values[2] == z);
        assert(values[3] == m);
        assert(values[4] == x);
    }

    ringbuffer_destroy(&h);

    return 0;
}
コード例 #3
0
ファイル: ringbuffer.c プロジェクト: dennis-kk/knet
uint32_t ringbuffer_write_lock_size(kringbuffer_t* rb) {
    verify(rb);
    if (ringbuffer_full(rb)) {
        return 0;
    }
    rb->lock_type = 2;
    rb->lock_size = 0;
    if (rb->write_pos >= rb->read_pos) {
        rb->lock_size = rb->max_size - rb->write_pos;
    } else {
        rb->lock_size = rb->read_pos - rb->write_pos;
    }
    return rb->lock_size;
}