34 lines
957 B
C
34 lines
957 B
C
|
#pragma once
|
||
|
|
||
|
#include "platform.h"
|
||
|
|
||
|
template <typename TDestination, typename TSource>
|
||
|
typename etl::enable_if<(sizeof(TDestination) == sizeof(TSource)) &&
|
||
|
etl::is_trivially_copyable<TSource>::value &&
|
||
|
etl::is_trivially_copyable<TDestination>::value, TDestination>::type
|
||
|
bit_cast(const TSource& source) ETL_NOEXCEPT
|
||
|
{
|
||
|
TDestination destination;
|
||
|
|
||
|
memcpy(&destination, &source, sizeof(TDestination));
|
||
|
|
||
|
return destination;
|
||
|
}
|
||
|
|
||
|
template <typename TDestination, typename TSource>
|
||
|
ETL_CONSTEXPR
|
||
|
typename etl::enable_if<(sizeof(TDestination) == sizeof(TSource)) &&
|
||
|
etl::is_trivially_copyable<TSource>::value &&
|
||
|
etl::is_trivially_copyable<TDestination>::value, TDestination>::type
|
||
|
bit_cast(const TSource& source) ETL_NOEXCEPT
|
||
|
{
|
||
|
TDestination destination;
|
||
|
|
||
|
__builtin_memcpy(&destination, &source, sizeof(TDestination));
|
||
|
|
||
|
return destination;
|
||
|
}
|
||
|
|
||
|
|
||
|
|