summaryrefslogtreecommitdiffstats
path: root/eval
diff options
context:
space:
mode:
authorHåvard Pettersen <havardpe@oath.com>2019-10-24 10:53:23 +0000
committerHåvard Pettersen <havardpe@oath.com>2019-10-24 10:53:23 +0000
commit101ff2421151ded70dd6064f0b6583de98db8df3 (patch)
tree57021ceafda5f84865e5b2da0dc2202a1234ca12 /eval
parentcb6ff89a2bad626b215b50779a4301e5619295b6 (diff)
avoid using union for type conversion
Diffstat (limited to 'eval')
-rw-r--r--eval/src/vespa/eval/eval/vm_forest.cpp24
1 files changed, 9 insertions, 15 deletions
diff --git a/eval/src/vespa/eval/eval/vm_forest.cpp b/eval/src/vespa/eval/eval/vm_forest.cpp
index ff72c3f6521..e0fac9405ce 100644
--- a/eval/src/vespa/eval/eval/vm_forest.cpp
+++ b/eval/src/vespa/eval/eval/vm_forest.cpp
@@ -112,24 +112,18 @@ double general_find_leaf(const double *input, const uint32_t *pos, uint32_t node
//-----------------------------------------------------------------------------
void encode_large_const(double value, std::vector<uint32_t> &model_out) {
- union {
- double d[1];
- uint32_t i[2];
- } buf;
- assert(sizeof(buf) == sizeof(double));
- buf.d[0] = value;
- model_out.push_back(buf.i[0]);
- model_out.push_back(buf.i[1]);
+ uint32_t buf[2];
+ static_assert(sizeof(buf) == sizeof(value));
+ memcpy(buf, &value, sizeof(value));
+ model_out.push_back(buf[0]);
+ model_out.push_back(buf[1]);
}
void encode_const(float value, std::vector<uint32_t> &model_out) {
- union {
- float f[1];
- uint32_t i[1];
- } buf;
- assert(sizeof(buf) == sizeof(float));
- buf.f[0] = value;
- model_out.push_back(buf.i[0]);
+ uint32_t buf;
+ static_assert(sizeof(buf) == sizeof(value));
+ memcpy(&buf, &value, sizeof(value));
+ model_out.push_back(buf);
}
uint32_t encode_node(const nodes::Node &node_in, std::vector<uint32_t> &model_out);