# HG changeset patch # User J. Ali Harlow # Date 1328820238 0 # Node ID c7063ba682e07fb19f986829ceedc6468f5aeef3 # Parent d0aa9e0a6d04e9ec542ed2025bf9ad7cfbd91e2a Add deque_length() diff -r d0aa9e0a6d04 -r c7063ba682e0 librazor/types/deque.c --- a/librazor/types/deque.c Thu Feb 09 20:42:08 2012 +0000 +++ b/librazor/types/deque.c Thu Feb 09 20:43:58 2012 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009 J. Ali Harlow + * Copyright (C) 2009, 2012 J. Ali Harlow * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -176,6 +176,18 @@ return deque->front == deque->back; } +int deque_length(struct deque *deque) +{ + int nb; + + nb = deque->back - deque->front; + + if (nb < 0) + nb += deque->alloc; + + return nb / sizeof(uint32_t); +} + uint32_t deque_shift(struct deque *deque) { uint32_t datum; diff -r d0aa9e0a6d04 -r c7063ba682e0 librazor/types/test-deque.c --- a/librazor/types/test-deque.c Thu Feb 09 20:42:08 2012 +0000 +++ b/librazor/types/test-deque.c Thu Feb 09 20:43:58 2012 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009 J. Ali Harlow + * Copyright (C) 2009, 2012 J. Ali Harlow * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -80,17 +80,25 @@ items = array->data; DEQUE_TEST(deque_push, &deque, 0x25); + DEQUE_CHECK(deque_length, &deque, 1); DEQUE_TEST(deque_push, &deque, 0x2A); + DEQUE_CHECK(deque_length, &deque, 2); for(n = 1; n <= count; n++) { - for(i = 0; i < n; i++) + for(i = 0; i < n; i++) { DEQUE_TEST(deque_push, &deque, items[i]); - for(i = n - 1; i >= 0; i--) + DEQUE_CHECK(deque_length, &deque, 2 + i + 1); + } + for(i = n - 1; i >= 0; i--) { DEQUE_CHECK(deque_pop, &deque, items[i]); + DEQUE_CHECK(deque_length, &deque, 2 + i); + } } DEQUE_CHECK(deque_pop, &deque, 0x2A); + DEQUE_CHECK(deque_length, &deque, 1); DEQUE_CHECK(deque_pop, &deque, 0x25); + DEQUE_CHECK(deque_length, &deque, 0); DEQUE_ENSURE_EMPTY(&deque); @@ -110,17 +118,25 @@ items = array->data; DEQUE_TEST(deque_unshift, &deque, 0x25); + DEQUE_CHECK(deque_length, &deque, 1); DEQUE_TEST(deque_unshift, &deque, 0x2A); + DEQUE_CHECK(deque_length, &deque, 2); for(n = 1; n <= count; n++) { - for(i = 0; i < n; i++) + for(i = 0; i < n; i++) { DEQUE_TEST(deque_unshift, &deque, items[i]); - for(i = n - 1; i >= 0; i--) + DEQUE_CHECK(deque_length, &deque, 2 + i + 1); + } + for(i = n - 1; i >= 0; i--) { DEQUE_CHECK(deque_shift, &deque, items[i]); + DEQUE_CHECK(deque_length, &deque, 2 + i); + } } DEQUE_CHECK(deque_shift, &deque, 0x2A); + DEQUE_CHECK(deque_length, &deque, 1); DEQUE_CHECK(deque_shift, &deque, 0x25); + DEQUE_CHECK(deque_length, &deque, 0); DEQUE_ENSURE_EMPTY(&deque); @@ -140,14 +156,22 @@ items = array->data; for(n = 1; n <= count; n++) { - for(i = 0; i < n; i++) + for(i = 0; i < n; i++) { DEQUE_TEST(deque_push, &deque, items[i]); + DEQUE_CHECK(deque_length, &deque, i + 1); + } DEQUE_TEST(deque_push, &deque, 0x25); + DEQUE_CHECK(deque_length, &deque, n + 1); DEQUE_TEST(deque_push, &deque, 0x2A); - for(i = 0; i < n; i++) + DEQUE_CHECK(deque_length, &deque, n + 2); + for(i = 0; i < n; i++) { DEQUE_CHECK(deque_shift, &deque, items[i]); + DEQUE_CHECK(deque_length, &deque, n + 2 - i - 1); + } DEQUE_CHECK(deque_shift, &deque, 0x25); + DEQUE_CHECK(deque_length, &deque, 1); DEQUE_CHECK(deque_shift, &deque, 0x2A); + DEQUE_CHECK(deque_length, &deque, 0); } DEQUE_ENSURE_EMPTY(&deque); @@ -168,14 +192,22 @@ items = array->data; for(n = 1; n <= count; n++) { - for(i = 0; i < n; i++) + for(i = 0; i < n; i++) { DEQUE_TEST(deque_unshift, &deque, items[i]); + DEQUE_CHECK(deque_length, &deque, i + 1); + } DEQUE_TEST(deque_unshift, &deque, 0x25); + DEQUE_CHECK(deque_length, &deque, n + 1); DEQUE_TEST(deque_unshift, &deque, 0x2A); - for(i = 0; i < n; i++) + DEQUE_CHECK(deque_length, &deque, n + 2); + for(i = 0; i < n; i++) { DEQUE_CHECK(deque_pop, &deque, items[i]); + DEQUE_CHECK(deque_length, &deque, n + 2 - i - 1); + } DEQUE_CHECK(deque_pop, &deque, 0x25); + DEQUE_CHECK(deque_length, &deque, 1); DEQUE_CHECK(deque_pop, &deque, 0x2A); + DEQUE_CHECK(deque_length, &deque, 0); } DEQUE_ENSURE_EMPTY(&deque); diff -r d0aa9e0a6d04 -r c7063ba682e0 librazor/types/types.h --- a/librazor/types/types.h Thu Feb 09 20:42:08 2012 +0000 +++ b/librazor/types/types.h Thu Feb 09 20:43:58 2012 +0000 @@ -92,6 +92,7 @@ int deque_unshift(struct deque *deque, uint32_t datum); int deque_push(struct deque *deque, uint32_t datum); int deque_empty(struct deque *deque); +int deque_length(struct deque *deque); uint32_t deque_shift(struct deque *deque); uint32_t deque_pop(struct deque *deque);