Set up infrastructure, change to new names, clean up comments.

This commit is contained in:
Beman
2013-03-18 20:39:21 -04:00
parent d7120e6fac
commit 35a3fcb709
3 changed files with 103 additions and 30 deletions

View File

@@ -5,36 +5,21 @@
// Distributed under the Boost Software License, Version 1.0. // Distributed under the Boost Software License, Version 1.0.
// http://www.boost.org/LICENSE_1_0.txt // http://www.boost.org/LICENSE_1_0.txt
#ifndef BOOST_ENDIAN_CONVERSION2_HPP #ifndef BOOST_ENDIAN_CONVERTERS_HPP
#define BOOST_ENDIAN_CONVERSION2_HPP #define BOOST_ENDIAN_CONVERTERS_HPP
#include <boost/detail/endian.hpp> #include <boost/detail/endian.hpp>
#include <boost/cstdint.hpp> #include <boost/cstdint.hpp>
#include <algorithm> #include <algorithm>
//--------------------------------------------------------------------------------------//
//
// This header explores
// -- value returning interface approach suggested by Phil Endecott.
// -- additional reorder overloads for floating point types as requested by Vicente
// Botet and others.
// -- reorder implementation approach suggested by tymofey, with avoidance of
// undefined behavior as suggested by Giovanni Piero Deretta, and a further
// refinement suggested by Pyry Jahkola.
// -- general reorder function template to meet requests for UDT support by
// Vicente Botet and others.
// -- general reorder function template implementation approach using std::reverse
// suggested by Mathias Gaunard
//
//--------------------------------------------------------------------------------------//
//------------------------------------- synopsis ---------------------------------------// //------------------------------------- synopsis ---------------------------------------//
namespace boost namespace boost
{ {
namespace endian2 namespace endian
{ {
// reverse byte order (i.e. endianness) // reverse byte order (i.e. endianness)
// value returning interface approach suggested by Phil Endecott.
inline int16_t reorder(int16_t x); inline int16_t reorder(int16_t x);
inline int32_t reorder(int32_t x); inline int32_t reorder(int32_t x);
@@ -43,6 +28,8 @@ namespace endian2
inline uint32_t reorder(uint32_t x); inline uint32_t reorder(uint32_t x);
inline uint64_t reorder(uint64_t x); inline uint64_t reorder(uint64_t x);
// additional reorder overloads for floating point types as requested by Vicente
// Botet and others.
// TODO: Need implementation // TODO: Need implementation
// TODO: Need to verify the return does not invoke undefined behavior (as might happen // TODO: Need to verify the return does not invoke undefined behavior (as might happen
// if there are unutterable floating point values, such as happens with the unutterable // if there are unutterable floating point values, such as happens with the unutterable
@@ -50,20 +37,23 @@ namespace endian2
inline float reorder(float x); inline float reorder(float x);
inline double reorder(double x); inline double reorder(double x);
// TODO: Would pass by value be better for the following functions? // general reorder function template to meet requests for UDT support by Vicente
// Botet and others.
template <class T>
inline T reorder(T x);
template <class T> template <class T>
inline T reorder(const T& x); inline T big(T x);
template <class T>
inline T big(const T& x);
// Return: x if native endianness is big, otherwise reorder(x); // Return: x if native endianness is big, otherwise reorder(x);
template <class T> template <class T>
inline T little(const T& x); inline T little(T x);
// Return: x if native endianness is little, otherwise reorder(x); // Return: x if native endianness is little, otherwise reorder(x);
//----------------------------------- implementation -----------------------------------// //----------------------------------- implementation -----------------------------------//
// -- reorder implementation approach suggested by tymofey, with avoidance of
// undefined behavior as suggested by Giovanni Piero Deretta, and a further
// refinement suggested by Pyry Jahkola.
inline int16_t reorder(int16_t x) inline int16_t reorder(int16_t x)
{ {
@@ -116,8 +106,10 @@ namespace endian2
} }
// general reorder function template implementation approach using std::reverse
// suggested by Mathias Gaunard
template <class T> template <class T>
inline T reorder(const T& x) inline T reorder(T x)
{ {
T tmp; T tmp;
std::reverse( std::reverse(
@@ -147,7 +139,7 @@ namespace endian2
# endif # endif
} }
} // namespace endian2 } // namespace endian
} // namespace boost } // namespace boost
#endif // BOOST_ENDIAN_CONVERSION2_HPP #endif // BOOST_ENDIAN_CONVERTERS_HPP

View File

@@ -9,12 +9,12 @@
#include <boost/endian/detail/disable_warnings.hpp> #include <boost/endian/detail/disable_warnings.hpp>
#include <boost/endian/conversion2.hpp> #include <boost/endian/converters.hpp>
#include <boost/detail/lightweight_main.hpp> #include <boost/detail/lightweight_main.hpp>
#include <boost/detail/lightweight_test.hpp> #include <boost/detail/lightweight_test.hpp>
#include <iostream> #include <iostream>
namespace be = boost::endian2; namespace be = boost::endian;
namespace namespace
{ {

View File

@@ -0,0 +1,81 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{EAE18F4D-AAF2-4C19-86FB-1144B5BD5993}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>converter_test</RootNamespace>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</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" />
</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" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>
</PrecompiledHeader>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>