|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#pragma once |
|
|
|
#include <assert.h> |
|
#include <stdio.h> |
|
#include <stdlib.h> |
|
#include <string.h> |
|
|
|
#include "arrow/c/abi.h" |
|
|
|
#define ARROW_C_ASSERT(condition, msg) \ |
|
do { \ |
|
if (!(condition)) { \ |
|
fprintf(stderr, "%s:%d:: %s", __FILE__, __LINE__, (msg)); \ |
|
abort(); \ |
|
} \ |
|
} while (0) |
|
|
|
#ifdef __cplusplus |
|
extern "C" { |
|
#endif |
|
|
|
|
|
inline int ArrowSchemaIsReleased(const struct ArrowSchema* schema) { |
|
return schema->release == NULL; |
|
} |
|
|
|
|
|
inline void ArrowSchemaMarkReleased(struct ArrowSchema* schema) { |
|
schema->release = NULL; |
|
} |
|
|
|
|
|
|
|
|
|
|
|
inline void ArrowSchemaMove(struct ArrowSchema* src, struct ArrowSchema* dest) { |
|
assert(dest != src); |
|
assert(!ArrowSchemaIsReleased(src)); |
|
memcpy(dest, src, sizeof(struct ArrowSchema)); |
|
ArrowSchemaMarkReleased(src); |
|
} |
|
|
|
|
|
inline void ArrowSchemaRelease(struct ArrowSchema* schema) { |
|
if (!ArrowSchemaIsReleased(schema)) { |
|
schema->release(schema); |
|
ARROW_C_ASSERT(ArrowSchemaIsReleased(schema), |
|
"ArrowSchemaRelease did not cleanup release callback"); |
|
} |
|
} |
|
|
|
|
|
inline int ArrowArrayIsReleased(const struct ArrowArray* array) { |
|
return array->release == NULL; |
|
} |
|
|
|
inline int ArrowDeviceArrayIsReleased(const struct ArrowDeviceArray* array) { |
|
return ArrowArrayIsReleased(&array->array); |
|
} |
|
|
|
|
|
inline void ArrowArrayMarkReleased(struct ArrowArray* array) { array->release = NULL; } |
|
|
|
inline void ArrowDeviceArrayMarkReleased(struct ArrowDeviceArray* array) { |
|
ArrowArrayMarkReleased(&array->array); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
inline void ArrowArrayMove(struct ArrowArray* src, struct ArrowArray* dest) { |
|
assert(dest != src); |
|
assert(!ArrowArrayIsReleased(src)); |
|
memcpy(dest, src, sizeof(struct ArrowArray)); |
|
ArrowArrayMarkReleased(src); |
|
} |
|
|
|
inline void ArrowDeviceArrayMove(struct ArrowDeviceArray* src, |
|
struct ArrowDeviceArray* dest) { |
|
assert(dest != src); |
|
assert(!ArrowDeviceArrayIsReleased(src)); |
|
memcpy(dest, src, sizeof(struct ArrowDeviceArray)); |
|
ArrowDeviceArrayMarkReleased(src); |
|
} |
|
|
|
|
|
inline void ArrowArrayRelease(struct ArrowArray* array) { |
|
if (!ArrowArrayIsReleased(array)) { |
|
array->release(array); |
|
ARROW_C_ASSERT(ArrowArrayIsReleased(array), |
|
"ArrowArrayRelease did not cleanup release callback"); |
|
} |
|
} |
|
|
|
inline void ArrowDeviceArrayRelease(struct ArrowDeviceArray* array) { |
|
if (!ArrowDeviceArrayIsReleased(array)) { |
|
array->array.release(&array->array); |
|
ARROW_C_ASSERT(ArrowDeviceArrayIsReleased(array), |
|
"ArrowDeviceArrayRelease did not cleanup release callback"); |
|
} |
|
} |
|
|
|
|
|
inline int ArrowArrayStreamIsReleased(const struct ArrowArrayStream* stream) { |
|
return stream->release == NULL; |
|
} |
|
|
|
inline int ArrowDeviceArrayStreamIsReleased(const struct ArrowDeviceArrayStream* stream) { |
|
return stream->release == NULL; |
|
} |
|
|
|
|
|
inline void ArrowArrayStreamMarkReleased(struct ArrowArrayStream* stream) { |
|
stream->release = NULL; |
|
} |
|
|
|
inline void ArrowDeviceArrayStreamMarkReleased(struct ArrowDeviceArrayStream* stream) { |
|
stream->release = NULL; |
|
} |
|
|
|
|
|
|
|
|
|
|
|
inline void ArrowArrayStreamMove(struct ArrowArrayStream* src, |
|
struct ArrowArrayStream* dest) { |
|
assert(dest != src); |
|
assert(!ArrowArrayStreamIsReleased(src)); |
|
memcpy(dest, src, sizeof(struct ArrowArrayStream)); |
|
ArrowArrayStreamMarkReleased(src); |
|
} |
|
|
|
inline void ArrowDeviceArrayStreamMove(struct ArrowDeviceArrayStream* src, |
|
struct ArrowDeviceArrayStream* dest) { |
|
assert(dest != src); |
|
assert(!ArrowDeviceArrayStreamIsReleased(src)); |
|
memcpy(dest, src, sizeof(struct ArrowDeviceArrayStream)); |
|
ArrowDeviceArrayStreamMarkReleased(src); |
|
} |
|
|
|
|
|
inline void ArrowArrayStreamRelease(struct ArrowArrayStream* stream) { |
|
if (!ArrowArrayStreamIsReleased(stream)) { |
|
stream->release(stream); |
|
ARROW_C_ASSERT(ArrowArrayStreamIsReleased(stream), |
|
"ArrowArrayStreamRelease did not cleanup release callback"); |
|
} |
|
} |
|
|
|
inline void ArrowDeviceArrayStreamRelease(struct ArrowDeviceArrayStream* stream) { |
|
if (!ArrowDeviceArrayStreamIsReleased(stream)) { |
|
stream->release(stream); |
|
ARROW_C_ASSERT(ArrowDeviceArrayStreamIsReleased(stream), |
|
"ArrowDeviceArrayStreamRelease did not cleanup release callback"); |
|
} |
|
} |
|
|
|
#ifdef __cplusplus |
|
} |
|
#endif |
|
|