*/
#define CORBA_sequence_set_release(seq, val) ((seq)->_release = (val))
+/** @name Sequence helper macros */
+/**@{*/
+#define forb_sequence_alloc_buf(seq, num_elements) do { \
+ memset(&(seq), 0, sizeof(seq)); \
+ (seq)._buffer = forb_malloc((num_elements)*sizeof(*(seq)._buffer)); \
+ (seq)._maximum = (seq)._buffer ? (num_elements) : 0; \
+ (seq)._length = 0; \
+ } while(0)
+
+#define forb_sequence_alloc(seq_ptr, num_elements) do { \
+ seq = forb_malloc(sizeof(*(seq_ptr))); \
+ memset((seq_ptr), 0, sizeof(*(seq_ptr))); \
+ forb_sequence_alloc_buf(*(seq_ptr)); \
+ } while(0)
+
+static inline void forb_no_destructor(void *elem) {
+#ifdef __cplusplus
+ (void*)elem; /* Suppress g++ warning */
+#endif
+}
+
+#define forb_sequence_free_buf(seq, elem_destructor) do { \
+ if (CORBA_sequence_get_release(&(seq))) { \
+ int i; \
+ for (i=0; i<(seq)._length; i++) { \
+ elem_destructor(&(seq)._buffer[i]); \
+ } \
+ forb_free((seq)._buffer); \
+ } \
+ } while(0)
+
+#define forb_sequence_free(seq_ptr, elem_destructor) do { \
+ forb_sequence_free_buf(*(seq_ptr), (elem_destructor)); \
+ forb_free(seq_ptr); \
+ } while(0)
+
+#define forb_sequence_elem(seq, index) ((seq)._buffer[index])
+/**@}*/
+
#endif