Use 3rd party optional wrapper, always use local verison on Apple

This commit is contained in:
Jonathan G Rennison
2021-02-16 14:01:01 +00:00
parent 6089347833
commit 0d385c9688
3 changed files with 14 additions and 16 deletions

View File

@@ -97,9 +97,8 @@
# define OPTIONAL_MUTABLE_CONSTEXPR constexpr # define OPTIONAL_MUTABLE_CONSTEXPR constexpr
# endif # endif
namespace std{ namespace ottd_optional{
using namespace std;
namespace experimental{
// BEGIN workaround for missing is_trivially_destructible // BEGIN workaround for missing is_trivially_destructible
# if defined TR2_OPTIONAL_GCC_4_8_AND_HIGHER___ # if defined TR2_OPTIONAL_GCC_4_8_AND_HIGHER___
@@ -1032,16 +1031,15 @@ constexpr optional<X&> make_optional(reference_wrapper<X> v)
} }
} // namespace experimental } // namespace ottd_optional
} // namespace std
namespace std namespace std
{ {
template <typename T> template <typename T>
struct hash<std::experimental::optional<T>> struct hash<ottd_optional::optional<T>>
{ {
typedef typename hash<T>::result_type result_type; typedef typename hash<T>::result_type result_type;
typedef std::experimental::optional<T> argument_type; typedef ottd_optional::optional<T> argument_type;
constexpr result_type operator()(argument_type const& arg) const { constexpr result_type operator()(argument_type const& arg) const {
return arg ? std::hash<T>{}(*arg) : result_type{}; return arg ? std::hash<T>{}(*arg) : result_type{};
@@ -1049,10 +1047,10 @@ namespace std
}; };
template <typename T> template <typename T>
struct hash<std::experimental::optional<T&>> struct hash<ottd_optional::optional<T&>>
{ {
typedef typename hash<T>::result_type result_type; typedef typename hash<T>::result_type result_type;
typedef std::experimental::optional<T&> argument_type; typedef ottd_optional::optional<T&> argument_type;
constexpr result_type operator()(argument_type const& arg) const { constexpr result_type operator()(argument_type const& arg) const {
return arg ? std::hash<T>{}(*arg) : result_type{}; return arg ? std::hash<T>{}(*arg) : result_type{};

View File

@@ -16,7 +16,7 @@
# endif # endif
#endif #endif
#if (__cplusplus >= 201703L) || (defined(__cpp_lib_optional) && __cpp_lib_optional >= 201606L) #if !defined(__APPLE__) && ((__cplusplus >= 201703L) || (defined(__cpp_lib_optional) && __cpp_lib_optional >= 201606L))
/* Native std::optional. */ /* Native std::optional. */
#include <optional> #include <optional>
@@ -26,7 +26,7 @@ namespace opt = std;
/* No std::optional, use local copy instead. */ /* No std::optional, use local copy instead. */
#include "optional.hpp" #include "optional.hpp"
namespace opt = std::experimental; namespace opt = ottd_optional;
#endif #endif

View File

@@ -20,7 +20,7 @@
#include "tar_type.h" #include "tar_type.h"
#include <sys/stat.h> #include <sys/stat.h>
#include <functional> #include <functional>
#include <optional> #include "3rdparty/optional/ottd_optional.h"
#ifndef _WIN32 #ifndef _WIN32
# include <unistd.h> # include <unistd.h>
@@ -495,7 +495,7 @@ FiosType FiosGetSavegameListCallback(SaveLoadOperation fop, const std::string &f
*/ */
void FiosGetSavegameList(SaveLoadOperation fop, FileList &file_list) void FiosGetSavegameList(SaveLoadOperation fop, FileList &file_list)
{ {
static std::optional<std::string> fios_save_path; static opt::optional<std::string> fios_save_path;
if (!fios_save_path) fios_save_path = FioFindDirectory(SAVE_DIR); if (!fios_save_path) fios_save_path = FioFindDirectory(SAVE_DIR);
@@ -544,7 +544,7 @@ static FiosType FiosGetScenarioListCallback(SaveLoadOperation fop, const std::st
*/ */
void FiosGetScenarioList(SaveLoadOperation fop, FileList &file_list) void FiosGetScenarioList(SaveLoadOperation fop, FileList &file_list)
{ {
static std::optional<std::string> fios_scn_path; static opt::optional<std::string> fios_scn_path;
/* Copy the default path on first run or on 'New Game' */ /* Copy the default path on first run or on 'New Game' */
if (!fios_scn_path) fios_scn_path = FioFindDirectory(SCENARIO_DIR); if (!fios_scn_path) fios_scn_path = FioFindDirectory(SCENARIO_DIR);
@@ -606,7 +606,7 @@ static FiosType FiosGetHeightmapListCallback(SaveLoadOperation fop, const std::s
*/ */
void FiosGetHeightmapList(SaveLoadOperation fop, FileList &file_list) void FiosGetHeightmapList(SaveLoadOperation fop, FileList &file_list)
{ {
static std::optional<std::string> fios_hmap_path; static opt::optional<std::string> fios_hmap_path;
if (!fios_hmap_path) fios_hmap_path = FioFindDirectory(HEIGHTMAP_DIR); if (!fios_hmap_path) fios_hmap_path = FioFindDirectory(HEIGHTMAP_DIR);
@@ -623,7 +623,7 @@ void FiosGetHeightmapList(SaveLoadOperation fop, FileList &file_list)
*/ */
const char *FiosGetScreenshotDir() const char *FiosGetScreenshotDir()
{ {
static std::optional<std::string> fios_screenshot_path; static opt::optional<std::string> fios_screenshot_path;
if (!fios_screenshot_path) fios_screenshot_path = FioFindDirectory(SCREENSHOT_DIR); if (!fios_screenshot_path) fios_screenshot_path = FioFindDirectory(SCREENSHOT_DIR);