diff --git a/CMakeHelpers/addBoost.cmake b/CMakeHelpers/addBoost.cmake
index 616da4a..1d9085a 100644
--- a/CMakeHelpers/addBoost.cmake
+++ b/CMakeHelpers/addBoost.cmake
@@ -22,7 +22,7 @@ elseif(SX_BOOST_LIB_INCLUDE)
else()
message("SX_BOOST_LIB_INCLUDE is not set by user. Searching for boost libraries.")
set(Boost_USE_MULTITHREADED ON)
- find_package(Boost COMPONENTS date_time filesystem system program_options chrono thread random)
+ find_package(Boost COMPONENTS date_time filesystem system program_options chrono thread random unit_test_framework)
if(Boost_FOUND)
include_directories(${Boost_INCLUDE_DIRS})
message("Boost found.")
diff --git a/CMakeHelpers/addSeadexOptions.cmake b/CMakeHelpers/addSeadexOptions.cmake
new file mode 100644
index 0000000..48bd9c6
--- /dev/null
+++ b/CMakeHelpers/addSeadexOptions.cmake
@@ -0,0 +1,30 @@
+cmake_minimum_required(VERSION 2.8)
+
+if(POLICY CMP0054)
+ cmake_policy(SET CMP0054 NEW)
+endif()
+
+# Seadex preprocessor definitions
+
+
+option("SX_NO_LOGGING" "Use when you want to use no logging at all (no logging code is created).")
+if( "${SX_NO_LOGGING}" )
+ set(extra_flags "${extra_flags} -D \"SX_NO_LOGGING\"")
+ message(STATUS "No logging used.")
+else()
+ message(STATUS "Logger is used.")
+endif()
+
+
+option("SX_NO_STD_MAKE_UNIQUE" "When the standard make_unique is not available (e.g. no C++14 support), you have to define this preprocessor definition. A yasmine drop-in replacement template will be used instead then.")
+if( "${SX_NO_STD_MAKE_UNIQUE}" )
+ set(extra_flags "${extra_flags} -D \"SX_NO_STD_MAKE_UNIQUE\"")
+ message(STATUS "SX_NO_STD_MAKE_UNIQUE is defined.")
+endif()
+
+
+option("SX_GCC_EXPAND_TEMPLATE_PARAM_PACK_BUG" "Sets to use a workaround for bug in GCC with expansion of template parameter pack that appears in a lambda-expression (bug reported for GCC 4.8.4)")
+if( "${SX_GCC_EXPAND_TEMPLATE_PARAM_PACK_BUG}" )
+ set(extra_flags "${extra_flags} -D \"SX_GCC_EXPAND_TEMPLATE_PARAM_PACK_BUG\"")
+ message(STATUS "SX_GCC_EXPAND_TEMPLATE_PARAM_PACK_BUG is defined.")
+endif()
\ No newline at end of file
diff --git a/CMakeHelpers/addYasmineOptions.cmake b/CMakeHelpers/addYasmineOptions.cmake
index 94749d0..2c1b7ea 100644
--- a/CMakeHelpers/addYasmineOptions.cmake
+++ b/CMakeHelpers/addYasmineOptions.cmake
@@ -5,6 +5,8 @@ if(POLICY CMP0054)
endif()
+include("${CMAKE_CURRENT_LIST_DIR}/addSeadexOptions.cmake")
+
# yasmine's preprocessor definitions
@@ -18,21 +20,6 @@ else()
endif()
-option("SX_NO_LOGGING" "Use when you want to use no logging at all (no logging code is created).")
-if( "${SX_NO_LOGGING}" )
- set(extra_flags "${extra_flags} -D \"SX_NO_LOGGING\"")
- message(STATUS "No logging used.")
-else()
- message(STATUS "Logger is used.")
-endif()
-
-
-option("SX_NO_STD_MAKE_UNIQUE" "When the standard make_unique is not available (e.g. no C++14 support), you have to define this preprocessor definition. A yasmine drop-in replacement template will be used instead then.")
-if( "${SX_NO_STD_MAKE_UNIQUE}" )
- set(extra_flags "${extra_flags} -D \"SX_NO_STD_MAKE_UNIQUE\"")
- message(STATUS "SX_NO_STD_MAKE_UNIQUE is defined.")
-endif()
-
option("Y_LEAN_AND_MEAN" "If you compile the library with Y_LEAN_AND_MEAN being defined or if you define the macro locally before including yasmine.hpp, all the state pseudostates and the asynchronous simple state (with the asynchronous behaviour) are excluded (i.e. those headers are not included). This can reduce compile time.")
if( "${Y_LEAN_AND_MEAN}" )
set(extra_flags "${extra_flags} -D \"Y_LEAN_AND_MEAN\"")
@@ -45,9 +32,3 @@ if( "${Y_PROFILER}" )
message(STATUS "Y_PROFILER is defined.")
endif()
-option("SX_GCC_EXPAND_TEMPLATE_PARAM_PACK_BUG" "Sets to use a workaround for bug in GCC with expansion of template parameter pack that appears in a lambda-expression (bug reported for GCC 4.8.4)")
-if( "${SX_GCC_EXPAND_TEMPLATE_PARAM_PACK_BUG}" )
- set(extra_flags "${extra_flags} -D \"SX_GCC_EXPAND_TEMPLATE_PARAM_PACK_BUG\"")
- message(STATUS "SX_GCC_EXPAND_TEMPLATE_PARAM_PACK_BUG is defined.")
-endif()
-
diff --git a/CMakeLists.txt b/CMakeLists.txt
index ff9ec7d..0a1326f 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -18,10 +18,10 @@ include(./CMakeHelpers/functions.cmake)
include(./CMakeHelpers/functionsRapidJSON.cmake)
include(./CMakeHelpers/functionsAddCompilerFlags.cmake)
+add_subdirectory(externals)
add_subdirectory(libyasmine)
add_subdirectory(yasmine_model)
-add_subdirectory(genesis)
add_subdirectory(libygen)
add_subdirectory(ygen)
diff --git a/build/rapidjson.props b/build/rapidjson.props
index c4a78aa..48f47ca 100644
--- a/build/rapidjson.props
+++ b/build/rapidjson.props
@@ -2,7 +2,7 @@
- ..\..\..\..\..\3rd party\rapidjson\Content\rapidjson-1.0.2\rapidjson
+ ..\..\..\..\3rd party\libs\rapidjson\Content\rapidjson-1.1.0\rapidjson
diff --git a/build/use_boost.props b/build/use_boost.props
index 7ad4ecc..986fba3 100644
--- a/build/use_boost.props
+++ b/build/use_boost.props
@@ -2,8 +2,8 @@
- ..\..\..\..\..\3rd party\boost\Content\boost_1_65_1
- ..\..\..\..\..\3rd party\boost\Content\boost_1_65_1\stage\$(PlatformToolsetVersion)\$(Platform)\lib
+ ..\..\..\..\3rd party\libs\boost\Content\boost_1_65_1
+ ..\..\..\..\3rd party\libs\boost\Content\boost_1_65_1\stage\win\$(Platform)\$(PlatformToolsetVersion)\lib
diff --git a/build/use_essentials.props b/build/use_essentials.props
index b08106d..17209f9 100644
--- a/build/use_essentials.props
+++ b/build/use_essentials.props
@@ -6,12 +6,12 @@
None
- ..\externals\essentials\include;%(AdditionalIncludeDirectories)
+ ..\externals\essentials\source\essentials\include;%(AdditionalIncludeDirectories)$(SolutionDir)\$(Platform)\$(Configuration);%(AdditionalLibraryDirectories)
- %(AdditionalDependencies)
+ essentials.lib;%(AdditionalDependencies)
diff --git a/build/use_essentials_examples.props b/build/use_essentials_examples.props
index 2c2df7b..44d6785 100644
--- a/build/use_essentials_examples.props
+++ b/build/use_essentials_examples.props
@@ -6,12 +6,12 @@
None
- ..\..\externals\essentials\include;%(AdditionalIncludeDirectories)
+ ..\..\externals\essentials\source\essentials\include;%(AdditionalIncludeDirectories)$(SolutionDir)\$(Platform)\$(Configuration);%(AdditionalLibraryDirectories)
- %(AdditionalDependencies)
+ essentials.lib;%(AdditionalDependencies)
diff --git a/build/use_genesis.props b/build/use_genesis.props
index bc3a1f8..03d1b1e 100644
--- a/build/use_genesis.props
+++ b/build/use_genesis.props
@@ -5,7 +5,7 @@
- ..\genesis\include;%(AdditionalIncludeDirectories)
+ ..\externals\genesis\source\genesis\include;%(AdditionalIncludeDirectories)
diff --git a/build/use_hermes.props b/build/use_hermes.props
index 08a894d..3a40d3b 100644
--- a/build/use_hermes.props
+++ b/build/use_hermes.props
@@ -5,9 +5,12 @@
- ..\externals\hermes\include;%(AdditionalIncludeDirectories)
+ ..\externals\hermes\source\hermes\include;%(AdditionalIncludeDirectories)
+
+ hermes.lib;%(AdditionalDependencies)
+
\ No newline at end of file
diff --git a/build/use_hermes_examples.props b/build/use_hermes_examples.props
index 13c24de..cc1cc24 100644
--- a/build/use_hermes_examples.props
+++ b/build/use_hermes_examples.props
@@ -8,8 +8,11 @@
- ..\..\externals\hermes\include;%(AdditionalIncludeDirectories)
+ ..\..\externals\hermes\source\hermes\include;%(AdditionalIncludeDirectories)
+
+ hermes.lib;%(AdditionalDependencies)
+
\ No newline at end of file
diff --git a/examples/classic_farmroad/CMakeLists.txt b/examples/classic_farmroad/CMakeLists.txt
index d9aa330..97535db 100644
--- a/examples/classic_farmroad/CMakeLists.txt
+++ b/examples/classic_farmroad/CMakeLists.txt
@@ -6,7 +6,7 @@ if(POLICY CMP0054)
cmake_policy(SET CMP0054 NEW)
endif()
-set(HEADER_FILES "./*.hpp" "./../../libyasmine/include/*.hpp" "./../../externals/essentials/include/essentials/*.hpp" "./../../externals/essentials/include/essentials/compatibility/*.hpp" "./../../externals/hermes/include/hermes/*.hpp")
+set(HEADER_FILES "./*.hpp")
file(GLOB classic_farmroad_SRC "./*.cpp" ${HEADER_FILES})
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
@@ -19,7 +19,9 @@ include(./../../CMakeHelpers/addYasmineOptions.cmake)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${extra_flags}")
add_executable(classic_farmroad ${classic_farmroad_SRC})
-include_directories("./../../libyasmine/include" "./../../externals/essentials/include" "./../../externals/hermes/include")
+include_directories("./../../libyasmine/include")
+include_directories("./../../externals/essentials/source/essentials/include")
+include_directories("./../../externals/hermes/source/hermes/include")
set(link_libraries_list "")
diff --git a/examples/event_collector_example/CMakeLists.txt b/examples/event_collector_example/CMakeLists.txt
index 7f7ca09..a7ed99b 100644
--- a/examples/event_collector_example/CMakeLists.txt
+++ b/examples/event_collector_example/CMakeLists.txt
@@ -6,8 +6,7 @@ if(POLICY CMP0054)
cmake_policy(SET CMP0054 NEW)
endif()
-set(HEADER_FILES "./*.hpp" "./../../libyasmine/include/*.hpp" "./../../externals/essentials/include/essentials/*.hpp" "./../../externals/essentials/include/compatibility/*.hpp" "./../../externals/hermes/include/hermes/*.hpp")
-file(GLOB event_collector_example_SRC "./*.cpp" ${HEADER_FILES})
+file(GLOB event_collector_example_SRC "./*.cpp" "./*.hpp")
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
@@ -19,7 +18,9 @@ include(./../../CMakeHelpers/addYasmineOptions.cmake)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${extra_flags}")
add_executable(event_collector_example ${event_collector_example_SRC})
-include_directories("./../../libyasmine/include" "./../../externals/essentials/include" "./../../externals/hermes/include")
+include_directories("./../../libyasmine/include")
+include_directories("./../../externals/essentials/source/essentials/include")
+include_directories("./../../externals/hermes/source/hermes/include")
set(link_libraries_list "")
diff --git a/examples/event_collector_example/event_collector_example.vcxproj b/examples/event_collector_example/event_collector_example.vcxproj
index 4b4a2ca..f89a2f1 100644
--- a/examples/event_collector_example/event_collector_example.vcxproj
+++ b/examples/event_collector_example/event_collector_example.vcxproj
@@ -742,6 +742,7 @@
truetruetrue
+ MachineX64
diff --git a/examples/event_collector_example/events.hpp b/examples/event_collector_example/events.hpp
index acc0414..02a3ab4 100644
--- a/examples/event_collector_example/events.hpp
+++ b/examples/event_collector_example/events.hpp
@@ -17,11 +17,11 @@
#if defined( SX_CPP03_BOOST ) || ( defined(_MSC_VER) && _MSC_VER <=1800 )
- #define EVENT_1 1
- #define EVENT_2 2
- #define EVENT_3 3
- #define EVENT_4 4
-#else
+ #define EVENT_1 1
+ #define EVENT_2 2
+ #define EVENT_3 3
+ #define EVENT_4 4
+#else
constexpr sxy::event_id EVENT_1 = 1;
constexpr sxy::event_id EVENT_2 = 2;
constexpr sxy::event_id EVENT_3 = 3;
@@ -31,16 +31,16 @@
namespace examples
{
-
+
#if defined( SX_CPP03_BOOST ) || ( defined(_MSC_VER) && _MSC_VER <=1800 )
Y_EVENT_WITH_ID( E1, EVENT_1 )
Y_EVENT_WITH_ID( E2, EVENT_2 )
- Y_EVENT_WITH_ID( E3, EVENT_3 )
+ Y_EVENT_WITH_ID( E3, EVENT_3 )
Y_EVENT_1PARAM_WITH_ID( E4, std::string, get_message, EVENT_4 )
#else
Y_EVENT_CREATE( E1, EVENT_1 )
- Y_EVENT_CREATE( E2, EVENT_2 )
- Y_EVENT_CREATE( E3, EVENT_3 )
+ Y_EVENT_CREATE( E2, EVENT_2 )
+ Y_EVENT_CREATE( E3, EVENT_3 )
Y_EVENT_CREATE( E4, EVENT_4, std::string, get_message )
#endif
diff --git a/examples/events_with_parameters/CMakeLists.txt b/examples/events_with_parameters/CMakeLists.txt
index 1d6fe6c..3e53000 100644
--- a/examples/events_with_parameters/CMakeLists.txt
+++ b/examples/events_with_parameters/CMakeLists.txt
@@ -6,8 +6,7 @@ if(POLICY CMP0054)
cmake_policy(SET CMP0054 NEW)
endif()
-set(HEADER_FILES "./*.hpp" "./../../libyasmine/include/*.hpp" "./../../externals/essentials/include/essentials/*.hpp" "./../../externals/essentials/include/compatibility/*.hpp" "./../../externals/hermes/include/hermes/*.hpp")
-file(GLOB events_with_parameters_SRC "./*.cpp" ${HEADER_FILES})
+file(GLOB events_with_parameters_SRC "./*.cpp" "./*.hpp")
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
@@ -19,7 +18,9 @@ include(./../../CMakeHelpers/addYasmineOptions.cmake)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${extra_flags}")
add_executable(events_with_parameters ${events_with_parameters_SRC})
-include_directories("./../../libyasmine/include" "./../../externals/essentials/include" "./../../externals/hermes/include")
+include_directories("./../../libyasmine/include")
+include_directories("./../../externals/essentials/source/essentials/include")
+include_directories("./../../externals/hermes/source/hermes/include")
set(link_libraries_list "")
diff --git a/examples/forty_two/CMakeLists.txt b/examples/forty_two/CMakeLists.txt
index a6c10a2..2a32c2f 100644
--- a/examples/forty_two/CMakeLists.txt
+++ b/examples/forty_two/CMakeLists.txt
@@ -6,8 +6,7 @@ if(POLICY CMP0054)
cmake_policy(SET CMP0054 NEW)
endif()
-set(HEADER_FILES "./*.hpp" "./../../libyasmine/include/*.hpp" "./../../externals/essentials/include/essentials/*.hpp" "./../../externals/essentials/include/compatibility/*.hpp" "./../../externals/hermes/include/hermes/*.hpp")
-file(GLOB forty_two_SRC "./*.cpp" ${HEADER_FILES})
+file(GLOB forty_two_SRC "./*.cpp" "./*.hpp")
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
@@ -19,7 +18,9 @@ include(./../../CMakeHelpers/addYasmineOptions.cmake)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${extra_flags}")
add_executable(forty_two ${forty_two_SRC})
-include_directories("./../../libyasmine/include" "./../../externals/essentials/include" "./../../externals/hermes/include")
+include_directories("./../../libyasmine/include")
+include_directories("./../../externals/essentials/source/essentials/include")
+include_directories("./../../externals/hermes/source/hermes/include")
set(link_libraries_list "")
diff --git a/examples/generator_example/CMakeLists.txt b/examples/generator_example/CMakeLists.txt
index c2e9576..906fefe 100644
--- a/examples/generator_example/CMakeLists.txt
+++ b/examples/generator_example/CMakeLists.txt
@@ -6,8 +6,7 @@ if(POLICY CMP0054)
cmake_policy(SET CMP0054 NEW)
endif()
-set(HEADER_FILES "./*.hpp" "./../../libyasmine/include/*.hpp" "./../../externals/essentials/include/essentials/*.hpp" "./../../externals/essentials/include/compatibility/*.hpp" "./../../externals/hermes/include/hermes/*.hpp")
-file(GLOB generator_example_SRC "./*.cpp" ${HEADER_FILES})
+file(GLOB generator_example_SRC "./*.cpp" "./*.hpp")
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
@@ -19,7 +18,9 @@ include(./../../CMakeHelpers/addYasmineOptions.cmake)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${extra_flags}")
add_executable(generator_example ${generator_example_SRC})
-include_directories("./../../libyasmine/include" "./../../externals/essentials/include" "./../../externals/hermes/include")
+include_directories("./../../libyasmine/include")
+include_directories("./../../externals/essentials/source/essentials/include")
+include_directories("./../../externals/hermes/source/hermes/include")
set(link_libraries_list "")
diff --git a/examples/hello_yasmine/CMakeLists.txt b/examples/hello_yasmine/CMakeLists.txt
index c94626f..6fab311 100644
--- a/examples/hello_yasmine/CMakeLists.txt
+++ b/examples/hello_yasmine/CMakeLists.txt
@@ -6,8 +6,7 @@ if(POLICY CMP0054)
cmake_policy(SET CMP0054 NEW)
endif()
-set(HEADER_FILES "./../../libyasmine/include/*.hpp" "./../../externals/essentials/include/essentials/*.hpp" "./../../externals/essentials/include/compatibility/*.hpp" "./../../externals/hermes/include/hermes/*.hpp")
-file(GLOB hello_yasmine_SRC "./*.cpp" ${HEADER_FILES})
+file(GLOB hello_yasmine_SRC "./*.cpp")
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
@@ -19,7 +18,9 @@ include(./../../CMakeHelpers/addYasmineOptions.cmake)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${extra_flags}")
add_executable(hello_yasmine ${hello_yasmine_SRC})
-include_directories("./../../libyasmine/include" "./../../externals/essentials/include" "./../../externals/hermes/include")
+include_directories("./../../libyasmine/include")
+include_directories("./../../externals/essentials/source/essentials/include")
+include_directories("./../../externals/hermes/source/hermes/include")
set(link_libraries_list "")
diff --git a/examples/substatemachines_and_variables/CMakeLists.txt b/examples/substatemachines_and_variables/CMakeLists.txt
index e52d2d3..d962c8d 100644
--- a/examples/substatemachines_and_variables/CMakeLists.txt
+++ b/examples/substatemachines_and_variables/CMakeLists.txt
@@ -6,8 +6,7 @@ if(POLICY CMP0054)
cmake_policy(SET CMP0054 NEW)
endif()
-set(HEADER_FILES "./*.hpp" "./../../libyasmine/include/*.hpp" "./../../externals/essentials/include/essentials/*.hpp" "./../../externals/essentials/include/compatibility/*.hpp" "./../../externals/hermes/include/hermes/*.hpp")
-file(GLOB substatemachines_and_variables_SRC "./*.cpp" ${HEADER_FILES})
+file(GLOB substatemachines_and_variables_SRC "./*.cpp" "./*.hpp")
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
@@ -19,7 +18,9 @@ include(./../../CMakeHelpers/addYasmineOptions.cmake)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${extra_flags}")
add_executable(substatemachines_and_variables ${substatemachines_and_variables_SRC})
-include_directories("./../../libyasmine/include" "./../../externals/essentials/include" "./../../externals/hermes/include")
+include_directories("./../../libyasmine/include")
+include_directories("./../../externals/essentials/source/essentials/include")
+include_directories("./../../externals/hermes/source/hermes/include")
set(link_libraries_list "")
diff --git a/examples/substatemachines_and_variables/substatemachines_and_variables.vcxproj b/examples/substatemachines_and_variables/substatemachines_and_variables.vcxproj
index e07a96c..c2b8e49 100644
--- a/examples/substatemachines_and_variables/substatemachines_and_variables.vcxproj
+++ b/examples/substatemachines_and_variables/substatemachines_and_variables.vcxproj
@@ -733,6 +733,7 @@
truetruetrue
+ MachineX64
diff --git a/examples/unhandled_event_handler_example/CMakeLists.txt b/examples/unhandled_event_handler_example/CMakeLists.txt
index d124ea0..eac07f6 100644
--- a/examples/unhandled_event_handler_example/CMakeLists.txt
+++ b/examples/unhandled_event_handler_example/CMakeLists.txt
@@ -6,7 +6,6 @@ if(POLICY CMP0054)
cmake_policy(SET CMP0054 NEW)
endif()
-set(HEADER_FILES "./../../libyasmine/include/*.hpp" "./../../externals/essentials/include/essentials/*.hpp" "./../../externals/essentials/include/compatibility/*.hpp" "./../../externals/hermes/include/hermes/*.hpp")
file(GLOB unhandled_event_handler_example_SRC "./*.cpp" ${HEADER_FILES})
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
@@ -19,7 +18,9 @@ include(./../../CMakeHelpers/addYasmineOptions.cmake)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${extra_flags}")
add_executable(unhandled_event_handler_example ${unhandled_event_handler_example_SRC})
-include_directories("./../../libyasmine/include" "./../../externals/essentials/include" "./../../externals/hermes/include")
+include_directories("./../../libyasmine/include")
+include_directories("./../../externals/essentials/source/essentials/include")
+include_directories("./../../externals/hermes/source/hermes/include")
set(link_libraries_list "")
diff --git a/externals/CMakeLists.txt b/externals/CMakeLists.txt
new file mode 100644
index 0000000..4860ffd
--- /dev/null
+++ b/externals/CMakeLists.txt
@@ -0,0 +1,37 @@
+if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
+ if (NOT TARGET libessentials)
+ message(STATUS "essentuals was not build before. It is build now.")
+ add_subdirectory(essentials)
+ endif()
+else()
+ if (NOT TARGET essentials)
+ message(STATUS "essentuals was not build before. It is build now.")
+ add_subdirectory(essentials)
+ endif()
+endif()
+
+
+if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
+ if (NOT TARGET libhermes)
+ message(STATUS "hermes was not build before. It is build now.")
+ add_subdirectory(hermes)
+ endif()
+else()
+ if (NOT TARGET hermes)
+ message(STATUS "hermes was not build before. It is build now.")
+ add_subdirectory(hermes)
+ endif()
+endif()
+
+
+if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
+ if (NOT TARGET libgenesis)
+ message(STATUS "genesis was not build before. It is build now.")
+ add_subdirectory(genesis)
+ endif()
+else()
+ if (NOT TARGET genesis)
+ message(STATUS "genesis was not build before. It is build now.")
+ add_subdirectory(genesis)
+ endif()
+endif()
diff --git a/externals/essentials/CMakeLists.txt b/externals/essentials/CMakeLists.txt
new file mode 100644
index 0000000..097f692
--- /dev/null
+++ b/externals/essentials/CMakeLists.txt
@@ -0,0 +1,7 @@
+cmake_minimum_required(VERSION 2.8)
+
+project(essentials)
+
+set(CMAKE_VERBOSE_MAKEFILE, 1)
+
+add_subdirectory(source)
diff --git a/externals/essentials/source/CMakeHelpers/addBoost.cmake b/externals/essentials/source/CMakeHelpers/addBoost.cmake
new file mode 100644
index 0000000..d833dc1
--- /dev/null
+++ b/externals/essentials/source/CMakeHelpers/addBoost.cmake
@@ -0,0 +1,34 @@
+cmake_minimum_required(VERSION 2.8)
+
+if(Y_BOOST_LIB_INCLUDE)
+ set(Boost_LIBRARIES ${Y_BOOST_LIB_PATH})
+ set(Boost_INCLUDE_DIRS ${Y_BOOST_LIB_INCLUDE})
+ set(SX_BOOST_LIB_PATH ${Y_BOOST_LIB_PATH})
+ set(SX_BOOST_LIB_INCLUDE ${Y_BOOST_LIB_INCLUDE})
+
+ include_directories(${Boost_INCLUDE_DIRS})
+ message("Y_BOOST_LIB_INCLUDE is set by user.")
+ message("Path to libraries: ${Boost_LIBRARIES}")
+ message("Path to includes: ${Boost_INCLUDE_DIRS}")
+elseif(SX_BOOST_LIB_INCLUDE)
+ set(Boost_LIBRARIES ${SX_BOOST_LIB_PATH})
+ set(Boost_INCLUDE_DIRS ${SX_BOOST_LIB_INCLUDE})
+
+ include_directories(${Boost_INCLUDE_DIRS})
+ message("SX_BOOST_LIB_INCLUDE is set by user.")
+ message("Path to libraries: ${Boost_LIBRARIES}")
+ message("Path to includes: ${Boost_INCLUDE_DIRS}")
+
+else()
+ message("SX_BOOST_LIB_INCLUDE is not set by user. Searching for boost libraries.")
+ set(Boost_USE_MULTITHREADED ON)
+ find_package(Boost COMPONENTS date_time filesystem system program_options chrono thread random unit_test_framework)
+ if(Boost_FOUND)
+ include_directories(${Boost_INCLUDE_DIRS})
+ message("Boost found.")
+ message("Path to libraries: ${Boost_LIBRARIES}")
+ message("Path to includes: ${Boost_INCLUDE_DIRS}")
+ else()
+ message(STATUS "Boost libraries not found!")
+ endif()
+endif()
diff --git a/externals/essentials/source/CMakeHelpers/addSeadexOptions.cmake b/externals/essentials/source/CMakeHelpers/addSeadexOptions.cmake
new file mode 100644
index 0000000..48bd9c6
--- /dev/null
+++ b/externals/essentials/source/CMakeHelpers/addSeadexOptions.cmake
@@ -0,0 +1,30 @@
+cmake_minimum_required(VERSION 2.8)
+
+if(POLICY CMP0054)
+ cmake_policy(SET CMP0054 NEW)
+endif()
+
+# Seadex preprocessor definitions
+
+
+option("SX_NO_LOGGING" "Use when you want to use no logging at all (no logging code is created).")
+if( "${SX_NO_LOGGING}" )
+ set(extra_flags "${extra_flags} -D \"SX_NO_LOGGING\"")
+ message(STATUS "No logging used.")
+else()
+ message(STATUS "Logger is used.")
+endif()
+
+
+option("SX_NO_STD_MAKE_UNIQUE" "When the standard make_unique is not available (e.g. no C++14 support), you have to define this preprocessor definition. A yasmine drop-in replacement template will be used instead then.")
+if( "${SX_NO_STD_MAKE_UNIQUE}" )
+ set(extra_flags "${extra_flags} -D \"SX_NO_STD_MAKE_UNIQUE\"")
+ message(STATUS "SX_NO_STD_MAKE_UNIQUE is defined.")
+endif()
+
+
+option("SX_GCC_EXPAND_TEMPLATE_PARAM_PACK_BUG" "Sets to use a workaround for bug in GCC with expansion of template parameter pack that appears in a lambda-expression (bug reported for GCC 4.8.4)")
+if( "${SX_GCC_EXPAND_TEMPLATE_PARAM_PACK_BUG}" )
+ set(extra_flags "${extra_flags} -D \"SX_GCC_EXPAND_TEMPLATE_PARAM_PACK_BUG\"")
+ message(STATUS "SX_GCC_EXPAND_TEMPLATE_PARAM_PACK_BUG is defined.")
+endif()
\ No newline at end of file
diff --git a/externals/essentials/source/CMakeHelpers/addSpecificFlags.cmake b/externals/essentials/source/CMakeHelpers/addSpecificFlags.cmake
new file mode 100644
index 0000000..b568fbb
--- /dev/null
+++ b/externals/essentials/source/CMakeHelpers/addSpecificFlags.cmake
@@ -0,0 +1,112 @@
+cmake_minimum_required(VERSION 2.8)
+
+if(POLICY CMP0054)
+ cmake_policy(SET CMP0054 NEW)
+endif()
+
+add_compiler_flag("-Wall")
+
+if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
+#gcc/clang compiler flags
+ if(NOT "SX_PEDANTIC" STREQUAL "OFF")
+ add_compiler_flag("-pedantic")
+ endif()
+
+ if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug")
+ add_compiler_flag("-g")
+ endif()
+
+ if("${CPP_VERSION}" STREQUAL "03")
+ add_compiler_flag("-std=c++03")
+ add_compiler_flag("-D \"SX_CPP03_BOOST\"")
+ add_compiler_flag("-D \"SX_NO_VARIADIC_MACRO\"")
+ elseif("${CPP_VERSION}" STREQUAL "03")
+ add_compiler_flag("-std=c++14")
+ else()
+ add_compiler_flag("-std=c++11")
+ add_compiler_flag("-D \"SX_NO_STD_MAKE_UNIQUE\"")
+ endif()
+
+# platform
+ if( "${CMAKE_CXX_FLAGS}" STREQUAL "-m64" )
+ add_compiler_flag("-m64")
+ message(STATUS "setting platform x64")
+ elseif("${CMAKE_CXX_FLAGS}" STREQUAL "-m32")
+ add_compiler_flag("-m32")
+ message(STATUS "setting platform x86")
+ endif()
+endif()
+
+
+if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
+ # Checks buffer security.
+ set(extra_flags "${extra_flags} /GS")
+
+ #Sets output warning level.
+ set(extra_flags "${extra_flags} /W4")
+
+ #Disable specific Warnings.
+ set(extra_flags "${extra_flags} /wd\"4127\" /wd\"4250\"")
+
+ #Defines constants and macros.
+ set(extra_flags "${extra_flags} /D \"_CRT_SECURE_NO_WARNINGS\"")
+
+ #Enables function-level linking.
+ set(extra_flags "${extra_flags} /Gy")
+
+ #Specifies standard behaviour under /Ze.
+ set(extra_flags "${extra_flags} /Zc:wchar_t /Zc:inline")
+
+ #Disable minimal rebuild.
+ set(extra_flags "${extra_flags} /Gm-")
+
+ #Enables additional security features and warnings.
+ set(extra_flags "${extra_flags} /sdl")
+
+ #Specifies floating-point behaviour.
+ set(extra_flags "${extra_flags} /fp:precise")
+
+ #Multibyte character sets macro.
+ set(extra_flags "${extra_flags} /D \"_MBCS\"")
+
+ #Enables you to provide internal compiler error (ICE) information directly to the Visual C++ team.
+ set(extra_flags "${extra_flags} /errorReport:prompt")
+
+ #Treats warnings as errors.
+ if( "${MSVC_VERSION}" STRGREATER "1800" )
+ set(extra_flags "${extra_flags} /WX")
+ #else( "${MSVC_VERSION}" STRLESS "1900" )
+ else()
+ set(extra_flags "${extra_flags} /WX-")
+ endif()
+
+
+ #Generates intrinsic functions.
+ set(extra_flags "${extra_flags} /Oi")
+
+ #Specifies the model of exception handling.
+ set(extra_flags "${extra_flags} /EHsc")
+
+ #Creates an object file.
+ set(extra_flags "${extra_flags} /Fo")
+
+ #Marks an executable as verified to be compatible with the Windows Data Execution Prevention feature.
+ #set(extra_flags "${extra_flags} /NXCOMPAT")
+
+
+ # for release
+ if( "${CMAKE_BUILD_TYPE}" STREQUAL "Release" )
+ #Creates fast code.
+ set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /O2")
+ set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /PDB-")
+
+ #Controls LINK optimizations.
+ set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /OPT:REF /OPT:ICF")
+
+ # for debug
+ elseif( "${CMAKE_BUILD_TYPE}" STREQUAL "Debug" )
+ #Creates a program database (PDB) file.
+ set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /PDB")
+ endif()
+
+endif()
\ No newline at end of file
diff --git a/externals/essentials/source/CMakeHelpers/addYasmineOptions.cmake b/externals/essentials/source/CMakeHelpers/addYasmineOptions.cmake
new file mode 100644
index 0000000..7964d92
--- /dev/null
+++ b/externals/essentials/source/CMakeHelpers/addYasmineOptions.cmake
@@ -0,0 +1,34 @@
+cmake_minimum_required(VERSION 2.8)
+
+if(POLICY CMP0054)
+ cmake_policy(SET CMP0054 NEW)
+endif()
+
+
+include("${CMAKE_CURRENT_LIST_DIR}/addSeadexOptions.cmake")
+
+# yasmine's preprocessor definitions
+
+
+set(Y_OPTIMIZE "SPEED" CACHE STRING "Sets the optimize type. Supported values: SPEED and SIZE. Default value is SPEED.")
+if( "${Y_OPTIMIZE}" STREQUAL "SIZE" )
+ set(extra_flags "${extra_flags} -D \"Y_OPTIMIZE_4_SIZE\"")
+ message(STATUS "Optimizing for size.")
+else()
+ set(extra_flags "${extra_flags} -D \"Y_OPTIMIZE_4_SPEED\"")
+ message(STATUS "Optimizing for speed.")
+endif()
+
+
+option("Y_LEAN_AND_MEAN" "If you compile the library with Y_LEAN_AND_MEAN being defined or if you define the macro locally before including yasmine.hpp, all the state pseudostates and the asynchronous simple state (with the asynchronous behaviour) are excluded (i.e. those headers are not included). This can reduce compile time.")
+if( "${Y_LEAN_AND_MEAN}" )
+ set(extra_flags "${extra_flags} -D \"Y_LEAN_AND_MEAN\"")
+ message(STATUS "Y_LEAN_AND_MEAN is defined.")
+endif()
+
+option("Y_PROFILER" "If Y_PROFILER is defined, the state machine will count the number of events that were processed. The user can query the counter by calling the 'get_number_of_processed_events' method.")
+if( "${Y_PROFILER}" )
+ set(extra_flags "${extra_flags} -D \"Y_PROFILER\"")
+ message(STATUS "Y_PROFILER is defined.")
+endif()
+
diff --git a/externals/essentials/source/CMakeHelpers/functions.cmake b/externals/essentials/source/CMakeHelpers/functions.cmake
new file mode 100644
index 0000000..3a76857
--- /dev/null
+++ b/externals/essentials/source/CMakeHelpers/functions.cmake
@@ -0,0 +1,22 @@
+cmake_minimum_required(VERSION 2.8)
+
+if(POLICY CMP0054)
+ cmake_policy(SET CMP0054 NEW)
+endif()
+
+
+function(use_pthread varName)
+ if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
+ set(${varName} ${${varName}} pthread PARENT_SCOPE)
+ endif()
+endfunction()
+
+
+function(use_boost_libraries varName)
+ set(${varName} ${${varName}} ${Boost_LIBRARIES} PARENT_SCOPE)
+endfunction()
+
+
+function(add_library_for_linking varName libraryName)
+ set(${varName} ${${varName}} ${libraryName} PARENT_SCOPE)
+endfunction()
diff --git a/externals/essentials/source/CMakeHelpers/functionsAddCompilerFlags.cmake b/externals/essentials/source/CMakeHelpers/functionsAddCompilerFlags.cmake
new file mode 100644
index 0000000..105747b
--- /dev/null
+++ b/externals/essentials/source/CMakeHelpers/functionsAddCompilerFlags.cmake
@@ -0,0 +1,15 @@
+cmake_minimum_required(VERSION 2.8)
+
+include(CheckCXXCompilerFlag)
+
+
+function(add_compiler_flag varFlag)
+ string(FIND "${CMAKE_CXX_FLAGS}" "${varFlag}" flag_already_set)
+ if(flag_already_set EQUAL -1)
+ check_cxx_compiler_flag("${varFlag}" flag_supported)
+ if(flag_supported)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${varFlag}" PARENT_SCOPE)
+ endif()
+ unset(flag_supported CACHE)
+ endif()
+endfunction()
diff --git a/externals/essentials/source/CMakeHelpers/functionsRapidJSON.cmake b/externals/essentials/source/CMakeHelpers/functionsRapidJSON.cmake
new file mode 100644
index 0000000..c638987
--- /dev/null
+++ b/externals/essentials/source/CMakeHelpers/functionsRapidJSON.cmake
@@ -0,0 +1,30 @@
+cmake_minimum_required(VERSION 2.8)
+
+if(POLICY CMP0054)
+ cmake_policy(SET CMP0054 NEW)
+endif()
+
+function(use_rapid_JSON)
+if(SX_RAPIDJSON)
+ message("SX_RAPIDJSON is set by user.")
+else()
+ message("SX_RAPIDJSON is not set by user. Setting default value.")
+ if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
+ find_package(RapidJSON)
+ if(NOT ("${RAPIDJSON_INCLUDE_DIRS}" STREQUAL ""))
+ set(SX_RAPIDJSON ${RAPIDJSON_INCLUDE_DIRS})
+ message(STATUS "Found rapidjson on: ${RAPIDJSON_INCLUDE_DIRS}")
+ else()
+ set(SX_RAPIDJSON /usr/include)
+ message(STATUS "Set default value for rapidjson")
+ endif()
+ elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
+ set(SX_RAPIDJSON "C:\\Program Files")
+ endif()
+endif()
+
+include_directories(${SX_RAPIDJSON})
+
+message(STATUS "include rapidJSON from: ${SX_RAPIDJSON}")
+
+endfunction()
diff --git a/externals/essentials/source/CMakeHelpers/setVariables.cmake b/externals/essentials/source/CMakeHelpers/setVariables.cmake
new file mode 100644
index 0000000..a6f1454
--- /dev/null
+++ b/externals/essentials/source/CMakeHelpers/setVariables.cmake
@@ -0,0 +1,12 @@
+cmake_minimum_required(VERSION 2.8)
+
+if(POLICY CMP0054)
+ cmake_policy(SET CMP0054 NEW)
+endif()
+
+
+if(("${Y_STATIC}" STREQUAL "ON") OR ("${SX_STATIC}" STREQUAL "ON"))
+ set(LINK_TYPE "STATIC")
+else()
+ set(LINK_TYPE "SHARED")
+endif()
diff --git a/externals/essentials/source/CMakeLists.txt b/externals/essentials/source/CMakeLists.txt
new file mode 100644
index 0000000..daef5a2
--- /dev/null
+++ b/externals/essentials/source/CMakeLists.txt
@@ -0,0 +1,16 @@
+
+if(POLICY CMP0054)
+ cmake_policy(SET CMP0054 NEW)
+endif()
+
+include(./CMakeHelpers/setVariables.cmake)
+
+include(./CMakeHelpers/addBoost.cmake)
+include(./CMakeHelpers/functions.cmake)
+include(./CMakeHelpers/functionsAddCompilerFlags.cmake)
+
+add_subdirectory(essentials)
+
+if(EXISTS essentials_unit_tests)
+add_subdirectory(essentials_unit_tests)
+endif()
diff --git a/externals/essentials/source/build/c++03.props b/externals/essentials/source/build/c++03.props
new file mode 100644
index 0000000..d76c9b5
--- /dev/null
+++ b/externals/essentials/source/build/c++03.props
@@ -0,0 +1,31 @@
+
+
+
+
+ ..\..\..\3rd party\libs\boost\Content\boost_1_65_1
+ ..\..\..\3rd party\libs\boost\Content\boost_1_65_1\stage\win\$(Platform)\$(PlatformToolsetVersion)\lib
+
+
+ <_PropertySheetDisplayName>c++03
+
+
+
+ SX_NO_VARIADIC_MACRO;SX_CPP03_BOOST;BOOST_SP_USE_STD_ATOMIC;WIN32;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)
+ $(BOOST_PATH);%(AdditionalIncludeDirectories)
+
+
+
+ $(BOOST_LIB_PATH);$(SolutionDir)\$(Platform)\$(Configuration);%(AdditionalLibraryDirectories)
+
+
+
+
+ $(BOOST_PATH)
+ true
+
+
+ $(BOOST_LIB_PATH)
+ true
+
+
+
\ No newline at end of file
diff --git a/externals/essentials/source/build/debug_info.props b/externals/essentials/source/build/debug_info.props
new file mode 100644
index 0000000..5dc702b
--- /dev/null
+++ b/externals/essentials/source/build/debug_info.props
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+ NotSet
+ true
+
+
+ EditAndContinue
+ WIN32;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)
+
+
+
+
\ No newline at end of file
diff --git a/externals/essentials/source/build/essentials.props b/externals/essentials/source/build/essentials.props
new file mode 100644
index 0000000..8bdf813
--- /dev/null
+++ b/externals/essentials/source/build/essentials.props
@@ -0,0 +1,31 @@
+
+
+
+
+
+ $(SolutionDir)$(Platform)\$(Configuration)\
+
+
+
+ Level4
+ 4127;4250
+ WIN32;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)
+ None
+ false
+ true
+ include;%(AdditionalIncludeDirectories)
+ /D "_STL_WARNING_LEVEL=3" %(AdditionalOptions)
+
+
+
+
+
+ No
+ Default
+
+
+ false
+
+
+
+
\ No newline at end of file
diff --git a/externals/essentials/source/build/use_boost.props b/externals/essentials/source/build/use_boost.props
new file mode 100644
index 0000000..85fdae4
--- /dev/null
+++ b/externals/essentials/source/build/use_boost.props
@@ -0,0 +1,30 @@
+
+
+
+
+ ..\..\..\3rd party\libs\boost\Content\boost_1_65_1
+ ..\..\..\3rd party\libs\boost\Content\boost_1_65_1\stage\win\$(Platform)\$(PlatformToolsetVersion)\lib
+
+
+
+
+
+ $(BOOST_PATH);%(AdditionalIncludeDirectories)
+ Y_USE_BOOST;BOOST_SP_USE_STD_ATOMIC;%(PreprocessorDefinitions)
+
+
+ $(BOOST_LIB_PATH);%(AdditionalLibraryDirectories)
+
+
+
+
+
+ $(BOOST_PATH)
+ true
+
+
+ $(BOOST_LIB_PATH)
+ true
+
+
+
\ No newline at end of file
diff --git a/externals/essentials/source/build/use_boost_as_external.props b/externals/essentials/source/build/use_boost_as_external.props
new file mode 100644
index 0000000..cdd4e52
--- /dev/null
+++ b/externals/essentials/source/build/use_boost_as_external.props
@@ -0,0 +1,30 @@
+
+
+
+
+ ..\..\..\..\..\..\..\3rd party\libs\boost\Content\boost_1_65_1
+ ..\..\..\..\..\..\..\3rd party\libs\boost\Content\boost_1_65_1\stage\win\$(Platform)\$(PlatformToolsetVersion)\lib
+
+
+
+
+
+ $(BOOST_PATH);%(AdditionalIncludeDirectories)
+ Y_USE_BOOST;BOOST_SP_USE_STD_ATOMIC;%(PreprocessorDefinitions)
+
+
+ $(BOOST_LIB_PATH);%(AdditionalLibraryDirectories)
+
+
+
+
+
+ $(BOOST_PATH)
+ true
+
+
+ $(BOOST_LIB_PATH)
+ true
+
+
+
\ No newline at end of file
diff --git a/externals/essentials/source/build/use_boost_externals.props b/externals/essentials/source/build/use_boost_externals.props
new file mode 100644
index 0000000..27f07b7
--- /dev/null
+++ b/externals/essentials/source/build/use_boost_externals.props
@@ -0,0 +1,30 @@
+
+
+
+
+ ..\..\..\3rd party\libs\boost\Content\boost_1_65_1
+ ..\..\..\3rd party\libs\boost\Content\boost_1_65_1\stage\win\$(Platform)\$(PlatformToolsetVersion)\lib
+
+
+
+
+
+ $(BOOST_PATH);%(AdditionalIncludeDirectories)
+ Y_USE_BOOST;BOOST_SP_USE_STD_ATOMIC;%(PreprocessorDefinitions)
+
+
+ $(BOOST_LIB_PATH);%(AdditionalLibraryDirectories)
+
+
+
+
+
+ $(BOOST_PATH)
+ true
+
+
+ $(BOOST_LIB_PATH)
+ true
+
+
+
\ No newline at end of file
diff --git a/externals/essentials/source/build/use_essentials.props b/externals/essentials/source/build/use_essentials.props
new file mode 100644
index 0000000..9f7bfc9
--- /dev/null
+++ b/externals/essentials/source/build/use_essentials.props
@@ -0,0 +1,32 @@
+
+
+
+
+ ..\..\..\essentials\source\essentials\include
+ ..\..\..\essentials\source\essentials\include\compatibility
+ ..\..\..\essentials\source\$(Platform)\$(Configuration)
+
+
+
+
+ $(ESSENTIALS_INCLUDE_PATH);$(ESSENTIALS_COMPATIBILITY_PATH);%(AdditionalIncludeDirectories)
+ None
+
+
+
+ $(SolutionDir)\$(Platform)\$(Configuration);$(ESSENTIALS_LIB_PATH);%(AdditionalLibraryDirectories)
+ essentials.lib;%(AdditionalDependencies)
+
+
+
+
+ $(ESSENTIALS_INCLUDE_PATH)
+
+
+ $(ESSENTIALS_COMPATIBILITY_PATH)
+
+
+ $(ESSENTIALS_LIB_PATH)
+
+
+
\ No newline at end of file
diff --git a/externals/essentials/source/build/use_essentials_base.props b/externals/essentials/source/build/use_essentials_base.props
new file mode 100644
index 0000000..7f85a09
--- /dev/null
+++ b/externals/essentials/source/build/use_essentials_base.props
@@ -0,0 +1,28 @@
+
+
+
+
+ ..\essentials\include
+ ..\$(Platform)\$(Configuration)
+
+
+
+
+ $(ESSENTIALS_INCLUDE_PATH);$(ESSENTIALS_COMPATIBILITY_PATH);%(AdditionalIncludeDirectories)
+ None
+
+
+
+ $(SolutionDir)\$(Platform)\$(Configuration);$(ESSENTIALS_LIB_PATH);%(AdditionalLibraryDirectories)
+ essentials.lib;%(AdditionalDependencies)
+
+
+
+
+ $(ESSENTIALS_INCLUDE_PATH)
+
+
+ $(ESSENTIALS_LIB_PATH)
+
+
+
\ No newline at end of file
diff --git a/externals/essentials/source/changelog.txt b/externals/essentials/source/changelog.txt
new file mode 100644
index 0000000..d1a6a27
--- /dev/null
+++ b/externals/essentials/source/changelog.txt
@@ -0,0 +1,38 @@
+# Change log
+All notable changes to this project are documented in this file.
+
+##[1.3.2] - 2017-12-18
+
+### Added
+• SX_UNUSED_VARIABLE macro for suppressing warnings for unreferenced variable.
+• backward compatibility for macros Y_NO_STD_MAKE_UNIQUE, Y_CPP03_BOOST, Y_UNIQUE_PTR, Y_MAKE_UNIQUE, Y_MAKE_SHARED, Y_UNUSED_PARAMETER
+
+### Changed
+• CMake: use external CMakeHelpers files
+• CMake: refactoring of build scripts
+
+### Fixed
+• missing boost namespace in sxprintf
+
+
+##[1.1.0] - 2017-09-20
+
+### Added
+• Support for Visual Studio 2017 builds
+• conversion functions: to_lower and to_upper
+• added uri class
+
+
+##[1.0.1] - 2017-04-07
+
+### Changed
+• macro helpers improved to count up to 15 parameters
+• essentials file structure refactoring. All source files are now located in the 'source' folder, the header files for compatibility
+are located in the 'include/essentials/compatibility' folder and other header files are located in the 'include/essentials' folder.
+
+
+##[1.0.0] - 2017-03-30
+
+• The very first released version of essentials
+
+
diff --git a/externals/essentials/source/essentials.sln b/externals/essentials/source/essentials.sln
new file mode 100644
index 0000000..c96fe08
--- /dev/null
+++ b/externals/essentials/source/essentials.sln
@@ -0,0 +1,156 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 15
+VisualStudioVersion = 15.0.27004.2010
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "essentials", "essentials\essentials.vcxproj", "{132F81F8-46DA-49D0-9071-D70BC087B38C}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "essentials_unit_tests", "essentials_unit_tests\essentials_unit_tests.vcxproj", "{6F4D72B1-E418-4859-8C19-D58659041948}"
+ ProjectSection(ProjectDependencies) = postProject
+ {132F81F8-46DA-49D0-9071-D70BC087B38C} = {132F81F8-46DA-49D0-9071-D70BC087B38C}
+ EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "build_tools", "build_tools", "{77439103-0A48-4243-8D07-3223DC5CF353}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "CMake", "CMake", "{86310DF6-AE4D-48C6-B302-80F5091FC09B}"
+ ProjectSection(SolutionItems) = preProject
+ ..\CMakeLists.txt = ..\CMakeLists.txt
+ EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "source", "source", "{1C08A7CC-21A3-42E1-AA39-7E03F88A73F3}"
+ ProjectSection(SolutionItems) = preProject
+ CMakeLists.txt = CMakeLists.txt
+ EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "essentials", "essentials", "{968024AC-A87C-40E9-B75A-B7AE9790C73F}"
+ ProjectSection(SolutionItems) = preProject
+ essentials\CMakeLists.txt = essentials\CMakeLists.txt
+ EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "CMakeHelpers", "CMakeHelpers", "{35E7ED3A-7DF9-4E75-B289-99B3D0050992}"
+ ProjectSection(SolutionItems) = preProject
+ CMakeHelpers\addBoost.cmake = CMakeHelpers\addBoost.cmake
+ CMakeHelpers\addSeadexOptions.cmake = CMakeHelpers\addSeadexOptions.cmake
+ CMakeHelpers\addSpecificFlags.cmake = CMakeHelpers\addSpecificFlags.cmake
+ CMakeHelpers\addYasmineOptions.cmake = CMakeHelpers\addYasmineOptions.cmake
+ CMakeHelpers\functions.cmake = CMakeHelpers\functions.cmake
+ CMakeHelpers\functionsAddCompilerFlags.cmake = CMakeHelpers\functionsAddCompilerFlags.cmake
+ CMakeHelpers\functionsRapidJSON.cmake = CMakeHelpers\functionsRapidJSON.cmake
+ CMakeHelpers\setVariables.cmake = CMakeHelpers\setVariables.cmake
+ EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "essentials_unit_tests", "essentials_unit_tests", "{63218938-B7EC-4913-9B3B-CEAE1F2A925B}"
+ ProjectSection(SolutionItems) = preProject
+ essentials_unit_tests\CMakeLists.txt = essentials_unit_tests\CMakeLists.txt
+ EndProjectSection
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug - C++ 03|Win32 = Debug - C++ 03|Win32
+ Debug - C++ 03|x64 = Debug - C++ 03|x64
+ Debug - C++ 03|x86 = Debug - C++ 03|x86
+ Debug - VS 2015|Win32 = Debug - VS 2015|Win32
+ Debug - VS 2015|x64 = Debug - VS 2015|x64
+ Debug - VS 2015|x86 = Debug - VS 2015|x86
+ Debug - VS 2017|Win32 = Debug - VS 2017|Win32
+ Debug - VS 2017|x64 = Debug - VS 2017|x64
+ Debug - VS 2017|x86 = Debug - VS 2017|x86
+ Release - C++ 03|Win32 = Release - C++ 03|Win32
+ Release - C++ 03|x64 = Release - C++ 03|x64
+ Release - C++ 03|x86 = Release - C++ 03|x86
+ Release - VS 2015|Win32 = Release - VS 2015|Win32
+ Release - VS 2015|x64 = Release - VS 2015|x64
+ Release - VS 2015|x86 = Release - VS 2015|x86
+ Release - VS 2017|Win32 = Release - VS 2017|Win32
+ Release - VS 2017|x64 = Release - VS 2017|x64
+ Release - VS 2017|x86 = Release - VS 2017|x86
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {132F81F8-46DA-49D0-9071-D70BC087B38C}.Debug - C++ 03|Win32.ActiveCfg = Debug - C++ 03|Win32
+ {132F81F8-46DA-49D0-9071-D70BC087B38C}.Debug - C++ 03|Win32.Build.0 = Debug - C++ 03|Win32
+ {132F81F8-46DA-49D0-9071-D70BC087B38C}.Debug - C++ 03|x64.ActiveCfg = Debug - C++ 03|x64
+ {132F81F8-46DA-49D0-9071-D70BC087B38C}.Debug - C++ 03|x64.Build.0 = Debug - C++ 03|x64
+ {132F81F8-46DA-49D0-9071-D70BC087B38C}.Debug - C++ 03|x86.ActiveCfg = Debug - C++ 03|Win32
+ {132F81F8-46DA-49D0-9071-D70BC087B38C}.Debug - C++ 03|x86.Build.0 = Debug - C++ 03|Win32
+ {132F81F8-46DA-49D0-9071-D70BC087B38C}.Debug - C++ 03|x86.Build.2 = Debug - VS 2013|Win32
+ {132F81F8-46DA-49D0-9071-D70BC087B38C}.Debug - VS 2015|Win32.ActiveCfg = Debug - VS 2015|Win32
+ {132F81F8-46DA-49D0-9071-D70BC087B38C}.Debug - VS 2015|Win32.Build.0 = Debug - VS 2015|Win32
+ {132F81F8-46DA-49D0-9071-D70BC087B38C}.Debug - VS 2015|x64.ActiveCfg = Debug - VS 2015|x64
+ {132F81F8-46DA-49D0-9071-D70BC087B38C}.Debug - VS 2015|x64.Build.0 = Debug - VS 2015|x64
+ {132F81F8-46DA-49D0-9071-D70BC087B38C}.Debug - VS 2015|x86.ActiveCfg = Debug - VS 2015|Win32
+ {132F81F8-46DA-49D0-9071-D70BC087B38C}.Debug - VS 2015|x86.Build.0 = Debug - VS 2015|Win32
+ {132F81F8-46DA-49D0-9071-D70BC087B38C}.Debug - VS 2017|Win32.ActiveCfg = Debug - VS 2017|Win32
+ {132F81F8-46DA-49D0-9071-D70BC087B38C}.Debug - VS 2017|Win32.Build.0 = Debug - VS 2017|Win32
+ {132F81F8-46DA-49D0-9071-D70BC087B38C}.Debug - VS 2017|x64.ActiveCfg = Debug - VS 2017|x64
+ {132F81F8-46DA-49D0-9071-D70BC087B38C}.Debug - VS 2017|x64.Build.0 = Debug - VS 2017|x64
+ {132F81F8-46DA-49D0-9071-D70BC087B38C}.Debug - VS 2017|x86.ActiveCfg = Debug - VS 2017|Win32
+ {132F81F8-46DA-49D0-9071-D70BC087B38C}.Debug - VS 2017|x86.Build.0 = Debug - VS 2017|Win32
+ {132F81F8-46DA-49D0-9071-D70BC087B38C}.Release - C++ 03|Win32.ActiveCfg = Release - C++ 03|Win32
+ {132F81F8-46DA-49D0-9071-D70BC087B38C}.Release - C++ 03|Win32.Build.0 = Release - C++ 03|Win32
+ {132F81F8-46DA-49D0-9071-D70BC087B38C}.Release - C++ 03|x64.ActiveCfg = Release - C++ 03|x64
+ {132F81F8-46DA-49D0-9071-D70BC087B38C}.Release - C++ 03|x64.Build.0 = Release - C++ 03|x64
+ {132F81F8-46DA-49D0-9071-D70BC087B38C}.Release - C++ 03|x86.ActiveCfg = Release - C++ 03|Win32
+ {132F81F8-46DA-49D0-9071-D70BC087B38C}.Release - C++ 03|x86.Build.0 = Release - C++ 03|Win32
+ {132F81F8-46DA-49D0-9071-D70BC087B38C}.Release - VS 2015|Win32.ActiveCfg = Release - VS 2015|Win32
+ {132F81F8-46DA-49D0-9071-D70BC087B38C}.Release - VS 2015|Win32.Build.0 = Release - VS 2015|Win32
+ {132F81F8-46DA-49D0-9071-D70BC087B38C}.Release - VS 2015|x64.ActiveCfg = Release - VS 2015|x64
+ {132F81F8-46DA-49D0-9071-D70BC087B38C}.Release - VS 2015|x64.Build.0 = Release - VS 2015|x64
+ {132F81F8-46DA-49D0-9071-D70BC087B38C}.Release - VS 2015|x86.ActiveCfg = Release - VS 2015|Win32
+ {132F81F8-46DA-49D0-9071-D70BC087B38C}.Release - VS 2015|x86.Build.0 = Release - VS 2015|Win32
+ {132F81F8-46DA-49D0-9071-D70BC087B38C}.Release - VS 2017|Win32.ActiveCfg = Release - VS 2017|Win32
+ {132F81F8-46DA-49D0-9071-D70BC087B38C}.Release - VS 2017|Win32.Build.0 = Release - VS 2017|Win32
+ {132F81F8-46DA-49D0-9071-D70BC087B38C}.Release - VS 2017|x64.ActiveCfg = Release - VS 2017|x64
+ {132F81F8-46DA-49D0-9071-D70BC087B38C}.Release - VS 2017|x64.Build.0 = Release - VS 2017|x64
+ {132F81F8-46DA-49D0-9071-D70BC087B38C}.Release - VS 2017|x86.ActiveCfg = Release - VS 2017|Win32
+ {132F81F8-46DA-49D0-9071-D70BC087B38C}.Release - VS 2017|x86.Build.0 = Release - VS 2017|Win32
+ {6F4D72B1-E418-4859-8C19-D58659041948}.Debug - C++ 03|Win32.ActiveCfg = Debug - C++ 03|Win32
+ {6F4D72B1-E418-4859-8C19-D58659041948}.Debug - C++ 03|Win32.Build.0 = Debug - C++ 03|Win32
+ {6F4D72B1-E418-4859-8C19-D58659041948}.Debug - C++ 03|x64.ActiveCfg = Debug - C++ 03|x64
+ {6F4D72B1-E418-4859-8C19-D58659041948}.Debug - C++ 03|x64.Build.0 = Debug - C++ 03|x64
+ {6F4D72B1-E418-4859-8C19-D58659041948}.Debug - C++ 03|x86.ActiveCfg = Debug - C++ 03|Win32
+ {6F4D72B1-E418-4859-8C19-D58659041948}.Debug - C++ 03|x86.Build.0 = Debug - C++ 03|Win32
+ {6F4D72B1-E418-4859-8C19-D58659041948}.Debug - VS 2015|Win32.ActiveCfg = Debug - VS 2015|Win32
+ {6F4D72B1-E418-4859-8C19-D58659041948}.Debug - VS 2015|Win32.Build.0 = Debug - VS 2015|Win32
+ {6F4D72B1-E418-4859-8C19-D58659041948}.Debug - VS 2015|x64.ActiveCfg = Debug - VS 2015|x64
+ {6F4D72B1-E418-4859-8C19-D58659041948}.Debug - VS 2015|x64.Build.0 = Debug - VS 2015|x64
+ {6F4D72B1-E418-4859-8C19-D58659041948}.Debug - VS 2015|x86.ActiveCfg = Debug - VS 2015|Win32
+ {6F4D72B1-E418-4859-8C19-D58659041948}.Debug - VS 2015|x86.Build.0 = Debug - VS 2015|Win32
+ {6F4D72B1-E418-4859-8C19-D58659041948}.Debug - VS 2017|Win32.ActiveCfg = Debug - VS 2017|Win32
+ {6F4D72B1-E418-4859-8C19-D58659041948}.Debug - VS 2017|Win32.Build.0 = Debug - VS 2017|Win32
+ {6F4D72B1-E418-4859-8C19-D58659041948}.Debug - VS 2017|x64.ActiveCfg = Debug - VS 2017|x64
+ {6F4D72B1-E418-4859-8C19-D58659041948}.Debug - VS 2017|x64.Build.0 = Debug - VS 2017|x64
+ {6F4D72B1-E418-4859-8C19-D58659041948}.Debug - VS 2017|x86.ActiveCfg = Debug - VS 2017|Win32
+ {6F4D72B1-E418-4859-8C19-D58659041948}.Debug - VS 2017|x86.Build.0 = Debug - VS 2017|Win32
+ {6F4D72B1-E418-4859-8C19-D58659041948}.Release - C++ 03|Win32.ActiveCfg = Release - C++ 03|Win32
+ {6F4D72B1-E418-4859-8C19-D58659041948}.Release - C++ 03|Win32.Build.0 = Release - C++ 03|Win32
+ {6F4D72B1-E418-4859-8C19-D58659041948}.Release - C++ 03|x64.ActiveCfg = Release - C++ 03|x64
+ {6F4D72B1-E418-4859-8C19-D58659041948}.Release - C++ 03|x64.Build.0 = Release - C++ 03|x64
+ {6F4D72B1-E418-4859-8C19-D58659041948}.Release - C++ 03|x86.ActiveCfg = Release - C++ 03|Win32
+ {6F4D72B1-E418-4859-8C19-D58659041948}.Release - C++ 03|x86.Build.0 = Release - C++ 03|Win32
+ {6F4D72B1-E418-4859-8C19-D58659041948}.Release - VS 2015|Win32.ActiveCfg = Release - VS 2015|Win32
+ {6F4D72B1-E418-4859-8C19-D58659041948}.Release - VS 2015|Win32.Build.0 = Release - VS 2015|Win32
+ {6F4D72B1-E418-4859-8C19-D58659041948}.Release - VS 2015|x64.ActiveCfg = Release - VS 2015|x64
+ {6F4D72B1-E418-4859-8C19-D58659041948}.Release - VS 2015|x64.Build.0 = Release - VS 2015|x64
+ {6F4D72B1-E418-4859-8C19-D58659041948}.Release - VS 2015|x86.ActiveCfg = Release - VS 2015|Win32
+ {6F4D72B1-E418-4859-8C19-D58659041948}.Release - VS 2015|x86.Build.0 = Release - VS 2015|Win32
+ {6F4D72B1-E418-4859-8C19-D58659041948}.Release - VS 2017|Win32.ActiveCfg = Release - VS 2017|Win32
+ {6F4D72B1-E418-4859-8C19-D58659041948}.Release - VS 2017|Win32.Build.0 = Release - VS 2017|Win32
+ {6F4D72B1-E418-4859-8C19-D58659041948}.Release - VS 2017|x64.ActiveCfg = Release - VS 2017|x64
+ {6F4D72B1-E418-4859-8C19-D58659041948}.Release - VS 2017|x64.Build.0 = Release - VS 2017|x64
+ {6F4D72B1-E418-4859-8C19-D58659041948}.Release - VS 2017|x86.ActiveCfg = Release - VS 2017|Win32
+ {6F4D72B1-E418-4859-8C19-D58659041948}.Release - VS 2017|x86.Build.0 = Release - VS 2017|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(NestedProjects) = preSolution
+ {86310DF6-AE4D-48C6-B302-80F5091FC09B} = {77439103-0A48-4243-8D07-3223DC5CF353}
+ {1C08A7CC-21A3-42E1-AA39-7E03F88A73F3} = {86310DF6-AE4D-48C6-B302-80F5091FC09B}
+ {968024AC-A87C-40E9-B75A-B7AE9790C73F} = {1C08A7CC-21A3-42E1-AA39-7E03F88A73F3}
+ {35E7ED3A-7DF9-4E75-B289-99B3D0050992} = {1C08A7CC-21A3-42E1-AA39-7E03F88A73F3}
+ {63218938-B7EC-4913-9B3B-CEAE1F2A925B} = {1C08A7CC-21A3-42E1-AA39-7E03F88A73F3}
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {CB028EB1-46EF-44C3-B508-97BC3E09DC4D}
+ EndGlobalSection
+EndGlobal
diff --git a/externals/essentials/source/essentials/CMakeLists.txt b/externals/essentials/source/essentials/CMakeLists.txt
new file mode 100644
index 0000000..edc08df
--- /dev/null
+++ b/externals/essentials/source/essentials/CMakeLists.txt
@@ -0,0 +1,41 @@
+cmake_minimum_required(VERSION 2.8)
+
+project(essentials)
+
+set(CMAKE_VERBOSE_MAKEFILE, 1)
+
+if(POLICY CMP0054)
+ cmake_policy(SET CMP0054 NEW)
+endif()
+
+file(GLOB essentials_SRC "include/essentials/*.hpp" "include/essentials/compatibility/*.hpp" "source/*.cpp")
+
+set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
+set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
+set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
+
+include(./../CMakeHelpers/addSpecificFlags.cmake)
+include(./../CMakeHelpers/addSeadexOptions.cmake)
+
+include_directories("./include")
+
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${extra_flags}")
+
+
+if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
+ add_library(libessentials ${LINK_TYPE} ${essentials_SRC})
+elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
+ add_library(essentials STATIC ${essentials_SRC})
+endif()
+
+
+file(GLOB essentials_hpp "include/essentials/*.hpp" "include/essentials/compatibility/*.hpp")
+install(FILES ${essentials_hpp} DESTINATION include/essentials/include)
+
+if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
+ install(TARGETS libessentials DESTINATION lib)
+ set_target_properties(libessentials PROPERTIES PREFIX "")
+elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
+ install(TARGETS essentials DESTINATION lib)
+ set_target_properties(essentials PROPERTIES PREFIX "")
+endif()
diff --git a/externals/essentials/source/essentials/essentials.vcxproj b/externals/essentials/source/essentials/essentials.vcxproj
new file mode 100644
index 0000000..63f7f7e
--- /dev/null
+++ b/externals/essentials/source/essentials/essentials.vcxproj
@@ -0,0 +1,545 @@
+
+
+
+
+ Debug - C++ 03
+ Win32
+
+
+ Debug - C++ 03
+ x64
+
+
+ Debug - Clang
+ Win32
+
+
+ Debug - Clang
+ x64
+
+
+ Debug - VS 2013
+ Win32
+
+
+ Debug - VS 2013
+ x64
+
+
+ Debug - VS 2015
+ Win32
+
+
+ Debug - VS 2015
+ x64
+
+
+ Debug - VS 2017
+ Win32
+
+
+ Release - C++ 03
+ Win32
+
+
+ Release - C++ 03
+ x64
+
+
+ Release - Clang
+ Win32
+
+
+ Release - Clang
+ x64
+
+
+ Release - VS 2015
+ Win32
+
+
+ Release - VS 2015
+ x64
+
+
+ Release - VS 2017
+ Win32
+
+
+ Debug - VS 2017
+ x64
+
+
+ Release - VS 2017
+ x64
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {132F81F8-46DA-49D0-9071-D70BC087B38C}
+ essentials
+ 8.1
+
+
+
+ StaticLibrary
+ true
+ v141
+ MultiByte
+
+
+ StaticLibrary
+ true
+ v141_clang_c2
+ MultiByte
+
+
+ StaticLibrary
+ true
+ v140
+ MultiByte
+
+
+ StaticLibrary
+ true
+ v120
+ MultiByte
+
+
+ StaticLibrary
+ true
+ v120
+ MultiByte
+
+
+ StaticLibrary
+ false
+ v141
+ true
+ MultiByte
+
+
+ StaticLibrary
+ false
+ v141
+ true
+ MultiByte
+
+
+ StaticLibrary
+ false
+ v140
+ true
+ MultiByte
+
+
+ StaticLibrary
+ false
+ v120
+ true
+ MultiByte
+
+
+ StaticLibrary
+ true
+ v141
+ MultiByte
+
+
+ StaticLibrary
+ true
+ v141_clang_c2
+ MultiByte
+
+
+ StaticLibrary
+ true
+ v140
+ MultiByte
+
+
+ StaticLibrary
+ true
+ v120
+ MultiByte
+
+
+ StaticLibrary
+ true
+ v120
+ MultiByte
+
+
+ StaticLibrary
+ false
+ v141
+ true
+ MultiByte
+
+
+ StaticLibrary
+ false
+ v141_clang_c2
+ true
+ MultiByte
+
+
+ StaticLibrary
+ false
+ v140
+ true
+ MultiByte
+
+
+ StaticLibrary
+ false
+ v120
+ true
+ MultiByte
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Disabled
+ true
+
+
+ true
+
+
+
+
+ Disabled
+ true
+
+
+ true
+
+
+
+
+ Disabled
+ true
+
+
+ true
+
+
+
+
+ Disabled
+ true
+
+
+ true
+
+
+
+
+ Level3
+ Disabled
+ true
+
+
+ true
+
+
+
+
+ Disabled
+ true
+
+
+ true
+
+
+
+
+ Disabled
+ true
+
+
+ true
+
+
+
+
+ Disabled
+ true
+
+
+ true
+
+
+
+
+ Disabled
+ true
+
+
+ true
+
+
+
+
+ Level3
+ Disabled
+ true
+
+
+ true
+
+
+
+
+ Level3
+ MaxSpeed
+ true
+ true
+ true
+
+
+ true
+ true
+ true
+
+
+
+
+ Level3
+ MaxSpeed
+ true
+ true
+ true
+
+
+ true
+ true
+ true
+
+
+
+
+ Level3
+ MaxSpeed
+ true
+ true
+ true
+
+
+ true
+ true
+ true
+
+
+
+
+ Level3
+ MaxSpeed
+ true
+ true
+ true
+
+
+ true
+ true
+ true
+
+
+
+
+ Level3
+ MaxSpeed
+ true
+ true
+ true
+
+
+ true
+ true
+ true
+
+
+
+
+ Level3
+ MaxSpeed
+ true
+ true
+ true
+
+
+ true
+ true
+ true
+
+
+
+
+ Level3
+ MaxSpeed
+ true
+ true
+ true
+
+
+ true
+ true
+ true
+
+
+
+
+ Level3
+ MaxSpeed
+ true
+ true
+ true
+
+
+ true
+ true
+ true
+
+
+
+
+
+
\ No newline at end of file
diff --git a/externals/essentials/source/essentials/essentials.vcxproj.filters b/externals/essentials/source/essentials/essentials.vcxproj.filters
new file mode 100644
index 0000000..e68031a
--- /dev/null
+++ b/externals/essentials/source/essentials/essentials.vcxproj.filters
@@ -0,0 +1,107 @@
+
+
+
+
+ {4FC737F1-C7A5-4376-A066-2A32D752A2FF}
+ cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx
+
+
+ {93995380-89BD-4b04-88EB-625FBE52EBFB}
+ h;hh;hpp;hxx;hm;inl;inc;xsd
+
+
+ {67DA6AB6-F800-4c08-8B7A-83BB121AAD01}
+ rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms
+
+
+ {4a8b49fc-8912-43d5-a33a-962f5e097001}
+
+
+ {13a9f023-217a-4d7a-946f-8147bce1d21a}
+
+
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+
+
+
+
+
+ license
+
+
+ license
+
+
+ license
+
+
+ license
+
+
+ license
+
+
+
+
+ Header Files\compatibility
+
+
+ Header Files\compatibility
+
+
+ Header Files\compatibility
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files\compatibility
+
+
+
\ No newline at end of file
diff --git a/externals/essentials/include/essentials/base.hpp b/externals/essentials/source/essentials/include/essentials/base.hpp
similarity index 97%
rename from externals/essentials/include/essentials/base.hpp
rename to externals/essentials/source/essentials/include/essentials/base.hpp
index eab624d..9ea9eb7 100644
--- a/externals/essentials/include/essentials/base.hpp
+++ b/externals/essentials/source/essentials/include/essentials/base.hpp
@@ -1,41 +1,41 @@
-//////////////////////////////////////////////////////////////////////////////////////////////////////
-// //
-// This file is part of the Seadex essentials library (http://essentials.seadex.de). //
-// Copyright( C ) 2017 Seadex GmbH //
-// Licensing information is available in the folder "license" which is part of this distribution. //
-// The same information is available on the www @ http://essentials.seadex.de/License.html. //
-// //
-//////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-#ifndef BASE_0C97CC9D_8A5B_4696_9964_49819CD9233A
-#define BASE_0C97CC9D_8A5B_4696_9964_49819CD9233A
-
-
-//!\def SX_ASSERT( _condition, _message )
-//!\brief Assert a given condition. Adds the message to the assert for better diagnostics when the assert is triggered.
-#define SX_ASSERT( _condition, _message ) \
- do \
- { \
- assert( ( _condition ) && _message ); \
- } \
- while( 0 )
-
-//!\def SX_ASSERTED( _x )
-//!\brief Suppress warnings for variables that are only used within asserts.
-#define SX_ASSERTED( _x ) static_cast< void >( _x );
-
-//!\def SX_UNUSED_PARAMETER( _x )
-//!\brief Suppress warnings for unreferenced parameters.
-#define SX_UNUSED_PARAMETER( _x ) static_cast( _x )
-
-
-//!\def SX_UNUSED_VARIABLE( _x )
-//!\brief Suppress warnings for unreferenced variable.
-#define SX_UNUSED_VARIABLE( _x ) static_cast( _x )
-
-
-#include
-
-
-#endif
+//////////////////////////////////////////////////////////////////////////////////////////////////////
+// //
+// This file is part of the Seadex essentials library (http://essentials.seadex.de). //
+// Copyright( C ) 2017 Seadex GmbH //
+// Licensing information is available in the folder "license" which is part of this distribution. //
+// The same information is available on the www @ http://essentials.seadex.de/License.html. //
+// //
+//////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef BASE_0C97CC9D_8A5B_4696_9964_49819CD9233A
+#define BASE_0C97CC9D_8A5B_4696_9964_49819CD9233A
+
+
+//!\def SX_ASSERT( _condition, _message )
+//!\brief Assert a given condition. Adds the message to the assert for better diagnostics when the assert is triggered.
+#define SX_ASSERT( _condition, _message ) \
+ do \
+ { \
+ assert( ( _condition ) && _message ); \
+ } \
+ while( 0 )
+
+//!\def SX_ASSERTED( _x )
+//!\brief Suppress warnings for variables that are only used within asserts.
+#define SX_ASSERTED( _x ) static_cast< void >( _x );
+
+//!\def SX_UNUSED_PARAMETER( _x )
+//!\brief Suppress warnings for unreferenced parameters.
+#define SX_UNUSED_PARAMETER( _x ) static_cast( _x )
+
+
+//!\def SX_UNUSED_VARIABLE( _x )
+//!\brief Suppress warnings for unreferenced variable.
+#define SX_UNUSED_VARIABLE( _x ) static_cast( _x )
+
+
+#include
+
+
+#endif
diff --git a/externals/essentials/include/essentials/build_number.hpp b/externals/essentials/source/essentials/include/essentials/build_number.hpp
similarity index 93%
rename from externals/essentials/include/essentials/build_number.hpp
rename to externals/essentials/source/essentials/include/essentials/build_number.hpp
index 0e18bab..6771ace 100644
--- a/externals/essentials/include/essentials/build_number.hpp
+++ b/externals/essentials/source/essentials/include/essentials/build_number.hpp
@@ -1,35 +1,35 @@
-//////////////////////////////////////////////////////////////////////////////////////////////////////
-// //
-// This file is part of the Seadex essentials library (http://essentials.seadex.de). //
-// Copyright( C ) 2017 Seadex GmbH //
-// Licensing information is available in the folder "license" which is part of this distribution. //
-// The same information is available on the www @ http://essentials.seadex.de/License.html. //
-// //
-//////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-#ifndef BUILD_NUMBER_0A2C7A7F_B3EC_443A_BDD8_652E7DEFC433
-#define BUILD_NUMBER_0A2C7A7F_B3EC_443A_BDD8_652E7DEFC433
-
-
-#include "compatibility/compatibility.hpp"
-
-
-namespace sxe
-{
-
-
-namespace version
-{
-
-
- const sxe::uint16_t BUILD_NUMBER( 60 );
-
-
-}
-
-
-}
-
-
-#endif
+//////////////////////////////////////////////////////////////////////////////////////////////////////
+// //
+// This file is part of the Seadex essentials library (http://essentials.seadex.de). //
+// Copyright( C ) 2017 Seadex GmbH //
+// Licensing information is available in the folder "license" which is part of this distribution. //
+// The same information is available on the www @ http://essentials.seadex.de/License.html. //
+// //
+//////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef BUILD_NUMBER_0A2C7A7F_B3EC_443A_BDD8_652E7DEFC433
+#define BUILD_NUMBER_0A2C7A7F_B3EC_443A_BDD8_652E7DEFC433
+
+
+#include "compatibility/compatibility.hpp"
+
+
+namespace sxe
+{
+
+
+namespace version
+{
+
+
+ const sxe::uint16_t BUILD_NUMBER( 96 );
+
+
+}
+
+
+}
+
+
+#endif
diff --git a/externals/essentials/include/essentials/compatibility/chrono.hpp b/externals/essentials/source/essentials/include/essentials/compatibility/chrono.hpp
similarity index 96%
rename from externals/essentials/include/essentials/compatibility/chrono.hpp
rename to externals/essentials/source/essentials/include/essentials/compatibility/chrono.hpp
index b53e1fd..1946dc4 100644
--- a/externals/essentials/include/essentials/compatibility/chrono.hpp
+++ b/externals/essentials/source/essentials/include/essentials/compatibility/chrono.hpp
@@ -1,59 +1,59 @@
-//////////////////////////////////////////////////////////////////////////////////////////////////////
-// //
-// This file is part of the Seadex essentials library (http://essentials.seadex.de). //
-// Copyright( C ) 2017 Seadex GmbH //
-// Licensing information is available in the folder "license" which is part of this distribution. //
-// The same information is available on the www @ http://essentials.seadex.de/License.html. //
-// //
-//////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-#ifndef CHRONO_2625645C_6611_46F7_AA2F_6F3B256839F3
-#define CHRONO_2625645C_6611_46F7_AA2F_6F3B256839F3
-
-
-#ifdef SX_CPP03_BOOST
-
-#include
-
-#else
-
-#include
-
-#endif
-
-
-namespace sxe
-{
-
-
-#ifdef SX_CPP03_BOOST // C++03 compatibility
-
- using boost::chrono::time_point;
- using boost::chrono::system_clock;
- using boost::chrono::steady_clock;
- using boost::chrono::seconds;
- using boost::chrono::milliseconds;
- using boost::chrono::duration_cast;
- using boost::chrono::time_point;
-
-
-#else // C++11 compatibility
-
-
- using std::chrono::time_point;
- using std::chrono::system_clock;
- using std::chrono::steady_clock;
- using std::chrono::milliseconds;
- using std::chrono::seconds;
- using std::chrono::duration_cast;
- using std::chrono::time_point;
-
-
-#endif
-
-
-}
-
-
-#endif
+//////////////////////////////////////////////////////////////////////////////////////////////////////
+// //
+// This file is part of the Seadex essentials library (http://essentials.seadex.de). //
+// Copyright( C ) 2017 Seadex GmbH //
+// Licensing information is available in the folder "license" which is part of this distribution. //
+// The same information is available on the www @ http://essentials.seadex.de/License.html. //
+// //
+//////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef CHRONO_2625645C_6611_46F7_AA2F_6F3B256839F3
+#define CHRONO_2625645C_6611_46F7_AA2F_6F3B256839F3
+
+
+#ifdef SX_CPP03_BOOST
+
+#include
+
+#else
+
+#include
+
+#endif
+
+
+namespace sxe
+{
+
+
+#ifdef SX_CPP03_BOOST // C++03 compatibility
+
+ using boost::chrono::time_point;
+ using boost::chrono::system_clock;
+ using boost::chrono::steady_clock;
+ using boost::chrono::seconds;
+ using boost::chrono::milliseconds;
+ using boost::chrono::duration_cast;
+ using boost::chrono::time_point;
+
+
+#else // C++11 compatibility
+
+
+ using std::chrono::time_point;
+ using std::chrono::system_clock;
+ using std::chrono::steady_clock;
+ using std::chrono::milliseconds;
+ using std::chrono::seconds;
+ using std::chrono::duration_cast;
+ using std::chrono::time_point;
+
+
+#endif
+
+
+}
+
+
+#endif
diff --git a/externals/essentials/include/essentials/compatibility/compatibility.hpp b/externals/essentials/source/essentials/include/essentials/compatibility/compatibility.hpp
similarity index 95%
rename from externals/essentials/include/essentials/compatibility/compatibility.hpp
rename to externals/essentials/source/essentials/include/essentials/compatibility/compatibility.hpp
index 9116631..4d5e764 100644
--- a/externals/essentials/include/essentials/compatibility/compatibility.hpp
+++ b/externals/essentials/source/essentials/include/essentials/compatibility/compatibility.hpp
@@ -1,184 +1,184 @@
-//////////////////////////////////////////////////////////////////////////////////////////////////////
-// //
-// This file is part of the Seadex essentials library (http://essentials.seadex.de). //
-// Copyright( C ) 2017 Seadex GmbH //
-// Licensing information is available in the folder "license" which is part of this distribution. //
-// The same information is available on the www @ http://essentials.seadex.de/License.html. //
-// //
-//////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-#ifndef COMPATIBILITY_63A35CFD_26BC_42BE_9F09_D559349FFE63
-#define COMPATIBILITY_63A35CFD_26BC_42BE_9F09_D559349FFE63
-
-
-#include "essentials_backward_compatibility.hpp"
-
-
-#ifdef SX_CPP03_BOOST
-#ifdef _MSC_VER
-#pragma warning( push )
-#pragma warning( disable : 4456 )
-#pragma warning( disable : 4996 )
-#endif
-
-
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-
-#ifdef _MSC_VER
-#pragma warning( pop )
-#endif
-
-#else
-#include
-#include
-#include
-#include
-#include
-#endif
-
-
-namespace sxe
-{
-
-
-#ifdef SX_CPP03_BOOST // C++03 compatibility
-
- #define SX_OVERRIDE
- #define SX_FINAL
- #define SX_DELETE
- #define SX_NULLPTR NULL
-
- #define SX_FOR(_variable, _container) BOOST_FOREACH( _variable, _container )
-
- #define SX_CONSTEXPR const
-
- #define SX_NOEXCEPT throw()
-
-
- using boost::shared_ptr;
- #define SX_UNIQUE_PTR shared_ptr
-
- #define SX_MAKE_SHARED boost::make_shared
- #define SX_MAKE_UNIQUE boost::make_shared
-
- template
- _type& move(_type& _t)
- {
- return( _t );
- }
-
- using boost::int8_t;
- using boost::int16_t;
- using boost::int32_t;
- using boost::int64_t;
- using boost::uint8_t;
- using boost::uint16_t;
- using boost::uint32_t;
- using boost::uint64_t;
-
- using boost::bind;
- using boost::ref;
- using boost::cref;
- using boost::placeholders::_1;
- using boost::placeholders::_2;
-
- using boost::function;
-
- using boost::remove_reference;
- using boost::remove_const;
-
- using boost::random_device;
-
-
-#else // C++11 compatibility
-
- #ifdef SX_NO_STD_MAKE_UNIQUE
-
- template< typename t, typename ... args >
- std::unique_ptr< t > make_unique(args&& ... _args)
- {
- return( std::unique_ptr< t >(new t(std::forward< args >(_args)...)) );
- }
-
- #else
-
- using std::make_unique;
-
- #endif
-
- #define SX_OVERRIDE override
- #define SX_FINAL final
- #define SX_DELETE = delete
- #define SX_NULLPTR nullptr
-
- #define SX_FOR(_variable, _container) for( _variable : _container )
-
- #ifdef _MSC_VER
- #if _MSC_VER <= 1800
- #define SX_CONSTEXPR const
- #endif
- #endif
-
- #ifndef SX_CONSTEXPR
- #define SX_CONSTEXPR constexpr
- #endif
-
-#ifdef _MSC_VER
- #if _MSC_VER <= 1800
- #define SX_NOEXCEPT throw()
- #else
- #define SX_NOEXCEPT noexcept
- #endif
-#else
- #define SX_NOEXCEPT noexcept
-#endif
-
- using std::shared_ptr;
- template
- using SX_UNIQUE_PTR = std::unique_ptr<_pointee>;
-
- #define SX_MAKE_SHARED std::make_shared
- #define SX_MAKE_UNIQUE sxe::make_unique
-
- using std::move;
-
-
- using std::int8_t;
- using std::int16_t;
- using std::int32_t;
- using std::int64_t;
- using std::uint8_t;
- using std::uint16_t;
- using std::uint32_t;
- using std::uint64_t;
-
- using std::bind;
- using std::ref;
- using std::cref;
- using std::placeholders::_1;
- using std::placeholders::_2;
-
- using std::function;
-
- using std::remove_reference;
- using std::remove_const;
-
- using std::random_device;
-
-
-#endif
-
-
-}
-
-
-#endif
+//////////////////////////////////////////////////////////////////////////////////////////////////////
+// //
+// This file is part of the Seadex essentials library (http://essentials.seadex.de). //
+// Copyright( C ) 2017 Seadex GmbH //
+// Licensing information is available in the folder "license" which is part of this distribution. //
+// The same information is available on the www @ http://essentials.seadex.de/License.html. //
+// //
+//////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef COMPATIBILITY_63A35CFD_26BC_42BE_9F09_D559349FFE63
+#define COMPATIBILITY_63A35CFD_26BC_42BE_9F09_D559349FFE63
+
+
+#include "essentials_backward_compatibility.hpp"
+
+
+#ifdef SX_CPP03_BOOST
+#ifdef _MSC_VER
+#pragma warning( push )
+#pragma warning( disable : 4456 )
+#pragma warning( disable : 4996 )
+#endif
+
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#ifdef _MSC_VER
+#pragma warning( pop )
+#endif
+
+#else
+#include
+#include
+#include
+#include
+#include
+#endif
+
+
+namespace sxe
+{
+
+
+#ifdef SX_CPP03_BOOST // C++03 compatibility
+
+ #define SX_OVERRIDE
+ #define SX_FINAL
+ #define SX_DELETE
+ #define SX_NULLPTR NULL
+
+ #define SX_FOR(_variable, _container) BOOST_FOREACH( _variable, _container )
+
+ #define SX_CONSTEXPR const
+
+ #define SX_NOEXCEPT throw()
+
+
+ using boost::shared_ptr;
+ #define SX_UNIQUE_PTR shared_ptr
+
+ #define SX_MAKE_SHARED boost::make_shared
+ #define SX_MAKE_UNIQUE boost::make_shared
+
+ template
+ _type& move(_type& _t)
+ {
+ return( _t );
+ }
+
+ using boost::int8_t;
+ using boost::int16_t;
+ using boost::int32_t;
+ using boost::int64_t;
+ using boost::uint8_t;
+ using boost::uint16_t;
+ using boost::uint32_t;
+ using boost::uint64_t;
+
+ using boost::bind;
+ using boost::ref;
+ using boost::cref;
+ using boost::placeholders::_1;
+ using boost::placeholders::_2;
+
+ using boost::function;
+
+ using boost::remove_reference;
+ using boost::remove_const;
+
+ using boost::random_device;
+
+
+#else // C++11 compatibility
+
+ #ifdef SX_NO_STD_MAKE_UNIQUE
+
+ template< typename t, typename ... args >
+ std::unique_ptr< t > make_unique(args&& ... _args)
+ {
+ return( std::unique_ptr< t >(new t(std::forward< args >(_args)...)) );
+ }
+
+ #else
+
+ using std::make_unique;
+
+ #endif
+
+ #define SX_OVERRIDE override
+ #define SX_FINAL final
+ #define SX_DELETE = delete
+ #define SX_NULLPTR nullptr
+
+ #define SX_FOR(_variable, _container) for( _variable : _container )
+
+ #ifdef _MSC_VER
+ #if _MSC_VER <= 1800
+ #define SX_CONSTEXPR const
+ #endif
+ #endif
+
+ #ifndef SX_CONSTEXPR
+ #define SX_CONSTEXPR constexpr
+ #endif
+
+#ifdef _MSC_VER
+ #if _MSC_VER <= 1800
+ #define SX_NOEXCEPT throw()
+ #else
+ #define SX_NOEXCEPT noexcept
+ #endif
+#else
+ #define SX_NOEXCEPT noexcept
+#endif
+
+ using std::shared_ptr;
+ template
+ using SX_UNIQUE_PTR = std::unique_ptr<_pointee>;
+
+ #define SX_MAKE_SHARED std::make_shared
+ #define SX_MAKE_UNIQUE sxe::make_unique
+
+ using std::move;
+
+
+ using std::int8_t;
+ using std::int16_t;
+ using std::int32_t;
+ using std::int64_t;
+ using std::uint8_t;
+ using std::uint16_t;
+ using std::uint32_t;
+ using std::uint64_t;
+
+ using std::bind;
+ using std::ref;
+ using std::cref;
+ using std::placeholders::_1;
+ using std::placeholders::_2;
+
+ using std::function;
+
+ using std::remove_reference;
+ using std::remove_const;
+
+ using std::random_device;
+
+
+#endif
+
+
+}
+
+
+#endif
diff --git a/externals/essentials/include/essentials/compatibility/essentials_backward_compatibility.hpp b/externals/essentials/source/essentials/include/essentials/compatibility/essentials_backward_compatibility.hpp
similarity index 97%
rename from externals/essentials/include/essentials/compatibility/essentials_backward_compatibility.hpp
rename to externals/essentials/source/essentials/include/essentials/compatibility/essentials_backward_compatibility.hpp
index 077dbb4..c0b2d60 100644
--- a/externals/essentials/include/essentials/compatibility/essentials_backward_compatibility.hpp
+++ b/externals/essentials/source/essentials/include/essentials/compatibility/essentials_backward_compatibility.hpp
@@ -1,31 +1,31 @@
-//////////////////////////////////////////////////////////////////////////////////////////////////////
-// //
-// This file is part of the Seadex essentials library (http://essentials.seadex.de). //
-// Copyright( C ) 2017 Seadex GmbH //
-// Licensing information is available in the folder "license" which is part of this distribution. //
-// The same information is available on the www @ http://essentials.seadex.de/License.html. //
-// //
-//////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-#ifndef ESSENTIALS_BACKWARD_COMPATIBILITY_EBFE3698_30C0_456A_A146_1F081011CB49
-#define ESSENTIALS_BACKWARD_COMPATIBILITY_EBFE3698_30C0_456A_A146_1F081011CB49
-
-
-#ifdef Y_NO_STD_MAKE_UNIQUE
-#define SX_NO_STD_MAKE_UNIQUE
-#endif
-
-
-#ifdef Y_CPP03_BOOST
-#define SX_CPP03_BOOST
-#endif
-
-
-#define Y_UNIQUE_PTR SX_UNIQUE_PTR
-#define Y_MAKE_UNIQUE SX_MAKE_UNIQUE
-#define Y_MAKE_SHARED SX_MAKE_SHARED
-#define Y_UNUSED_PARAMETER SX_UNUSED_PARAMETER
-
-
-#endif
+//////////////////////////////////////////////////////////////////////////////////////////////////////
+// //
+// This file is part of the Seadex essentials library (http://essentials.seadex.de). //
+// Copyright( C ) 2017 Seadex GmbH //
+// Licensing information is available in the folder "license" which is part of this distribution. //
+// The same information is available on the www @ http://essentials.seadex.de/License.html. //
+// //
+//////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef ESSENTIALS_BACKWARD_COMPATIBILITY_EBFE3698_30C0_456A_A146_1F081011CB49
+#define ESSENTIALS_BACKWARD_COMPATIBILITY_EBFE3698_30C0_456A_A146_1F081011CB49
+
+
+#ifdef Y_NO_STD_MAKE_UNIQUE
+#define SX_NO_STD_MAKE_UNIQUE
+#endif
+
+
+#ifdef Y_CPP03_BOOST
+#define SX_CPP03_BOOST
+#endif
+
+
+#define Y_UNIQUE_PTR SX_UNIQUE_PTR
+#define Y_MAKE_UNIQUE SX_MAKE_UNIQUE
+#define Y_MAKE_SHARED SX_MAKE_SHARED
+#define Y_UNUSED_PARAMETER SX_UNUSED_PARAMETER
+
+
+#endif
diff --git a/externals/essentials/include/essentials/compatibility/thread.hpp b/externals/essentials/source/essentials/include/essentials/compatibility/thread.hpp
similarity index 96%
rename from externals/essentials/include/essentials/compatibility/thread.hpp
rename to externals/essentials/source/essentials/include/essentials/compatibility/thread.hpp
index 3cdb3c3..2381481 100644
--- a/externals/essentials/include/essentials/compatibility/thread.hpp
+++ b/externals/essentials/source/essentials/include/essentials/compatibility/thread.hpp
@@ -1,63 +1,63 @@
-//////////////////////////////////////////////////////////////////////////////////////////////////////
-// //
-// This file is part of the Seadex essentials library (http://essentials.seadex.de). //
-// Copyright( C ) 2017 Seadex GmbH //
-// Licensing information is available in the folder "license" which is part of this distribution. //
-// The same information is available on the www @ http://essentials.seadex.de/License.html. //
-// //
-//////////////////////////////////////////////////////////////////////////////////////////////////////
-
-#ifndef THREAD_A43220E4_F5F8_42D5_9B31_749D813922CF
-#define THREAD_A43220E4_F5F8_42D5_9B31_749D813922CF
-
-
-#ifdef SX_CPP03_BOOST
-
-#include
-#include
-
-#else
-
-#include
-#include
-#include
-#include
-
-#endif
-
-
-
-namespace sxe
-{
-
-
-#ifdef SX_CPP03_BOOST // C++03 compatibility
-
- using boost::thread;
- using boost::unique_lock;
- using boost::mutex;
- using boost::lock_guard;
- using boost::condition_variable;
- using boost::this_thread::sleep_for;
- using boost::atomic;
-
-
-#else // C++11 compatibility
-
-
- using std::thread;
- using std::unique_lock;
- using std::mutex;
- using std::lock_guard;
- using std::condition_variable;
- using std::this_thread::sleep_for;
- using std::atomic;
-
-
-#endif
-
-
-}
-
-
-#endif
+//////////////////////////////////////////////////////////////////////////////////////////////////////
+// //
+// This file is part of the Seadex essentials library (http://essentials.seadex.de). //
+// Copyright( C ) 2017 Seadex GmbH //
+// Licensing information is available in the folder "license" which is part of this distribution. //
+// The same information is available on the www @ http://essentials.seadex.de/License.html. //
+// //
+//////////////////////////////////////////////////////////////////////////////////////////////////////
+
+#ifndef THREAD_A43220E4_F5F8_42D5_9B31_749D813922CF
+#define THREAD_A43220E4_F5F8_42D5_9B31_749D813922CF
+
+
+#ifdef SX_CPP03_BOOST
+
+#include
+#include
+
+#else
+
+#include
+#include
+#include
+#include
+
+#endif
+
+
+
+namespace sxe
+{
+
+
+#ifdef SX_CPP03_BOOST // C++03 compatibility
+
+ using boost::thread;
+ using boost::unique_lock;
+ using boost::mutex;
+ using boost::lock_guard;
+ using boost::condition_variable;
+ using boost::this_thread::sleep_for;
+ using boost::atomic;
+
+
+#else // C++11 compatibility
+
+
+ using std::thread;
+ using std::unique_lock;
+ using std::mutex;
+ using std::lock_guard;
+ using std::condition_variable;
+ using std::this_thread::sleep_for;
+ using std::atomic;
+
+
+#endif
+
+
+}
+
+
+#endif
diff --git a/externals/essentials/include/essentials/conversion.hpp b/externals/essentials/source/essentials/include/essentials/conversion.hpp
similarity index 97%
rename from externals/essentials/include/essentials/conversion.hpp
rename to externals/essentials/source/essentials/include/essentials/conversion.hpp
index 8d73274..c46dd99 100644
--- a/externals/essentials/include/essentials/conversion.hpp
+++ b/externals/essentials/source/essentials/include/essentials/conversion.hpp
@@ -1,53 +1,53 @@
-//////////////////////////////////////////////////////////////////////////////////////////////////////
-// //
-// This file is part of the Seadex essentials library (http://essentials.seadex.de). //
-// Copyright( C ) 2017 Seadex GmbH //
-// Licensing information is available in the folder "license" which is part of this distribution. //
-// The same information is available on the www @ http://essentials.seadex.de/License.html. //
-// //
-//////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-#ifndef CONVERSION_99CAC61B_DD8A_43E2_8612_0F42873A5741
-#define CONVERSION_99CAC61B_DD8A_43E2_8612_0F42873A5741
-
-
-#include "compatibility/compatibility.hpp"
-
-
-namespace sxe
-{
-
-
- //!\brief Converts a number from string to int.
- //!\param _int_as_string Number in string format.
- //!\param _result Variable where the result will be stored.
- //!\return True on success, false otherwise.
- bool string_to_int( const char* const _int_as_string, int& _result );
-
- //!\brief Converts a number from unsigned int 32 to string.
- //!\param _value Number to be converted.
- //!\return Number as string.
- std::string to_string( const sxe::uint32_t _value );
-
- //!\brief Converts a number from int to string.
- //!\param _value Number to be converted.
- //!\return Number as string.
- std::string to_string( const int _value );
-
- //!\brief Converts a string to uppercase.
- //!\param _value String to be converted.
- //!\return String in uppercase format.
- //!\sa to_lower
- std::string to_upper( const std::string& _value );
-
- //!\brief Converts a string to lowercase.
- //!\param _value String to be converted.
- //!\return String in lowercase format.
- //!\sa to_upper
- std::string to_lower( const std::string& _value );
-
-}
-
-
-#endif
+//////////////////////////////////////////////////////////////////////////////////////////////////////
+// //
+// This file is part of the Seadex essentials library (http://essentials.seadex.de). //
+// Copyright( C ) 2017 Seadex GmbH //
+// Licensing information is available in the folder "license" which is part of this distribution. //
+// The same information is available on the www @ http://essentials.seadex.de/License.html. //
+// //
+//////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef CONVERSION_99CAC61B_DD8A_43E2_8612_0F42873A5741
+#define CONVERSION_99CAC61B_DD8A_43E2_8612_0F42873A5741
+
+
+#include "compatibility/compatibility.hpp"
+
+
+namespace sxe
+{
+
+
+ //!\brief Converts a number from string to int.
+ //!\param _int_as_string Number in string format.
+ //!\param _result Variable where the result will be stored.
+ //!\return True on success, false otherwise.
+ bool string_to_int( const char* const _int_as_string, int& _result );
+
+ //!\brief Converts a number from unsigned int 32 to string.
+ //!\param _value Number to be converted.
+ //!\return Number as string.
+ std::string to_string( const sxe::uint32_t _value );
+
+ //!\brief Converts a number from int to string.
+ //!\param _value Number to be converted.
+ //!\return Number as string.
+ std::string to_string( const int _value );
+
+ //!\brief Converts a string to uppercase.
+ //!\param _value String to be converted.
+ //!\return String in uppercase format.
+ //!\sa to_lower
+ std::string to_upper( const std::string& _value );
+
+ //!\brief Converts a string to lowercase.
+ //!\param _value String to be converted.
+ //!\return String in lowercase format.
+ //!\sa to_upper
+ std::string to_lower( const std::string& _value );
+
+}
+
+
+#endif
diff --git a/externals/essentials/include/essentials/essentials_version.hpp b/externals/essentials/source/essentials/include/essentials/essentials_version.hpp
similarity index 96%
rename from externals/essentials/include/essentials/essentials_version.hpp
rename to externals/essentials/source/essentials/include/essentials/essentials_version.hpp
index b652986..96d967f 100644
--- a/externals/essentials/include/essentials/essentials_version.hpp
+++ b/externals/essentials/source/essentials/include/essentials/essentials_version.hpp
@@ -1,41 +1,41 @@
-//////////////////////////////////////////////////////////////////////////////////////////////////////
-// //
-// This file is part of the Seadex essentials library (http://essentials.seadex.de). //
-// Copyright( C ) 2017 Seadex GmbH //
-// Licensing information is available in the folder "license" which is part of this distribution. //
-// The same information is available on the www @ http://essentials.seadex.de/License.html. //
-// //
-//////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-#ifndef VERSION_E55DC329_9A27_4598_928C_1CD8A4AA389E
-#define VERSION_E55DC329_9A27_4598_928C_1CD8A4AA389E
-
-
-#include "compatibility/compatibility.hpp"
-
-
-namespace sxe
-{
-
-
-namespace version
-{
-
-
-void log_version();
-
-
-sxe::uint16_t get_major_version();
-sxe::uint16_t get_minor_version();
-sxe::uint16_t get_patch_version();
-sxe::uint16_t get_build_number();
-
-
-}
-
-
-}
-
-
-#endif
+//////////////////////////////////////////////////////////////////////////////////////////////////////
+// //
+// This file is part of the Seadex essentials library (http://essentials.seadex.de). //
+// Copyright( C ) 2017 Seadex GmbH //
+// Licensing information is available in the folder "license" which is part of this distribution. //
+// The same information is available on the www @ http://essentials.seadex.de/License.html. //
+// //
+//////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef VERSION_E55DC329_9A27_4598_928C_1CD8A4AA389E
+#define VERSION_E55DC329_9A27_4598_928C_1CD8A4AA389E
+
+
+#include "compatibility/compatibility.hpp"
+
+
+namespace sxe
+{
+
+
+namespace version
+{
+
+
+void log_version();
+
+
+sxe::uint16_t get_major_version();
+sxe::uint16_t get_minor_version();
+sxe::uint16_t get_patch_version();
+sxe::uint16_t get_build_number();
+
+
+}
+
+
+}
+
+
+#endif
diff --git a/externals/essentials/include/essentials/exception.hpp b/externals/essentials/source/essentials/include/essentials/exception.hpp
similarity index 97%
rename from externals/essentials/include/essentials/exception.hpp
rename to externals/essentials/source/essentials/include/essentials/exception.hpp
index 2e357f8..76ad4b8 100644
--- a/externals/essentials/include/essentials/exception.hpp
+++ b/externals/essentials/source/essentials/include/essentials/exception.hpp
@@ -1,30 +1,30 @@
-//////////////////////////////////////////////////////////////////////////////////////////////////////
-// //
-// This file is part of the Seadex essentials library (http://essentials.seadex.de). //
-// Copyright( C ) 2017 Seadex GmbH //
-// Licensing information is available in the folder "license" which is part of this distribution. //
-// The same information is available on the www @ http://essentials.seadex.de/License.html. //
-// //
-//////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-#ifndef EXCEPTION_B675DC28_13E9_4827_9916_4649C36BD407
-#define EXCEPTION_B675DC28_13E9_4827_9916_4649C36BD407
-
-
-#include "exception_template.hpp"
-
-
-namespace sxe
-{
-
-
-//!\def SX_EXCEPTION( exception )
-//!\brief The Seadex essentials exception class.
-SX_EXCEPTION( exception )
-
-
-}
-
-
-#endif
+//////////////////////////////////////////////////////////////////////////////////////////////////////
+// //
+// This file is part of the Seadex essentials library (http://essentials.seadex.de). //
+// Copyright( C ) 2017 Seadex GmbH //
+// Licensing information is available in the folder "license" which is part of this distribution. //
+// The same information is available on the www @ http://essentials.seadex.de/License.html. //
+// //
+//////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef EXCEPTION_B675DC28_13E9_4827_9916_4649C36BD407
+#define EXCEPTION_B675DC28_13E9_4827_9916_4649C36BD407
+
+
+#include "exception_template.hpp"
+
+
+namespace sxe
+{
+
+
+//!\def SX_EXCEPTION( exception )
+//!\brief The Seadex essentials exception class.
+SX_EXCEPTION( exception )
+
+
+}
+
+
+#endif
diff --git a/externals/essentials/include/essentials/exception_template.hpp b/externals/essentials/source/essentials/include/essentials/exception_template.hpp
similarity index 97%
rename from externals/essentials/include/essentials/exception_template.hpp
rename to externals/essentials/source/essentials/include/essentials/exception_template.hpp
index 749894f..2415a7d 100644
--- a/externals/essentials/include/essentials/exception_template.hpp
+++ b/externals/essentials/source/essentials/include/essentials/exception_template.hpp
@@ -1,160 +1,160 @@
-//////////////////////////////////////////////////////////////////////////////////////////////////////
-// //
-// This file is part of the Seadex essentials library (http://essentials.seadex.de). //
-// Copyright( C ) 2017 Seadex GmbH //
-// Licensing information is available in the folder "license" which is part of this distribution. //
-// The same information is available on the www @ http://essentials.seadex.de/License.html. //
-// //
-//////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-#ifndef EXCEPTION_TEMPLATE_6EFED438_B578_4EF6_B02A_53DC49B89A0D
-#define EXCEPTION_TEMPLATE_6EFED438_B578_4EF6_B02A_53DC49B89A0D
-
-
-#include
-
-#include "essentials/compatibility/compatibility.hpp"
-#include "essentials/sxprintf.hpp"
-
-
-#ifndef SX_CPP03_BOOST
-
-
-//!\def SX_EXCEPTION( _name )
-//!\brief Create an exception class inheriting std::exception with the given name. It also supports
-//! creating messages with placeholders by calling sxprintf.
-//!\sa sxprintf
-#define SX_EXCEPTION( _name ) \
-class _name: public std::exception \
-{ \
-public: \
- template< typename ... args > \
- _name(const std::string & _what, args ... _args ):\
- std::exception(), \
- what_( sxe::sxprintf( _what.c_str(), _args ... ) ) \
- { \
- } \
-\
-\
- virtual ~_name () SX_NOEXCEPT SX_OVERRIDE {}\
-\
-\
- virtual const char* what() const throw () SX_OVERRIDE \
- { \
- return ( what_.c_str() ); \
- } \
-\
-\
-private: \
- std::string what_; \
-\
-\
-};
-
-
-#else
-
-
-#define SX_EXCEPTION( _name ) \
-class _name: public std::exception \
-{ \
-public: \
- explicit _name(const std::string & _what ):\
- std::exception(), \
- what_( sxe::sxprintf( _what.c_str() ) ) \
- { \
- } \
-\
-\
- explicit _name(const std::string & _what, const sxe::value_type& _value1 ):\
- std::exception(), \
- what_( sxe::sxprintf( _what.c_str(), _value1 ) ) \
- { \
- } \
-\
-\
- explicit _name(const std::string & _what, const sxe::value_type& _value1, const sxe::value_type& _value2 ):\
- std::exception(), \
- what_( sxe::sxprintf( _what.c_str(), _value1, _value2 ) ) \
- { \
- } \
-\
-\
- explicit _name(const std::string & _what, const sxe::value_type& _value1, const sxe::value_type& _value2, const sxe::value_type& _value3 ):\
- std::exception(), \
- what_( sxe::sxprintf( _what.c_str(), _value1, _value2, _value3 ) ) \
- { \
- } \
-\
-\
- explicit _name(const std::string & _what, const sxe::value_type& _value1, const sxe::value_type& _value2, const sxe::value_type& _value3, const sxe::value_type& _value4 ):\
- std::exception(), \
- what_( sxe::sxprintf( _what.c_str(), _value1, _value2, _value3, _value4 ) ) \
- { \
- } \
-\
-\
- explicit _name(const std::string & _what, const sxe::value_type& _value1, const sxe::value_type& _value2, const sxe::value_type& _value3, const sxe::value_type& _value4, const sxe::value_type& _value5 ):\
- std::exception(), \
- what_( sxe::sxprintf( _what.c_str(), _value1, _value2, _value3, _value4, _value5 ) ) \
- { \
- } \
-\
-\
- explicit _name(const std::string & _what, const sxe::value_type& _value1, const sxe::value_type& _value2, const sxe::value_type& _value3, const sxe::value_type& _value4, const sxe::value_type& _value5, const sxe::value_type& _value6 ):\
- std::exception(), \
- what_( sxe::sxprintf( _what.c_str(), _value1, _value2, _value3, _value4, _value5, _value6 ) ) \
- { \
- } \
-\
-\
-\
- explicit _name(const std::string & _what, const sxe::value_type& _value1, const sxe::value_type& _value2, const sxe::value_type& _value3, const sxe::value_type& _value4, const sxe::value_type& _value5, const sxe::value_type& _value6, const sxe::value_type& _value7 ):\
- std::exception(), \
- what_( sxe::sxprintf( _what.c_str(), _value1, _value2, _value3, _value4, _value5, _value6, _value7 ) ) \
- { \
- } \
-\
-\
- explicit _name(const std::string & _what, const sxe::value_type& _value1, const sxe::value_type& _value2, const sxe::value_type& _value3, const sxe::value_type& _value4, const sxe::value_type& _value5, const sxe::value_type& _value6, const sxe::value_type& _value7, const sxe::value_type& _value8 ):\
- std::exception(), \
- what_( sxe::sxprintf( _what.c_str(), _value1, _value2, _value3, _value4, _value5, _value6, _value7, _value8 ) ) \
- { \
- } \
-\
-\
- explicit _name(const std::string & _what, const sxe::value_type& _value1, const sxe::value_type& _value2, const sxe::value_type& _value3, const sxe::value_type& _value4, const sxe::value_type& _value5, const sxe::value_type& _value6, const sxe::value_type& _value7, const sxe::value_type& _value8, const sxe::value_type& _value9 ):\
- std::exception(), \
- what_( sxe::sxprintf( _what.c_str(), _value1, _value2, _value3, _value4, _value5, _value6, _value7, _value8, _value9 ) ) \
- { \
- } \
-\
-\
- explicit _name(const std::string & _what, const sxe::value_type& _value1, const sxe::value_type& _value2, const sxe::value_type& _value3, const sxe::value_type& _value4, const sxe::value_type& _value5, const sxe::value_type& _value6, const sxe::value_type& _value7, const sxe::value_type& _value8, const sxe::value_type& _value9, const sxe::value_type& _value10 ):\
- std::exception(), \
- what_( sxe::sxprintf( _what.c_str(), _value1, _value2, _value3, _value4, _value5, _value6, _value7, _value8, _value9, _value10 ) ) \
- { \
- } \
-\
-\
- virtual ~_name () SX_NOEXCEPT SX_OVERRIDE {}\
-\
-\
- virtual const char* what() const throw () SX_OVERRIDE \
- { \
- return ( what_.c_str() ); \
- } \
-\
-\
-private: \
- std::string what_; \
-\
-\
-};
-
-
-#endif
-
-
-#endif
+//////////////////////////////////////////////////////////////////////////////////////////////////////
+// //
+// This file is part of the Seadex essentials library (http://essentials.seadex.de). //
+// Copyright( C ) 2017 Seadex GmbH //
+// Licensing information is available in the folder "license" which is part of this distribution. //
+// The same information is available on the www @ http://essentials.seadex.de/License.html. //
+// //
+//////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef EXCEPTION_TEMPLATE_6EFED438_B578_4EF6_B02A_53DC49B89A0D
+#define EXCEPTION_TEMPLATE_6EFED438_B578_4EF6_B02A_53DC49B89A0D
+
+
+#include
+
+#include "essentials/compatibility/compatibility.hpp"
+#include "essentials/sxprintf.hpp"
+
+
+#ifndef SX_CPP03_BOOST
+
+
+//!\def SX_EXCEPTION( _name )
+//!\brief Create an exception class inheriting std::exception with the given name. It also supports
+//! creating messages with placeholders by calling sxprintf.
+//!\sa sxprintf
+#define SX_EXCEPTION( _name ) \
+class _name: public std::exception \
+{ \
+public: \
+ template< typename ... args > \
+ _name(const std::string & _what, args ... _args ):\
+ std::exception(), \
+ what_( sxe::sxprintf( _what.c_str(), _args ... ) ) \
+ { \
+ } \
+\
+\
+ virtual ~_name () SX_NOEXCEPT SX_OVERRIDE {}\
+\
+\
+ virtual const char* what() const throw () SX_OVERRIDE \
+ { \
+ return ( what_.c_str() ); \
+ } \
+\
+\
+private: \
+ std::string what_; \
+\
+\
+};
+
+
+#else
+
+
+#define SX_EXCEPTION( _name ) \
+class _name: public std::exception \
+{ \
+public: \
+ explicit _name(const std::string & _what ):\
+ std::exception(), \
+ what_( sxe::sxprintf( _what.c_str() ) ) \
+ { \
+ } \
+\
+\
+ explicit _name(const std::string & _what, const sxe::value_type& _value1 ):\
+ std::exception(), \
+ what_( sxe::sxprintf( _what.c_str(), _value1 ) ) \
+ { \
+ } \
+\
+\
+ explicit _name(const std::string & _what, const sxe::value_type& _value1, const sxe::value_type& _value2 ):\
+ std::exception(), \
+ what_( sxe::sxprintf( _what.c_str(), _value1, _value2 ) ) \
+ { \
+ } \
+\
+\
+ explicit _name(const std::string & _what, const sxe::value_type& _value1, const sxe::value_type& _value2, const sxe::value_type& _value3 ):\
+ std::exception(), \
+ what_( sxe::sxprintf( _what.c_str(), _value1, _value2, _value3 ) ) \
+ { \
+ } \
+\
+\
+ explicit _name(const std::string & _what, const sxe::value_type& _value1, const sxe::value_type& _value2, const sxe::value_type& _value3, const sxe::value_type& _value4 ):\
+ std::exception(), \
+ what_( sxe::sxprintf( _what.c_str(), _value1, _value2, _value3, _value4 ) ) \
+ { \
+ } \
+\
+\
+ explicit _name(const std::string & _what, const sxe::value_type& _value1, const sxe::value_type& _value2, const sxe::value_type& _value3, const sxe::value_type& _value4, const sxe::value_type& _value5 ):\
+ std::exception(), \
+ what_( sxe::sxprintf( _what.c_str(), _value1, _value2, _value3, _value4, _value5 ) ) \
+ { \
+ } \
+\
+\
+ explicit _name(const std::string & _what, const sxe::value_type& _value1, const sxe::value_type& _value2, const sxe::value_type& _value3, const sxe::value_type& _value4, const sxe::value_type& _value5, const sxe::value_type& _value6 ):\
+ std::exception(), \
+ what_( sxe::sxprintf( _what.c_str(), _value1, _value2, _value3, _value4, _value5, _value6 ) ) \
+ { \
+ } \
+\
+\
+\
+ explicit _name(const std::string & _what, const sxe::value_type& _value1, const sxe::value_type& _value2, const sxe::value_type& _value3, const sxe::value_type& _value4, const sxe::value_type& _value5, const sxe::value_type& _value6, const sxe::value_type& _value7 ):\
+ std::exception(), \
+ what_( sxe::sxprintf( _what.c_str(), _value1, _value2, _value3, _value4, _value5, _value6, _value7 ) ) \
+ { \
+ } \
+\
+\
+ explicit _name(const std::string & _what, const sxe::value_type& _value1, const sxe::value_type& _value2, const sxe::value_type& _value3, const sxe::value_type& _value4, const sxe::value_type& _value5, const sxe::value_type& _value6, const sxe::value_type& _value7, const sxe::value_type& _value8 ):\
+ std::exception(), \
+ what_( sxe::sxprintf( _what.c_str(), _value1, _value2, _value3, _value4, _value5, _value6, _value7, _value8 ) ) \
+ { \
+ } \
+\
+\
+ explicit _name(const std::string & _what, const sxe::value_type& _value1, const sxe::value_type& _value2, const sxe::value_type& _value3, const sxe::value_type& _value4, const sxe::value_type& _value5, const sxe::value_type& _value6, const sxe::value_type& _value7, const sxe::value_type& _value8, const sxe::value_type& _value9 ):\
+ std::exception(), \
+ what_( sxe::sxprintf( _what.c_str(), _value1, _value2, _value3, _value4, _value5, _value6, _value7, _value8, _value9 ) ) \
+ { \
+ } \
+\
+\
+ explicit _name(const std::string & _what, const sxe::value_type& _value1, const sxe::value_type& _value2, const sxe::value_type& _value3, const sxe::value_type& _value4, const sxe::value_type& _value5, const sxe::value_type& _value6, const sxe::value_type& _value7, const sxe::value_type& _value8, const sxe::value_type& _value9, const sxe::value_type& _value10 ):\
+ std::exception(), \
+ what_( sxe::sxprintf( _what.c_str(), _value1, _value2, _value3, _value4, _value5, _value6, _value7, _value8, _value9, _value10 ) ) \
+ { \
+ } \
+\
+\
+ virtual ~_name () SX_NOEXCEPT SX_OVERRIDE {}\
+\
+\
+ virtual const char* what() const throw () SX_OVERRIDE \
+ { \
+ return ( what_.c_str() ); \
+ } \
+\
+\
+private: \
+ std::string what_; \
+\
+\
+};
+
+
+#endif
+
+
+#endif
diff --git a/externals/essentials/include/essentials/format_settings.hpp b/externals/essentials/source/essentials/include/essentials/format_settings.hpp
similarity index 96%
rename from externals/essentials/include/essentials/format_settings.hpp
rename to externals/essentials/source/essentials/include/essentials/format_settings.hpp
index 798c83e..757c60a 100644
--- a/externals/essentials/include/essentials/format_settings.hpp
+++ b/externals/essentials/source/essentials/include/essentials/format_settings.hpp
@@ -1,45 +1,45 @@
-//////////////////////////////////////////////////////////////////////////////////////////////////////
-// //
-// This file is part of the Seadex essentials library (http://essentials.seadex.de). //
-// Copyright( C ) 2017 Seadex GmbH //
-// Licensing information is available in the folder "license" which is part of this distribution. //
-// The same information is available on the www @ http://essentials.seadex.de/License.html. //
-// //
-//////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-#ifndef FORMAT_SETTINGS_1D24A599_70E3_42BB_BFE6_46BD94217FAB
-#define FORMAT_SETTINGS_1D24A599_70E3_42BB_BFE6_46BD94217FAB
-
-
-#include
-
-#include "compatibility/compatibility.hpp"
-
-
-namespace sxe
-{
-
-//!\struct format_settings
-//!\brief Structure containing information for formatting the output of sxprintf.
-struct format_settings SX_FINAL
-{
- //!\brief Constructor.
- format_settings();
-
-
- std::string format_string_;
- bool missing_closing_bracket_;
- bool correct_;
- bool hex_;
- bool pad_zeros_;
- bool places_set_;
- int places_;
- bool decimal_places_set_;
- int decimal_places_;
-};
-
-}
-
-
-#endif
+//////////////////////////////////////////////////////////////////////////////////////////////////////
+// //
+// This file is part of the Seadex essentials library (http://essentials.seadex.de). //
+// Copyright( C ) 2017 Seadex GmbH //
+// Licensing information is available in the folder "license" which is part of this distribution. //
+// The same information is available on the www @ http://essentials.seadex.de/License.html. //
+// //
+//////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef FORMAT_SETTINGS_1D24A599_70E3_42BB_BFE6_46BD94217FAB
+#define FORMAT_SETTINGS_1D24A599_70E3_42BB_BFE6_46BD94217FAB
+
+
+#include
+
+#include "compatibility/compatibility.hpp"
+
+
+namespace sxe
+{
+
+//!\struct format_settings
+//!\brief Structure containing information for formatting the output of sxprintf.
+struct format_settings SX_FINAL
+{
+ //!\brief Constructor.
+ format_settings();
+
+
+ std::string format_string_;
+ bool missing_closing_bracket_;
+ bool correct_;
+ bool hex_;
+ bool pad_zeros_;
+ bool places_set_;
+ int places_;
+ bool decimal_places_set_;
+ int decimal_places_;
+};
+
+}
+
+
+#endif
diff --git a/externals/essentials/include/essentials/macro_helpers.hpp b/externals/essentials/source/essentials/include/essentials/macro_helpers.hpp
similarity index 97%
rename from externals/essentials/include/essentials/macro_helpers.hpp
rename to externals/essentials/source/essentials/include/essentials/macro_helpers.hpp
index 46609e4..b0777eb 100644
--- a/externals/essentials/include/essentials/macro_helpers.hpp
+++ b/externals/essentials/source/essentials/include/essentials/macro_helpers.hpp
@@ -1,46 +1,46 @@
-//////////////////////////////////////////////////////////////////////////////////////////////////////
-// //
-// This file is part of the Seadex essentials library (http://essentials.seadex.de). //
-// Copyright( C ) 2017 Seadex GmbH //
-// Licensing information is available in the folder "license" which is part of this distribution. //
-// The same information is available on the www @ http://essentials.seadex.de/License.html. //
-// //
-//////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-#ifndef MACRO_HELPERS_D52C3077_E0EF_4C4E_B451_1472DEE602E8
-#define MACRO_HELPERS_D52C3077_E0EF_4C4E_B451_1472DEE602E8
-
-
-#ifndef SX_NO_VARIADIC_MACRO
-
-
-//!\def EXPAND( x )
-//!\brief Helper to work around some Visual C++ compiler quirk dealing with variadic macros.
-#define EXPAND( x ) x
-
-//!\def CAT( A, B )
-//!\brief Concatenate two tokens.
-#define CAT( A, B ) A ## B
-
-//!\def SELECT( NAME, NUM )
-//!\brief Creating a name from a base name and a number with underscore between them.
-#define SELECT( NAME, NUM ) CAT( NAME ## _, NUM )
-
-//!\def GET_COUNT( _ONE, _TWO, _THREE, _FOUR, _FIVE, _SIX, _SEVEN, _EIGHT, _NINE, _TEN, _ELEVEN, _TWELVE, _THIRTEEN, _FOURTEEN, _FIFTEEN, COUNT, ... )
-//!\brief Helper for counting the number of parameters of a macro.
-#define GET_COUNT( _ONE, _TWO, _THREE, _FOUR, _FIVE, _SIX, _SEVEN, _EIGHT, _NINE, _TEN, _ELEVEN, _TWELVE, _THIRTEEN, _FOURTEEN, _FIFTEEN, COUNT, ... ) COUNT
-
-//!\def VA_SIZE( ... )
-//!\brief Count the number of parameters of a macro.
-#define VA_SIZE( ... ) EXPAND( GET_COUNT( __VA_ARGS__, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, -1 ) )
-
-//!\def VA_SELECT( NAME, ... )
-//!\brief Selects the correct overloaded macro based on the number of parameters.
-#define VA_SELECT( NAME, ... ) EXPAND( SELECT( NAME, VA_SIZE(__VA_ARGS__) )(__VA_ARGS__) )
-
-
-#endif
-
-
-#endif
+//////////////////////////////////////////////////////////////////////////////////////////////////////
+// //
+// This file is part of the Seadex essentials library (http://essentials.seadex.de). //
+// Copyright( C ) 2017 Seadex GmbH //
+// Licensing information is available in the folder "license" which is part of this distribution. //
+// The same information is available on the www @ http://essentials.seadex.de/License.html. //
+// //
+//////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef MACRO_HELPERS_D52C3077_E0EF_4C4E_B451_1472DEE602E8
+#define MACRO_HELPERS_D52C3077_E0EF_4C4E_B451_1472DEE602E8
+
+
+#ifndef SX_NO_VARIADIC_MACRO
+
+
+//!\def EXPAND( x )
+//!\brief Helper to work around some Visual C++ compiler quirk dealing with variadic macros.
+#define EXPAND( x ) x
+
+//!\def CAT( A, B )
+//!\brief Concatenate two tokens.
+#define CAT( A, B ) A ## B
+
+//!\def SELECT( NAME, NUM )
+//!\brief Creating a name from a base name and a number with underscore between them.
+#define SELECT( NAME, NUM ) CAT( NAME ## _, NUM )
+
+//!\def GET_COUNT( _ONE, _TWO, _THREE, _FOUR, _FIVE, _SIX, _SEVEN, _EIGHT, _NINE, _TEN, _ELEVEN, _TWELVE, _THIRTEEN, _FOURTEEN, _FIFTEEN, COUNT, ... )
+//!\brief Helper for counting the number of parameters of a macro.
+#define GET_COUNT( _ONE, _TWO, _THREE, _FOUR, _FIVE, _SIX, _SEVEN, _EIGHT, _NINE, _TEN, _ELEVEN, _TWELVE, _THIRTEEN, _FOURTEEN, _FIFTEEN, COUNT, ... ) COUNT
+
+//!\def VA_SIZE( ... )
+//!\brief Count the number of parameters of a macro.
+#define VA_SIZE( ... ) EXPAND( GET_COUNT( __VA_ARGS__, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, -1 ) )
+
+//!\def VA_SELECT( NAME, ... )
+//!\brief Selects the correct overloaded macro based on the number of parameters.
+#define VA_SELECT( NAME, ... ) EXPAND( SELECT( NAME, VA_SIZE(__VA_ARGS__) )(__VA_ARGS__) )
+
+
+#endif
+
+
+#endif
diff --git a/externals/essentials/include/essentials/non_copyable.hpp b/externals/essentials/source/essentials/include/essentials/non_copyable.hpp
similarity index 96%
rename from externals/essentials/include/essentials/non_copyable.hpp
rename to externals/essentials/source/essentials/include/essentials/non_copyable.hpp
index d9f85b4..b93fff3 100644
--- a/externals/essentials/include/essentials/non_copyable.hpp
+++ b/externals/essentials/source/essentials/include/essentials/non_copyable.hpp
@@ -1,68 +1,68 @@
-//////////////////////////////////////////////////////////////////////////////////////////////////////
-// //
-// This file is part of the Seadex essentials library (http://essentials.seadex.de). //
-// Copyright( C ) 2017 Seadex GmbH //
-// Licensing information is available in the folder "license" which is part of this distribution. //
-// The same information is available on the www @ http://essentials.seadex.de/License.html. //
-// //
-//////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-#ifndef NON_COPYABLE_D2C5BF6C_4B43_42AF_9E42_1AAE2B5C49C8
-#define NON_COPYABLE_D2C5BF6C_4B43_42AF_9E42_1AAE2B5C49C8
-
-
-#include "essentials/compatibility/compatibility.hpp"
-
-
-namespace sxe
-{
-
-
-#ifdef SX_CPP03_BOOST
-
-
-//!\def SX_NO_COPY(_class_name)
-//!\brief Delete the copy constructor and assignment operator of the given class.
-#define SX_NO_COPY(_class_name)\
-private:\
- _class_name(const _class_name&) SX_DELETE;\
- _class_name& operator=(const _class_name&) SX_DELETE;\
-public:\
-\
-
-
-//!\def SX_NO_ASSIGNMENT_OPERATOR(_class_name)
-//!\brief Delete the assignment operator of the given class.
-#define SX_NO_ASSIGNMENT_OPERATOR(_class_name)\
-private:\
- _class_name& operator=( const _class_name& ) SX_DELETE;\
-public:\
-\
-
-
-#else
-
-
-//!\def SX_NO_COPY(_class_name)
-//!\brief Delete the copy constructor and assignment operator of the given class.
-#define SX_NO_COPY(_class_name)\
- _class_name(const _class_name&) SX_DELETE;\
- _class_name& operator=(const _class_name&) SX_DELETE;\
-\
-
-
-//!\def SX_NO_ASSIGNMENT_OPERATOR(_class_name)
-//!\brief Delete the assignment operator of the given class.
-#define SX_NO_ASSIGNMENT_OPERATOR(_class_name)\
- _class_name& operator=( const _class_name& ) SX_DELETE;\
-\
-
-
-#endif
-
-
-}
-
-
-#endif
+//////////////////////////////////////////////////////////////////////////////////////////////////////
+// //
+// This file is part of the Seadex essentials library (http://essentials.seadex.de). //
+// Copyright( C ) 2017 Seadex GmbH //
+// Licensing information is available in the folder "license" which is part of this distribution. //
+// The same information is available on the www @ http://essentials.seadex.de/License.html. //
+// //
+//////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef NON_COPYABLE_D2C5BF6C_4B43_42AF_9E42_1AAE2B5C49C8
+#define NON_COPYABLE_D2C5BF6C_4B43_42AF_9E42_1AAE2B5C49C8
+
+
+#include "essentials/compatibility/compatibility.hpp"
+
+
+namespace sxe
+{
+
+
+#ifdef SX_CPP03_BOOST
+
+
+//!\def SX_NO_COPY(_class_name)
+//!\brief Delete the copy constructor and assignment operator of the given class.
+#define SX_NO_COPY(_class_name)\
+private:\
+ _class_name(const _class_name&) SX_DELETE;\
+ _class_name& operator=(const _class_name&) SX_DELETE;\
+public:\
+\
+
+
+//!\def SX_NO_ASSIGNMENT_OPERATOR(_class_name)
+//!\brief Delete the assignment operator of the given class.
+#define SX_NO_ASSIGNMENT_OPERATOR(_class_name)\
+private:\
+ _class_name& operator=( const _class_name& ) SX_DELETE;\
+public:\
+\
+
+
+#else
+
+
+//!\def SX_NO_COPY(_class_name)
+//!\brief Delete the copy constructor and assignment operator of the given class.
+#define SX_NO_COPY(_class_name)\
+ _class_name(const _class_name&) SX_DELETE;\
+ _class_name& operator=(const _class_name&) SX_DELETE;\
+\
+
+
+//!\def SX_NO_ASSIGNMENT_OPERATOR(_class_name)
+//!\brief Delete the assignment operator of the given class.
+#define SX_NO_ASSIGNMENT_OPERATOR(_class_name)\
+ _class_name& operator=( const _class_name& ) SX_DELETE;\
+\
+
+
+#endif
+
+
+}
+
+
+#endif
diff --git a/externals/essentials/include/essentials/sxprintf.hpp b/externals/essentials/source/essentials/include/essentials/sxprintf.hpp
similarity index 97%
rename from externals/essentials/include/essentials/sxprintf.hpp
rename to externals/essentials/source/essentials/include/essentials/sxprintf.hpp
index 7cab8ca..0d9a863 100644
--- a/externals/essentials/include/essentials/sxprintf.hpp
+++ b/externals/essentials/source/essentials/include/essentials/sxprintf.hpp
@@ -1,242 +1,242 @@
-//////////////////////////////////////////////////////////////////////////////////////////////////////
-// //
-// This file is part of the Seadex essentials library (http://essentials.seadex.de). //
-// Copyright( C ) 2017 Seadex GmbH //
-// Licensing information is available in the folder "license" which is part of this distribution. //
-// The same information is available on the www @ http://essentials.seadex.de/License.html. //
-// //
-//////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-#ifndef PRINTF_2B6FD3F2_C084_486B_805B_5F0E05B743E4
-#define PRINTF_2B6FD3F2_C084_486B_805B_5F0E05B743E4
-
-
-#include
-#include
-
-
-#ifdef SX_CPP03_BOOST
- #include
- #include
-#endif
-
-#include "compatibility/compatibility.hpp"
-#include "format_settings.hpp"
-
-
-namespace sxe
-{
-
-
-#ifdef SX_CPP03_BOOST
- typedef boost::variant< bool, int, unsigned int, sxe::int8_t, sxe::uint8_t, sxe::uint16_t, sxe::uint32_t,
- std::string, std::size_t, const char*, boost::int_least64_t, double > value_type;
- typedef std::vector< value_type > value_types;
-#endif
-
-
-extern const char PLACE_HOLDER;
-extern const char* const SUPERFLUOUS_PARAMETER_START;
-extern const char SUPERFLUOUS_PARAMETER_END;
-extern const char OPENING_SQUARE_BRACKET;
-extern const char CLOSING_SQUARE_BRACKET;
-
-
-template< typename value >
-struct stream_writer
-{
- static void print( std::ostream& _os, const value& _value )
- {
- _os << _value;
- }
-};
-
-
-template< >
-struct stream_writer< sxe::uint8_t >
-{
- static void print(std::ostream& _os, const sxe::uint8_t& _value)
- {
- _os << static_cast( _value );
- }
-};
-
-
-// cppcheck-suppress unusedFunction
-std::ostream& operator<<( std::ostream& _os, const sxe::format_settings& _format );
-sxe::format_settings parse_format_string( const char** const _format );
-
-
-#ifdef SX_CPP03_BOOST
-
-void print_value_type_value( std::ostream& _os, const value_type& _value );
-
-
-#endif
-
-
-template< typename value >
-void print_superfluous_parameters( std::ostream& _os, const value& _value )
-{
- _os << SUPERFLUOUS_PARAMETER_START;
-#ifndef SX_CPP03_BOOST
- stream_writer< value >::print( _os, _value );
-#else
- print_value_type_value( _os, _value );
-#endif
- _os << SUPERFLUOUS_PARAMETER_END;
-}
-
-
-#ifndef SX_CPP03_BOOST
-
-
-template< typename value, typename ... args >
-void print_superfluous_parameters( std::ostream& _os,
- const value& _value, args ... _args )
-{
- _os << SUPERFLUOUS_PARAMETER_START;
- stream_writer< value >::print( _os, _value );
- _os << SUPERFLUOUS_PARAMETER_END;
- print_superfluous_parameters( _os, _args ... );
-}
-
-
-#else
-
-
-#endif
-
-
-void sxprintf( std::ostream& _os, const char* _format );
-
-#ifndef SX_CPP03_BOOST
-template< typename value, typename ... args >
-void sxprintf( std::ostream& _os, const char* _format, const value& _value, args ... _args )
-{
- while( *_format )
- {
- if( PLACE_HOLDER == *_format )
- {
- if( PLACE_HOLDER == *( _format + 1 ) )
- {
- ++_format; // skip first place holder
- _os << *_format++; // output of the second place holder
- }
- else
- {
- if( OPENING_SQUARE_BRACKET == *( _format + 1 ) )
- {
- ++_format;
- const sxe::format_settings format_settings = sxe::parse_format_string( &_format );
- const std::ios_base::fmtflags stream_flags = _os.flags();
- const char streafill_ = _os.fill();
- if( format_settings.correct_ )
- {
- _os << format_settings;
- stream_writer< value >::print( _os, _value );
- }
- else
- {
- while( CLOSING_SQUARE_BRACKET != *( _format ) )
- {
- ++_format;
- }
- stream_writer< value >::print( _os, _value );
- _os << format_settings;
- }
- _os.flags( stream_flags );
- _os.fill( streafill_ );
- }
- else
- {
- stream_writer< value >::print( _os, _value );
- }
-
- sxprintf( _os, _format + 1, _args ... );
- return;
- }
- }
- else
- {
- _os << *_format++;
- }
- }
-
- print_superfluous_parameters( _os, _value, _args ... );
-}
-
-
-//!\brief Creates a formatted message. The format string can contain placeholders ('%'s) that will be replaced with
-//!the parameters by this function. To emit a '%' use two percent signs ("%%").
-//!\param _format The format string in which will the placeholders will be replaced (if there are any).
-//!\param _args The arguments that will replace the placeholders in the format string. The number of parameters in
-//!_args has to be equal to the number of placeholders in the format string. If you pass too few or too many
-//!arguments, the resulting string will contain diagnostics in the resulting string
-//!([Missing parameter!] or [Superfluous parameter: x]).
-//!\return String containing the complete formatted message.
-template< typename ... args >
-std::string sxprintf(const char* const _format, args ... _args)
-{
- std::stringstream target_string_stream;
- sxprintf(target_string_stream, _format, _args ...);
- return( target_string_stream.str() );
-}
-
-#else
-
-std::string sxprintf(const char* const _format);
-std::string sxprintf(const char* const _format, const value_type& _value1);
-std::string sxprintf(const char* const _format, const value_type& _value1, const value_type& _value2);
-std::string sxprintf(const char* const _format, const value_type& _value1, const value_type& _value2, const value_type& _value3);
-std::string sxprintf(const char* const _format, const value_type& _value1, const value_type& _value2, const value_type& _value3,
- const value_type& _value4);
-std::string sxprintf(const char* const _format, const value_type& _value1, const value_type& _value2, const value_type& _value3,
- const value_type& _value4, const value_type& _value5);
-std::string sxprintf(const char* const _format, const value_type& _value1, const value_type& _value2, const value_type& _value3,
- const value_type& _value4, const value_type& _value5, const value_type& _value6);
-std::string sxprintf(const char* const _format, const value_type& _value1, const value_type& _value2, const value_type& _value3,
- const value_type& _value4, const value_type& _value5, const value_type& _value6, const value_type& _value);
-std::string sxprintf(const char* const _format, const value_type& _value1, const value_type& _value2, const value_type& _value3,
- const value_type& _value4, const value_type& _value5, const value_type& _value6, const value_type& _value7, const value_type& _value8);
-std::string sxprintf(const char* const _format, const value_type& _value1, const value_type& _value2, const value_type& _value3,
- const value_type& _value4, const value_type& _value5, const value_type& _value6, const value_type& _value7, const value_type& _value8,
- const value_type& _value9);
-std::string sxprintf(const char* const _format, const value_type& _value1, const value_type& _value2, const value_type& _value3,
- const value_type& _value4, const value_type& _value5, const value_type& _value6, const value_type& _value7, const value_type& _value8,
- const value_type& _value9, const value_type& _value10);
-
-
-void sxprintf(std::ostream& _os, const char* const _format);
-void sxprintf(std::ostream& _os, const char* const _format, const value_type& _value1);
-void sxprintf(std::ostream& _os, const char* const _format, const value_type& _value1, const value_type& _value2);
-void sxprintf(std::ostream& _os, const char* const _format, const value_type& _value1, const value_type& _value2,
- const value_type& _value3);
-void sxprintf(std::ostream& _os, const char* const _format, const value_type& _value1, const value_type& _value2,
- const value_type& _value3, const value_type& _value4);
-void sxprintf(std::ostream& _os, const char* const _format, const value_type& _value1, const value_type& _value2,
- const value_type& _value3, const value_type& _value4, const value_type& _value5);
-void sxprintf(std::ostream& _os, const char* const _format, const value_type& _value1, const value_type& _value2,
- const value_type& _value3, const value_type& _value4, const value_type& _value5, const value_type& _value6);
-void sxprintf(std::ostream& _os, const char* const _format, const value_type& _value1, const value_type& _value2,
- const value_type& _value3, const value_type& _value4, const value_type& _value5, const value_type& _value6,
- const value_type& _value7);
-void sxprintf(std::ostream& _os, const char* const _format, const value_type& _value1, const value_type& _value2,
- const value_type& _value3, const value_type& _value4, const value_type& _value5, const value_type& _value6,
- const value_type& _value7, const value_type& _value8);
-void sxprintf(std::ostream& _os, const char* const _format, const value_type& _value1, const value_type& _value2,
- const value_type& _value3, const value_type& _value4, const value_type& _value5, const value_type& _value6,
- const value_type& _value7, const value_type& _value8, const value_type& _value9);
-void sxprintf(std::ostream& _os, const char* const _format, const value_type& _value1, const value_type& _value2,
- const value_type& _value3, const value_type& _value4, const value_type& _value5, const value_type& _value6,
- const value_type& _value7, const value_type& _value8, const value_type& _value9, const value_type& _value10);
-
- void sxprintf(std::ostream& _os, const char* const _format, const value_types& _values);
-
-#endif
-
-
-}
-
-#endif
+//////////////////////////////////////////////////////////////////////////////////////////////////////
+// //
+// This file is part of the Seadex essentials library (http://essentials.seadex.de). //
+// Copyright( C ) 2017 Seadex GmbH //
+// Licensing information is available in the folder "license" which is part of this distribution. //
+// The same information is available on the www @ http://essentials.seadex.de/License.html. //
+// //
+//////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef PRINTF_2B6FD3F2_C084_486B_805B_5F0E05B743E4
+#define PRINTF_2B6FD3F2_C084_486B_805B_5F0E05B743E4
+
+
+#include
+#include
+
+
+#ifdef SX_CPP03_BOOST
+ #include
+ #include
+#endif
+
+#include "compatibility/compatibility.hpp"
+#include "format_settings.hpp"
+
+
+namespace sxe
+{
+
+
+#ifdef SX_CPP03_BOOST
+ typedef boost::variant< bool, int, unsigned int, sxe::int8_t, sxe::uint8_t, sxe::uint16_t, sxe::uint32_t,
+ std::string, std::size_t, const char*, boost::int_least64_t, double > value_type;
+ typedef std::vector< value_type > value_types;
+#endif
+
+
+extern const char PLACE_HOLDER;
+extern const char* const SUPERFLUOUS_PARAMETER_START;
+extern const char SUPERFLUOUS_PARAMETER_END;
+extern const char OPENING_SQUARE_BRACKET;
+extern const char CLOSING_SQUARE_BRACKET;
+
+
+template< typename value >
+struct stream_writer
+{
+ static void print( std::ostream& _os, const value& _value )
+ {
+ _os << _value;
+ }
+};
+
+
+template< >
+struct stream_writer< sxe::uint8_t >
+{
+ static void print(std::ostream& _os, const sxe::uint8_t& _value)
+ {
+ _os << static_cast( _value );
+ }
+};
+
+
+// cppcheck-suppress unusedFunction
+std::ostream& operator<<( std::ostream& _os, const sxe::format_settings& _format );
+sxe::format_settings parse_format_string( const char** const _format );
+
+
+#ifdef SX_CPP03_BOOST
+
+void print_value_type_value( std::ostream& _os, const value_type& _value );
+
+
+#endif
+
+
+template< typename value >
+void print_superfluous_parameters( std::ostream& _os, const value& _value )
+{
+ _os << SUPERFLUOUS_PARAMETER_START;
+#ifndef SX_CPP03_BOOST
+ stream_writer< value >::print( _os, _value );
+#else
+ print_value_type_value( _os, _value );
+#endif
+ _os << SUPERFLUOUS_PARAMETER_END;
+}
+
+
+#ifndef SX_CPP03_BOOST
+
+
+template< typename value, typename ... args >
+void print_superfluous_parameters( std::ostream& _os,
+ const value& _value, args ... _args )
+{
+ _os << SUPERFLUOUS_PARAMETER_START;
+ stream_writer< value >::print( _os, _value );
+ _os << SUPERFLUOUS_PARAMETER_END;
+ print_superfluous_parameters( _os, _args ... );
+}
+
+
+#else
+
+
+#endif
+
+
+void sxprintf( std::ostream& _os, const char* _format );
+
+#ifndef SX_CPP03_BOOST
+template< typename value, typename ... args >
+void sxprintf( std::ostream& _os, const char* _format, const value& _value, args ... _args )
+{
+ while( *_format )
+ {
+ if( PLACE_HOLDER == *_format )
+ {
+ if( PLACE_HOLDER == *( _format + 1 ) )
+ {
+ ++_format; // skip first place holder
+ _os << *_format++; // output of the second place holder
+ }
+ else
+ {
+ if( OPENING_SQUARE_BRACKET == *( _format + 1 ) )
+ {
+ ++_format;
+ const sxe::format_settings format_settings = sxe::parse_format_string( &_format );
+ const std::ios_base::fmtflags stream_flags = _os.flags();
+ const char streafill_ = _os.fill();
+ if( format_settings.correct_ )
+ {
+ _os << format_settings;
+ stream_writer< value >::print( _os, _value );
+ }
+ else
+ {
+ while( CLOSING_SQUARE_BRACKET != *( _format ) )
+ {
+ ++_format;
+ }
+ stream_writer< value >::print( _os, _value );
+ _os << format_settings;
+ }
+ _os.flags( stream_flags );
+ _os.fill( streafill_ );
+ }
+ else
+ {
+ stream_writer< value >::print( _os, _value );
+ }
+
+ sxprintf( _os, _format + 1, _args ... );
+ return;
+ }
+ }
+ else
+ {
+ _os << *_format++;
+ }
+ }
+
+ print_superfluous_parameters( _os, _value, _args ... );
+}
+
+
+//!\brief Creates a formatted message. The format string can contain placeholders ('%'s) that will be replaced with
+//!the parameters by this function. To emit a '%' use two percent signs ("%%").
+//!\param _format The format string in which will the placeholders will be replaced (if there are any).
+//!\param _args The arguments that will replace the placeholders in the format string. The number of parameters in
+//!_args has to be equal to the number of placeholders in the format string. If you pass too few or too many
+//!arguments, the resulting string will contain diagnostics in the resulting string
+//!([Missing parameter!] or [Superfluous parameter: x]).
+//!\return String containing the complete formatted message.
+template< typename ... args >
+std::string sxprintf(const char* const _format, args ... _args)
+{
+ std::stringstream target_string_stream;
+ sxprintf(target_string_stream, _format, _args ...);
+ return( target_string_stream.str() );
+}
+
+#else
+
+std::string sxprintf(const char* const _format);
+std::string sxprintf(const char* const _format, const value_type& _value1);
+std::string sxprintf(const char* const _format, const value_type& _value1, const value_type& _value2);
+std::string sxprintf(const char* const _format, const value_type& _value1, const value_type& _value2, const value_type& _value3);
+std::string sxprintf(const char* const _format, const value_type& _value1, const value_type& _value2, const value_type& _value3,
+ const value_type& _value4);
+std::string sxprintf(const char* const _format, const value_type& _value1, const value_type& _value2, const value_type& _value3,
+ const value_type& _value4, const value_type& _value5);
+std::string sxprintf(const char* const _format, const value_type& _value1, const value_type& _value2, const value_type& _value3,
+ const value_type& _value4, const value_type& _value5, const value_type& _value6);
+std::string sxprintf(const char* const _format, const value_type& _value1, const value_type& _value2, const value_type& _value3,
+ const value_type& _value4, const value_type& _value5, const value_type& _value6, const value_type& _value);
+std::string sxprintf(const char* const _format, const value_type& _value1, const value_type& _value2, const value_type& _value3,
+ const value_type& _value4, const value_type& _value5, const value_type& _value6, const value_type& _value7, const value_type& _value8);
+std::string sxprintf(const char* const _format, const value_type& _value1, const value_type& _value2, const value_type& _value3,
+ const value_type& _value4, const value_type& _value5, const value_type& _value6, const value_type& _value7, const value_type& _value8,
+ const value_type& _value9);
+std::string sxprintf(const char* const _format, const value_type& _value1, const value_type& _value2, const value_type& _value3,
+ const value_type& _value4, const value_type& _value5, const value_type& _value6, const value_type& _value7, const value_type& _value8,
+ const value_type& _value9, const value_type& _value10);
+
+
+void sxprintf(std::ostream& _os, const char* const _format);
+void sxprintf(std::ostream& _os, const char* const _format, const value_type& _value1);
+void sxprintf(std::ostream& _os, const char* const _format, const value_type& _value1, const value_type& _value2);
+void sxprintf(std::ostream& _os, const char* const _format, const value_type& _value1, const value_type& _value2,
+ const value_type& _value3);
+void sxprintf(std::ostream& _os, const char* const _format, const value_type& _value1, const value_type& _value2,
+ const value_type& _value3, const value_type& _value4);
+void sxprintf(std::ostream& _os, const char* const _format, const value_type& _value1, const value_type& _value2,
+ const value_type& _value3, const value_type& _value4, const value_type& _value5);
+void sxprintf(std::ostream& _os, const char* const _format, const value_type& _value1, const value_type& _value2,
+ const value_type& _value3, const value_type& _value4, const value_type& _value5, const value_type& _value6);
+void sxprintf(std::ostream& _os, const char* const _format, const value_type& _value1, const value_type& _value2,
+ const value_type& _value3, const value_type& _value4, const value_type& _value5, const value_type& _value6,
+ const value_type& _value7);
+void sxprintf(std::ostream& _os, const char* const _format, const value_type& _value1, const value_type& _value2,
+ const value_type& _value3, const value_type& _value4, const value_type& _value5, const value_type& _value6,
+ const value_type& _value7, const value_type& _value8);
+void sxprintf(std::ostream& _os, const char* const _format, const value_type& _value1, const value_type& _value2,
+ const value_type& _value3, const value_type& _value4, const value_type& _value5, const value_type& _value6,
+ const value_type& _value7, const value_type& _value8, const value_type& _value9);
+void sxprintf(std::ostream& _os, const char* const _format, const value_type& _value1, const value_type& _value2,
+ const value_type& _value3, const value_type& _value4, const value_type& _value5, const value_type& _value6,
+ const value_type& _value7, const value_type& _value8, const value_type& _value9, const value_type& _value10);
+
+ void sxprintf(std::ostream& _os, const char* const _format, const value_types& _values);
+
+#endif
+
+
+}
+
+#endif
diff --git a/externals/essentials/include/essentials/uri.hpp b/externals/essentials/source/essentials/include/essentials/uri.hpp
similarity index 96%
rename from externals/essentials/include/essentials/uri.hpp
rename to externals/essentials/source/essentials/include/essentials/uri.hpp
index 5a0a0bb..0499a44 100644
--- a/externals/essentials/include/essentials/uri.hpp
+++ b/externals/essentials/source/essentials/include/essentials/uri.hpp
@@ -1,55 +1,55 @@
-//////////////////////////////////////////////////////////////////////////////////////////////////////
-// //
-// This file is part of the Seadex essentials library (http://essentials.seadex.de). //
-// Copyright( C ) 2017 Seadex GmbH //
-// Licensing information is available in the folder "license" which is part of this distribution. //
-// The same information is available on the www @ http://essentials.seadex.de/License.html. //
-// //
-//////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-#ifndef URI_72CBB6C3_57D9_443A_99F0_9EDE9A2BC07D
-#define URI_72CBB6C3_57D9_443A_99F0_9EDE9A2BC07D
-
-
-#include
-
-#include "essentials/compatibility/compatibility.hpp"
-
-
-namespace sxe
-{
-
-
-const char URI_DELIMITER = '/';
-
-
-class uri SX_FINAL
-{
-public:
- explicit uri( const std::string& _uri = "" );
- ~uri() SX_NOEXCEPT;
- bool is_empty() const;
- const std::string to_string() const;
- const std::string& get_front() const;
- const std::string& get_back();
- void push_front( const std::string& _segment );
- void push_back( const std::string& _segment );
- void pop_front();
- void pop_back();
- size_t size() const;
-
-
-private:
- const std::string build_uri() const;
- void split_string_to_uri_segments( const std::string& _uri );
-
-
- std::deque< std::string > uri_;
-};
-
-
-}
-
-
-#endif
+//////////////////////////////////////////////////////////////////////////////////////////////////////
+// //
+// This file is part of the Seadex essentials library (http://essentials.seadex.de). //
+// Copyright( C ) 2017 Seadex GmbH //
+// Licensing information is available in the folder "license" which is part of this distribution. //
+// The same information is available on the www @ http://essentials.seadex.de/License.html. //
+// //
+//////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef URI_72CBB6C3_57D9_443A_99F0_9EDE9A2BC07D
+#define URI_72CBB6C3_57D9_443A_99F0_9EDE9A2BC07D
+
+
+#include
+
+#include "essentials/compatibility/compatibility.hpp"
+
+
+namespace sxe
+{
+
+
+const char URI_DELIMITER = '/';
+
+
+class uri SX_FINAL
+{
+public:
+ explicit uri( const std::string& _uri = "" );
+ ~uri() SX_NOEXCEPT;
+ bool is_empty() const;
+ const std::string to_string() const;
+ const std::string& get_front() const;
+ const std::string& get_back();
+ void push_front( const std::string& _segment );
+ void push_back( const std::string& _segment );
+ void pop_front();
+ void pop_back();
+ size_t size() const;
+
+
+private:
+ const std::string build_uri() const;
+ void split_string_to_uri_segments( const std::string& _uri );
+
+
+ std::deque< std::string > uri_;
+};
+
+
+}
+
+
+#endif
diff --git a/externals/essentials/source/conversion.cpp b/externals/essentials/source/essentials/source/conversion.cpp
similarity index 95%
rename from externals/essentials/source/conversion.cpp
rename to externals/essentials/source/essentials/source/conversion.cpp
index 4e0ff74..ed91544 100644
--- a/externals/essentials/source/conversion.cpp
+++ b/externals/essentials/source/essentials/source/conversion.cpp
@@ -1,103 +1,103 @@
-//////////////////////////////////////////////////////////////////////////////////////////////////////
-// //
-// This file is part of the Seadex essentials library (http://essentials.seadex.de). //
-// Copyright( C ) 2017 Seadex GmbH //
-// Licensing information is available in the folder "license" which is part of this distribution. //
-// The same information is available on the www @ http://essentials.seadex.de/License.html. //
-// //
-//////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-#include "essentials/conversion.hpp"
-
-#include
-#include
-#include
-
-#ifndef SX_CPP03_BOOST
- #include
-#else
- #include
-#endif
-
-
-namespace sxe
-{
-
-
-bool string_to_int( const char* const _int_as_string, int& _result )
-{
- bool success = false;
- try
- {
-#ifndef SX_CPP03_BOOST
- _result = std::stoi( std::string( _int_as_string ) );
- success = true;
-#else
- std::istringstream is( _int_as_string );
- if (is >> _result)
- {
- success = true;
- }
- else
- {
- success = false;
- }
-#endif
-
- }
- catch ( const std::invalid_argument& )
- {
- success = false;
- }
- catch ( const std::out_of_range& )
- {
- success = false;
- }
- return( success );
-}
-
-
-std::string to_string( const sxe::uint32_t _value )
-{
-#ifndef SX_CPP03_BOOST
- return( std::to_string( _value ) );
-#else
- std::ostringstream ostr;
- ostr << _value;
- return( ostr.str() );
-#endif
-}
-
-
-std::string to_string( const int _value )
-{
-#ifndef SX_CPP03_BOOST
- return( std::to_string( _value ) );
-#else
- std::ostringstream ostr;
- ostr << _value;
- return( ostr.str() );
-#endif
-}
-
-
-// cppcheck-suppress unusedFunction
-std::string to_upper( const std::string& _value )
-{
- std::string value_caps = _value;
- std::transform( value_caps.begin(), value_caps.end(), value_caps.begin(), static_cast< int( *)( int ) >( ::std::toupper ) );
- return( value_caps );
-}
-
-
-// cppcheck-suppress unusedFunction
-std::string to_lower( const std::string& _value )
-{
- std::string value_to_lower = _value;
- std::transform( value_to_lower.begin(), value_to_lower.end(), value_to_lower.begin(), static_cast< int( *)( int ) >( ::std::tolower ) );
- return( value_to_lower );
-}
-
-
-}
+//////////////////////////////////////////////////////////////////////////////////////////////////////
+// //
+// This file is part of the Seadex essentials library (http://essentials.seadex.de). //
+// Copyright( C ) 2017 Seadex GmbH //
+// Licensing information is available in the folder "license" which is part of this distribution. //
+// The same information is available on the www @ http://essentials.seadex.de/License.html. //
+// //
+//////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+#include "essentials/conversion.hpp"
+
+#include
+#include
+#include
+
+#ifndef SX_CPP03_BOOST
+ #include
+#else
+ #include
+#endif
+
+
+namespace sxe
+{
+
+
+bool string_to_int( const char* const _int_as_string, int& _result )
+{
+ bool success = false;
+ try
+ {
+#ifndef SX_CPP03_BOOST
+ _result = std::stoi( std::string( _int_as_string ) );
+ success = true;
+#else
+ std::istringstream is( _int_as_string );
+ if (is >> _result)
+ {
+ success = true;
+ }
+ else
+ {
+ success = false;
+ }
+#endif
+
+ }
+ catch ( const std::invalid_argument& )
+ {
+ success = false;
+ }
+ catch ( const std::out_of_range& )
+ {
+ success = false;
+ }
+ return( success );
+}
+
+
+std::string to_string( const sxe::uint32_t _value )
+{
+#ifndef SX_CPP03_BOOST
+ return( std::to_string( _value ) );
+#else
+ std::ostringstream ostr;
+ ostr << _value;
+ return( ostr.str() );
+#endif
+}
+
+
+std::string to_string( const int _value )
+{
+#ifndef SX_CPP03_BOOST
+ return( std::to_string( _value ) );
+#else
+ std::ostringstream ostr;
+ ostr << _value;
+ return( ostr.str() );
+#endif
+}
+
+
+// cppcheck-suppress unusedFunction
+std::string to_upper( const std::string& _value )
+{
+ std::string value_caps = _value;
+ std::transform( value_caps.begin(), value_caps.end(), value_caps.begin(), static_cast< int( *)( int ) >( ::std::toupper ) );
+ return( value_caps );
+}
+
+
+// cppcheck-suppress unusedFunction
+std::string to_lower( const std::string& _value )
+{
+ std::string value_to_lower = _value;
+ std::transform( value_to_lower.begin(), value_to_lower.end(), value_to_lower.begin(), static_cast< int( *)( int ) >( ::std::tolower ) );
+ return( value_to_lower );
+}
+
+
+}
diff --git a/externals/essentials/source/essentials_version.cpp b/externals/essentials/source/essentials/source/essentials_version.cpp
similarity index 93%
rename from externals/essentials/source/essentials_version.cpp
rename to externals/essentials/source/essentials/source/essentials_version.cpp
index ad5323b..7279071 100644
--- a/externals/essentials/source/essentials_version.cpp
+++ b/externals/essentials/source/essentials/source/essentials_version.cpp
@@ -1,74 +1,74 @@
-//////////////////////////////////////////////////////////////////////////////////////////////////////
-// //
-// This file is part of the Seadex essentials library (http://essentials.seadex.de). //
-// Copyright( C ) 2017 Seadex GmbH //
-// Licensing information is available in the folder "license" which is part of this distribution. //
-// The same information is available on the www @ http://essentials.seadex.de/License.html. //
-// //
-//////////////////////////////////////////////////////////////////////////////////////////////////////
-
-#include "essentials/essentials_version.hpp"
-
-#include
-
-#include "essentials/compatibility/compatibility.hpp"
-#include "essentials/build_number.hpp"
-#include "essentials/sxprintf.hpp"
-
-
-namespace sxe
-{
-
-
-namespace version
-{
-
-
-namespace
-{
-
-
-const sxe::uint16_t VERSION_MAJOR( 1 );
-const sxe::uint16_t VERSION_MINOR( 3 );
-const sxe::uint16_t VERSION_PATCH( 1 );
-
-
-}
-
-
-// cppcheck-suppress unusedFunction
-void log_version()
-{
- std::cout << sxe::sxprintf( "essentials library version %.%.%.%.", get_major_version(),
- get_minor_version(), get_patch_version(), get_build_number() ) << std::endl;
-}
-
-
-sxe::uint16_t get_major_version()
-{
- return( VERSION_MAJOR );
-}
-
-
-sxe::uint16_t get_minor_version()
-{
- return( VERSION_MINOR );
-}
-
-
-sxe::uint16_t get_patch_version()
-{
- return( VERSION_PATCH );
-}
-
-
-sxe::uint16_t get_build_number()
-{
- return( BUILD_NUMBER );
-}
-
-
-}
-
-
-}
+//////////////////////////////////////////////////////////////////////////////////////////////////////
+// //
+// This file is part of the Seadex essentials library (http://essentials.seadex.de). //
+// Copyright( C ) 2017 Seadex GmbH //
+// Licensing information is available in the folder "license" which is part of this distribution. //
+// The same information is available on the www @ http://essentials.seadex.de/License.html. //
+// //
+//////////////////////////////////////////////////////////////////////////////////////////////////////
+
+#include "essentials/essentials_version.hpp"
+
+#include
+
+#include "essentials/compatibility/compatibility.hpp"
+#include "essentials/build_number.hpp"
+#include "essentials/sxprintf.hpp"
+
+
+namespace sxe
+{
+
+
+namespace version
+{
+
+
+namespace
+{
+
+
+const sxe::uint16_t VERSION_MAJOR( 1 );
+const sxe::uint16_t VERSION_MINOR( 3 );
+const sxe::uint16_t VERSION_PATCH( 2 );
+
+
+}
+
+
+// cppcheck-suppress unusedFunction
+void log_version()
+{
+ std::cout << sxe::sxprintf( "essentials library version %.%.%.%.", get_major_version(),
+ get_minor_version(), get_patch_version(), get_build_number() ) << std::endl;
+}
+
+
+sxe::uint16_t get_major_version()
+{
+ return( VERSION_MAJOR );
+}
+
+
+sxe::uint16_t get_minor_version()
+{
+ return( VERSION_MINOR );
+}
+
+
+sxe::uint16_t get_patch_version()
+{
+ return( VERSION_PATCH );
+}
+
+
+sxe::uint16_t get_build_number()
+{
+ return( BUILD_NUMBER );
+}
+
+
+}
+
+
+}
diff --git a/externals/essentials/source/format_settings.cpp b/externals/essentials/source/essentials/source/format_settings.cpp
similarity index 97%
rename from externals/essentials/source/format_settings.cpp
rename to externals/essentials/source/essentials/source/format_settings.cpp
index 768379a..0417c8a 100644
--- a/externals/essentials/source/format_settings.cpp
+++ b/externals/essentials/source/essentials/source/format_settings.cpp
@@ -1,32 +1,32 @@
-//////////////////////////////////////////////////////////////////////////////////////////////////////
-// //
-// This file is part of the Seadex essentials library (http://essentials.seadex.de). //
-// Copyright( C ) 2017 Seadex GmbH //
-// Licensing information is available in the folder "license" which is part of this distribution. //
-// The same information is available on the www @ http://essentials.seadex.de/License.html. //
-// //
-//////////////////////////////////////////////////////////////////////////////////////////////////////
-
-#include "essentials/format_settings.hpp"
-
-
-namespace sxe
-{
-
-
-format_settings::format_settings():
- format_string_(),
- missing_closing_bracket_( false ),
- correct_( false ),
- hex_( false ),
- pad_zeros_( false ),
- places_set_( false ),
- places_( 0 ),
- decimal_places_set_( false ),
- decimal_places_( 0 )
-{
- // Nothing to do...
-}
-
-
-}
+//////////////////////////////////////////////////////////////////////////////////////////////////////
+// //
+// This file is part of the Seadex essentials library (http://essentials.seadex.de). //
+// Copyright( C ) 2017 Seadex GmbH //
+// Licensing information is available in the folder "license" which is part of this distribution. //
+// The same information is available on the www @ http://essentials.seadex.de/License.html. //
+// //
+//////////////////////////////////////////////////////////////////////////////////////////////////////
+
+#include "essentials/format_settings.hpp"
+
+
+namespace sxe
+{
+
+
+format_settings::format_settings():
+ format_string_(),
+ missing_closing_bracket_( false ),
+ correct_( false ),
+ hex_( false ),
+ pad_zeros_( false ),
+ places_set_( false ),
+ places_( 0 ),
+ decimal_places_set_( false ),
+ decimal_places_( 0 )
+{
+ // Nothing to do...
+}
+
+
+}
diff --git a/externals/essentials/source/sxprintf.cpp b/externals/essentials/source/essentials/source/sxprintf.cpp
similarity index 96%
rename from externals/essentials/source/sxprintf.cpp
rename to externals/essentials/source/essentials/source/sxprintf.cpp
index f3794a1..99844aa 100644
--- a/externals/essentials/source/sxprintf.cpp
+++ b/externals/essentials/source/essentials/source/sxprintf.cpp
@@ -1,628 +1,628 @@
-//////////////////////////////////////////////////////////////////////////////////////////////////////
-// //
-// This file is part of the Seadex essentials library (http://essentials.seadex.de). //
-// Copyright( C ) 2017 Seadex GmbH //
-// Licensing information is available in the folder "license" which is part of this distribution. //
-// The same information is available on the www @ http://essentials.seadex.de/License.html. //
-// //
-//////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-#include "essentials/sxprintf.hpp"
-
-#include
-
-#include "essentials/base.hpp"
-#include "essentials/conversion.hpp"
-
-
-namespace sxe
-{
-
-
-namespace
-{
-
-
- const char MISSING_PARAMETERS_MESSAGE[] = "[Missing parameter!]";
- const char MISSING_TERMINATOR[] = "[Missing output modifier terminator!]";
- const char ILLEGAL_MODIFIER[] = "[Illegal output modifier!]";
- const char POINT = '.';
- const char ZERO = '0';
- const char X = 'x';
- const char CAPS_X = 'X';
-
-
-}
-
-
-const char PLACE_HOLDER = '%';
-const char* const SUPERFLUOUS_PARAMETER_START = "[Superfluous parameter: ";
-const char SUPERFLUOUS_PARAMETER_END = ']';
-const char OPENING_SQUARE_BRACKET = '[';
-const char CLOSING_SQUARE_BRACKET = ']';
-
-
-// cppcheck-suppress unusedFunction
-std::ostream& operator<<( std::ostream& _os, const sxe::format_settings& _format )
-{
- if( !_format.correct_ )
- {
- _os << ILLEGAL_MODIFIER;
- }
- else if( _format.missing_closing_bracket_ )
- {
- _os << MISSING_TERMINATOR;
- }
- else
- {
- if( _format.hex_ )
- {
- _os << std::hex;
- _os << std::showbase;
- _os.fill( '0' );
- }
- else
- {
- if( _format.pad_zeros_ )
- {
- _os.fill( '0' );
- }
-
- if( _format.places_set_ )
- {
- _os.width( _format.places_ );
- }
-
- if( _format.decimal_places_set_ )
- {
- _os.precision( _format.decimal_places_ );
- }
- }
- }
-
- return( _os );
-}
-
-
-bool is_allowed_char( const char _char )
-{
- const bool success = ( std::isdigit( _char ) || ( X == _char ) || ( CAPS_X == _char ) );
- return( success );
-}
-
-
-sxe::format_settings parse_format_string( const char** const _format )
-{
- sxe::format_settings format_settings;
- format_settings.correct_ = true;
- SX_ASSERT( ( OPENING_SQUARE_BRACKET == **_format ), "Format string to parse doesn't start with [." );
- ++*_format;
- format_settings.missing_closing_bracket_ = true;
- bool point_found = false;
- const char* text_before_point = *_format;
- std::size_t text_before_point_size = 0;
- const char* text_after_point = SX_NULLPTR;
- std::size_t text_after_point_size = 0;
- while( **_format )
- {
- if( CLOSING_SQUARE_BRACKET == **_format )
- {
- format_settings.missing_closing_bracket_ = false;
- break;
- }
- else
- if( POINT == **_format )
- {
- if( point_found )
- {
- format_settings.correct_ = false;
- break;
- }
- else
- {
- point_found = true;
- text_after_point = ( *_format ) + 1;
- text_after_point_size = 0;
- }
- }
- else
- {
- const char _text_char = **_format;
- if( is_allowed_char( _text_char ) )
- {
- if( point_found )
- {
- ++text_after_point_size;
- }
- else
- {
- ++text_before_point_size;
- }
- }
- else
- {
- format_settings.correct_ = false;
- break;
- }
- }
-
- ++( *_format );
- }
-
- SX_ASSERT( text_before_point, "Logic error parsing format string!" );
- if( ( 0 == text_before_point_size ) && ( 0 == text_after_point_size ) )
- {
- format_settings.correct_ = false;
- }
-
- if( ( !format_settings.missing_closing_bracket_ ) && format_settings.correct_ )
- {
- if( ( 0 < text_before_point_size ) && ( ( X == text_before_point[ 0 ] ) || ( CAPS_X == text_before_point[ 0 ] ) ) )
- {
- format_settings.hex_ = true;
- ++text_before_point;
- --text_before_point_size;
- }
-
- if( ( 0 < text_before_point_size ) && ( ZERO == text_before_point[ 0 ] ) )
- {
- format_settings.pad_zeros_ = true;
- ++text_before_point;
- --text_before_point_size;
- }
-
- if( 0 < text_before_point_size )
- {
- format_settings.places_set_ = true;
- if( !string_to_int( text_before_point, format_settings.places_ ) )
- {
- format_settings.correct_ = false;
- }
- }
-
- if( 0 < text_after_point_size )
- {
- SX_ASSERT( text_after_point, "Logic error parsing format string!" );
- format_settings.decimal_places_set_ = true;
- if( !string_to_int( text_after_point, format_settings.decimal_places_ ) )
- {
- format_settings.correct_ = false;
- }
- }
- }
-
- return( format_settings );
-}
-
-
-#ifdef SX_CPP03_BOOST
-
-
-void print_superfluous_parameters( std::ostream& _os, const value_types& _values, value_types::const_iterator& _position )
-{
- while( _position != _values.end() )
- {
- print_superfluous_parameters( _os, *_position );
- ++_position;
- }
-}
-
-
-#endif
-
-
-void sxprintf( std::ostream& _os, const char* _format )
-{
- while( *_format )
- {
- if( PLACE_HOLDER == *_format )
- {
- if( PLACE_HOLDER == *( _format + 1 ) )
- {
- ++_format;
- }
- else
- {
- _os << MISSING_PARAMETERS_MESSAGE;
- }
- }
- _os << *_format++;
- }
-}
-
-
-#ifdef SX_CPP03_BOOST
-
-
-std::string sxprintf(const char* const _format)
-{
- std::stringstream target_string_stream;
- sxprintf(target_string_stream, _format);
- return( target_string_stream.str() );
-}
-
-
-std::string sxprintf(const char* const _format, const value_type& _value1)
-{
- std::stringstream target_string_stream;
- sxprintf(target_string_stream, _format, _value1);
- return( target_string_stream.str() );
-}
-
-
-std::string sxprintf(const char* const _format, const value_type& _value1, const value_type& _value2)
-{
- std::stringstream target_string_stream;
- sxprintf(target_string_stream, _format, _value1, _value2);
- return( target_string_stream.str() );
-}
-
-
-std::string sxprintf(const char* const _format, const value_type& _value1, const value_type& _value2, const value_type& _value3)
-{
- std::stringstream target_string_stream;
- sxprintf(target_string_stream, _format, _value1, _value2, _value3);
- return( target_string_stream.str() );
-}
-
-
-std::string sxprintf(const char* const _format, const value_type& _value1, const value_type& _value2, const value_type& _value3,
- const value_type& _value4)
-{
- std::stringstream target_string_stream;
- sxprintf(target_string_stream, _format, _value1, _value2, _value3, _value4);
- return( target_string_stream.str() );
-}
-
-
-std::string sxprintf(const char* const _format, const value_type& _value1, const value_type& _value2, const value_type& _value3,
- const value_type& _value4, const value_type& _value5)
-{
- std::stringstream target_string_stream;
- sxprintf(target_string_stream, _format, _value1, _value2, _value3, _value4, _value5);
- return( target_string_stream.str() );
-}
-
-
-std::string sxprintf(const char* const _format, const value_type& _value1, const value_type& _value2, const value_type& _value3,
- const value_type& _value4, const value_type& _value5, const value_type& _value6)
-{
- std::stringstream target_string_stream;
- sxprintf(target_string_stream, _format, _value1, _value2, _value3, _value4, _value5, _value6);
- return( target_string_stream.str() );
-}
-
-
-std::string sxprintf(const char* const _format, const value_type& _value1, const value_type& _value2, const value_type& _value3,
- const value_type& _value4, const value_type& _value5, const value_type& _value6, const value_type& _value7)
-{
- std::stringstream target_string_stream;
- sxprintf(target_string_stream, _format, _value1, _value2, _value3, _value4, _value5, _value6, _value7);
- return( target_string_stream.str() );
-}
-
-
-std::string sxprintf(const char* const _format, const value_type& _value1, const value_type& _value2, const value_type& _value3,
- const value_type& _value4, const value_type& _value5, const value_type& _value6, const value_type& _value7, const value_type& _value8)
-{
- std::stringstream target_string_stream;
- sxprintf(target_string_stream, _format, _value1, _value2, _value3, _value4, _value5, _value6, _value7, _value8);
- return( target_string_stream.str() );
-}
-
-
-std::string sxprintf(const char* const _format, const value_type& _value1, const value_type& _value2, const value_type& _value3,
- const value_type& _value4, const value_type& _value5, const value_type& _value6, const value_type& _value7, const value_type& _value8,
- const value_type& _value9)
-{
- std::stringstream target_string_stream;
- sxprintf(target_string_stream, _format, _value1, _value2, _value3, _value4, _value5, _value6, _value7, _value8, _value9);
- return( target_string_stream.str() );
-}
-
-
-std::string sxprintf(const char* const _format, const value_type& _value1, const value_type& _value2, const value_type& _value3,
- const value_type& _value4, const value_type& _value5, const value_type& _value6, const value_type& _value7, const value_type& _value8,
- const value_type& _value9, const value_type& _value10)
-{
- std::stringstream target_string_stream;
- sxprintf(target_string_stream, _format, _value1, _value2, _value3, _value4, _value5, _value6, _value7, _value8, _value9, _value10);
- return( target_string_stream.str() );
-}
-
-
-void sxprintf( std::ostream& _os, const char* const _format, const value_type& _value1 )
-{
- value_types values;
- values.push_back( _value1 );
- sxprintf( _os, _format, values );
-}
-
-
-void sxprintf( std::ostream& _os, const char* const _format, const value_type& _value1, const value_type& _value2 )
-{
- value_types values;
- values.push_back( _value1 );
- values.push_back( _value2 );
- sxprintf( _os, _format, values );
-}
-
-
-void sxprintf( std::ostream& _os, const char* const _format, const value_type& _value1, const value_type& _value2,
- const value_type& _value3 )
-{
- value_types values;
- values.push_back( _value1 );
- values.push_back( _value2 );
- values.push_back( _value3 );
- sxprintf( _os, _format, values );
-}
-
-
-void sxprintf( std::ostream& _os, const char* const _format, const value_type& _value1, const value_type& _value2,
- const value_type& _value3, const value_type& _value4 )
-{
- value_types values;
- values.push_back( _value1 );
- values.push_back( _value2 );
- values.push_back( _value3 );
- values.push_back( _value4 );
- sxprintf( _os, _format, values );
-}
-
-
-void sxprintf( std::ostream& _os, const char* const _format, const value_type& _value1, const value_type& _value2,
- const value_type& _value3, const value_type& _value4, const value_type& _value5 )
-{
- value_types values;
- values.push_back( _value1 );
- values.push_back( _value2 );
- values.push_back( _value3 );
- values.push_back( _value4 );
- values.push_back( _value5 );
- sxprintf( _os, _format, values );
-}
-
-
-void sxprintf( std::ostream& _os, const char* const _format, const value_type& _value1, const value_type& _value2,
- const value_type& _value3, const value_type& _value4, const value_type& _value5, const value_type& _value6 )
-{
- value_types values;
- values.push_back( _value1 );
- values.push_back( _value2 );
- values.push_back( _value3 );
- values.push_back( _value4 );
- values.push_back( _value5 );
- values.push_back( _value6 );
- sxprintf( _os, _format, values );
-}
-
-
-void sxprintf( std::ostream& _os, const char* const _format, const value_type& _value1, const value_type& _value2,
- const value_type& _value3, const value_type& _value4, const value_type& _value5, const value_type& _value6,
- const value_type& _value7 )
-{
- value_types values;
- values.push_back( _value1 );
- values.push_back( _value2 );
- values.push_back( _value3 );
- values.push_back( _value4 );
- values.push_back( _value5 );
- values.push_back( _value6 );
- values.push_back( _value7 );
- sxprintf( _os, _format, values );
-}
-
-
-void sxprintf( std::ostream& _os, const char* const _format, const value_type& _value1, const value_type& _value2,
- const value_type& _value3, const value_type& _value4, const value_type& _value5, const value_type& _value6,
- const value_type& _value7, const value_type& _value8 )
-{
- value_types values;
- values.push_back( _value1 );
- values.push_back( _value2 );
- values.push_back( _value3 );
- values.push_back( _value4 );
- values.push_back( _value5 );
- values.push_back( _value6 );
- values.push_back( _value7 );
- values.push_back( _value8 );
- sxprintf( _os, _format, values );
-}
-
-
-void sxprintf( std::ostream& _os, const char* const _format, const value_type& _value1, const value_type& _value2,
- const value_type& _value3, const value_type& _value4, const value_type& _value5, const value_type& _value6,
- const value_type& _value7, const value_type& _value8, const value_type& _value9 )
-{
- value_types values;
- values.push_back( _value1 );
- values.push_back( _value2 );
- values.push_back( _value3 );
- values.push_back( _value4 );
- values.push_back( _value5 );
- values.push_back( _value6 );
- values.push_back( _value7 );
- values.push_back( _value8 );
- values.push_back( _value9 );
- sxprintf( _os, _format, values );
-}
-
-
-void sxprintf( std::ostream& _os, const char* const _format, const value_type& _value1, const value_type& _value2,
- const value_type& _value3, const value_type& _value4, const value_type& _value5, const value_type& _value6,
- const value_type& _value7, const value_type& _value8, const value_type& _value9, const value_type& _value10 )
-{
- value_types values;
- values.push_back( _value1 );
- values.push_back( _value2 );
- values.push_back( _value3 );
- values.push_back( _value4 );
- values.push_back( _value5 );
- values.push_back( _value6 );
- values.push_back( _value7 );
- values.push_back( _value8 );
- values.push_back( _value9 );
- values.push_back( _value10 );
- sxprintf( _os, _format, values );
-}
-
-
-const char* sxprintf_impl( std::ostream& _os, const char* _format, value_types::const_iterator& _position,
- const value_types::const_iterator _end, bool& printed )
-{
- while (*_format)
- {
- if (PLACE_HOLDER == *_format)
- {
- if (PLACE_HOLDER == *( _format + 1 ))
- {
- ++_format; // skip first place holder
- _os << *_format++; // output of the second place holder
- }
- else
- {
- if (OPENING_SQUARE_BRACKET == *( _format + 1 ))
- {
- ++_format;
- const sxe::format_settings format_settings = sxe::parse_format_string(&_format);
- const std::ios_base::fmtflags stream_flags = _os.flags();
- const char streafill_ = _os.fill();
- _os << format_settings;
- print_value_type_value( _os, *_position );
- _os.flags(stream_flags);
- _os.fill(streafill_);
- printed = true;
- if( !format_settings.missing_closing_bracket_ )
- {
- if( CLOSING_SQUARE_BRACKET == *( _format ) )
- {
- ++_format;
- }
- }
- else
- {
- if( !format_settings.correct_ )
- {
- ++_format;
- }
- }
- }
- else
- {
- print_value_type_value( _os, *_position );
- printed = true;
- ++_format;
- break;
- }
-
- if( _position + 1 != _end )
- {
- if( *_format != '\0' )
- {
- ++_position;
- _format = sxprintf_impl( _os, _format, _position, _end, printed );
- }
- }
- return( _format );
- }
- }
- else
- {
- _os << *_format++;
- }
- }
- return ( _format );
-}
-
-
-void sxprintf( std::ostream& _os, const char * const _format, const value_types& _values )
-{
- SX_ASSERT( _format, "No format string to parse was passed!" );
- const char* current_position = _format;
-
- value_types::const_iterator _end = _values.end();
- value_types::const_iterator _position = _values.begin();
- while( _position != _end )
- {
- bool printed = false;
- current_position = sxprintf_impl( _os, current_position, _position, _end, printed );
- if( printed )
- {
- ++_position;
- }
- if( current_position[0] == '\0' )
- {
- break;
- }
- }
-
- sxprintf( _os, current_position );
-
- if( _position != _end )
- {
- print_superfluous_parameters( _os, _values, _position );
- }
-}
-
-
-void print_value_type_value( std::ostream& _os, const value_type& _value )
-{
- const std::type_info& type_info = _value.type();
-
- if( type_info == typeid ( bool ) )
- {
- stream_writer< bool >::print( _os, boost::get< bool >( _value ) );
- }
- else if( type_info == typeid ( int ) )
- {
- stream_writer< int >::print( _os, boost::get< int >( _value ) );
- }
- else if( type_info == typeid ( unsigned int ) )
- {
- stream_writer< unsigned int >::print( _os, boost::get< unsigned int >( _value ) );
- }
- else if( type_info == typeid ( sxe::int8_t ) )
- {
- stream_writer< sxe::int8_t >::print( _os, boost::get< sxe::int8_t >( _value ) );
- }
- else if (type_info == typeid ( sxe::uint8_t ))
- {
- stream_writer< sxe::uint8_t >::print(_os, boost::get< sxe::uint8_t >(_value));
- }
- else if( type_info == typeid ( sxe::uint16_t ) )
- {
- stream_writer< sxe::uint16_t >::print( _os, boost::get< sxe::uint16_t >( _value ) );
- }
- else if( type_info == typeid ( sxe::uint32_t ) )
- {
- stream_writer< sxe::uint32_t >::print( _os, boost::get< sxe::uint32_t >( _value ) );
- }
- else if( type_info == typeid ( std::string ) )
- {
- stream_writer< std::string >::print( _os, boost::get< std::string >( _value ) );
- }
- else if( type_info == typeid ( std::size_t ) )
- {
- stream_writer< std::size_t >::print( _os, boost::get< std::size_t >( _value ) );
- }
- else if( type_info == typeid ( const char* ) )
- {
- stream_writer< const char* >::print( _os, boost::get< const char* >( _value ) );
- }
- else if( type_info == typeid ( boost::int_least64_t ) )
- {
- stream_writer< boost::int_least64_t >::print( _os, boost::get< boost::int_least64_t >( _value ) );
- }
- else if( type_info == typeid ( double ) )
- {
- stream_writer< double >::print( _os, boost::get< double >( _value ) );
- }
-}
-
-
-#endif
-
-
-}
+//////////////////////////////////////////////////////////////////////////////////////////////////////
+// //
+// This file is part of the Seadex essentials library (http://essentials.seadex.de). //
+// Copyright( C ) 2017 Seadex GmbH //
+// Licensing information is available in the folder "license" which is part of this distribution. //
+// The same information is available on the www @ http://essentials.seadex.de/License.html. //
+// //
+//////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+#include "essentials/sxprintf.hpp"
+
+#include
+
+#include "essentials/base.hpp"
+#include "essentials/conversion.hpp"
+
+
+namespace sxe
+{
+
+
+namespace
+{
+
+
+ const char MISSING_PARAMETERS_MESSAGE[] = "[Missing parameter!]";
+ const char MISSING_TERMINATOR[] = "[Missing output modifier terminator!]";
+ const char ILLEGAL_MODIFIER[] = "[Illegal output modifier!]";
+ const char POINT = '.';
+ const char ZERO = '0';
+ const char X = 'x';
+ const char CAPS_X = 'X';
+
+
+}
+
+
+const char PLACE_HOLDER = '%';
+const char* const SUPERFLUOUS_PARAMETER_START = "[Superfluous parameter: ";
+const char SUPERFLUOUS_PARAMETER_END = ']';
+const char OPENING_SQUARE_BRACKET = '[';
+const char CLOSING_SQUARE_BRACKET = ']';
+
+
+// cppcheck-suppress unusedFunction
+std::ostream& operator<<( std::ostream& _os, const sxe::format_settings& _format )
+{
+ if( !_format.correct_ )
+ {
+ _os << ILLEGAL_MODIFIER;
+ }
+ else if( _format.missing_closing_bracket_ )
+ {
+ _os << MISSING_TERMINATOR;
+ }
+ else
+ {
+ if( _format.hex_ )
+ {
+ _os << std::hex;
+ _os << std::showbase;
+ _os.fill( '0' );
+ }
+ else
+ {
+ if( _format.pad_zeros_ )
+ {
+ _os.fill( '0' );
+ }
+
+ if( _format.places_set_ )
+ {
+ _os.width( _format.places_ );
+ }
+
+ if( _format.decimal_places_set_ )
+ {
+ _os.precision( _format.decimal_places_ );
+ }
+ }
+ }
+
+ return( _os );
+}
+
+
+bool is_allowed_char( const char _char )
+{
+ const bool success = ( std::isdigit( _char ) || ( X == _char ) || ( CAPS_X == _char ) );
+ return( success );
+}
+
+
+sxe::format_settings parse_format_string( const char** const _format )
+{
+ sxe::format_settings format_settings;
+ format_settings.correct_ = true;
+ SX_ASSERT( ( OPENING_SQUARE_BRACKET == **_format ), "Format string to parse doesn't start with [." );
+ ++*_format;
+ format_settings.missing_closing_bracket_ = true;
+ bool point_found = false;
+ const char* text_before_point = *_format;
+ std::size_t text_before_point_size = 0;
+ const char* text_after_point = SX_NULLPTR;
+ std::size_t text_after_point_size = 0;
+ while( **_format )
+ {
+ if( CLOSING_SQUARE_BRACKET == **_format )
+ {
+ format_settings.missing_closing_bracket_ = false;
+ break;
+ }
+ else
+ if( POINT == **_format )
+ {
+ if( point_found )
+ {
+ format_settings.correct_ = false;
+ break;
+ }
+ else
+ {
+ point_found = true;
+ text_after_point = ( *_format ) + 1;
+ text_after_point_size = 0;
+ }
+ }
+ else
+ {
+ const char _text_char = **_format;
+ if( is_allowed_char( _text_char ) )
+ {
+ if( point_found )
+ {
+ ++text_after_point_size;
+ }
+ else
+ {
+ ++text_before_point_size;
+ }
+ }
+ else
+ {
+ format_settings.correct_ = false;
+ break;
+ }
+ }
+
+ ++( *_format );
+ }
+
+ SX_ASSERT( text_before_point, "Logic error parsing format string!" );
+ if( ( 0 == text_before_point_size ) && ( 0 == text_after_point_size ) )
+ {
+ format_settings.correct_ = false;
+ }
+
+ if( ( !format_settings.missing_closing_bracket_ ) && format_settings.correct_ )
+ {
+ if( ( 0 < text_before_point_size ) && ( ( X == text_before_point[ 0 ] ) || ( CAPS_X == text_before_point[ 0 ] ) ) )
+ {
+ format_settings.hex_ = true;
+ ++text_before_point;
+ --text_before_point_size;
+ }
+
+ if( ( 0 < text_before_point_size ) && ( ZERO == text_before_point[ 0 ] ) )
+ {
+ format_settings.pad_zeros_ = true;
+ ++text_before_point;
+ --text_before_point_size;
+ }
+
+ if( 0 < text_before_point_size )
+ {
+ format_settings.places_set_ = true;
+ if( !string_to_int( text_before_point, format_settings.places_ ) )
+ {
+ format_settings.correct_ = false;
+ }
+ }
+
+ if( 0 < text_after_point_size )
+ {
+ SX_ASSERT( text_after_point, "Logic error parsing format string!" );
+ format_settings.decimal_places_set_ = true;
+ if( !string_to_int( text_after_point, format_settings.decimal_places_ ) )
+ {
+ format_settings.correct_ = false;
+ }
+ }
+ }
+
+ return( format_settings );
+}
+
+
+#ifdef SX_CPP03_BOOST
+
+
+void print_superfluous_parameters( std::ostream& _os, const value_types& _values, value_types::const_iterator& _position )
+{
+ while( _position != _values.end() )
+ {
+ print_superfluous_parameters( _os, *_position );
+ ++_position;
+ }
+}
+
+
+#endif
+
+
+void sxprintf( std::ostream& _os, const char* _format )
+{
+ while( *_format )
+ {
+ if( PLACE_HOLDER == *_format )
+ {
+ if( PLACE_HOLDER == *( _format + 1 ) )
+ {
+ ++_format;
+ }
+ else
+ {
+ _os << MISSING_PARAMETERS_MESSAGE;
+ }
+ }
+ _os << *_format++;
+ }
+}
+
+
+#ifdef SX_CPP03_BOOST
+
+
+std::string sxprintf(const char* const _format)
+{
+ std::stringstream target_string_stream;
+ sxprintf(target_string_stream, _format);
+ return( target_string_stream.str() );
+}
+
+
+std::string sxprintf(const char* const _format, const value_type& _value1)
+{
+ std::stringstream target_string_stream;
+ sxprintf(target_string_stream, _format, _value1);
+ return( target_string_stream.str() );
+}
+
+
+std::string sxprintf(const char* const _format, const value_type& _value1, const value_type& _value2)
+{
+ std::stringstream target_string_stream;
+ sxprintf(target_string_stream, _format, _value1, _value2);
+ return( target_string_stream.str() );
+}
+
+
+std::string sxprintf(const char* const _format, const value_type& _value1, const value_type& _value2, const value_type& _value3)
+{
+ std::stringstream target_string_stream;
+ sxprintf(target_string_stream, _format, _value1, _value2, _value3);
+ return( target_string_stream.str() );
+}
+
+
+std::string sxprintf(const char* const _format, const value_type& _value1, const value_type& _value2, const value_type& _value3,
+ const value_type& _value4)
+{
+ std::stringstream target_string_stream;
+ sxprintf(target_string_stream, _format, _value1, _value2, _value3, _value4);
+ return( target_string_stream.str() );
+}
+
+
+std::string sxprintf(const char* const _format, const value_type& _value1, const value_type& _value2, const value_type& _value3,
+ const value_type& _value4, const value_type& _value5)
+{
+ std::stringstream target_string_stream;
+ sxprintf(target_string_stream, _format, _value1, _value2, _value3, _value4, _value5);
+ return( target_string_stream.str() );
+}
+
+
+std::string sxprintf(const char* const _format, const value_type& _value1, const value_type& _value2, const value_type& _value3,
+ const value_type& _value4, const value_type& _value5, const value_type& _value6)
+{
+ std::stringstream target_string_stream;
+ sxprintf(target_string_stream, _format, _value1, _value2, _value3, _value4, _value5, _value6);
+ return( target_string_stream.str() );
+}
+
+
+std::string sxprintf(const char* const _format, const value_type& _value1, const value_type& _value2, const value_type& _value3,
+ const value_type& _value4, const value_type& _value5, const value_type& _value6, const value_type& _value7)
+{
+ std::stringstream target_string_stream;
+ sxprintf(target_string_stream, _format, _value1, _value2, _value3, _value4, _value5, _value6, _value7);
+ return( target_string_stream.str() );
+}
+
+
+std::string sxprintf(const char* const _format, const value_type& _value1, const value_type& _value2, const value_type& _value3,
+ const value_type& _value4, const value_type& _value5, const value_type& _value6, const value_type& _value7, const value_type& _value8)
+{
+ std::stringstream target_string_stream;
+ sxprintf(target_string_stream, _format, _value1, _value2, _value3, _value4, _value5, _value6, _value7, _value8);
+ return( target_string_stream.str() );
+}
+
+
+std::string sxprintf(const char* const _format, const value_type& _value1, const value_type& _value2, const value_type& _value3,
+ const value_type& _value4, const value_type& _value5, const value_type& _value6, const value_type& _value7, const value_type& _value8,
+ const value_type& _value9)
+{
+ std::stringstream target_string_stream;
+ sxprintf(target_string_stream, _format, _value1, _value2, _value3, _value4, _value5, _value6, _value7, _value8, _value9);
+ return( target_string_stream.str() );
+}
+
+
+std::string sxprintf(const char* const _format, const value_type& _value1, const value_type& _value2, const value_type& _value3,
+ const value_type& _value4, const value_type& _value5, const value_type& _value6, const value_type& _value7, const value_type& _value8,
+ const value_type& _value9, const value_type& _value10)
+{
+ std::stringstream target_string_stream;
+ sxprintf(target_string_stream, _format, _value1, _value2, _value3, _value4, _value5, _value6, _value7, _value8, _value9, _value10);
+ return( target_string_stream.str() );
+}
+
+
+void sxprintf( std::ostream& _os, const char* const _format, const value_type& _value1 )
+{
+ value_types values;
+ values.push_back( _value1 );
+ sxprintf( _os, _format, values );
+}
+
+
+void sxprintf( std::ostream& _os, const char* const _format, const value_type& _value1, const value_type& _value2 )
+{
+ value_types values;
+ values.push_back( _value1 );
+ values.push_back( _value2 );
+ sxprintf( _os, _format, values );
+}
+
+
+void sxprintf( std::ostream& _os, const char* const _format, const value_type& _value1, const value_type& _value2,
+ const value_type& _value3 )
+{
+ value_types values;
+ values.push_back( _value1 );
+ values.push_back( _value2 );
+ values.push_back( _value3 );
+ sxprintf( _os, _format, values );
+}
+
+
+void sxprintf( std::ostream& _os, const char* const _format, const value_type& _value1, const value_type& _value2,
+ const value_type& _value3, const value_type& _value4 )
+{
+ value_types values;
+ values.push_back( _value1 );
+ values.push_back( _value2 );
+ values.push_back( _value3 );
+ values.push_back( _value4 );
+ sxprintf( _os, _format, values );
+}
+
+
+void sxprintf( std::ostream& _os, const char* const _format, const value_type& _value1, const value_type& _value2,
+ const value_type& _value3, const value_type& _value4, const value_type& _value5 )
+{
+ value_types values;
+ values.push_back( _value1 );
+ values.push_back( _value2 );
+ values.push_back( _value3 );
+ values.push_back( _value4 );
+ values.push_back( _value5 );
+ sxprintf( _os, _format, values );
+}
+
+
+void sxprintf( std::ostream& _os, const char* const _format, const value_type& _value1, const value_type& _value2,
+ const value_type& _value3, const value_type& _value4, const value_type& _value5, const value_type& _value6 )
+{
+ value_types values;
+ values.push_back( _value1 );
+ values.push_back( _value2 );
+ values.push_back( _value3 );
+ values.push_back( _value4 );
+ values.push_back( _value5 );
+ values.push_back( _value6 );
+ sxprintf( _os, _format, values );
+}
+
+
+void sxprintf( std::ostream& _os, const char* const _format, const value_type& _value1, const value_type& _value2,
+ const value_type& _value3, const value_type& _value4, const value_type& _value5, const value_type& _value6,
+ const value_type& _value7 )
+{
+ value_types values;
+ values.push_back( _value1 );
+ values.push_back( _value2 );
+ values.push_back( _value3 );
+ values.push_back( _value4 );
+ values.push_back( _value5 );
+ values.push_back( _value6 );
+ values.push_back( _value7 );
+ sxprintf( _os, _format, values );
+}
+
+
+void sxprintf( std::ostream& _os, const char* const _format, const value_type& _value1, const value_type& _value2,
+ const value_type& _value3, const value_type& _value4, const value_type& _value5, const value_type& _value6,
+ const value_type& _value7, const value_type& _value8 )
+{
+ value_types values;
+ values.push_back( _value1 );
+ values.push_back( _value2 );
+ values.push_back( _value3 );
+ values.push_back( _value4 );
+ values.push_back( _value5 );
+ values.push_back( _value6 );
+ values.push_back( _value7 );
+ values.push_back( _value8 );
+ sxprintf( _os, _format, values );
+}
+
+
+void sxprintf( std::ostream& _os, const char* const _format, const value_type& _value1, const value_type& _value2,
+ const value_type& _value3, const value_type& _value4, const value_type& _value5, const value_type& _value6,
+ const value_type& _value7, const value_type& _value8, const value_type& _value9 )
+{
+ value_types values;
+ values.push_back( _value1 );
+ values.push_back( _value2 );
+ values.push_back( _value3 );
+ values.push_back( _value4 );
+ values.push_back( _value5 );
+ values.push_back( _value6 );
+ values.push_back( _value7 );
+ values.push_back( _value8 );
+ values.push_back( _value9 );
+ sxprintf( _os, _format, values );
+}
+
+
+void sxprintf( std::ostream& _os, const char* const _format, const value_type& _value1, const value_type& _value2,
+ const value_type& _value3, const value_type& _value4, const value_type& _value5, const value_type& _value6,
+ const value_type& _value7, const value_type& _value8, const value_type& _value9, const value_type& _value10 )
+{
+ value_types values;
+ values.push_back( _value1 );
+ values.push_back( _value2 );
+ values.push_back( _value3 );
+ values.push_back( _value4 );
+ values.push_back( _value5 );
+ values.push_back( _value6 );
+ values.push_back( _value7 );
+ values.push_back( _value8 );
+ values.push_back( _value9 );
+ values.push_back( _value10 );
+ sxprintf( _os, _format, values );
+}
+
+
+const char* sxprintf_impl( std::ostream& _os, const char* _format, value_types::const_iterator& _position,
+ const value_types::const_iterator _end, bool& printed )
+{
+ while (*_format)
+ {
+ if (PLACE_HOLDER == *_format)
+ {
+ if (PLACE_HOLDER == *( _format + 1 ))
+ {
+ ++_format; // skip first place holder
+ _os << *_format++; // output of the second place holder
+ }
+ else
+ {
+ if (OPENING_SQUARE_BRACKET == *( _format + 1 ))
+ {
+ ++_format;
+ const sxe::format_settings format_settings = sxe::parse_format_string(&_format);
+ const std::ios_base::fmtflags stream_flags = _os.flags();
+ const char streafill_ = _os.fill();
+ _os << format_settings;
+ print_value_type_value( _os, *_position );
+ _os.flags(stream_flags);
+ _os.fill(streafill_);
+ printed = true;
+ if( !format_settings.missing_closing_bracket_ )
+ {
+ if( CLOSING_SQUARE_BRACKET == *( _format ) )
+ {
+ ++_format;
+ }
+ }
+ else
+ {
+ if( !format_settings.correct_ )
+ {
+ ++_format;
+ }
+ }
+ }
+ else
+ {
+ print_value_type_value( _os, *_position );
+ printed = true;
+ ++_format;
+ break;
+ }
+
+ if( _position + 1 != _end )
+ {
+ if( *_format != '\0' )
+ {
+ ++_position;
+ _format = sxprintf_impl( _os, _format, _position, _end, printed );
+ }
+ }
+ return( _format );
+ }
+ }
+ else
+ {
+ _os << *_format++;
+ }
+ }
+ return ( _format );
+}
+
+
+void sxprintf( std::ostream& _os, const char * const _format, const value_types& _values )
+{
+ SX_ASSERT( _format, "No format string to parse was passed!" );
+ const char* current_position = _format;
+
+ value_types::const_iterator _end = _values.end();
+ value_types::const_iterator _position = _values.begin();
+ while( _position != _end )
+ {
+ bool printed = false;
+ current_position = sxprintf_impl( _os, current_position, _position, _end, printed );
+ if( printed )
+ {
+ ++_position;
+ }
+ if( current_position[0] == '\0' )
+ {
+ break;
+ }
+ }
+
+ sxprintf( _os, current_position );
+
+ if( _position != _end )
+ {
+ print_superfluous_parameters( _os, _values, _position );
+ }
+}
+
+
+void print_value_type_value( std::ostream& _os, const value_type& _value )
+{
+ const std::type_info& type_info = _value.type();
+
+ if( type_info == typeid ( bool ) )
+ {
+ stream_writer< bool >::print( _os, boost::get< bool >( _value ) );
+ }
+ else if( type_info == typeid ( int ) )
+ {
+ stream_writer< int >::print( _os, boost::get< int >( _value ) );
+ }
+ else if( type_info == typeid ( unsigned int ) )
+ {
+ stream_writer< unsigned int >::print( _os, boost::get< unsigned int >( _value ) );
+ }
+ else if( type_info == typeid ( sxe::int8_t ) )
+ {
+ stream_writer< sxe::int8_t >::print( _os, boost::get< sxe::int8_t >( _value ) );
+ }
+ else if (type_info == typeid ( sxe::uint8_t ))
+ {
+ stream_writer< sxe::uint8_t >::print(_os, boost::get< sxe::uint8_t >(_value));
+ }
+ else if( type_info == typeid ( sxe::uint16_t ) )
+ {
+ stream_writer< sxe::uint16_t >::print( _os, boost::get< sxe::uint16_t >( _value ) );
+ }
+ else if( type_info == typeid ( sxe::uint32_t ) )
+ {
+ stream_writer< sxe::uint32_t >::print( _os, boost::get< sxe::uint32_t >( _value ) );
+ }
+ else if( type_info == typeid ( std::string ) )
+ {
+ stream_writer< std::string >::print( _os, boost::get< std::string >( _value ) );
+ }
+ else if( type_info == typeid ( std::size_t ) )
+ {
+ stream_writer< std::size_t >::print( _os, boost::get< std::size_t >( _value ) );
+ }
+ else if( type_info == typeid ( const char* ) )
+ {
+ stream_writer< const char* >::print( _os, boost::get< const char* >( _value ) );
+ }
+ else if( type_info == typeid ( boost::int_least64_t ) )
+ {
+ stream_writer< boost::int_least64_t >::print( _os, boost::get< boost::int_least64_t >( _value ) );
+ }
+ else if( type_info == typeid ( double ) )
+ {
+ stream_writer< double >::print( _os, boost::get< double >( _value ) );
+ }
+}
+
+
+#endif
+
+
+}
diff --git a/externals/essentials/source/uri.cpp b/externals/essentials/source/essentials/source/uri.cpp
similarity index 95%
rename from externals/essentials/source/uri.cpp
rename to externals/essentials/source/essentials/source/uri.cpp
index 9926a9a..1460efb 100644
--- a/externals/essentials/source/uri.cpp
+++ b/externals/essentials/source/essentials/source/uri.cpp
@@ -1,136 +1,136 @@
-//////////////////////////////////////////////////////////////////////////////////////////////////////
-// //
-// This file is part of the Seadex essentials library (http://essentials.seadex.de). //
-// Copyright( C ) 2017 Seadex GmbH //
-// Licensing information is available in the folder "license" which is part of this distribution. //
-// The same information is available on the www @ http://essentials.seadex.de/License.html. //
-// //
-//////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-#include "essentials/uri.hpp"
-
-#include
-#include
-
-#include "essentials/base.hpp"
-
-
-namespace sxe
-{
-
-
-uri::uri( const std::string& _uri )
- : uri_()
-{
- split_string_to_uri_segments( _uri );
-}
-
-
-uri::~uri() SX_NOEXCEPT
-{
- // Nothing to do...
-}
-
-
-bool uri::is_empty() const
-{
- return( uri_.empty() );
-}
-
-
-const std::string uri::to_string() const
-{
- return( build_uri() );
-}
-
-
-const std::string& uri::get_front() const
-{
- SX_ASSERT( !uri_.empty(), "Uri is empty!" );
- return( uri_.front() );
-}
-
-
-const std::string& uri::get_back()
-{
- SX_ASSERT( !uri_.empty(), "Uri is empty!" );
- return( uri_.back() );
-}
-
-
-void uri::push_front( const std::string& _segment )
-{
- uri_.push_front( _segment );
-}
-
-
-void uri::push_back( const std::string& _segment )
-{
- uri_.push_back( _segment );
-}
-
-
-void uri::pop_front()
-{
- SX_ASSERT( !uri_.empty(), "Uri is empty!" );
- uri_.pop_front();
-}
-
-
-void uri::pop_back()
-{
- SX_ASSERT( !uri_.empty(), "Uri is empty!" );
- uri_.pop_back();
-}
-
-
-size_t uri::size() const
-{
- return( uri_.size() );
-}
-
-
-const std::string uri::build_uri() const
-{
- std::stringstream uri;
-
- SX_FOR( const std::string& uri_element, uri_ )
- {
- uri << URI_DELIMITER << uri_element;
- }
-
- return( uri.str() );
-}
-
-
-void uri::split_string_to_uri_segments( const std::string& _uri )
-{
- std::string uri = _uri;
- if( !_uri.empty() )
- {
- if( URI_DELIMITER == _uri[ 0 ] )
- {
- uri = _uri.substr( 1 );
- }
-
- std::string::size_type start = 0;
- std::string::size_type end = uri.find( URI_DELIMITER );
- while( end != std::string::npos )
- {
- const std::string& segment = uri.substr( start, end - start );
- uri_.push_back( segment );
- start = ++end;
- end = uri.find( URI_DELIMITER, end );
- }
-
- const std::string& last_segment = uri.substr( start );
- if( last_segment[ 0 ] != URI_DELIMITER )
- {
- uri_.push_back( last_segment );
- }
- }
-}
-
-
-}
+//////////////////////////////////////////////////////////////////////////////////////////////////////
+// //
+// This file is part of the Seadex essentials library (http://essentials.seadex.de). //
+// Copyright( C ) 2017 Seadex GmbH //
+// Licensing information is available in the folder "license" which is part of this distribution. //
+// The same information is available on the www @ http://essentials.seadex.de/License.html. //
+// //
+//////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+#include "essentials/uri.hpp"
+
+#include
+#include
+
+#include "essentials/base.hpp"
+
+
+namespace sxe
+{
+
+
+uri::uri( const std::string& _uri )
+ : uri_()
+{
+ split_string_to_uri_segments( _uri );
+}
+
+
+uri::~uri() SX_NOEXCEPT
+{
+ // Nothing to do...
+}
+
+
+bool uri::is_empty() const
+{
+ return( uri_.empty() );
+}
+
+
+const std::string uri::to_string() const
+{
+ return( build_uri() );
+}
+
+
+const std::string& uri::get_front() const
+{
+ SX_ASSERT( !uri_.empty(), "Uri is empty!" );
+ return( uri_.front() );
+}
+
+
+const std::string& uri::get_back()
+{
+ SX_ASSERT( !uri_.empty(), "Uri is empty!" );
+ return( uri_.back() );
+}
+
+
+void uri::push_front( const std::string& _segment )
+{
+ uri_.push_front( _segment );
+}
+
+
+void uri::push_back( const std::string& _segment )
+{
+ uri_.push_back( _segment );
+}
+
+
+void uri::pop_front()
+{
+ SX_ASSERT( !uri_.empty(), "Uri is empty!" );
+ uri_.pop_front();
+}
+
+
+void uri::pop_back()
+{
+ SX_ASSERT( !uri_.empty(), "Uri is empty!" );
+ uri_.pop_back();
+}
+
+
+size_t uri::size() const
+{
+ return( uri_.size() );
+}
+
+
+const std::string uri::build_uri() const
+{
+ std::stringstream uri;
+
+ SX_FOR( const std::string& uri_element, uri_ )
+ {
+ uri << URI_DELIMITER << uri_element;
+ }
+
+ return( uri.str() );
+}
+
+
+void uri::split_string_to_uri_segments( const std::string& _uri )
+{
+ std::string uri = _uri;
+ if( !_uri.empty() )
+ {
+ if( URI_DELIMITER == _uri[ 0 ] )
+ {
+ uri = _uri.substr( 1 );
+ }
+
+ std::string::size_type start = 0;
+ std::string::size_type end = uri.find( URI_DELIMITER );
+ while( end != std::string::npos )
+ {
+ const std::string& segment = uri.substr( start, end - start );
+ uri_.push_back( segment );
+ start = ++end;
+ end = uri.find( URI_DELIMITER, end );
+ }
+
+ const std::string& last_segment = uri.substr( start );
+ if( last_segment[ 0 ] != URI_DELIMITER )
+ {
+ uri_.push_back( last_segment );
+ }
+ }
+}
+
+
+}
diff --git a/externals/genesis/CMakeLists.txt b/externals/genesis/CMakeLists.txt
new file mode 100644
index 0000000..22e3cd6
--- /dev/null
+++ b/externals/genesis/CMakeLists.txt
@@ -0,0 +1,7 @@
+cmake_minimum_required(VERSION 2.8)
+
+project(genesis)
+
+set(CMAKE_VERBOSE_MAKEFILE, 1)
+
+add_subdirectory(source)
diff --git a/externals/genesis/changelog.txt b/externals/genesis/changelog.txt
new file mode 100644
index 0000000..8a07204
--- /dev/null
+++ b/externals/genesis/changelog.txt
@@ -0,0 +1,16 @@
+# Change log
+All notable changes to this project are documented in this file.
+
+##[0.2.0] - 2017-09-20
+
+### Added
+• Support for Visual Studio 2017 builds
+
+### Changed
+• rename: condition_block's private method check_modifier to apply_modifier
+• method create_child of the class recipe_block is now pro
+
+
+##[0.1.0] - 2017-04-21
+
+• The very first release version of genesis
diff --git a/genesis/license/genesis_Anhang_Appendix_20170406.pdf b/externals/genesis/license/genesis_Anhang_Appendix_20170406.pdf
similarity index 100%
rename from genesis/license/genesis_Anhang_Appendix_20170406.pdf
rename to externals/genesis/license/genesis_Anhang_Appendix_20170406.pdf
diff --git a/genesis/license/genesis_Lizenz_und_Nutzungsbedingungen_geschaeftliche_Nutzung_Fassung_20170406.pdf b/externals/genesis/license/genesis_Lizenz_und_Nutzungsbedingungen_geschaeftliche_Nutzung_Fassung_20170406.pdf
similarity index 100%
rename from genesis/license/genesis_Lizenz_und_Nutzungsbedingungen_geschaeftliche_Nutzung_Fassung_20170406.pdf
rename to externals/genesis/license/genesis_Lizenz_und_Nutzungsbedingungen_geschaeftliche_Nutzung_Fassung_20170406.pdf
diff --git a/genesis/license/genesis_Lizenz_und_Nutzungsbedingungen_geschaeftliche_Nutzung_Fassung_20170406_en.pdf b/externals/genesis/license/genesis_Lizenz_und_Nutzungsbedingungen_geschaeftliche_Nutzung_Fassung_20170406_en.pdf
similarity index 100%
rename from genesis/license/genesis_Lizenz_und_Nutzungsbedingungen_geschaeftliche_Nutzung_Fassung_20170406_en.pdf
rename to externals/genesis/license/genesis_Lizenz_und_Nutzungsbedingungen_geschaeftliche_Nutzung_Fassung_20170406_en.pdf
diff --git a/genesis/license/genesis_Lizenz_und_Nutzungsbedingungen_private_und wissenschaftliche_Nutzung_Fassung_20170406.pdf b/externals/genesis/license/genesis_Lizenz_und_Nutzungsbedingungen_private_und wissenschaftliche_Nutzung_Fassung_20170406.pdf
similarity index 100%
rename from genesis/license/genesis_Lizenz_und_Nutzungsbedingungen_private_und wissenschaftliche_Nutzung_Fassung_20170406.pdf
rename to externals/genesis/license/genesis_Lizenz_und_Nutzungsbedingungen_private_und wissenschaftliche_Nutzung_Fassung_20170406.pdf
diff --git a/genesis/license/genesis_Lizenz_und_Nutzungsbedingungen_private_und wissenschaftliche_Nutzung_Fassung_20170406_en.pdf b/externals/genesis/license/genesis_Lizenz_und_Nutzungsbedingungen_private_und wissenschaftliche_Nutzung_Fassung_20170406_en.pdf
similarity index 100%
rename from genesis/license/genesis_Lizenz_und_Nutzungsbedingungen_private_und wissenschaftliche_Nutzung_Fassung_20170406_en.pdf
rename to externals/genesis/license/genesis_Lizenz_und_Nutzungsbedingungen_private_und wissenschaftliche_Nutzung_Fassung_20170406_en.pdf
diff --git a/externals/genesis/source/CMakeHelpers/addBoost.cmake b/externals/genesis/source/CMakeHelpers/addBoost.cmake
new file mode 100644
index 0000000..d833dc1
--- /dev/null
+++ b/externals/genesis/source/CMakeHelpers/addBoost.cmake
@@ -0,0 +1,34 @@
+cmake_minimum_required(VERSION 2.8)
+
+if(Y_BOOST_LIB_INCLUDE)
+ set(Boost_LIBRARIES ${Y_BOOST_LIB_PATH})
+ set(Boost_INCLUDE_DIRS ${Y_BOOST_LIB_INCLUDE})
+ set(SX_BOOST_LIB_PATH ${Y_BOOST_LIB_PATH})
+ set(SX_BOOST_LIB_INCLUDE ${Y_BOOST_LIB_INCLUDE})
+
+ include_directories(${Boost_INCLUDE_DIRS})
+ message("Y_BOOST_LIB_INCLUDE is set by user.")
+ message("Path to libraries: ${Boost_LIBRARIES}")
+ message("Path to includes: ${Boost_INCLUDE_DIRS}")
+elseif(SX_BOOST_LIB_INCLUDE)
+ set(Boost_LIBRARIES ${SX_BOOST_LIB_PATH})
+ set(Boost_INCLUDE_DIRS ${SX_BOOST_LIB_INCLUDE})
+
+ include_directories(${Boost_INCLUDE_DIRS})
+ message("SX_BOOST_LIB_INCLUDE is set by user.")
+ message("Path to libraries: ${Boost_LIBRARIES}")
+ message("Path to includes: ${Boost_INCLUDE_DIRS}")
+
+else()
+ message("SX_BOOST_LIB_INCLUDE is not set by user. Searching for boost libraries.")
+ set(Boost_USE_MULTITHREADED ON)
+ find_package(Boost COMPONENTS date_time filesystem system program_options chrono thread random unit_test_framework)
+ if(Boost_FOUND)
+ include_directories(${Boost_INCLUDE_DIRS})
+ message("Boost found.")
+ message("Path to libraries: ${Boost_LIBRARIES}")
+ message("Path to includes: ${Boost_INCLUDE_DIRS}")
+ else()
+ message(STATUS "Boost libraries not found!")
+ endif()
+endif()
diff --git a/externals/genesis/source/CMakeHelpers/addSeadexOptions.cmake b/externals/genesis/source/CMakeHelpers/addSeadexOptions.cmake
new file mode 100644
index 0000000..48bd9c6
--- /dev/null
+++ b/externals/genesis/source/CMakeHelpers/addSeadexOptions.cmake
@@ -0,0 +1,30 @@
+cmake_minimum_required(VERSION 2.8)
+
+if(POLICY CMP0054)
+ cmake_policy(SET CMP0054 NEW)
+endif()
+
+# Seadex preprocessor definitions
+
+
+option("SX_NO_LOGGING" "Use when you want to use no logging at all (no logging code is created).")
+if( "${SX_NO_LOGGING}" )
+ set(extra_flags "${extra_flags} -D \"SX_NO_LOGGING\"")
+ message(STATUS "No logging used.")
+else()
+ message(STATUS "Logger is used.")
+endif()
+
+
+option("SX_NO_STD_MAKE_UNIQUE" "When the standard make_unique is not available (e.g. no C++14 support), you have to define this preprocessor definition. A yasmine drop-in replacement template will be used instead then.")
+if( "${SX_NO_STD_MAKE_UNIQUE}" )
+ set(extra_flags "${extra_flags} -D \"SX_NO_STD_MAKE_UNIQUE\"")
+ message(STATUS "SX_NO_STD_MAKE_UNIQUE is defined.")
+endif()
+
+
+option("SX_GCC_EXPAND_TEMPLATE_PARAM_PACK_BUG" "Sets to use a workaround for bug in GCC with expansion of template parameter pack that appears in a lambda-expression (bug reported for GCC 4.8.4)")
+if( "${SX_GCC_EXPAND_TEMPLATE_PARAM_PACK_BUG}" )
+ set(extra_flags "${extra_flags} -D \"SX_GCC_EXPAND_TEMPLATE_PARAM_PACK_BUG\"")
+ message(STATUS "SX_GCC_EXPAND_TEMPLATE_PARAM_PACK_BUG is defined.")
+endif()
\ No newline at end of file
diff --git a/externals/genesis/source/CMakeHelpers/addSpecificFlags.cmake b/externals/genesis/source/CMakeHelpers/addSpecificFlags.cmake
new file mode 100644
index 0000000..b568fbb
--- /dev/null
+++ b/externals/genesis/source/CMakeHelpers/addSpecificFlags.cmake
@@ -0,0 +1,112 @@
+cmake_minimum_required(VERSION 2.8)
+
+if(POLICY CMP0054)
+ cmake_policy(SET CMP0054 NEW)
+endif()
+
+add_compiler_flag("-Wall")
+
+if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
+#gcc/clang compiler flags
+ if(NOT "SX_PEDANTIC" STREQUAL "OFF")
+ add_compiler_flag("-pedantic")
+ endif()
+
+ if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug")
+ add_compiler_flag("-g")
+ endif()
+
+ if("${CPP_VERSION}" STREQUAL "03")
+ add_compiler_flag("-std=c++03")
+ add_compiler_flag("-D \"SX_CPP03_BOOST\"")
+ add_compiler_flag("-D \"SX_NO_VARIADIC_MACRO\"")
+ elseif("${CPP_VERSION}" STREQUAL "03")
+ add_compiler_flag("-std=c++14")
+ else()
+ add_compiler_flag("-std=c++11")
+ add_compiler_flag("-D \"SX_NO_STD_MAKE_UNIQUE\"")
+ endif()
+
+# platform
+ if( "${CMAKE_CXX_FLAGS}" STREQUAL "-m64" )
+ add_compiler_flag("-m64")
+ message(STATUS "setting platform x64")
+ elseif("${CMAKE_CXX_FLAGS}" STREQUAL "-m32")
+ add_compiler_flag("-m32")
+ message(STATUS "setting platform x86")
+ endif()
+endif()
+
+
+if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
+ # Checks buffer security.
+ set(extra_flags "${extra_flags} /GS")
+
+ #Sets output warning level.
+ set(extra_flags "${extra_flags} /W4")
+
+ #Disable specific Warnings.
+ set(extra_flags "${extra_flags} /wd\"4127\" /wd\"4250\"")
+
+ #Defines constants and macros.
+ set(extra_flags "${extra_flags} /D \"_CRT_SECURE_NO_WARNINGS\"")
+
+ #Enables function-level linking.
+ set(extra_flags "${extra_flags} /Gy")
+
+ #Specifies standard behaviour under /Ze.
+ set(extra_flags "${extra_flags} /Zc:wchar_t /Zc:inline")
+
+ #Disable minimal rebuild.
+ set(extra_flags "${extra_flags} /Gm-")
+
+ #Enables additional security features and warnings.
+ set(extra_flags "${extra_flags} /sdl")
+
+ #Specifies floating-point behaviour.
+ set(extra_flags "${extra_flags} /fp:precise")
+
+ #Multibyte character sets macro.
+ set(extra_flags "${extra_flags} /D \"_MBCS\"")
+
+ #Enables you to provide internal compiler error (ICE) information directly to the Visual C++ team.
+ set(extra_flags "${extra_flags} /errorReport:prompt")
+
+ #Treats warnings as errors.
+ if( "${MSVC_VERSION}" STRGREATER "1800" )
+ set(extra_flags "${extra_flags} /WX")
+ #else( "${MSVC_VERSION}" STRLESS "1900" )
+ else()
+ set(extra_flags "${extra_flags} /WX-")
+ endif()
+
+
+ #Generates intrinsic functions.
+ set(extra_flags "${extra_flags} /Oi")
+
+ #Specifies the model of exception handling.
+ set(extra_flags "${extra_flags} /EHsc")
+
+ #Creates an object file.
+ set(extra_flags "${extra_flags} /Fo")
+
+ #Marks an executable as verified to be compatible with the Windows Data Execution Prevention feature.
+ #set(extra_flags "${extra_flags} /NXCOMPAT")
+
+
+ # for release
+ if( "${CMAKE_BUILD_TYPE}" STREQUAL "Release" )
+ #Creates fast code.
+ set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /O2")
+ set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /PDB-")
+
+ #Controls LINK optimizations.
+ set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /OPT:REF /OPT:ICF")
+
+ # for debug
+ elseif( "${CMAKE_BUILD_TYPE}" STREQUAL "Debug" )
+ #Creates a program database (PDB) file.
+ set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /PDB")
+ endif()
+
+endif()
\ No newline at end of file
diff --git a/externals/genesis/source/CMakeHelpers/addYasmineOptions.cmake b/externals/genesis/source/CMakeHelpers/addYasmineOptions.cmake
new file mode 100644
index 0000000..7964d92
--- /dev/null
+++ b/externals/genesis/source/CMakeHelpers/addYasmineOptions.cmake
@@ -0,0 +1,34 @@
+cmake_minimum_required(VERSION 2.8)
+
+if(POLICY CMP0054)
+ cmake_policy(SET CMP0054 NEW)
+endif()
+
+
+include("${CMAKE_CURRENT_LIST_DIR}/addSeadexOptions.cmake")
+
+# yasmine's preprocessor definitions
+
+
+set(Y_OPTIMIZE "SPEED" CACHE STRING "Sets the optimize type. Supported values: SPEED and SIZE. Default value is SPEED.")
+if( "${Y_OPTIMIZE}" STREQUAL "SIZE" )
+ set(extra_flags "${extra_flags} -D \"Y_OPTIMIZE_4_SIZE\"")
+ message(STATUS "Optimizing for size.")
+else()
+ set(extra_flags "${extra_flags} -D \"Y_OPTIMIZE_4_SPEED\"")
+ message(STATUS "Optimizing for speed.")
+endif()
+
+
+option("Y_LEAN_AND_MEAN" "If you compile the library with Y_LEAN_AND_MEAN being defined or if you define the macro locally before including yasmine.hpp, all the state pseudostates and the asynchronous simple state (with the asynchronous behaviour) are excluded (i.e. those headers are not included). This can reduce compile time.")
+if( "${Y_LEAN_AND_MEAN}" )
+ set(extra_flags "${extra_flags} -D \"Y_LEAN_AND_MEAN\"")
+ message(STATUS "Y_LEAN_AND_MEAN is defined.")
+endif()
+
+option("Y_PROFILER" "If Y_PROFILER is defined, the state machine will count the number of events that were processed. The user can query the counter by calling the 'get_number_of_processed_events' method.")
+if( "${Y_PROFILER}" )
+ set(extra_flags "${extra_flags} -D \"Y_PROFILER\"")
+ message(STATUS "Y_PROFILER is defined.")
+endif()
+
diff --git a/externals/genesis/source/CMakeHelpers/functions.cmake b/externals/genesis/source/CMakeHelpers/functions.cmake
new file mode 100644
index 0000000..3a76857
--- /dev/null
+++ b/externals/genesis/source/CMakeHelpers/functions.cmake
@@ -0,0 +1,22 @@
+cmake_minimum_required(VERSION 2.8)
+
+if(POLICY CMP0054)
+ cmake_policy(SET CMP0054 NEW)
+endif()
+
+
+function(use_pthread varName)
+ if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
+ set(${varName} ${${varName}} pthread PARENT_SCOPE)
+ endif()
+endfunction()
+
+
+function(use_boost_libraries varName)
+ set(${varName} ${${varName}} ${Boost_LIBRARIES} PARENT_SCOPE)
+endfunction()
+
+
+function(add_library_for_linking varName libraryName)
+ set(${varName} ${${varName}} ${libraryName} PARENT_SCOPE)
+endfunction()
diff --git a/externals/genesis/source/CMakeHelpers/functionsAddCompilerFlags.cmake b/externals/genesis/source/CMakeHelpers/functionsAddCompilerFlags.cmake
new file mode 100644
index 0000000..105747b
--- /dev/null
+++ b/externals/genesis/source/CMakeHelpers/functionsAddCompilerFlags.cmake
@@ -0,0 +1,15 @@
+cmake_minimum_required(VERSION 2.8)
+
+include(CheckCXXCompilerFlag)
+
+
+function(add_compiler_flag varFlag)
+ string(FIND "${CMAKE_CXX_FLAGS}" "${varFlag}" flag_already_set)
+ if(flag_already_set EQUAL -1)
+ check_cxx_compiler_flag("${varFlag}" flag_supported)
+ if(flag_supported)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${varFlag}" PARENT_SCOPE)
+ endif()
+ unset(flag_supported CACHE)
+ endif()
+endfunction()
diff --git a/externals/genesis/source/CMakeHelpers/functionsRapidJSON.cmake b/externals/genesis/source/CMakeHelpers/functionsRapidJSON.cmake
new file mode 100644
index 0000000..c638987
--- /dev/null
+++ b/externals/genesis/source/CMakeHelpers/functionsRapidJSON.cmake
@@ -0,0 +1,30 @@
+cmake_minimum_required(VERSION 2.8)
+
+if(POLICY CMP0054)
+ cmake_policy(SET CMP0054 NEW)
+endif()
+
+function(use_rapid_JSON)
+if(SX_RAPIDJSON)
+ message("SX_RAPIDJSON is set by user.")
+else()
+ message("SX_RAPIDJSON is not set by user. Setting default value.")
+ if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
+ find_package(RapidJSON)
+ if(NOT ("${RAPIDJSON_INCLUDE_DIRS}" STREQUAL ""))
+ set(SX_RAPIDJSON ${RAPIDJSON_INCLUDE_DIRS})
+ message(STATUS "Found rapidjson on: ${RAPIDJSON_INCLUDE_DIRS}")
+ else()
+ set(SX_RAPIDJSON /usr/include)
+ message(STATUS "Set default value for rapidjson")
+ endif()
+ elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
+ set(SX_RAPIDJSON "C:\\Program Files")
+ endif()
+endif()
+
+include_directories(${SX_RAPIDJSON})
+
+message(STATUS "include rapidJSON from: ${SX_RAPIDJSON}")
+
+endfunction()
diff --git a/externals/genesis/source/CMakeHelpers/setVariables.cmake b/externals/genesis/source/CMakeHelpers/setVariables.cmake
new file mode 100644
index 0000000..a6f1454
--- /dev/null
+++ b/externals/genesis/source/CMakeHelpers/setVariables.cmake
@@ -0,0 +1,12 @@
+cmake_minimum_required(VERSION 2.8)
+
+if(POLICY CMP0054)
+ cmake_policy(SET CMP0054 NEW)
+endif()
+
+
+if(("${Y_STATIC}" STREQUAL "ON") OR ("${SX_STATIC}" STREQUAL "ON"))
+ set(LINK_TYPE "STATIC")
+else()
+ set(LINK_TYPE "SHARED")
+endif()
diff --git a/externals/genesis/source/CMakeLists.txt b/externals/genesis/source/CMakeLists.txt
new file mode 100644
index 0000000..dfea8c3
--- /dev/null
+++ b/externals/genesis/source/CMakeLists.txt
@@ -0,0 +1,14 @@
+
+if(POLICY CMP0054)
+ cmake_policy(SET CMP0054 NEW)
+endif()
+
+include(./CMakeHelpers/setVariables.cmake)
+
+include(./CMakeHelpers/addBoost.cmake)
+include(./CMakeHelpers/functions.cmake)
+include(./CMakeHelpers/functionsAddCompilerFlags.cmake)
+
+add_subdirectory(externals)
+add_subdirectory(genesis)
+add_subdirectory(examples)
\ No newline at end of file
diff --git a/externals/genesis/source/build/debug_info.props b/externals/genesis/source/build/debug_info.props
new file mode 100644
index 0000000..5dc702b
--- /dev/null
+++ b/externals/genesis/source/build/debug_info.props
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+ NotSet
+ true
+
+
+ EditAndContinue
+ WIN32;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)
+
+
+
+
\ No newline at end of file
diff --git a/externals/genesis/source/build/genesis.props b/externals/genesis/source/build/genesis.props
new file mode 100644
index 0000000..8bdf813
--- /dev/null
+++ b/externals/genesis/source/build/genesis.props
@@ -0,0 +1,31 @@
+
+
+
+
+
+ $(SolutionDir)$(Platform)\$(Configuration)\
+
+
+
+ Level4
+ 4127;4250
+ WIN32;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)
+ None
+ false
+ true
+ include;%(AdditionalIncludeDirectories)
+ /D "_STL_WARNING_LEVEL=3" %(AdditionalOptions)
+
+
+
+
+
+ No
+ Default
+
+
+ false
+
+
+
+
\ No newline at end of file
diff --git a/externals/genesis/source/build/use_boost.props b/externals/genesis/source/build/use_boost.props
new file mode 100644
index 0000000..5ed78c1
--- /dev/null
+++ b/externals/genesis/source/build/use_boost.props
@@ -0,0 +1,30 @@
+
+
+
+
+ ..\..\..\..\..\3rd party\libs\boost\Content\boost_1_65_1
+ ..\..\..\..\..\3rd party\libs\boost\Content\boost_1_65_1\stage\win\$(Platform)\$(PlatformToolsetVersion)\lib
+
+
+
+
+
+ $(BOOST_PATH);%(AdditionalIncludeDirectories)
+ Y_USE_BOOST;BOOST_SP_USE_STD_ATOMIC;%(PreprocessorDefinitions)
+
+
+ $(BOOST_LIB_PATH);%(AdditionalLibraryDirectories)
+
+
+
+
+
+ $(BOOST_PATH)
+ true
+
+
+ $(BOOST_LIB_PATH)
+ true
+
+
+
\ No newline at end of file
diff --git a/externals/genesis/source/build/use_boost_externals.props b/externals/genesis/source/build/use_boost_externals.props
new file mode 100644
index 0000000..984d966
--- /dev/null
+++ b/externals/genesis/source/build/use_boost_externals.props
@@ -0,0 +1,30 @@
+
+
+
+
+ ..\..\..\..\..\..\..\3rd party\boost\Content\boost_1_65_1
+ ..\..\..\..\..\..\..\3rd party\boost\Content\boost_1_65_1\stage\$(PlatformToolsetVersion)\$(Platform)\lib
+
+
+
+
+
+ $(BOOST_PATH);%(AdditionalIncludeDirectories)
+ Y_USE_BOOST;BOOST_SP_USE_STD_ATOMIC;%(PreprocessorDefinitions)
+
+
+ $(BOOST_LIB_PATH);%(AdditionalLibraryDirectories)
+
+
+
+
+
+ $(BOOST_PATH)
+ true
+
+
+ $(BOOST_LIB_PATH)
+ true
+
+
+
\ No newline at end of file
diff --git a/externals/genesis/source/build/use_essentials.props b/externals/genesis/source/build/use_essentials.props
new file mode 100644
index 0000000..3d7318c
--- /dev/null
+++ b/externals/genesis/source/build/use_essentials.props
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+ ..\externals\essentials\source\essentials\include;%(AdditionalIncludeDirectories)
+ None
+
+
+
+ $(SolutionDir)\$(Platform)\$(Configuration);%(AdditionalLibraryDirectories)
+ essentials.lib;%(AdditionalDependencies)
+
+
+
+
\ No newline at end of file
diff --git a/externals/genesis/source/build/use_essentials_examples.props b/externals/genesis/source/build/use_essentials_examples.props
new file mode 100644
index 0000000..79e9790
--- /dev/null
+++ b/externals/genesis/source/build/use_essentials_examples.props
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+ None
+ ..\..\externals\essentials\source\essentials\include;%(AdditionalIncludeDirectories)
+
+
+
+ $(SolutionDir)\$(Platform)\$(Configuration);%(AdditionalLibraryDirectories)
+ essentials.lib;%(AdditionalDependencies)
+
+
+
+
\ No newline at end of file
diff --git a/externals/genesis/source/build/use_genesis.props b/externals/genesis/source/build/use_genesis.props
new file mode 100644
index 0000000..28d1639
--- /dev/null
+++ b/externals/genesis/source/build/use_genesis.props
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+ ..\genesis\include;%(AdditionalIncludeDirectories)
+ None
+
+
+
+ $(SolutionDir)\$(Platform)\$(Configuration);%(AdditionalLibraryDirectories)
+ genesis.lib;%(AdditionalDependencies)
+
+
+
+
\ No newline at end of file
diff --git a/externals/genesis/source/build/use_genesis_examples.props b/externals/genesis/source/build/use_genesis_examples.props
new file mode 100644
index 0000000..f6c5405
--- /dev/null
+++ b/externals/genesis/source/build/use_genesis_examples.props
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+ ..\..\genesis\include;%(AdditionalIncludeDirectories)
+ None
+
+
+
+ $(SolutionDir)\$(Platform)\$(Configuration);%(AdditionalLibraryDirectories)
+ genesis.lib;%(AdditionalDependencies)
+
+
+
+
\ No newline at end of file
diff --git a/externals/genesis/source/build/vs2013.props b/externals/genesis/source/build/vs2013.props
new file mode 100644
index 0000000..493cc29
--- /dev/null
+++ b/externals/genesis/source/build/vs2013.props
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+ false
+ SX_CPP03_BOOST;WIN32;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)
+
+
+ true
+
+
+
+
\ No newline at end of file
diff --git a/externals/genesis/source/build/yasmine_clang.props b/externals/genesis/source/build/yasmine_clang.props
new file mode 100644
index 0000000..00c3f9d
--- /dev/null
+++ b/externals/genesis/source/build/yasmine_clang.props
@@ -0,0 +1,26 @@
+
+
+
+
+
+ $(SolutionDir)$(Platform)\$(Configuration)\
+
+
+
+ c11
+
+
+
+
+ c++1y
+ true
+ Enabled
+ true
+ NDEBUG;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)
+ EnableAllWarnings
+ FullDebug
+
+
+
+
+
\ No newline at end of file
diff --git a/externals/genesis/source/examples/CMakeLists.txt b/externals/genesis/source/examples/CMakeLists.txt
new file mode 100644
index 0000000..259403a
--- /dev/null
+++ b/externals/genesis/source/examples/CMakeLists.txt
@@ -0,0 +1 @@
+add_subdirectory(html_page_generator)
\ No newline at end of file
diff --git a/externals/genesis/source/examples/html_page_generator/CMakeLists.txt b/externals/genesis/source/examples/html_page_generator/CMakeLists.txt
new file mode 100644
index 0000000..e8d9dfe
--- /dev/null
+++ b/externals/genesis/source/examples/html_page_generator/CMakeLists.txt
@@ -0,0 +1,35 @@
+cmake_minimum_required(VERSION 2.8)
+
+project(html_page_generator)
+
+set(CMAKE_VERBOSE_MAKEFILE, 1)
+
+if(POLICY CMP0054)
+ cmake_policy(SET CMP0054 NEW)
+endif()
+
+file(GLOB html_page_generator_SRC "./*.hpp" "./*.cpp")
+
+set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
+set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
+set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
+
+include(./../../CMakeHelpers/addSpecificFlags.cmake)
+include(./../../CMakeHelpers/addSeadexOptions.cmake)
+
+include_directories("./../../externals/essentials/source/essentials/include")
+include_directories("./../../genesis/include")
+
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${extra_flags}")
+
+add_executable(html_page_generator ${html_page_generator_SRC})
+
+set(link_libraries_list "")
+use_boost_libraries(link_libraries_list)
+add_library_for_linking(link_libraries_list libgenesis)
+use_pthread(link_libraries_list)
+message(STATUS "html_page_generator linking to libraries: ${link_libraries_list}" )
+
+target_link_libraries(html_page_generator LINK_PUBLIC ${link_libraries_list})
+
+install(TARGETS html_page_generator DESTINATION bin)
diff --git a/externals/genesis/source/examples/html_page_generator/city.hpp b/externals/genesis/source/examples/html_page_generator/city.hpp
new file mode 100644
index 0000000..efabb34
--- /dev/null
+++ b/externals/genesis/source/examples/html_page_generator/city.hpp
@@ -0,0 +1,32 @@
+//////////////////////////////////////////////////////////////////////////////////////////////////////
+// //
+// This file is part of the Seadex genesis library (http://genesis.seadex.de). //
+// Copyright( C ) 2017 Seadex GmbH //
+// Licensing information is available in the folder "license" which is part of this distribution. //
+// The same information is available on the www @ http://genesis.seadex.de/License.html. //
+// //
+//////////////////////////////////////////////////////////////////////////////////////////////////////
+
+#ifndef CITY_0D8BFBB1_EA3F_46E9_B683_1E6FA5233166
+#define CITY_0D8BFBB1_EA3F_46E9_B683_1E6FA5233166
+
+
+#include
+
+// DONE remove cpp
+namespace examples
+{
+
+
+struct city
+{
+ std::string name_;
+ int population_;
+};
+
+
+
+}
+
+
+#endif
diff --git a/externals/genesis/source/examples/html_page_generator/config.cpp b/externals/genesis/source/examples/html_page_generator/config.cpp
new file mode 100644
index 0000000..6b51789
--- /dev/null
+++ b/externals/genesis/source/examples/html_page_generator/config.cpp
@@ -0,0 +1,146 @@
+//////////////////////////////////////////////////////////////////////////////////////////////////////
+// //
+// This file is part of the Seadex genesis library (http://genesis.seadex.de). //
+// Copyright( C ) 2017 Seadex GmbH //
+// Licensing information is available in the folder "license" which is part of this distribution. //
+// The same information is available on the www @ http://genesis.seadex.de/License.html. //
+// //
+//////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+#include "config.hpp"
+
+
+namespace examples
+{
+
+
+// DONE variable names lower case
+config::config() :
+ template_path_( "./templates" ),
+ source_template_file_ ("countries.gtpl"),
+ output_file_( "countries.html"),
+ countries_()
+{
+ city berlin;
+ berlin.name_ = "Berlin";
+ berlin.population_ = 3275000;
+
+ city hamburg;
+ hamburg.name_ = "Hamburg";
+ hamburg.population_ = 1686100;
+
+ city stuttgart;
+ stuttgart.name_ = "Stuttgart";
+ stuttgart.population_ = 581100;
+
+ city munich;
+ munich.name_ = "Munich";
+ munich.population_ = 1185400;
+
+ city frankfurt;
+ frankfurt.name_ = "Frankfurt";
+ frankfurt.population_ = 648000;
+
+ city dresden;
+ dresden.name_ = "Dresden";
+ dresden.population_ = 473300;
+
+ country germany;
+ germany.name_ = "Germany";
+ germany.cities_.push_back( berlin );
+ germany.cities_.push_back( hamburg );
+ germany.cities_.push_back( stuttgart );
+ germany.cities_.push_back( munich );
+ germany.cities_.push_back( frankfurt );
+ germany.cities_.push_back( dresden );
+ germany.capital_index_ = 0;
+
+
+ city new_york;
+ new_york.name_ = "New York";
+ new_york.population_ = 8550405;
+
+ city los_angeles;
+ los_angeles.name_ = "Los Angeles";
+ los_angeles.population_ = 3971883;
+
+ city chicago;
+ chicago.name_ = "Chicago";
+ chicago.population_ = 2720546;
+
+ city houston;
+ houston.name_ = "Houston";
+ houston.population_ = 2296224;
+
+ city phoenix;
+ phoenix.name_ = "Phoenix";
+ phoenix.population_ = 1563025;
+
+ city austin;
+ austin.name_ = "Austin";
+ austin.population_ = 931830;
+
+ city san_francisco;
+ san_francisco.name_ = "San Francisco";
+ san_francisco.population_ = 864816;
+
+ city honolulu;
+ honolulu.name_ = "Honolulu";
+ honolulu.population_ = 352769;
+
+ city washington;
+ washington.name_ = "Washington";
+ washington.population_ = 672228;
+
+ country usa;
+ usa.name_ = "United States of America";
+ usa.cities_.push_back( new_york );
+ usa.cities_.push_back( los_angeles );
+ usa.cities_.push_back( chicago );
+ usa.cities_.push_back( washington );
+ usa.cities_.push_back( houston );
+ usa.cities_.push_back( phoenix );
+ usa.cities_.push_back( austin );
+ usa.cities_.push_back( san_francisco );
+ usa.cities_.push_back( honolulu );
+ usa.capital_index_ = 3;
+
+
+ city tokyo;
+ tokyo.name_ = "Tokyo";
+ tokyo.population_ = 8637098;
+
+ city yokohama;
+ yokohama.name_ = "Yokohama";
+ yokohama.population_ = 3697894;
+
+ city osaka;
+ osaka.name_ = "Osaka";
+ osaka.population_ = 2668586;
+
+ city sapporo;
+ sapporo.name_ = "Sapporo";
+ sapporo.population_ = 1918096;
+
+ city hiroshima;
+ hiroshima.name_ = "Hiroshima";
+ hiroshima.population_ = 1163806;
+
+ country japan;
+ japan.name_ = "Japan";
+ japan.cities_.push_back( hiroshima );
+ japan.cities_.push_back( sapporo );
+ japan.cities_.push_back( osaka );
+ japan.cities_.push_back( yokohama );
+ japan.cities_.push_back( tokyo );
+ japan.capital_index_ = 4;
+
+
+ countries_.push_back( germany );
+ countries_.push_back( usa );
+ countries_.push_back( japan );
+}
+
+
+}
diff --git a/externals/genesis/source/examples/html_page_generator/config.hpp b/externals/genesis/source/examples/html_page_generator/config.hpp
new file mode 100644
index 0000000..5a9e4cd
--- /dev/null
+++ b/externals/genesis/source/examples/html_page_generator/config.hpp
@@ -0,0 +1,36 @@
+//////////////////////////////////////////////////////////////////////////////////////////////////////
+// //
+// This file is part of the Seadex genesis library (http://genesis.seadex.de). //
+// Copyright( C ) 2017 Seadex GmbH //
+// Licensing information is available in the folder "license" which is part of this distribution. //
+// The same information is available on the www @ http://genesis.seadex.de/License.html. //
+// //
+//////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef CONFIG_F0DF6484_1AB7_48AC_9471_42C853B24430
+#define CONFIG_F0DF6484_1AB7_48AC_9471_42C853B24430
+
+
+#include "country.hpp"
+
+
+namespace examples
+{
+
+
+struct config
+{
+ config();
+
+ std::string template_path_;
+ std::string source_template_file_;
+ std::string output_file_;
+ std::vector countries_;
+};
+
+
+}
+
+
+#endif
diff --git a/externals/genesis/source/examples/html_page_generator/country.hpp b/externals/genesis/source/examples/html_page_generator/country.hpp
new file mode 100644
index 0000000..9b9fab0
--- /dev/null
+++ b/externals/genesis/source/examples/html_page_generator/country.hpp
@@ -0,0 +1,35 @@
+//////////////////////////////////////////////////////////////////////////////////////////////////////
+// //
+// This file is part of the Seadex genesis library (http://genesis.seadex.de). //
+// Copyright( C ) 2017 Seadex GmbH //
+// Licensing information is available in the folder "license" which is part of this distribution. //
+// The same information is available on the www @ http://genesis.seadex.de/License.html. //
+// //
+//////////////////////////////////////////////////////////////////////////////////////////////////////
+
+#ifndef COUNTRY_8520C99E_118A_4693_A3BB_D1268053EFEE
+#define COUNTRY_8520C99E_118A_4693_A3BB_D1268053EFEE
+
+#include
+
+#include "city.hpp"
+
+
+// DONE remove cpp
+namespace examples
+{
+
+
+struct country
+{
+ std::string name_;
+ std::vector cities_;
+ std::vector::size_type capital_index_;
+};
+
+
+
+}
+
+
+#endif
diff --git a/externals/genesis/source/examples/html_page_generator/html_generator_grammar.cpp b/externals/genesis/source/examples/html_page_generator/html_generator_grammar.cpp
new file mode 100644
index 0000000..307cfeb
--- /dev/null
+++ b/externals/genesis/source/examples/html_page_generator/html_generator_grammar.cpp
@@ -0,0 +1,25 @@
+//////////////////////////////////////////////////////////////////////////////////////////////////////
+// //
+// This file is part of the Seadex genesis library (http://genesis.seadex.de). //
+// Copyright( C ) 2017 Seadex GmbH //
+// Licensing information is available in the folder "license" which is part of this distribution. //
+// The same information is available on the www @ http://genesis.seadex.de/License.html. //
+// //
+//////////////////////////////////////////////////////////////////////////////////////////////////////
+
+#include "html_generator_grammar.hpp"
+
+
+namespace examples
+{
+
+
+const std::string CITY_NAME = "city_name";
+const std::string CITY_POPULATION = "city_population";
+const std::string COUNTRY_NAME = "country_name";
+const std::string LOOP_COUNTRIES = "countries";
+const std::string LOOP_CITIES = "cities";
+const std::string CONDITION_IS_CAPITAL = "is_capital";
+
+
+}
diff --git a/externals/genesis/source/examples/html_page_generator/html_generator_grammar.hpp b/externals/genesis/source/examples/html_page_generator/html_generator_grammar.hpp
new file mode 100644
index 0000000..de0ca8e
--- /dev/null
+++ b/externals/genesis/source/examples/html_page_generator/html_generator_grammar.hpp
@@ -0,0 +1,34 @@
+//////////////////////////////////////////////////////////////////////////////////////////////////////
+// //
+// This file is part of the Seadex genesis library (http://genesis.seadex.de). //
+// Copyright( C ) 2017 Seadex GmbH //
+// Licensing information is available in the folder "license" which is part of this distribution. //
+// The same information is available on the www @ http://genesis.seadex.de/License.html. //
+// //
+//////////////////////////////////////////////////////////////////////////////////////////////////////
+
+#ifndef HTML_GRAMMAR_C967B713_6A36_4E0E_92A7_DA61983141BC
+#define HTML_GRAMMAR_C967B713_6A36_4E0E_92A7_DA61983141BC
+
+
+// DONE html_grammar -> html_generator_grammar
+#include
+
+
+namespace examples
+{
+
+
+extern const std::string CITY_NAME;
+extern const std::string CITY_POPULATION;
+extern const std::string COUNTRY_NAME;
+extern const std::string LOOP_COUNTRIES;
+extern const std::string LOOP_CITIES;
+extern const std::string CONDITION_IS_CAPITAL;
+
+
+
+}
+
+
+#endif
diff --git a/externals/genesis/source/examples/html_page_generator/html_page_generator.vcxproj b/externals/genesis/source/examples/html_page_generator/html_page_generator.vcxproj
new file mode 100644
index 0000000..abed0ba
--- /dev/null
+++ b/externals/genesis/source/examples/html_page_generator/html_page_generator.vcxproj
@@ -0,0 +1,266 @@
+
+
+
+
+ Debug - VS 2015
+ Win32
+
+
+ Debug - VS 2015
+ x64
+
+
+ Debug - VS 2017
+ Win32
+
+
+ Release - VS 2015
+ Win32
+
+
+ Release - VS 2015
+ x64
+
+
+ Release - VS 2017
+ Win32
+
+
+ Debug - VS 2017
+ x64
+
+
+ Release - VS 2017
+ x64
+
+
+
+ {A4401298-EBE7-4861-AC15-E23071C4FCE5}
+ html_page_generator
+ 8.1
+
+
+
+ Application
+ true
+ v141
+ MultiByte
+
+
+ Application
+ true
+ v140
+ MultiByte
+
+
+ Application
+ false
+ v141
+ true
+ MultiByte
+
+
+ Application
+ false
+ v140
+ true
+ MultiByte
+
+
+ Application
+ true
+ v141
+ MultiByte
+
+
+ Application
+ true
+ v140
+ MultiByte
+
+
+ Application
+ false
+ v141
+ true
+ MultiByte
+
+
+ Application
+ false
+ v140
+ true
+ MultiByte
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Disabled
+ true
+
+
+ true
+
+
+
+
+ Disabled
+ true
+
+
+ true
+
+
+
+
+ Disabled
+ true
+
+
+ true
+
+
+
+
+ Disabled
+ true
+
+
+ true
+
+
+
+
+ MaxSpeed
+ true
+ true
+ true
+
+
+ true
+ true
+ true
+
+
+
+
+ MaxSpeed
+ true
+ true
+ true
+
+
+ true
+ true
+ true
+
+
+
+
+ MaxSpeed
+ true
+ true
+ true
+
+
+ true
+ true
+ true
+ MachineX64
+
+
+
+
+ MaxSpeed
+ true
+ true
+ true
+
+
+ true
+ true
+ true
+ MachineX64
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/externals/genesis/source/examples/html_page_generator/html_page_generator.vcxproj.filters b/externals/genesis/source/examples/html_page_generator/html_page_generator.vcxproj.filters
new file mode 100644
index 0000000..25ffa48
--- /dev/null
+++ b/externals/genesis/source/examples/html_page_generator/html_page_generator.vcxproj.filters
@@ -0,0 +1,48 @@
+
+
+
+
+ {4FC737F1-C7A5-4376-A066-2A32D752A2FF}
+ cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx
+
+
+ {93995380-89BD-4b04-88EB-625FBE52EBFB}
+ h;hh;hpp;hxx;hm;inl;inc;xsd
+
+
+ {67DA6AB6-F800-4c08-8B7A-83BB121AAD01}
+ rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms
+
+
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+
\ No newline at end of file
diff --git a/externals/genesis/source/examples/html_page_generator/main.cpp b/externals/genesis/source/examples/html_page_generator/main.cpp
new file mode 100644
index 0000000..e47fb64
--- /dev/null
+++ b/externals/genesis/source/examples/html_page_generator/main.cpp
@@ -0,0 +1,51 @@
+//////////////////////////////////////////////////////////////////////////////////////////////////////
+// //
+// This file is part of the Seadex genesis library (http://genesis.seadex.de). //
+// Copyright( C ) 2017 Seadex GmbH //
+// Licensing information is available in the folder "license" which is part of this distribution. //
+// The same information is available on the www @ http://genesis.seadex.de/License.html. //
+// //
+//////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+#include
+
+#include "recipe.hpp"
+#include "genesis_exception.hpp"
+#include "recipe_callback_impl.hpp"
+
+
+int main()
+{
+ int error = 0;
+
+ try
+ {
+ examples::config configuration;
+ examples::recipe_callback_impl recipe_callback( configuration );
+ std::cout << "Generating source file from the template '" << configuration.source_template_file_ << "'..." << std::endl;
+ sx::genesis::recipe source_recipe( configuration.source_template_file_, recipe_callback, configuration.template_path_ );
+ source_recipe.generate();
+ source_recipe.write_to_file( configuration.output_file_ );
+ std::cout << "Finished. Output file '" << configuration.output_file_ << "'." << std::endl;
+ }
+ catch( const sx::genesis::genesis_exception& exception )
+ {
+ error = 1;
+ // DONE add "Unhandled std::exception: "
+ std::cout << "Unhandled std::exception: " << exception.what() << std::endl;
+ }
+ catch( const std::exception& exception )
+ {
+ error = 2;
+ // DONE add "Unhandled unknown exception: "
+ std::cout << "Unhandled unknown exception: " << exception.what() << std::endl;
+ }
+ catch( ... )
+ {
+ error = 3;
+ std::cout << "Unknown error!" << std::endl;
+ }
+
+ return ( error );
+}
diff --git a/externals/genesis/source/examples/html_page_generator/recipe_callback_impl.cpp b/externals/genesis/source/examples/html_page_generator/recipe_callback_impl.cpp
new file mode 100644
index 0000000..391bd64
--- /dev/null
+++ b/externals/genesis/source/examples/html_page_generator/recipe_callback_impl.cpp
@@ -0,0 +1,186 @@
+//////////////////////////////////////////////////////////////////////////////////////////////////////
+// //
+// This file is part of the Seadex genesis library (http://genesis.seadex.de). //
+// Copyright( C ) 2017 Seadex GmbH //
+// Licensing information is available in the folder "license" which is part of this distribution. //
+// The same information is available on the www @ http://genesis.seadex.de/License.html. //
+// //
+//////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+#include "recipe_callback_impl.hpp"
+
+#include "essentials/base.hpp"
+#include "essentials/conversion.hpp"
+#include "essentials/exception.hpp"
+
+#include "html_generator_grammar.hpp"
+
+
+namespace examples
+{
+ recipe_callback_impl::recipe_callback_impl( const config& _config ) :
+ recipe_callback(),
+ config_( _config ),
+ country_index_( 0 ),
+ city_index_( 0 )
+ // DONE odd indent
+ {
+ // Nothing to do...
+ }
+
+ // DONE odd indent
+ recipe_callback_impl::~recipe_callback_impl() SX_NOEXCEPT
+ {
+ // Nothing to do...
+ }
+
+
+ std::string recipe_callback_impl::get_variable_content( const std::string& _variable_name )
+ {
+ std::string result( "" );
+ if( _variable_name == CITY_NAME )
+ {
+ result = config_.countries_[country_index_].cities_[city_index_].name_;
+ }
+ else if( _variable_name == CITY_POPULATION )
+ {
+ result = sxe::to_string( config_.countries_[country_index_].cities_[city_index_].population_ );
+ }
+ else if( _variable_name == COUNTRY_NAME )
+ {
+ result = config_.countries_[country_index_].name_;
+ }
+ return( result );
+ }
+
+
+ // cppcheck-suppress unusedFunction
+ void recipe_callback_impl::before_loop( const std::string& _loop_name )
+ {
+ if( _loop_name == LOOP_COUNTRIES )
+ {
+ country_index_ = 0;
+ }
+ else if( _loop_name == LOOP_CITIES )
+ {
+ city_index_ = 0;
+ }
+ }
+
+
+ // cppcheck-suppress unusedFunction
+ void recipe_callback_impl::before_loop_iteration( const std::string& _loop_name )
+ {
+ SX_UNUSED_PARAMETER( _loop_name );
+ }
+
+
+ // cppcheck-suppress unusedFunction
+ void recipe_callback_impl::after_loop_iteration( const std::string& _loop_name )
+ {
+ if( _loop_name == LOOP_COUNTRIES )
+ {
+ ++country_index_;
+ }
+ else if( _loop_name == LOOP_CITIES )
+ {
+ ++city_index_;
+ }
+ }
+
+
+ // cppcheck-suppress unusedFunction
+ void recipe_callback_impl::after_loop( const std::string& _loop_name )
+ {
+ SX_UNUSED_PARAMETER( _loop_name );
+ }
+
+
+ // cppcheck-suppress unusedFunction
+ bool recipe_callback_impl::check_loop_condition( const std::string& _loop_name ) const
+ {
+ bool result = false;
+
+ if( _loop_name == LOOP_COUNTRIES )
+ {
+ result = country_index_ < config_.countries_.size();
+ }
+ else if( _loop_name == LOOP_CITIES )
+ {
+ result = city_index_ < config_.countries_[country_index_].cities_.size();
+ }
+
+ return( result );
+ }
+
+
+ // cppcheck-suppress unusedFunction
+ bool recipe_callback_impl::check_condition( const std::string& _condition_name ) const
+ {
+ bool result = true;
+
+ if( _condition_name == CONDITION_IS_CAPITAL )
+ {
+ result = config_.countries_[country_index_].capital_index_ == city_index_;
+ }
+
+ return( result );
+ }
+
+
+ // cppcheck-suppress unusedFunction
+ void recipe_callback_impl::condition_begin( const std::string& _condition_name )
+ {
+ SX_UNUSED_PARAMETER( _condition_name );
+ }
+
+
+ // cppcheck-suppress unusedFunction
+ void recipe_callback_impl::condition_end( const std::string& _condition_name )
+ {
+ SX_UNUSED_PARAMETER( _condition_name );
+ }
+
+
+ int recipe_callback_impl::get_switch_case( const std::string& _switch_name )
+ {
+ int switch_case = -1;
+ if( _switch_name == "town_name" )
+ {
+ const int population = config_.countries_[country_index_].cities_[city_index_].population_;
+ if( population > 10000000 )
+ {
+ switch_case = 0;
+ }
+ else if(population > 3000000 )
+ {
+ switch_case = 1;
+ }
+ else if( population > 1000000 )
+ {
+ switch_case = 2;
+ }
+ else if( population > 300000 )
+ {
+ switch_case = 3;
+ }
+ else if( population > 20000 )
+ {
+ switch_case = 4;
+ }
+ else if( population > 1000 )
+ {
+ switch_case = 5;
+ }
+ else if( population > 100 )
+ {
+ switch_case = 6;
+ }
+ }
+
+ return( switch_case );
+ }
+
+
+}
diff --git a/externals/genesis/source/examples/html_page_generator/recipe_callback_impl.hpp b/externals/genesis/source/examples/html_page_generator/recipe_callback_impl.hpp
new file mode 100644
index 0000000..3169a5a
--- /dev/null
+++ b/externals/genesis/source/examples/html_page_generator/recipe_callback_impl.hpp
@@ -0,0 +1,52 @@
+//////////////////////////////////////////////////////////////////////////////////////////////////////
+// //
+// This file is part of the Seadex genesis library (http://genesis.seadex.de). //
+// Copyright( C ) 2017 Seadex GmbH //
+// Licensing information is available in the folder "license" which is part of this distribution. //
+// The same information is available on the www @ http://genesis.seadex.de/License.html. //
+// //
+//////////////////////////////////////////////////////////////////////////////////////////////////////
+
+#ifndef RECIPE_CALLBACK_IMPL_D1209279_561E_435D_B6DC_68F2A50937C2
+#define RECIPE_CALLBACK_IMPL_D1209279_561E_435D_B6DC_68F2A50937C2
+
+
+#include "recipe_callback.hpp"
+
+#include "config.hpp"
+
+
+namespace examples
+{
+
+
+class recipe_callback_impl SX_FINAL
+ : public sx::genesis::recipe_callback
+{
+public:
+ explicit recipe_callback_impl( const config& _config );
+ virtual ~recipe_callback_impl() SX_NOEXCEPT SX_OVERRIDE;
+ SX_NO_COPY( recipe_callback_impl )
+ virtual std::string get_variable_content( const std::string& _variable_name ) SX_OVERRIDE;
+ virtual void before_loop( const std::string& _loop_name ) SX_OVERRIDE;
+ virtual void before_loop_iteration( const std::string& _loop_name ) SX_OVERRIDE;
+ virtual void after_loop_iteration( const std::string& _loop_name ) SX_OVERRIDE;
+ virtual bool check_loop_condition( const std::string& _loop_name ) const SX_OVERRIDE;
+ virtual void after_loop( const std::string& _loop_name ) SX_OVERRIDE;
+ virtual bool check_condition( const std::string& _condition_name ) const SX_OVERRIDE;
+ virtual void condition_begin( const std::string& _condition_name ) SX_OVERRIDE;
+ virtual void condition_end( const std::string& _condition_name ) SX_OVERRIDE;
+ virtual int get_switch_case( const std::string& _switch_name ) SX_OVERRIDE;
+
+
+private:
+ const config& config_;
+ std::size_t country_index_;
+ std::size_t city_index_;
+};
+
+
+}
+
+
+#endif
diff --git a/externals/genesis/source/examples/html_page_generator/templates/city_type.gtpl b/externals/genesis/source/examples/html_page_generator/templates/city_type.gtpl
new file mode 100644
index 0000000..33a320e
--- /dev/null
+++ b/externals/genesis/source/examples/html_page_generator/templates/city_type.gtpl
@@ -0,0 +1,10 @@
+$switch(town_name)
+$case(0)
Megalopolis - a group of conurbations, consisting of more than ten million people each.
$esac
+$case(1)
Conurbation - a group of large cities and their suburbs, consisting of three to ten million people.
$esac
+$case(2)
Metropolis - a large city and its suburbs consisting of multiple cities and towns. The population is usually one to three million.
$esac
+$case(3)
Large city - a city with a large population and many services. The population is <1 million people but over 300,000 people.
$esac
+$case(4)
Large town - a large town has a population of 20,000 to 100,000.
$esac
+$case(5)
Town - a town has a population of 1,000 to 20,000.
$esac
+$case(6)
Village - a village is a human settlement or community smaller than a town. The population of a village varies however, the average population can range from hundreds to thousands.
$esac
+$default()
Undefined.
$tluafed
+$hctiws
diff --git a/externals/genesis/source/examples/html_page_generator/templates/countries.gtpl b/externals/genesis/source/examples/html_page_generator/templates/countries.gtpl
new file mode 100644
index 0000000..281efb2
--- /dev/null
+++ b/externals/genesis/source/examples/html_page_generator/templates/countries.gtpl
@@ -0,0 +1,47 @@
+
+
+
+
+
+Population of big cities
+
+
+
+
+