Add deque_length()
authorJ. Ali Harlow <ali@juiblex.co.uk>
Thu Feb 09 20:43:58 2012 +0000 (2012-02-09)
changeset 417c7063ba682e0
parent 416 d0aa9e0a6d04
child 418 33b825d3128d
Add deque_length()
librazor/types/deque.c
librazor/types/test-deque.c
librazor/types/types.h
     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