File: vqueue.c

package info (click to toggle)
gobject-introspection 1.84.0-1
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 72,336 kB
  • sloc: ansic: 562,269; python: 23,692; xml: 16,240; yacc: 1,711; perl: 1,624; sh: 1,139; lex: 510; cpp: 487; makefile: 182; javascript: 15; lisp: 1
file content (51 lines) | stat: -rw-r--r-- 1,167 bytes parent folder | download | duplicates (14)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include "vqueue.h"
#include <stdio.h>
#include <assert.h>
#include <stdlib.h>
struct __vqueue_t
{
  cmph_uint32 * values;
  cmph_uint32 beg, end, capacity;
};

vqueue_t * vqueue_new(cmph_uint32 capacity)
{
  size_t capacity_plus_one = capacity + 1;
  vqueue_t *q = (vqueue_t *)malloc(sizeof(vqueue_t));
  assert(q);
  q->values = (cmph_uint32 *)calloc(capacity_plus_one, sizeof(cmph_uint32));
  q->beg = q->end = 0;
  q->capacity = (cmph_uint32) capacity_plus_one;
  return q;
}

cmph_uint8 vqueue_is_empty(vqueue_t * q)
{
  return (cmph_uint8)(q->beg == q->end);
}

void vqueue_insert(vqueue_t * q, cmph_uint32 val)
{
  assert((q->end + 1)%q->capacity != q->beg); // Is queue full?
  q->end = (q->end + 1)%q->capacity;
  q->values[q->end] = val;
}

cmph_uint32 vqueue_remove(vqueue_t * q)
{
  assert(!vqueue_is_empty(q)); // Is queue empty?
  q->beg = (q->beg + 1)%q->capacity;
  return q->values[q->beg];
}

void vqueue_print(vqueue_t * q)
{
  cmph_uint32 i;
  for (i = q->beg; i != q->end; i = (i + 1)%q->capacity)
    fprintf(stderr, "%u\n", q->values[(i + 1)%q->capacity]);
} 

void vqueue_destroy(vqueue_t *q)
{
  free(q->values); q->values = NULL; free(q);
}