1.1 --- a/librazor/types/deque.c Thu Feb 09 20:42:08 2012 +0000
1.2 +++ b/librazor/types/deque.c Thu Feb 09 20:43:58 2012 +0000
1.3 @@ -1,5 +1,5 @@
1.4 /*
1.5 - * Copyright (C) 2009 J. Ali Harlow <ali@juiblex.co.uk>
1.6 + * Copyright (C) 2009, 2012 J. Ali Harlow <ali@juiblex.co.uk>
1.7 *
1.8 * This program is free software; you can redistribute it and/or modify
1.9 * it under the terms of the GNU General Public License as published by
1.10 @@ -176,6 +176,18 @@
1.11 return deque->front == deque->back;
1.12 }
1.13
1.14 +int deque_length(struct deque *deque)
1.15 +{
1.16 + int nb;
1.17 +
1.18 + nb = deque->back - deque->front;
1.19 +
1.20 + if (nb < 0)
1.21 + nb += deque->alloc;
1.22 +
1.23 + return nb / sizeof(uint32_t);
1.24 +}
1.25 +
1.26 uint32_t deque_shift(struct deque *deque)
1.27 {
1.28 uint32_t datum;
2.1 --- a/librazor/types/test-deque.c Thu Feb 09 20:42:08 2012 +0000
2.2 +++ b/librazor/types/test-deque.c Thu Feb 09 20:43:58 2012 +0000
2.3 @@ -1,5 +1,5 @@
2.4 /*
2.5 - * Copyright (C) 2009 J. Ali Harlow <ali@juiblex.co.uk>
2.6 + * Copyright (C) 2009, 2012 J. Ali Harlow <ali@juiblex.co.uk>
2.7 *
2.8 * This program is free software; you can redistribute it and/or modify
2.9 * it under the terms of the GNU General Public License as published by
2.10 @@ -80,17 +80,25 @@
2.11 items = array->data;
2.12
2.13 DEQUE_TEST(deque_push, &deque, 0x25);
2.14 + DEQUE_CHECK(deque_length, &deque, 1);
2.15 DEQUE_TEST(deque_push, &deque, 0x2A);
2.16 + DEQUE_CHECK(deque_length, &deque, 2);
2.17
2.18 for(n = 1; n <= count; n++) {
2.19 - for(i = 0; i < n; i++)
2.20 + for(i = 0; i < n; i++) {
2.21 DEQUE_TEST(deque_push, &deque, items[i]);
2.22 - for(i = n - 1; i >= 0; i--)
2.23 + DEQUE_CHECK(deque_length, &deque, 2 + i + 1);
2.24 + }
2.25 + for(i = n - 1; i >= 0; i--) {
2.26 DEQUE_CHECK(deque_pop, &deque, items[i]);
2.27 + DEQUE_CHECK(deque_length, &deque, 2 + i);
2.28 + }
2.29 }
2.30
2.31 DEQUE_CHECK(deque_pop, &deque, 0x2A);
2.32 + DEQUE_CHECK(deque_length, &deque, 1);
2.33 DEQUE_CHECK(deque_pop, &deque, 0x25);
2.34 + DEQUE_CHECK(deque_length, &deque, 0);
2.35
2.36 DEQUE_ENSURE_EMPTY(&deque);
2.37
2.38 @@ -110,17 +118,25 @@
2.39 items = array->data;
2.40
2.41 DEQUE_TEST(deque_unshift, &deque, 0x25);
2.42 + DEQUE_CHECK(deque_length, &deque, 1);
2.43 DEQUE_TEST(deque_unshift, &deque, 0x2A);
2.44 + DEQUE_CHECK(deque_length, &deque, 2);
2.45
2.46 for(n = 1; n <= count; n++) {
2.47 - for(i = 0; i < n; i++)
2.48 + for(i = 0; i < n; i++) {
2.49 DEQUE_TEST(deque_unshift, &deque, items[i]);
2.50 - for(i = n - 1; i >= 0; i--)
2.51 + DEQUE_CHECK(deque_length, &deque, 2 + i + 1);
2.52 + }
2.53 + for(i = n - 1; i >= 0; i--) {
2.54 DEQUE_CHECK(deque_shift, &deque, items[i]);
2.55 + DEQUE_CHECK(deque_length, &deque, 2 + i);
2.56 + }
2.57 }
2.58
2.59 DEQUE_CHECK(deque_shift, &deque, 0x2A);
2.60 + DEQUE_CHECK(deque_length, &deque, 1);
2.61 DEQUE_CHECK(deque_shift, &deque, 0x25);
2.62 + DEQUE_CHECK(deque_length, &deque, 0);
2.63
2.64 DEQUE_ENSURE_EMPTY(&deque);
2.65
2.66 @@ -140,14 +156,22 @@
2.67 items = array->data;
2.68
2.69 for(n = 1; n <= count; n++) {
2.70 - for(i = 0; i < n; i++)
2.71 + for(i = 0; i < n; i++) {
2.72 DEQUE_TEST(deque_push, &deque, items[i]);
2.73 + DEQUE_CHECK(deque_length, &deque, i + 1);
2.74 + }
2.75 DEQUE_TEST(deque_push, &deque, 0x25);
2.76 + DEQUE_CHECK(deque_length, &deque, n + 1);
2.77 DEQUE_TEST(deque_push, &deque, 0x2A);
2.78 - for(i = 0; i < n; i++)
2.79 + DEQUE_CHECK(deque_length, &deque, n + 2);
2.80 + for(i = 0; i < n; i++) {
2.81 DEQUE_CHECK(deque_shift, &deque, items[i]);
2.82 + DEQUE_CHECK(deque_length, &deque, n + 2 - i - 1);
2.83 + }
2.84 DEQUE_CHECK(deque_shift, &deque, 0x25);
2.85 + DEQUE_CHECK(deque_length, &deque, 1);
2.86 DEQUE_CHECK(deque_shift, &deque, 0x2A);
2.87 + DEQUE_CHECK(deque_length, &deque, 0);
2.88 }
2.89
2.90 DEQUE_ENSURE_EMPTY(&deque);
2.91 @@ -168,14 +192,22 @@
2.92 items = array->data;
2.93
2.94 for(n = 1; n <= count; n++) {
2.95 - for(i = 0; i < n; i++)
2.96 + for(i = 0; i < n; i++) {
2.97 DEQUE_TEST(deque_unshift, &deque, items[i]);
2.98 + DEQUE_CHECK(deque_length, &deque, i + 1);
2.99 + }
2.100 DEQUE_TEST(deque_unshift, &deque, 0x25);
2.101 + DEQUE_CHECK(deque_length, &deque, n + 1);
2.102 DEQUE_TEST(deque_unshift, &deque, 0x2A);
2.103 - for(i = 0; i < n; i++)
2.104 + DEQUE_CHECK(deque_length, &deque, n + 2);
2.105 + for(i = 0; i < n; i++) {
2.106 DEQUE_CHECK(deque_pop, &deque, items[i]);
2.107 + DEQUE_CHECK(deque_length, &deque, n + 2 - i - 1);
2.108 + }
2.109 DEQUE_CHECK(deque_pop, &deque, 0x25);
2.110 + DEQUE_CHECK(deque_length, &deque, 1);
2.111 DEQUE_CHECK(deque_pop, &deque, 0x2A);
2.112 + DEQUE_CHECK(deque_length, &deque, 0);
2.113 }
2.114
2.115 DEQUE_ENSURE_EMPTY(&deque);
3.1 --- a/librazor/types/types.h Thu Feb 09 20:42:08 2012 +0000
3.2 +++ b/librazor/types/types.h Thu Feb 09 20:43:58 2012 +0000
3.3 @@ -92,6 +92,7 @@
3.4 int deque_unshift(struct deque *deque, uint32_t datum);
3.5 int deque_push(struct deque *deque, uint32_t datum);
3.6 int deque_empty(struct deque *deque);
3.7 +int deque_length(struct deque *deque);
3.8 uint32_t deque_shift(struct deque *deque);
3.9 uint32_t deque_pop(struct deque *deque);
3.10