summaryrefslogtreecommitdiffstatshomepage
path: root/src/lib/netlist/plib/ptypes.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/netlist/plib/ptypes.h')
-rw-r--r--src/lib/netlist/plib/ptypes.h44
1 files changed, 32 insertions, 12 deletions
diff --git a/src/lib/netlist/plib/ptypes.h b/src/lib/netlist/plib/ptypes.h
index 7379ed68840..5efac1fbad5 100644
--- a/src/lib/netlist/plib/ptypes.h
+++ b/src/lib/netlist/plib/ptypes.h
@@ -23,19 +23,17 @@
#endif
// noexcept on move operator -> issue with macosx clang
-#define PCOPYASSIGNMOVE(name, def) \
- name(const name &) = def; \
- name(name &&) noexcept = def; \
- name &operator=(const name &) = def; \
- name &operator=(name &&) noexcept = def;
+#define PCOPYASSIGNMOVE(name, def) \
+ PCOPYASSIGN(name, def) \
+ PMOVEASSIGN(name, def)
#define PCOPYASSIGN(name, def) \
- name(const name &) = def; \
- name &operator=(const name &) = def; \
+ name(const name &) = def; \
+ name &operator=(const name &) = def;
#define PMOVEASSIGN(name, def) \
- name(name &&) noexcept = def; \
- name &operator=(name &&) noexcept = def;
+ name(name &&) /*noexcept*/ = def; \
+ name &operator=(name &&) /*noexcept*/ = def;
namespace plib
{
@@ -261,12 +259,34 @@ namespace plib
using type = typename fast_type_for_size<size_for_bits<bits>::value>::type;
};
- //============================================================
- // Avoid unused variable warnings
- //============================================================
+ /// \brief mark arguments as not used for compiler
+ ///
+ /// @tparam Ts unsused parameters
+ ///
template<typename... Ts>
inline void unused_var(Ts&&...) noexcept {} // NOLINT(readability-named-parameter)
+ /// \brief copy type S to type D byte by byte
+ ///
+ /// The purpose of this copy function is to suppress compiler warnings.
+ /// Use at your own risk. This is dangerous.
+ ///
+ /// \param s Source object
+ /// \param d Destination object
+ /// \tparam S Type of source object
+ /// \tparam D Type of destination object
+ template <typename S, typename D>
+ void reinterpret_copy(S &s, D &d)
+ {
+ static_assert(sizeof(D) >= sizeof(S), "size mismatch");
+ // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
+ auto *dp = reinterpret_cast<std::uint8_t *>(&d);
+ // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
+ const auto *sp = reinterpret_cast<std::uint8_t *>(&s);
+ std::copy(sp, sp + sizeof(S), dp);
+ }
+
+
} // namespace plib
//============================================================