From: Michal Sojka Date: Tue, 22 Jun 2010 15:30:19 +0000 (+0200) Subject: Add forb_sequence_ensure_allocated() X-Git-Url: https://rtime.felk.cvut.cz/gitweb/frescor/frsh-forb.git/commitdiff_plain/1e0ff4c81e99e9f7a08a3d76f155d98d89bae2fe Add forb_sequence_ensure_allocated() --- diff --git a/src/basic_types.h b/src/basic_types.h index 68f84e7b..2985a4d7 100644 --- a/src/basic_types.h +++ b/src/basic_types.h @@ -135,6 +135,13 @@ static inline void forb_no_destructor() {} #define forb_sequence_elem(seq, index) ((seq)->_buffer[(index)]) #define forb_sequence_length(seq) ((seq)->_length) +#define forb_sequence_allocated(seq) ((seq)->_maximum) +#define forb_sequence_ensure_allocated(seq, num) \ + ((seq)->_buffer = \ + (forb_sequence_allocated(seq) < (num)) ? \ + (forb_sequence_allocated(seq) = (num), \ + realloc((seq)->_buffer, (num)*sizeof(*(seq)->_buffer))) : \ + (seq)->_buffer) #define forb_sequence_foreach(seq, elemptr) \ for ((elemptr)=&forb_sequence_elem((seq), 0); \ diff --git a/src/tests/sequence.c b/src/tests/sequence.c index 9ff38e2b..a89eae85 100644 --- a/src/tests/sequence.c +++ b/src/tests/sequence.c @@ -17,6 +17,13 @@ WVTEST_MAIN("sequence manipulation") int i, *e, foreach_retuned_sum = 0; forb_sequence_alloc(s, 10); WVPASS(s); + WVPASS(forb_sequence_allocated(s) == 10); + WVPASS(forb_sequence_elem(s, 9) == 0); + WVPASS(forb_sequence_elem(s, 9) = 1); + WVPASS(forb_sequence_ensure_allocated(s, 1000) != NULL); + WVPASS(forb_sequence_allocated(s) == 1000); + WVPASS(forb_sequence_elem(s, 9) == 1); + WVPASS(forb_sequence_elem(s, 999) = 1); CORBA_sequence_set_release(s, 1); WVPASS(forb_sequence_length(s) == 0); forb_sequence_free(s, destructor);