annotate include/core/bit_cast.h @ 377:1b0b8e746d83 default tip

CI/windows: stupid msys2
author Paper <paper@tflc.us>
date Fri, 25 Jul 2025 12:40:25 -0400
parents 47c9f8502269
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
364
99c961c91809 core: refactor out byte stream into its own file
Paper <paper@paper.us.eu.org>
parents:
diff changeset
1 #ifndef MINORI_CORE_BIT_CAST_H_
99c961c91809 core: refactor out byte stream into its own file
Paper <paper@paper.us.eu.org>
parents:
diff changeset
2 #define MINORI_CORE_BIT_CAST_H_
99c961c91809 core: refactor out byte stream into its own file
Paper <paper@paper.us.eu.org>
parents:
diff changeset
3
99c961c91809 core: refactor out byte stream into its own file
Paper <paper@paper.us.eu.org>
parents:
diff changeset
4 /* XXX need to move more "core" stuff into the minori namespace */
99c961c91809 core: refactor out byte stream into its own file
Paper <paper@paper.us.eu.org>
parents:
diff changeset
5
369
47c9f8502269 *: clang-format all the things
Paper <paper@tflc.us>
parents: 364
diff changeset
6 #include <cstring>
364
99c961c91809 core: refactor out byte stream into its own file
Paper <paper@paper.us.eu.org>
parents:
diff changeset
7 #include <memory>
369
47c9f8502269 *: clang-format all the things
Paper <paper@tflc.us>
parents: 364
diff changeset
8 #include <type_traits>
364
99c961c91809 core: refactor out byte stream into its own file
Paper <paper@paper.us.eu.org>
parents:
diff changeset
9
99c961c91809 core: refactor out byte stream into its own file
Paper <paper@paper.us.eu.org>
parents:
diff changeset
10 namespace minori {
99c961c91809 core: refactor out byte stream into its own file
Paper <paper@paper.us.eu.org>
parents:
diff changeset
11
99c961c91809 core: refactor out byte stream into its own file
Paper <paper@paper.us.eu.org>
parents:
diff changeset
12 /* C++17 doesn't have this unfortunately */
99c961c91809 core: refactor out byte stream into its own file
Paper <paper@paper.us.eu.org>
parents:
diff changeset
13 template<typename To, class From>
369
47c9f8502269 *: clang-format all the things
Paper <paper@tflc.us>
parents: 364
diff changeset
14 To BitCast(From from)
47c9f8502269 *: clang-format all the things
Paper <paper@tflc.us>
parents: 364
diff changeset
15 {
364
99c961c91809 core: refactor out byte stream into its own file
Paper <paper@paper.us.eu.org>
parents:
diff changeset
16 static_assert(sizeof(From) == sizeof(To), "Types must match sizes");
99c961c91809 core: refactor out byte stream into its own file
Paper <paper@paper.us.eu.org>
parents:
diff changeset
17 static_assert(std::is_pod<From>::value, "Requires POD input");
99c961c91809 core: refactor out byte stream into its own file
Paper <paper@paper.us.eu.org>
parents:
diff changeset
18 static_assert(std::is_pod<To>::value, "Requires POD output");
99c961c91809 core: refactor out byte stream into its own file
Paper <paper@paper.us.eu.org>
parents:
diff changeset
19
99c961c91809 core: refactor out byte stream into its own file
Paper <paper@paper.us.eu.org>
parents:
diff changeset
20 To to;
99c961c91809 core: refactor out byte stream into its own file
Paper <paper@paper.us.eu.org>
parents:
diff changeset
21 std::memcpy(std::addressof(to), std::addressof(from), sizeof(from));
99c961c91809 core: refactor out byte stream into its own file
Paper <paper@paper.us.eu.org>
parents:
diff changeset
22 return to;
99c961c91809 core: refactor out byte stream into its own file
Paper <paper@paper.us.eu.org>
parents:
diff changeset
23 }
99c961c91809 core: refactor out byte stream into its own file
Paper <paper@paper.us.eu.org>
parents:
diff changeset
24
369
47c9f8502269 *: clang-format all the things
Paper <paper@tflc.us>
parents: 364
diff changeset
25 } // namespace minori
364
99c961c91809 core: refactor out byte stream into its own file
Paper <paper@paper.us.eu.org>
parents:
diff changeset
26
99c961c91809 core: refactor out byte stream into its own file
Paper <paper@paper.us.eu.org>
parents:
diff changeset
27 #endif /* MINORI_CORE_BIT_CAST_H_ */