1
+ #include " lsl_c_api_helpers.hpp"
1
2
#include " stream_outlet_impl.h"
2
3
3
4
#pragma warning(disable : 4800)
@@ -12,16 +13,8 @@ using namespace lsl;
12
13
// boilerplate wrapper code
13
14
LIBLSL_C_API lsl_outlet lsl_create_outlet (
14
15
lsl_streaminfo info, int32_t chunk_size, int32_t max_buffered) {
15
- try {
16
- stream_info_impl *infoimpl = info;
17
- lsl_outlet result = new stream_outlet_impl (*infoimpl, chunk_size,
18
- infoimpl->nominal_srate () ? (int )(infoimpl->nominal_srate () * max_buffered)
19
- : max_buffered * 100 );
20
- return result;
21
- } catch (std::exception &e) {
22
- LOG_F (WARNING, " Unexpected error during construction of stream outlet: %s" , e.what ());
23
- return nullptr ;
24
- }
16
+ return create_object_noexcept<stream_outlet_impl>(*info, chunk_size,
17
+ info->nominal_srate () ? (int )(info->nominal_srate () * max_buffered) : max_buffered * 100 );
25
18
}
26
19
27
20
LIBLSL_C_API void lsl_destroy_outlet (lsl_outlet out) {
@@ -111,52 +104,20 @@ LIBLSL_C_API int32_t lsl_push_sample_ctp(
111
104
}
112
105
113
106
LIBLSL_C_API int32_t lsl_push_sample_v (lsl_outlet out, const void *data) {
114
- try {
115
- out->push_numeric_raw (data);
116
- return lsl_no_error;
117
- } catch (std::range_error &e) {
118
- LOG_F (WARNING, " Error during push_sample: %s" , e.what ());
119
- return lsl_argument_error;
120
- } catch (std::invalid_argument &e) {
121
- LOG_F (WARNING, " Error during push_sample: %s" , e.what ());
122
- return lsl_argument_error;
123
- } catch (std::exception &e) {
124
- LOG_F (WARNING, " Unexpected error during push_sample: %s" , e.what ());
125
- return lsl_internal_error;
126
- }
107
+ return lsl_push_sample_vtp (out, data, 0.0 , true );
127
108
}
128
109
129
110
LIBLSL_C_API int32_t lsl_push_sample_vt (lsl_outlet out, const void *data, double timestamp) {
130
- try {
131
- out->push_numeric_raw (data, timestamp);
132
- return lsl_no_error;
133
- } catch (std::range_error &e) {
134
- LOG_F (WARNING, " Error during push_sample: %s" , e.what ());
135
- return lsl_argument_error;
136
- } catch (std::invalid_argument &e) {
137
- LOG_F (WARNING, " Error during push_sample: %s" , e.what ());
138
- return lsl_argument_error;
139
- } catch (std::exception &e) {
140
- LOG_F (WARNING, " Unexpected error during push_sample: %s" , e.what ());
141
- return lsl_internal_error;
142
- }
111
+ return lsl_push_sample_vtp (out, data, timestamp, true );
143
112
}
144
113
145
114
LIBLSL_C_API int32_t lsl_push_sample_vtp (
146
115
lsl_outlet out, const void *data, double timestamp, int32_t pushthrough) {
116
+ LSL_DEFAULT_EC;
147
117
try {
148
118
out->push_numeric_raw (data, timestamp, pushthrough != 0 );
149
- return lsl_no_error;
150
- } catch (std::range_error &e) {
151
- LOG_F (WARNING, " Error during push_sample: %s" , e.what ());
152
- return lsl_argument_error;
153
- } catch (std::invalid_argument &e) {
154
- LOG_F (WARNING, " Error during push_sample: %s" , e.what ());
155
- return lsl_argument_error;
156
- } catch (std::exception &e) {
157
- LOG_F (WARNING, " Unexpected error during push_sample: %s" , e.what ());
158
- return lsl_internal_error;
159
- }
119
+ } LSL_CATCH_EXCEPTIONS
120
+ return *ec;
160
121
}
161
122
162
123
LIBLSL_C_API int32_t lsl_push_sample_str (lsl_outlet out, const char **data) {
@@ -367,21 +328,14 @@ LIBLSL_C_API int32_t lsl_push_chunk_strt(
367
328
368
329
LIBLSL_C_API int32_t lsl_push_chunk_strtp (lsl_outlet out, const char **data,
369
330
unsigned long data_elements, double timestamp, int32_t pushthrough) {
331
+ LSL_DEFAULT_EC;
370
332
try {
371
333
std::vector<std::string> tmp;
372
334
for (unsigned long k = 0 ; k < data_elements; k++) tmp.emplace_back (data[k]);
373
335
if (data_elements) out->push_chunk_multiplexed (&tmp[0 ], tmp.size (), timestamp, pushthrough);
374
- return lsl_no_error;
375
- } catch (std::range_error &e) {
376
- LOG_F (WARNING, " Error during push_chunk: %s" , e.what ());
377
- return lsl_argument_error;
378
- } catch (std::invalid_argument &e) {
379
- LOG_F (WARNING, " Error during push_chunk: %s" , e.what ());
380
- return lsl_argument_error;
381
- } catch (std::exception &e) {
382
- LOG_F (WARNING, " Unexpected error during push_chunk: %s" , e.what ());
383
- return lsl_internal_error;
384
336
}
337
+ LSL_CATCH_EXCEPTIONS
338
+ return *ec;
385
339
}
386
340
387
341
LIBLSL_C_API int32_t lsl_push_chunk_strtn (
@@ -391,23 +345,16 @@ LIBLSL_C_API int32_t lsl_push_chunk_strtn(
391
345
392
346
LIBLSL_C_API int32_t lsl_push_chunk_strtnp (lsl_outlet out, const char **data,
393
347
unsigned long data_elements, const double *timestamps, int32_t pushthrough) {
348
+ LSL_DEFAULT_EC;
394
349
try {
395
350
if (data_elements) {
396
351
std::vector<std::string> tmp;
397
352
for (unsigned long k = 0 ; k < data_elements; k++) tmp.emplace_back (data[k]);
398
353
out->push_chunk_multiplexed_noexcept (&tmp[0 ], timestamps, data_elements, pushthrough);
399
354
}
400
- return lsl_no_error;
401
- } catch (std::range_error &e) {
402
- LOG_F (WARNING, " Error during push_chunk: %s" , e.what ());
403
- return lsl_argument_error;
404
- } catch (std::invalid_argument &e) {
405
- LOG_F (WARNING, " Error during push_chunk: %s" , e.what ());
406
- return lsl_argument_error;
407
- } catch (std::exception &e) {
408
- LOG_F (WARNING, " Unexpected error during push_chunk: %s" , e.what ());
409
- return lsl_internal_error;
410
355
}
356
+ LSL_CATCH_EXCEPTIONS
357
+ return *ec;
411
358
}
412
359
413
360
LIBLSL_C_API int32_t lsl_push_chunk_buf (
@@ -422,21 +369,14 @@ LIBLSL_C_API int32_t lsl_push_chunk_buft(lsl_outlet out, const char **data, cons
422
369
423
370
LIBLSL_C_API int32_t lsl_push_chunk_buftp (lsl_outlet out, const char **data,
424
371
const uint32_t *lengths, unsigned long data_elements, double timestamp, int32_t pushthrough) {
372
+ LSL_DEFAULT_EC;
425
373
try {
426
374
std::vector<std::string> tmp;
427
375
for (unsigned long k = 0 ; k < data_elements; k++) tmp.emplace_back (data[k], lengths[k]);
428
376
if (data_elements) out->push_chunk_multiplexed (&tmp[0 ], tmp.size (), timestamp, pushthrough);
429
- return lsl_no_error;
430
- } catch (std::range_error &e) {
431
- LOG_F (WARNING, " Error during push_chunk: %s" , e.what ());
432
- return lsl_argument_error;
433
- } catch (std::invalid_argument &e) {
434
- LOG_F (WARNING, " Error during push_chunk: %s" , e.what ());
435
- return lsl_argument_error;
436
- } catch (std::exception &e) {
437
- LOG_F (WARNING, " Unexpected error during push_chunk: %s" , e.what ());
438
- return lsl_internal_error;
439
377
}
378
+ LSL_CATCH_EXCEPTIONS
379
+ return *ec;
440
380
}
441
381
442
382
LIBLSL_C_API int32_t lsl_push_chunk_buftn (lsl_outlet out, const char **data,
@@ -447,24 +387,17 @@ LIBLSL_C_API int32_t lsl_push_chunk_buftn(lsl_outlet out, const char **data,
447
387
LIBLSL_C_API int32_t lsl_push_chunk_buftnp (lsl_outlet out, const char **data,
448
388
const uint32_t *lengths, unsigned long data_elements, const double *timestamps,
449
389
int32_t pushthrough) {
390
+ LSL_DEFAULT_EC;
450
391
try {
451
392
if (data_elements) {
452
393
std::vector<std::string> tmp;
453
394
for (unsigned long k = 0 ; k < data_elements; k++) tmp.emplace_back (data[k], lengths[k]);
454
395
out->push_chunk_multiplexed (
455
396
&tmp[0 ], timestamps, (std::size_t )data_elements, pushthrough);
456
397
}
457
- return lsl_no_error;
458
- } catch (std::range_error &e) {
459
- LOG_F (WARNING, " Error during push_chunk: %s" , e.what ());
460
- return lsl_argument_error;
461
- } catch (std::invalid_argument &e) {
462
- LOG_F (WARNING, " Error during push_chunk: %s" , e.what ());
463
- return lsl_argument_error;
464
- } catch (std::exception &e) {
465
- LOG_F (WARNING, " Unexpected error during push_chunk: %s" , e.what ());
466
- return lsl_internal_error;
467
398
}
399
+ LSL_CATCH_EXCEPTIONS
400
+ return *ec;
468
401
}
469
402
470
403
LIBLSL_C_API int32_t lsl_have_consumers (lsl_outlet out) {
@@ -486,11 +419,6 @@ LIBLSL_C_API int32_t lsl_wait_for_consumers(lsl_outlet out, double timeout) {
486
419
}
487
420
488
421
LIBLSL_C_API lsl_streaminfo lsl_get_info (lsl_outlet out) {
489
- try {
490
- return new stream_info_impl (out->info ());
491
- } catch (std::exception &e) {
492
- LOG_F (WARNING, " Unexpected error in lsl_get_info: %s" , e.what ());
493
- return nullptr ;
494
- }
422
+ return create_object_noexcept<stream_info_impl>(out->info ());
495
423
}
496
424
}
0 commit comments