Use 3rd party optional wrapper, always use local verison on Apple
This commit is contained in:
16
src/3rdparty/optional/optional.hpp
vendored
16
src/3rdparty/optional/optional.hpp
vendored
@@ -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{};
|
||||||
|
4
src/3rdparty/optional/ottd_optional.h
vendored
4
src/3rdparty/optional/ottd_optional.h
vendored
@@ -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
|
||||||
|
|
||||||
|
10
src/fios.cpp
10
src/fios.cpp
@@ -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);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user