Change name of endianness enum to order. This is often used with namespace qualifier, and endian::order is shorter and reads better than endian::endianness.

Continue infrastructure and test updates.
This commit is contained in:
Beman
2013-03-19 09:28:22 -04:00
parent 35a3fcb709
commit 736d9cce09
7 changed files with 104 additions and 103 deletions

View File

@ -44,11 +44,11 @@ namespace endian
template <class T>
inline T big(T x);
// Return: x if native endianness is big, otherwise reorder(x);
// Return: x if native endian order is big, otherwise reorder(x);
template <class T>
inline T little(T x);
// Return: x if native endianness is little, otherwise reorder(x);
// Return: x if native endian order is little, otherwise reorder(x);
//----------------------------------- implementation -----------------------------------//
// -- reorder implementation approach suggested by tymofey, with avoidance of
@ -120,7 +120,7 @@ namespace endian
}
template <class T>
inline T big(const T& x)
inline T big(T x)
{
# ifdef BOOST_BIG_ENDIAN
return x;
@ -130,7 +130,7 @@ namespace endian
}
template <class T>
inline T little(const T& x)
inline T little(T x)
{
# ifdef BOOST_LITTLE_ENDIAN
return x;

View File

@ -163,10 +163,10 @@ namespace boost
// endian class template and specializations ---------------------------------------//
BOOST_SCOPED_ENUM_START(endianness) { big, little, native }; BOOST_SCOPED_ENUM_END
BOOST_SCOPED_ENUM_START(order) { big, little, native }; BOOST_SCOPED_ENUM_END
BOOST_SCOPED_ENUM_START(alignment) { unaligned, aligned }; BOOST_SCOPED_ENUM_END
template <BOOST_SCOPED_ENUM(endianness) E, typename T, std::size_t n_bits,
template <BOOST_SCOPED_ENUM(order) E, typename T, std::size_t n_bits,
BOOST_SCOPED_ENUM(alignment) A = alignment::unaligned>
class endian;
@ -177,8 +177,8 @@ namespace boost
// unaligned big endian specialization
template <typename T, std::size_t n_bits>
class endian< endianness::big, T, n_bits, alignment::unaligned >
: cover_operators< endian< endianness::big, T, n_bits >, T >
class endian< order::big, T, n_bits, alignment::unaligned >
: cover_operators< endian< order::big, T, n_bits >, T >
{
BOOST_STATIC_ASSERT( (n_bits/8)*8 == n_bits );
public:
@ -210,8 +210,8 @@ namespace boost
// unaligned little endian specialization
template <typename T, std::size_t n_bits>
class endian< endianness::little, T, n_bits, alignment::unaligned >
: cover_operators< endian< endianness::little, T, n_bits >, T >
class endian< order::little, T, n_bits, alignment::unaligned >
: cover_operators< endian< order::little, T, n_bits >, T >
{
BOOST_STATIC_ASSERT( (n_bits/8)*8 == n_bits );
public:
@ -243,8 +243,8 @@ namespace boost
// unaligned native endian specialization
template <typename T, std::size_t n_bits>
class endian< endianness::native, T, n_bits, alignment::unaligned >
: cover_operators< endian< endianness::native, T, n_bits >, T >
class endian< order::native, T, n_bits, alignment::unaligned >
: cover_operators< endian< order::native, T, n_bits >, T >
{
BOOST_STATIC_ASSERT( (n_bits/8)*8 == n_bits );
public:
@ -274,8 +274,8 @@ namespace boost
// aligned big endian specialization
template <typename T, std::size_t n_bits>
class endian< endianness::big, T, n_bits, alignment::aligned >
: cover_operators< endian< endianness::big, T, n_bits, alignment::aligned >, T >
class endian< order::big, T, n_bits, alignment::aligned >
: cover_operators< endian< order::big, T, n_bits, alignment::aligned >, T >
{
BOOST_STATIC_ASSERT( (n_bits/8)*8 == n_bits );
BOOST_STATIC_ASSERT( sizeof(T) == n_bits/8 );
@ -303,8 +303,8 @@ namespace boost
// aligned little endian specialization
template <typename T, std::size_t n_bits>
class endian< endianness::little, T, n_bits, alignment::aligned >
: cover_operators< endian< endianness::little, T, n_bits, alignment::aligned >, T >
class endian< order::little, T, n_bits, alignment::aligned >
: cover_operators< endian< order::little, T, n_bits, alignment::aligned >, T >
{
BOOST_STATIC_ASSERT( (n_bits/8)*8 == n_bits );
BOOST_STATIC_ASSERT( sizeof(T) == n_bits/8 );
@ -333,64 +333,64 @@ namespace boost
// naming convention typedefs ------------------------------------------------------//
// unaligned big endian signed integer types
typedef endian< endianness::big, int_least8_t, 8 > big8_t;
typedef endian< endianness::big, int_least16_t, 16 > big16_t;
typedef endian< endianness::big, int_least32_t, 24 > big24_t;
typedef endian< endianness::big, int_least32_t, 32 > big32_t;
typedef endian< endianness::big, int_least64_t, 40 > big40_t;
typedef endian< endianness::big, int_least64_t, 48 > big48_t;
typedef endian< endianness::big, int_least64_t, 56 > big56_t;
typedef endian< endianness::big, int_least64_t, 64 > big64_t;
typedef endian< order::big, int_least8_t, 8 > big8_t;
typedef endian< order::big, int_least16_t, 16 > big16_t;
typedef endian< order::big, int_least32_t, 24 > big24_t;
typedef endian< order::big, int_least32_t, 32 > big32_t;
typedef endian< order::big, int_least64_t, 40 > big40_t;
typedef endian< order::big, int_least64_t, 48 > big48_t;
typedef endian< order::big, int_least64_t, 56 > big56_t;
typedef endian< order::big, int_least64_t, 64 > big64_t;
// unaligned big endian unsigned integer types
typedef endian< endianness::big, uint_least8_t, 8 > ubig8_t;
typedef endian< endianness::big, uint_least16_t, 16 > ubig16_t;
typedef endian< endianness::big, uint_least32_t, 24 > ubig24_t;
typedef endian< endianness::big, uint_least32_t, 32 > ubig32_t;
typedef endian< endianness::big, uint_least64_t, 40 > ubig40_t;
typedef endian< endianness::big, uint_least64_t, 48 > ubig48_t;
typedef endian< endianness::big, uint_least64_t, 56 > ubig56_t;
typedef endian< endianness::big, uint_least64_t, 64 > ubig64_t;
typedef endian< order::big, uint_least8_t, 8 > ubig8_t;
typedef endian< order::big, uint_least16_t, 16 > ubig16_t;
typedef endian< order::big, uint_least32_t, 24 > ubig24_t;
typedef endian< order::big, uint_least32_t, 32 > ubig32_t;
typedef endian< order::big, uint_least64_t, 40 > ubig40_t;
typedef endian< order::big, uint_least64_t, 48 > ubig48_t;
typedef endian< order::big, uint_least64_t, 56 > ubig56_t;
typedef endian< order::big, uint_least64_t, 64 > ubig64_t;
// unaligned little endian signed integer types
typedef endian< endianness::little, int_least8_t, 8 > little8_t;
typedef endian< endianness::little, int_least16_t, 16 > little16_t;
typedef endian< endianness::little, int_least32_t, 24 > little24_t;
typedef endian< endianness::little, int_least32_t, 32 > little32_t;
typedef endian< endianness::little, int_least64_t, 40 > little40_t;
typedef endian< endianness::little, int_least64_t, 48 > little48_t;
typedef endian< endianness::little, int_least64_t, 56 > little56_t;
typedef endian< endianness::little, int_least64_t, 64 > little64_t;
typedef endian< order::little, int_least8_t, 8 > little8_t;
typedef endian< order::little, int_least16_t, 16 > little16_t;
typedef endian< order::little, int_least32_t, 24 > little24_t;
typedef endian< order::little, int_least32_t, 32 > little32_t;
typedef endian< order::little, int_least64_t, 40 > little40_t;
typedef endian< order::little, int_least64_t, 48 > little48_t;
typedef endian< order::little, int_least64_t, 56 > little56_t;
typedef endian< order::little, int_least64_t, 64 > little64_t;
// unaligned little endian unsigned integer types
typedef endian< endianness::little, uint_least8_t, 8 > ulittle8_t;
typedef endian< endianness::little, uint_least16_t, 16 > ulittle16_t;
typedef endian< endianness::little, uint_least32_t, 24 > ulittle24_t;
typedef endian< endianness::little, uint_least32_t, 32 > ulittle32_t;
typedef endian< endianness::little, uint_least64_t, 40 > ulittle40_t;
typedef endian< endianness::little, uint_least64_t, 48 > ulittle48_t;
typedef endian< endianness::little, uint_least64_t, 56 > ulittle56_t;
typedef endian< endianness::little, uint_least64_t, 64 > ulittle64_t;
typedef endian< order::little, uint_least8_t, 8 > ulittle8_t;
typedef endian< order::little, uint_least16_t, 16 > ulittle16_t;
typedef endian< order::little, uint_least32_t, 24 > ulittle24_t;
typedef endian< order::little, uint_least32_t, 32 > ulittle32_t;
typedef endian< order::little, uint_least64_t, 40 > ulittle40_t;
typedef endian< order::little, uint_least64_t, 48 > ulittle48_t;
typedef endian< order::little, uint_least64_t, 56 > ulittle56_t;
typedef endian< order::little, uint_least64_t, 64 > ulittle64_t;
// unaligned native endian signed integer types
typedef endian< endianness::native, int_least8_t, 8 > native8_t;
typedef endian< endianness::native, int_least16_t, 16 > native16_t;
typedef endian< endianness::native, int_least32_t, 24 > native24_t;
typedef endian< endianness::native, int_least32_t, 32 > native32_t;
typedef endian< endianness::native, int_least64_t, 40 > native40_t;
typedef endian< endianness::native, int_least64_t, 48 > native48_t;
typedef endian< endianness::native, int_least64_t, 56 > native56_t;
typedef endian< endianness::native, int_least64_t, 64 > native64_t;
typedef endian< order::native, int_least8_t, 8 > native8_t;
typedef endian< order::native, int_least16_t, 16 > native16_t;
typedef endian< order::native, int_least32_t, 24 > native24_t;
typedef endian< order::native, int_least32_t, 32 > native32_t;
typedef endian< order::native, int_least64_t, 40 > native40_t;
typedef endian< order::native, int_least64_t, 48 > native48_t;
typedef endian< order::native, int_least64_t, 56 > native56_t;
typedef endian< order::native, int_least64_t, 64 > native64_t;
// unaligned native endian unsigned integer types
typedef endian< endianness::native, uint_least8_t, 8 > unative8_t;
typedef endian< endianness::native, uint_least16_t, 16 > unative16_t;
typedef endian< endianness::native, uint_least32_t, 24 > unative24_t;
typedef endian< endianness::native, uint_least32_t, 32 > unative32_t;
typedef endian< endianness::native, uint_least64_t, 40 > unative40_t;
typedef endian< endianness::native, uint_least64_t, 48 > unative48_t;
typedef endian< endianness::native, uint_least64_t, 56 > unative56_t;
typedef endian< endianness::native, uint_least64_t, 64 > unative64_t;
typedef endian< order::native, uint_least8_t, 8 > unative8_t;
typedef endian< order::native, uint_least16_t, 16 > unative16_t;
typedef endian< order::native, uint_least32_t, 24 > unative24_t;
typedef endian< order::native, uint_least32_t, 32 > unative32_t;
typedef endian< order::native, uint_least64_t, 40 > unative40_t;
typedef endian< order::native, uint_least64_t, 48 > unative48_t;
typedef endian< order::native, uint_least64_t, 56 > unative56_t;
typedef endian< order::native, uint_least64_t, 64 > unative64_t;
#define BOOST_HAS_INT16_T
#define BOOST_HAS_INT32_T
@ -406,24 +406,24 @@ namespace boost
// <cstdint> types are superior for this use case
# if defined(BOOST_HAS_INT16_T)
typedef endian< endianness::big, int16_t, 16, alignment::aligned > aligned_big16_t;
typedef endian< endianness::big, uint16_t, 16, alignment::aligned > aligned_ubig16_t;
typedef endian< endianness::little, int16_t, 16, alignment::aligned > aligned_little16_t;
typedef endian< endianness::little, uint16_t, 16, alignment::aligned > aligned_ulittle16_t;
typedef endian< order::big, int16_t, 16, alignment::aligned > aligned_big16_t;
typedef endian< order::big, uint16_t, 16, alignment::aligned > aligned_ubig16_t;
typedef endian< order::little, int16_t, 16, alignment::aligned > aligned_little16_t;
typedef endian< order::little, uint16_t, 16, alignment::aligned > aligned_ulittle16_t;
# endif
# if defined(BOOST_HAS_INT32_T)
typedef endian< endianness::big, int32_t, 32, alignment::aligned > aligned_big32_t;
typedef endian< endianness::big, uint32_t, 32, alignment::aligned > aligned_ubig32_t;
typedef endian< endianness::little, int32_t, 32, alignment::aligned > aligned_little32_t;
typedef endian< endianness::little, uint32_t, 32, alignment::aligned > aligned_ulittle32_t;
typedef endian< order::big, int32_t, 32, alignment::aligned > aligned_big32_t;
typedef endian< order::big, uint32_t, 32, alignment::aligned > aligned_ubig32_t;
typedef endian< order::little, int32_t, 32, alignment::aligned > aligned_little32_t;
typedef endian< order::little, uint32_t, 32, alignment::aligned > aligned_ulittle32_t;
# endif
# if defined(BOOST_HAS_INT64_T)
typedef endian< endianness::big, int64_t, 64, alignment::aligned > aligned_big64_t;
typedef endian< endianness::big, uint64_t, 64, alignment::aligned > aligned_ubig64_t;
typedef endian< endianness::little, int64_t, 64, alignment::aligned > aligned_little64_t;
typedef endian< endianness::little, uint64_t, 64, alignment::aligned > aligned_ulittle64_t;
typedef endian< order::big, int64_t, 64, alignment::aligned > aligned_big64_t;
typedef endian< order::big, uint64_t, 64, alignment::aligned > aligned_ubig64_t;
typedef endian< order::little, int64_t, 64, alignment::aligned > aligned_little64_t;
typedef endian< order::little, uint64_t, 64, alignment::aligned > aligned_ulittle64_t;
# endif
} // namespace endian

View File

@ -8,10 +8,10 @@
#define _CRT_SECURE_NO_WARNINGS
#include <cstdlib>
#include <boost/endian/conversion.hpp>
#include <boost/endian/converters.hpp>
#include <boost/random.hpp>
#include <boost/cstdint.hpp>
#include <boost/endian/support/timer.hpp>
#include <boost/timer/timer.hpp>
#include <iostream>
#include <string>
@ -34,15 +34,16 @@ namespace
typedef void (*timee_func)(int32_t, int32_t&);
#endif
endian::microsecond_t benchmark(timee_func timee, const char* msg,
endian::microsecond_t overhead = 0)
typedef boost::timer::nanosecond_type nanosecond_t;
nanosecond_t benchmark(timee_func timee, const char* msg,
nanosecond_t overhead = 0)
{
if (verbose)
cout << "\nRunning benchmark..." << endl;
int64_t sum = 0;
endian::times_t times;
endian::microsecond_t cpu_time;
endian::run_timer t(places);
boost::timer::cpu_times times;
nanosecond_t cpu_time;
boost::timer::auto_cpu_timer t(places);
for (long long i = n; i; --i)
{
@ -53,8 +54,9 @@ namespace
timee(static_cast<int32_t>(i), y);
sum += y;
# endif
}
times = t.stop();
}
t.stop();
times = t.elapsed();
cpu_time = (times.system + times.user) - overhead;
const long double sec = 1000000.0L;
cout.setf(std::ios_base::fixed, std::ios_base::floatfield);
@ -192,7 +194,7 @@ int main(int argc, char * argv[])
{
process_command_line(argc, argv);
endian::microsecond_t overhead;
nanosecond_t overhead;
#ifndef BOOST_TWO_ARG
overhead = benchmark(modify_noop, "modify no-op");

View File

@ -107,9 +107,9 @@ namespace
# endif
}
// detect_endianness -----------------------------------------------------//
// detect_order -----------------------------------------------------//
void detect_endianness()
void detect_order()
{
union View
{
@ -146,7 +146,7 @@ namespace
exit(1);
}
cout << "That should not matter and is presented for your information only.\n";
} // detect_endianness
} // detect_order
// check_data ------------------------------------------------------------//
@ -714,7 +714,7 @@ namespace
void check_udt()
{
typedef boost::endian::endian< endianness::big, MyInt, 32 > mybig32_t;
typedef boost::endian::endian< order::big, MyInt, 32 > mybig32_t;
mybig32_t v(10);
cout << "+v is " << +v << endl;
@ -765,7 +765,7 @@ int cpp_main( int argc, char * argv[] )
iterations = atol( argv[1] );
if ( iterations < 1 ) iterations = 1;
detect_endianness();
detect_order();
check_size();
check_alignment();
check_representation_and_range_and_ops();

View File

@ -32,9 +32,11 @@
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\common.props" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\common.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
@ -74,6 +76,7 @@
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="..\..\converter_test.cpp" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">

View File

@ -11,11 +11,9 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "scoped_enum_emulation_test"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "endian_example", "endian_example\endian_example.vcxproj", "{8638A3D8-D121-40BF-82E5-127F1B1B2CB2}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "conversion_test", "conversion_test\conversion_test.vcxproj", "{9FA33B0B-2B00-49E8-A892-E049D86076A9}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "benchmark", "benchmark\benchmark.vcxproj", "{C9FEAE75-4DD9-44F5-B302-9910559A91BE}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "conversion2_test", "conversion2_test\conversion2_test.vcxproj", "{6FAF820B-F436-46A2-A1DD-4A4B7025C3D0}"
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "converter_test", "converter_test\converter_test.vcxproj", "{EAE18F4D-AAF2-4C19-86FB-1144B5BD5993}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@ -43,18 +41,14 @@ Global
{8638A3D8-D121-40BF-82E5-127F1B1B2CB2}.Debug|Win32.Build.0 = Debug|Win32
{8638A3D8-D121-40BF-82E5-127F1B1B2CB2}.Release|Win32.ActiveCfg = Release|Win32
{8638A3D8-D121-40BF-82E5-127F1B1B2CB2}.Release|Win32.Build.0 = Release|Win32
{9FA33B0B-2B00-49E8-A892-E049D86076A9}.Debug|Win32.ActiveCfg = Debug|Win32
{9FA33B0B-2B00-49E8-A892-E049D86076A9}.Debug|Win32.Build.0 = Debug|Win32
{9FA33B0B-2B00-49E8-A892-E049D86076A9}.Release|Win32.ActiveCfg = Release|Win32
{9FA33B0B-2B00-49E8-A892-E049D86076A9}.Release|Win32.Build.0 = Release|Win32
{C9FEAE75-4DD9-44F5-B302-9910559A91BE}.Debug|Win32.ActiveCfg = Debug|Win32
{C9FEAE75-4DD9-44F5-B302-9910559A91BE}.Debug|Win32.Build.0 = Debug|Win32
{C9FEAE75-4DD9-44F5-B302-9910559A91BE}.Release|Win32.ActiveCfg = Release|Win32
{C9FEAE75-4DD9-44F5-B302-9910559A91BE}.Release|Win32.Build.0 = Release|Win32
{6FAF820B-F436-46A2-A1DD-4A4B7025C3D0}.Debug|Win32.ActiveCfg = Debug|Win32
{6FAF820B-F436-46A2-A1DD-4A4B7025C3D0}.Debug|Win32.Build.0 = Debug|Win32
{6FAF820B-F436-46A2-A1DD-4A4B7025C3D0}.Release|Win32.ActiveCfg = Release|Win32
{6FAF820B-F436-46A2-A1DD-4A4B7025C3D0}.Release|Win32.Build.0 = Release|Win32
{EAE18F4D-AAF2-4C19-86FB-1144B5BD5993}.Debug|Win32.ActiveCfg = Debug|Win32
{EAE18F4D-AAF2-4C19-86FB-1144B5BD5993}.Debug|Win32.Build.0 = Debug|Win32
{EAE18F4D-AAF2-4C19-86FB-1144B5BD5993}.Release|Win32.ActiveCfg = Release|Win32
{EAE18F4D-AAF2-4C19-86FB-1144B5BD5993}.Release|Win32.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE

View File

@ -7,7 +7,9 @@
// See documentation at http://www.boost.org/libs/utility/scoped_enum_emulation.html
#include <boost/detail/disable_warnings.hpp>
// #include <boost/detail/disable_warnings.hpp>
// #include <boost/config/warning_disable.hpp>
#include <boost/detail/scoped_enum_emulation.hpp>
#include <boost/assert.hpp>