diff options
| author | Tyge <[email protected]> | 2020-04-23 17:09:17 +0200 |
|---|---|---|
| committer | Tyge <[email protected]> | 2020-04-23 17:09:17 +0200 |
| commit | 94c816fbed2882f7dc0127f05f4ee74ffdccc21b (patch) | |
| tree | f649eda3e7c9100194071aaaa32aa001ef0294ef /stc/cvector.h | |
| parent | e49a38337de57122dd379f88abe2c6656d07f2cd (diff) | |
| download | STC-modified-94c816fbed2882f7dc0127f05f4ee74ffdccc21b.tar.gz STC-modified-94c816fbed2882f7dc0127f05f4ee74ffdccc21b.zip | |
Fixed bugs with use of "Raw" types, and updated EXAMPLE.md accordingly.
Diffstat (limited to 'stc/cvector.h')
| -rw-r--r-- | stc/cvector.h | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/stc/cvector.h b/stc/cvector.h index 069a335e..4bbc55cf 100644 --- a/stc/cvector.h +++ b/stc/cvector.h @@ -47,7 +47,7 @@ extern void qsort(void *base, size_t nitems, size_t size, int (*compar)(const vo #define declare_CVector_6(tag, Value, valueDestroy, valueCompare, ValueRaw, valueGetRaw) \
- \
+typedef ValueRaw cvector_##tag##_rawvalue_t; \
typedef struct CVector_##tag { \
Value* data; \
} CVector_##tag; \
@@ -118,7 +118,9 @@ cvector_##tag##_erase(CVector_##tag* self, size_t pos, size_t size) { \ \
static inline int \
cvector_##tag##_sortCompare(const void* x, const void* y) { \
- return valueCompare(valueGetRaw((const Value *) x), valueGetRaw((const Value *) y)); \
+ cvector_##tag##_rawvalue_t rx = valueGetRaw((const Value *) x); \
+ cvector_##tag##_rawvalue_t ry = valueGetRaw((const Value *) y); \
+ return valueCompare(&rx, &ry); \
} \
\
static inline void \
@@ -130,8 +132,9 @@ cvector_##tag##_sort(CVector_##tag* self) { \ static inline size_t \
cvector_##tag##_find(CVector_##tag cv, ValueRaw rawValue) { \
size_t n = cvector_size(cv); \
+ cvector_##tag##_rawvalue_t r; \
for (size_t i = 0; i < n; ++i) { \
- if (valueCompare(valueGetRaw(&cv.data[i]), &rawValue) == 0) return i; \
+ if (valueCompare((r = valueGetRaw(&cv.data[i]), &r), &rawValue) == 0) return i; \
} \
return c_npos; \
} \
|
