diff options
author | Tor Egge <Tor.Egge@online.no> | 2022-02-27 13:08:09 +0100 |
---|---|---|
committer | Tor Egge <Tor.Egge@online.no> | 2022-02-27 13:08:09 +0100 |
commit | 0d36018d83d3292fc574ebbd70680cc3bea6434d (patch) | |
tree | 34938ee1302e3c32e0c0c027aba007806b250ddb /vespalib/src | |
parent | 5fdd5827081972ab561a10e4888f392f7c6a8570 (diff) |
Remove pointer type mismatch errors (vespalib).
Diffstat (limited to 'vespalib/src')
-rw-r--r-- | vespalib/src/vespa/vespalib/hwaccelrated/private_helpers.hpp | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/vespalib/src/vespa/vespalib/hwaccelrated/private_helpers.hpp b/vespalib/src/vespa/vespalib/hwaccelrated/private_helpers.hpp index 3b063ce6805..76072aa6906 100644 --- a/vespalib/src/vespa/vespalib/hwaccelrated/private_helpers.hpp +++ b/vespalib/src/vespa/vespalib/hwaccelrated/private_helpers.hpp @@ -24,15 +24,17 @@ populationCount(const uint64_t *a, size_t sz) { return count; } -template<typename T> +template<typename T, unsigned ChunkSize> T get(const void * base, bool invert) { + static_assert(sizeof(T) == ChunkSize, "sizeof(T) == ChunkSize"); T v; memcpy(&v, base, sizeof(T)); return __builtin_expect(invert, false) ? ~v : v; } -template <typename T> +template <typename T, unsigned ChunkSize> const T * cast(const void * ptr, size_t offsetBytes) { + static_assert(sizeof(T) == ChunkSize, "sizeof(T) == ChunkSize"); return static_cast<const T *>(static_cast<const void *>(static_cast<const char *>(ptr) + offsetBytes)); } @@ -43,14 +45,14 @@ andChunks(size_t offset, const std::vector<std::pair<const void *, bool>> & src, static_assert(sizeof(Chunk) == ChunkSize, "sizeof(Chunk) == ChunkSize"); static_assert(ChunkSize*Chunks == 64, "ChunkSize*Chunks == 64"); Chunk * chunk = static_cast<Chunk *>(dest); - const Chunk * tmp = cast<Chunk>(src[0].first, offset); + const Chunk * tmp = cast<Chunk, ChunkSize>(src[0].first, offset); for (size_t n=0; n < Chunks; n++) { - chunk[n] = get<Chunk>(tmp+n, src[0].second); + chunk[n] = get<Chunk, ChunkSize>(tmp+n, src[0].second); } for (size_t i(1); i < src.size(); i++) { - tmp = cast<Chunk>(src[i].first, offset); + tmp = cast<Chunk, ChunkSize>(src[i].first, offset); for (size_t n=0; n < Chunks; n++) { - chunk[n] &= get<Chunk>(tmp+n, src[i].second); + chunk[n] &= get<Chunk, ChunkSize>(tmp+n, src[i].second); } } } @@ -62,14 +64,14 @@ orChunks(size_t offset, const std::vector<std::pair<const void *, bool>> & src, static_assert(sizeof(Chunk) == ChunkSize, "sizeof(Chunk) == ChunkSize"); static_assert(ChunkSize*Chunks == 64, "ChunkSize*Chunks == 64"); Chunk * chunk = static_cast<Chunk *>(dest); - const Chunk * tmp = cast<Chunk>(src[0].first, offset); + const Chunk * tmp = cast<Chunk, ChunkSize>(src[0].first, offset); for (size_t n=0; n < Chunks; n++) { - chunk[n] = get<Chunk>(tmp+n, src[0].second); + chunk[n] = get<Chunk, ChunkSize>(tmp+n, src[0].second); } for (size_t i(1); i < src.size(); i++) { - tmp = cast<Chunk>(src[i].first, offset); + tmp = cast<Chunk, ChunkSize>(src[i].first, offset); for (size_t n=0; n < Chunks; n++) { - chunk[n] |= get<Chunk>(tmp+n, src[i].second); + chunk[n] |= get<Chunk, ChunkSize>(tmp+n, src[i].second); } } } |