]> rtime.felk.cvut.cz Git - frescor/forb.git/commitdiff
Add forb_sequence_ensure_allocated()
authorMichal Sojka <sojkam1@fel.cvut.cz>
Tue, 22 Jun 2010 15:30:19 +0000 (17:30 +0200)
committerMichal Sojka <sojkam1@fel.cvut.cz>
Tue, 22 Jun 2010 15:30:19 +0000 (17:30 +0200)
src/basic_types.h
src/tests/sequence.c

index 68f84e7b8d042e0bdf2c5c0446756a06ae42b6ae..2985a4d75a9192fcb6c0f285f6693c93d985ecbf 100644 (file)
@@ -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); \
index 9ff38e2b54581b03d6695abc99d6f48571debfc4..a89eae8519baade87b3f26871372cc8ec9e0f638 100644 (file)
@@ -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);