diff options
Diffstat (limited to 'src/lib/netlist/plib/ptypes.h')
-rw-r--r-- | src/lib/netlist/plib/ptypes.h | 44 |
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 //============================================================ |