13 #define defineStreamType(streamType, elementType) typedef struct streamType { \
14 esdm_wstream_metadata_t* metadata; \
15 elementType *buffer, *iter, *iterEnd, *bufferEnd; \
17 defineStreamType(esdm_wstream_uint8_t, uint8_t);
18 defineStreamType(esdm_wstream_uint16_t, uint16_t);
19 defineStreamType(esdm_wstream_uint32_t, uint32_t);
20 defineStreamType(esdm_wstream_uint64_t, uint64_t);
21 defineStreamType(esdm_wstream_int8_t, int8_t);
22 defineStreamType(esdm_wstream_int16_t, int16_t);
23 defineStreamType(esdm_wstream_int32_t, int32_t);
24 defineStreamType(esdm_wstream_int64_t, int64_t);
25 defineStreamType(esdm_wstream_float_t,
float);
26 defineStreamType(esdm_wstream_double_t,
double);
27 #undef defineStreamType
53 #define esdm_wstream_start(stream, dataset, dimCount, offset, size) do { \
54 typeof(*stream)* const esdm_internal_stream_ptr = (stream); \
55 esdm_wstream_metadata_t* esdm_internal_stream_metadata = esdm_wstream_metadata_create(dataset, dimCount, offset, size, smd_c_to_smd_type(*esdm_internal_stream_ptr->buffer)); \
56 int64_t esdm_internal_element_count = esdm_wstream_metadata_max_chunk_size(esdm_internal_stream_metadata); \
57 typeof(*stream.buffer) esdm_internal_buffer = (typeof(*stream.buffer)) malloc(esdm_internal_element_count*sizeof(*esdm_internal_stream_ptr->buffer)); \
58 *esdm_internal_stream_ptr = (typeof(*stream)){ \
59 .metadata = esdm_internal_stream_metadata, \
60 .buffer = esdm_internal_buffer, \
61 .iter = esdm_internal_buffer, \
62 .iterEnd = esdm_internal_buffer + esdm_wstream_metadata_next_chunk_size(esdm_internal_stream_metadata), \
63 .bufferEnd = esdm_internal_buffer + esdm_internal_element_count \
77 #define esdm_wstream_pack(stream, value) do { \
78 typeof(stream)* const esdm_internal_stream_ptr = &(stream); \
79 if(esdm_internal_stream_ptr->iter >= esdm_internal_stream_ptr->iterEnd) { \
80 fprintf(stderr, "wstream attempt to push more data into a stream than defined at stream creation %p %p\n", esdm_internal_stream_ptr->iter, esdm_internal_stream_ptr->iterEnd); \
83 *esdm_internal_stream_ptr->iter++ = (value); \
84 if(esdm_internal_stream_ptr->iter == esdm_internal_stream_ptr->iterEnd) { \
85 esdm_wstream_flush(esdm_internal_stream_ptr->metadata, esdm_internal_stream_ptr->buffer, esdm_internal_stream_ptr->iter); \
86 esdm_internal_stream_ptr->iter = esdm_internal_stream_ptr->buffer; \
87 esdm_internal_stream_ptr->iterEnd = esdm_internal_stream_ptr->iter + esdm_wstream_metadata_next_chunk_size(esdm_internal_stream_ptr->metadata); \
101 #define esdm_wstream_commit(stream) do { \
102 typeof(stream)* const esdm_internal_stream_ptr = &(stream); \
103 if(esdm_internal_stream_ptr->iter != esdm_internal_stream_ptr->buffer) { \
104 fprintf(stderr, "wstream: preliminary commit of a stream: too few calls to esdm_wstream_pack()\n"); \
108 esdm_wstream_metadata_destroy(esdm_internal_stream_ptr->metadata); \
109 free(esdm_internal_stream_ptr->buffer); \
110 *esdm_internal_stream_ptr = (typeof(stream)){0}; \
160 void * backend_state;
169 int estream_mem_pack_fragment(
esdm_fragment_t *f,
void ** in_out_buff,
size_t * out_size);
172 bool estream_mem_unpack_fragment_param(
esdm_fragment_t *f,
void ** out_buf,
size_t * out_size);
176 int estream_mem_unpack_fragment(
esdm_fragment_t *f,
void * rbuff,
size_t size);
Datatype primitives provided by ESDM.
Definition: esdm-datatypes-internal.h:59
Definition: esdm-datatypes-internal.h:78
Definition: esdm-stream.h:158