TPCircularBuffer中的错误 - atomic_fetch_add

时间:2017-12-22 18:42:43

标签: c++ ios swift atomic

我正在尝试将TPCircularBuffer集成到我的Swift项目中。 11.0 / xcode 9 我在TPCircularBuffer.h中收到以下错误:

  

"没有匹配函数来调用' atomic_fetch_add'"

文件被拖放到我的项目中,我没有做任何更改。我想知道我是否错过了旗帜或其他东西。或者有谁知道为什么这对我不起作用?

#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);
}

1 个答案:

答案 0 :(得分:0)

根本问题是,atomic_fetch_add在Swift中不可用,因此您无法在桥接标头中导入Swift的.h文件中使用它。

您需要在C中编写一个调用atomic_fetch_add的包装函数,并更改TPCircularBuffer.h以使用该包装函数。您可以在.h文件中声明包装器函数,但必须在.c文件中实现它,这样它就不会暴露给Swift编译器。