7 #ifndef CHAISCRIPT_DEFINES_HPP_ 8 #define CHAISCRIPT_DEFINES_HPP_ 11 #define CHAISCRIPT_STRINGIZE(x) "" #x 12 #define CHAISCRIPT_STRINGIZE_EXPANDED(x) CHAISCRIPT_STRINGIZE(x) 13 #define CHAISCRIPT_COMPILER_VERSION CHAISCRIPT_STRINGIZE_EXPANDED(_MSC_FULL_VER) 14 #define CHAISCRIPT_MSVC _MSC_VER 15 #define CHAISCRIPT_HAS_DECLSPEC 17 static_assert(_MSC_FULL_VER >= 190024210,
"Visual C++ 2015 Update 3 or later required");
20 #define CHAISCRIPT_COMPILER_VERSION __VERSION__ 23 #include <string_view> 26 #if defined(_LIBCPP_VERSION) 27 #define CHAISCRIPT_LIBCPP 30 #if defined(_WIN32) || defined(__CYGWIN__) 31 #define CHAISCRIPT_WINDOWS 36 #define CHAISCRIPT_COMPILER_NAME "clang(windows)" 37 #elif defined(__GNUC__) 38 #define CHAISCRIPT_COMPILER_NAME "gcc(mingw)" 40 #define CHAISCRIPT_COMPILER_NAME "msvc" 44 #define CHAISCRIPT_COMPILER_NAME "clang" 45 #elif defined(__GNUC__) 46 #define CHAISCRIPT_COMPILER_NAME "gcc" 48 #define CHAISCRIPT_COMPILER_NAME "unknown" 53 #define CHAISCRIPT_CLANG 56 #ifdef CHAISCRIPT_HAS_DECLSPEC 57 #define CHAISCRIPT_MODULE_EXPORT extern "C" __declspec(dllexport) 59 #define CHAISCRIPT_MODULE_EXPORT extern "C" 62 #if defined(CHAISCRIPT_MSVC) || (defined(__GNUC__) && __GNUC__ >= 5) || defined(CHAISCRIPT_CLANG) 63 #define CHAISCRIPT_UTF16_UTF32 67 #define CHAISCRIPT_DEBUG true 69 #define CHAISCRIPT_DEBUG false 77 constexpr
static const int version_major = 7;
78 constexpr
static const int version_minor = 0;
79 constexpr
static const int version_patch = 0;
81 constexpr
static const char *compiler_version = CHAISCRIPT_COMPILER_VERSION;
82 constexpr
static const char *compiler_name = CHAISCRIPT_COMPILER_NAME;
83 constexpr
static const bool debug_build = CHAISCRIPT_DEBUG;
85 template<
typename B,
typename D,
typename... Arg>
86 inline std::shared_ptr<B> make_shared(Arg &&...arg) {
87 #ifdef CHAISCRIPT_USE_STD_MAKE_SHARED 88 return std::make_shared<D>(std::forward<Arg>(arg)...);
90 return std::shared_ptr<B>(
static_cast<B *
>(
new D(std::forward<Arg>(arg)...)));
94 template<
typename B,
typename D,
typename... Arg>
95 inline std::unique_ptr<B> make_unique(Arg &&...arg) {
96 #ifdef CHAISCRIPT_USE_STD_MAKE_SHARED 97 return std::make_unique<D>(std::forward<Arg>(arg)...);
99 return std::unique_ptr<B>(
static_cast<B *
>(
new D(std::forward<Arg>(arg)...)));
104 [[nodiscard]] constexpr
static int version_major() noexcept {
return chaiscript::version_major; }
106 [[nodiscard]] constexpr
static int version_minor() noexcept {
return chaiscript::version_minor; }
108 [[nodiscard]] constexpr
static int version_patch() noexcept {
return chaiscript::version_patch; }
110 [[nodiscard]]
static std::string version() {
111 return std::to_string(version_major()) +
'.' + std::to_string(version_minor()) +
'.' + std::to_string(version_patch());
114 [[nodiscard]]
static std::string compiler_id() {
return compiler_name() +
'-' + compiler_version(); }
116 [[nodiscard]]
static std::string build_id() {
return compiler_id() + (debug_build() ?
"-Debug" :
"-Release"); }
118 [[nodiscard]]
static std::string compiler_version() {
return chaiscript::compiler_version; }
120 [[nodiscard]]
static std::string compiler_name() {
return chaiscript::compiler_name; }
122 [[nodiscard]] constexpr
static bool debug_build() noexcept {
return chaiscript::debug_build; }
126 [[nodiscard]] constexpr
auto parse_num(
const std::string_view t_str) noexcept ->
typename std::enable_if<std::is_integral<T>::value, T>::type {
128 for (
const auto c : t_str) {
129 if (c < '0' || c >
'9') {
139 [[nodiscard]]
auto parse_num(
const std::string_view t_str) ->
typename std::enable_if<!std::is_integral<T>::value, T>::type {
145 for (
const auto c : t_str) {
172 if (decimal_place < 10) {
174 t +=
static_cast<T
>(c -
'0');
176 t +=
static_cast<T
>(c -
'0') / decimal_place;
184 return exponent ? base * std::pow(T(10), t * static_cast<T>(exponent)) : t;
188 [[nodiscard]]
bool operator()(
const std::string &t_lhs,
const std::string &t_rhs)
const noexcept {
return t_lhs == t_rhs; }
189 template<
typename LHS,
typename RHS>
190 [[nodiscard]] constexpr
bool operator()(
const LHS &t_lhs,
const RHS &t_rhs)
const noexcept {
191 return std::equal(t_lhs.begin(), t_lhs.end(), t_rhs.begin(), t_rhs.end());
198 [[nodiscard]]
bool operator()(
const std::string &t_lhs,
const std::string &t_rhs)
const noexcept {
return t_lhs < t_rhs; }
199 template<
typename LHS,
typename RHS>
200 [[nodiscard]] constexpr
bool operator()(
const LHS &t_lhs,
const RHS &t_rhs)
const noexcept {
201 return std::lexicographical_compare(t_lhs.begin(), t_lhs.end(), t_rhs.begin(), t_rhs.end());
214 template<
typename From,
typename To>
218 template<
class From,
class To>
221 template<
typename Container,
typename... T>
222 [[nodiscard]] constexpr
auto make_container(T &&...t) {
224 c.reserve(
sizeof...(t));
225 (c.push_back(std::forward<T>(t)), ...);
229 template<
typename... T>
230 [[nodiscard]]
auto make_vector(T &&...t) -> std::vector<std::common_type_t<std::decay_t<T>...>> {
231 using container_type = std::vector<std::common_type_t<std::decay_t<T>...>>;
233 return make_container<container_type>(std::forward<T>(t)...);
236 [[nodiscard]]
inline std::vector<Options> default_options() {
237 #ifdef CHAISCRIPT_NO_DYNLOAD 238 return {Options::No_Load_Modules, Options::External_Scripts};
240 return {Options::Load_Modules, Options::External_Scripts};
Definition: compiled_tests.cpp:1116
Definition: chaiscript_defines.hpp:197
Definition: chaiscript_defines.hpp:193
Namespace chaiscript contains every API call that the average user will be concerned with...
Definition: chaiscript_defines.hpp:187
Definition: chaiscript_defines.hpp:203
Definition: chaiscript_defines.hpp:103
Definition: chaiscript_defines.hpp:215