diff --git a/library/PolyVoxCore/CMakeLists.txt b/library/PolyVoxCore/CMakeLists.txt index f5cb490c..b0304218 100644 --- a/library/PolyVoxCore/CMakeLists.txt +++ b/library/PolyVoxCore/CMakeLists.txt @@ -107,6 +107,8 @@ SET(IMPL_INC_FILES include/PolyVoxCore/Impl/AStarPathfinderImpl.h include/PolyVoxCore/Impl/Block.h include/PolyVoxCore/Impl/Block.inl + include/PolyVoxCore/Impl/CompilerCapabilities.h + include/PolyVoxCore/Impl/Config.h include/PolyVoxCore/Impl/ErrorHandling.h include/PolyVoxCore/Impl/MarchingCubesTables.h include/PolyVoxCore/Impl/RandomUnitVectors.h diff --git a/library/PolyVoxCore/include/PolyVoxCore/AStarPathfinder.inl b/library/PolyVoxCore/include/PolyVoxCore/AStarPathfinder.inl index c8fce4fb..4df72be0 100644 --- a/library/PolyVoxCore/include/PolyVoxCore/AStarPathfinder.inl +++ b/library/PolyVoxCore/include/PolyVoxCore/AStarPathfinder.inl @@ -161,7 +161,7 @@ namespace PolyVox if((openNodes.empty()) || (openNodes.getFirst() != endNode)) { //In this case we failed to find a valid path. - throw std::runtime_error("No path found"); + POLYVOX_THROW(std::runtime_error, "No path found"); } else { diff --git a/library/PolyVoxCore/include/PolyVoxCore/Impl/Block.inl b/library/PolyVoxCore/include/PolyVoxCore/Impl/Block.inl index 226e7ded..12184422 100644 --- a/library/PolyVoxCore/include/PolyVoxCore/Impl/Block.inl +++ b/library/PolyVoxCore/include/PolyVoxCore/Impl/Block.inl @@ -21,7 +21,9 @@ freely, subject to the following restrictions: distribution. *******************************************************************************/ +#include "PolyVoxCore/Impl/ErrorHandling.h" #include "PolyVoxCore/Impl/Utility.h" + #include "PolyVoxCore/Vector.h" #include "PolyVoxCore/Impl/ErrorHandling.h" @@ -131,7 +133,7 @@ namespace PolyVox //Release mode validation if(!isPowerOf2(uSideLength)) { - throw std::invalid_argument("Block side length must be a power of two."); + POLYVOX_THROW(std::invalid_argument, "Block side length must be a power of two."); } //Compute the side length diff --git a/library/PolyVoxCore/include/PolyVoxCore/Impl/CompilerCapabilities.h b/library/PolyVoxCore/include/PolyVoxCore/Impl/CompilerCapabilities.h index 2d10b5ff..074c3555 100644 --- a/library/PolyVoxCore/include/PolyVoxCore/Impl/CompilerCapabilities.h +++ b/library/PolyVoxCore/include/PolyVoxCore/Impl/CompilerCapabilities.h @@ -1,20 +1,23 @@ /* - * This file provides the default compiler capabilities for for Visual Studio. - * On other compilers CMake will detect which features are available and create - * a file like this. - * - * To Enable these features in Visual Studio, define the variables in this file. -*/ + * This file describes the capabilities of the C++ compiler and is used to determine which features to enable in PolyVox. + * It assumes that if the compiler is from VS2008 or earlier then no C++11 is present, otherwise it assumes full support + * is present. + * + * Not that this file is usually overwritten by CMake which does careful tests of the true compiler capabilities. However, + * we provide this default file so that CMake is not actually required for users of PolyVox and they can instead just drop + * PolyVox code into their project/makefile if they prefer. + */ #ifndef __PolyVox_CompilerCapabilities_H__ #define __PolyVox_CompilerCapabilities_H__ -//#define HAS_CXX11_CONSTEXPR - -#define HAS_CXX11_STATIC_ASSERT - -#define HAS_CXX11_CSTDINT_H - -#define HAS_CXX11_SHARED_PTR +// If we are not using Visual Studio (or we are but it +// is a recent version) then assume support for these. +#if !defined(_MSC_VER) || (_MSC_VER >= 1600) + #define HAS_CXX11_CONSTEXPR + #define HAS_CXX11_STATIC_ASSERT + #define HAS_CXX11_CSTDINT_H + #define HAS_CXX11_SHARED_PTR +#endif #endif diff --git a/library/PolyVoxCore/include/PolyVoxCore/Impl/Config.h b/library/PolyVoxCore/include/PolyVoxCore/Impl/Config.h new file mode 100644 index 00000000..e97e27af --- /dev/null +++ b/library/PolyVoxCore/include/PolyVoxCore/Impl/Config.h @@ -0,0 +1,30 @@ +/******************************************************************************* +Copyright (c) 2005-2009 David Williams + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*******************************************************************************/ + +#ifndef __PolyVox_Config_H__ +#define __PolyVox_Config_H__ + +#define POLYVOX_ASSERTS_ENABLED +#define POLYVOX_THROW_ENABLED + +#endif diff --git a/library/PolyVoxCore/include/PolyVoxCore/Impl/ErrorHandling.h b/library/PolyVoxCore/include/PolyVoxCore/Impl/ErrorHandling.h index d3ef8b49..8d434c9a 100644 --- a/library/PolyVoxCore/include/PolyVoxCore/Impl/ErrorHandling.h +++ b/library/PolyVoxCore/include/PolyVoxCore/Impl/ErrorHandling.h @@ -24,13 +24,12 @@ freely, subject to the following restrictions: #ifndef __PolyVox_ErrorHandling_H__ #define __PolyVox_ErrorHandling_H__ +#include "PolyVoxCore/Impl/Config.h" + #include //For std::exit #include //For std::cerr #include -#define POLYVOX_ASSERTS_ENABLED -//#define POLYVOX_THROW_ENABLED - #if defined(_MSC_VER) #define POLYVOX_HALT() __debugbreak() #else diff --git a/library/PolyVoxCore/include/PolyVoxCore/Impl/TypeDef.h b/library/PolyVoxCore/include/PolyVoxCore/Impl/TypeDef.h index 3724efe4..4500207e 100644 --- a/library/PolyVoxCore/include/PolyVoxCore/Impl/TypeDef.h +++ b/library/PolyVoxCore/include/PolyVoxCore/Impl/TypeDef.h @@ -101,13 +101,12 @@ freely, subject to the following restrictions: #if defined(HAS_CXX11_CSTDINT_H) #include #else - #include - using boost::int8_t; - using boost::int16_t; - using boost::int32_t; - using boost::uint8_t; - using boost::uint16_t; - using boost::uint32_t; + typedef signed char int8_t; + typedef unsigned char uint8_t; + typedef short int16_t; + typedef unsigned short uint16_t; + typedef long int32_t; + typedef unsigned long uint32_t; #endif #if defined(HAS_CXX11_SHARED_PTR) diff --git a/library/PolyVoxCore/include/PolyVoxCore/LargeVolume.inl b/library/PolyVoxCore/include/PolyVoxCore/LargeVolume.inl index c78abd20..fc476908 100644 --- a/library/PolyVoxCore/include/PolyVoxCore/LargeVolume.inl +++ b/library/PolyVoxCore/include/PolyVoxCore/LargeVolume.inl @@ -21,6 +21,8 @@ freely, subject to the following restrictions: distribution. *******************************************************************************/ +#include "PolyVoxCore/Impl/ErrorHandling.h" + //Included here rather than in the .h because it refers to LargeVolume (avoids forward declaration) #include "PolyVoxCore/ConstVolumeProxy.h" @@ -471,11 +473,11 @@ namespace PolyVox //Release mode validation if(uBlockSideLength == 0) { - throw std::invalid_argument("Block side length cannot be zero."); + POLYVOX_THROW(std::invalid_argument, "Block side length cannot be zero."); } if(!isPowerOf2(uBlockSideLength)) { - throw std::invalid_argument("Block side length must be a power of two."); + POLYVOX_THROW(std::invalid_argument, "Block side length must be a power of two."); } m_uTimestamper = 0; diff --git a/library/PolyVoxCore/include/PolyVoxCore/SimpleVolume.inl b/library/PolyVoxCore/include/PolyVoxCore/SimpleVolume.inl index 62b48b4a..a818d70b 100644 --- a/library/PolyVoxCore/include/PolyVoxCore/SimpleVolume.inl +++ b/library/PolyVoxCore/include/PolyVoxCore/SimpleVolume.inl @@ -21,6 +21,8 @@ freely, subject to the following restrictions: distribution. *******************************************************************************/ +#include "PolyVoxCore/Impl/ErrorHandling.h" + namespace PolyVox { //////////////////////////////////////////////////////////////////////////////// @@ -253,15 +255,15 @@ namespace PolyVox //Release mode validation if(uBlockSideLength < 8) { - throw std::invalid_argument("Block side length should be at least 8"); + POLYVOX_THROW(std::invalid_argument, "Block side length should be at least 8"); } if(uBlockSideLength > 256) { - throw std::invalid_argument("Block side length should not be more than 256"); + POLYVOX_THROW(std::invalid_argument, "Block side length should not be more than 256"); } if(!isPowerOf2(uBlockSideLength)) { - throw std::invalid_argument("Block side length must be a power of two."); + POLYVOX_THROW(std::invalid_argument, "Block side length must be a power of two."); } this->m_regValidRegion = regValidRegion; diff --git a/library/PolyVoxCore/include/PolyVoxCore/SimpleVolumeBlock.inl b/library/PolyVoxCore/include/PolyVoxCore/SimpleVolumeBlock.inl index 03e8c687..e603ff81 100644 --- a/library/PolyVoxCore/include/PolyVoxCore/SimpleVolumeBlock.inl +++ b/library/PolyVoxCore/include/PolyVoxCore/SimpleVolumeBlock.inl @@ -21,6 +21,8 @@ freely, subject to the following restrictions: distribution. *******************************************************************************/ +#include "PolyVoxCore/Impl/ErrorHandling.h" + namespace PolyVox { template @@ -109,7 +111,7 @@ namespace PolyVox //Release mode validation if(!isPowerOf2(uSideLength)) { - throw std::invalid_argument("Block side length must be a power of two."); + POLYVOX_THROW(std::invalid_argument, "Block side length must be a power of two."); } //Compute the side length