summaryrefslogtreecommitdiffhomepage
path: root/stc/cvector.h
diff options
context:
space:
mode:
authorTyge <[email protected]>2020-04-23 17:09:17 +0200
committerTyge <[email protected]>2020-04-23 17:09:17 +0200
commit94c816fbed2882f7dc0127f05f4ee74ffdccc21b (patch)
treef649eda3e7c9100194071aaaa32aa001ef0294ef /stc/cvector.h
parente49a38337de57122dd379f88abe2c6656d07f2cd (diff)
downloadSTC-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.h9
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; \
} \