我正在尝试将TPCircularBuffer集成到我的Swift项目中。 11.0 / xcode 9
我在TPCircularBuffer.h中收到以下错误:
这些文件已拖放到我的项目中,但我没有做任何更改。我想知道我是否缺少旗帜或其他东西。还是有人知道为什么这对我不起作用?
#ifdef __cplusplus
extern "C++" {
#include <atomic>
typedef std::atomic_int atomicInt;
#define atomicFetchAdd(a,b) std::atomic_fetch_add(a,b)
}
#else
#include <stdatomic.h>
typedef atomic_int atomicInt;
#define atomicFetchAdd(a,b) atomic_fetch_add(a,b)
#endif
static __inline__ __attribute__((always_inline)) void TPCircularBufferConsume(TPCircularBuffer *buffer, uint32_t amount) {
buffer->tail = (buffer->tail + amount) % buffer->length;
if ( buffer->atomic ) {
atomicFetchAdd(&buffer->fillCount, -amount);
} else {
buffer->fillCount -= amount;
}
assert(buffer->fillCount >= 0);
}
最佳答案
根本问题是atomic_fetch_add
在Swift中不可用,因此您不能在桥接头文件中导入到Swift的.h
文件中使用它。
您需要在C中编写一个调用atomic_fetch_add
的包装函数,并更改TPCircularBuffer.h
以使用该包装函数。您可以在.h
文件中声明包装函数,但必须在.c
文件中实现该包装函数,这样它才不会在Swift编译器中公开。