mirror of
https://gitlab.eurecom.fr/oai/openairinterface5g.git
synced 2026-07-13 04:30:28 +00:00
While compiling the spsc_q unit tests on some compilers, some
complain with
/openairinterface5g/common/utils/ds/tests/test_spsc_q.cpp:11:44: error: use of deleted function ‘spsc_q::spsc_q(spsc_q&&)’
spsc_q_t rb = spsc_q_alloc(2, sizeof(int));
/openairinterface5g/common/utils/ds/spsc_q.h:19:16: error: use of deleted function ‘std::atomic<long unsigned int>::atomic(const std::atomic<long unsigned int>&)’
These compiles cannot copy the atomic. Change the API to avoid this
copy.
"Older" compiler here means g++-11/12.
Signed-off-by: Robert Schmidt <robert.schmidt@openairinterface.org>
40 lines
953 B
C++
40 lines
953 B
C++
/*
|
|
* SPDX-License-Identifier: LicenseRef-CSSL-1.0
|
|
*/
|
|
|
|
#ifndef SPSC_Q_H_
|
|
#define SPSC_Q_H_
|
|
|
|
#include <stdint.h>
|
|
#include <stdbool.h>
|
|
|
|
#if defined(__cplusplus)
|
|
#include <atomic>
|
|
// use atomic_size_t to help interworking with C++
|
|
using std::atomic_size_t;
|
|
#else
|
|
#include <stdatomic.h>
|
|
#endif
|
|
|
|
typedef struct spsc_q {
|
|
uint8_t *buf;
|
|
size_t elsiz;
|
|
size_t cnt;
|
|
|
|
atomic_size_t write_idx;
|
|
atomic_size_t read_idx;
|
|
} spsc_q_t;
|
|
|
|
bool spsc_q_alloc(spsc_q_t *rbn, size_t cnt, size_t elsiz);
|
|
void spsc_q_free(spsc_q_t *rb);
|
|
|
|
bool spsc_q_put(spsc_q_t *rb, const void *src, size_t elsiz);
|
|
bool spsc_q_get(spsc_q_t *rb, void *dest, size_t elsiz);
|
|
|
|
typedef bool (*pred)(const void *data, void *user);
|
|
bool spsc_q_get_if(spsc_q_t *rb, pred p, void *user, void *dest, size_t elsiz);
|
|
int spsc_q_drop_while(spsc_q_t *rb, pred p, void *user);
|
|
int spsc_q_get_while(spsc_q_t *rb, pred p, void *user, void *dest, size_t elsiz, size_t max_len);
|
|
|
|
#endif /* SPSC_Q_H_ */
|