Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

data identity changes for stl-variant in 50.12 #4092

Merged
merged 1 commit into from
Dec 11, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 11 additions & 11 deletions library/DataIdentity.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
#include <mutex>
#include <string>
#include <vector>
#include <variant>

#include "DataFuncs.h"
#include "DataIdentity.h"
Expand All @@ -17,9 +18,9 @@ namespace df {
category##_identity<type> identity_traits<type>::identity(name);
#define INTEGER_IDENTITY_TRAITS(type, name) NUMBER_IDENTITY_TRAITS(integer, type, name)
#define FLOAT_IDENTITY_TRAITS(type) NUMBER_IDENTITY_TRAITS(float, type, #type)
#define OPAQUE_IDENTITY_TRAITS_NAME(type, name) \
opaque_identity identity_traits<type >::identity(sizeof(type), allocator_noassign_fn<type >, name)
#define STL_OPAQUE_IDENTITY_TRAITS(type) OPAQUE_IDENTITY_TRAITS_NAME(std::type, #type)
#define OPAQUE_IDENTITY_TRAITS_NAME(name, ...) \
opaque_identity identity_traits<__VA_ARGS__ >::identity(sizeof(__VA_ARGS__), allocator_noassign_fn<__VA_ARGS__ >, name)
#define OPAQUE_IDENTITY_TRAITS(...) OPAQUE_IDENTITY_TRAITS_NAME(#__VA_ARGS__, __VA_ARGS__ )

INTEGER_IDENTITY_TRAITS(char, "char");
INTEGER_IDENTITY_TRAITS(signed char, "int8_t");
Expand All @@ -44,14 +45,13 @@ namespace df {
stl_bit_vector_identity identity_traits<std::vector<bool> >::identity;
bit_array_identity identity_traits<BitArray<int> >::identity;

STL_OPAQUE_IDENTITY_TRAITS(condition_variable);
STL_OPAQUE_IDENTITY_TRAITS(fstream);
STL_OPAQUE_IDENTITY_TRAITS(mutex);
STL_OPAQUE_IDENTITY_TRAITS(future<void>);
STL_OPAQUE_IDENTITY_TRAITS(function<void()>);
STL_OPAQUE_IDENTITY_TRAITS(optional<void_function>);
OPAQUE_IDENTITY_TRAITS_NAME(std::variant<std::string COMMA void_function>,
"variant<string, void_function>");
OPAQUE_IDENTITY_TRAITS(std::condition_variable);
OPAQUE_IDENTITY_TRAITS(std::fstream);
OPAQUE_IDENTITY_TRAITS(std::mutex);
OPAQUE_IDENTITY_TRAITS(std::future<void>);
OPAQUE_IDENTITY_TRAITS(std::function<void()>);
OPAQUE_IDENTITY_TRAITS(std::optional<std::function<void()> >);
OPAQUE_IDENTITY_TRAITS(std::variant<std::string, std::function<void()> >);

buffer_container_identity buffer_container_identity::base_instance;
}
12 changes: 5 additions & 7 deletions library/include/DataIdentity.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ distribution.
#include <unordered_map>
#include <variant>
#include <vector>
#include <variant>

#include "DataDefs.h"

Expand Down Expand Up @@ -553,8 +554,8 @@ namespace df
// the space after the use of "type" in OPAQUE_IDENTITY_TRAITS is _required_
// without it the macro generates a syntax error when type is a template specification

#define OPAQUE_IDENTITY_TRAITS(type) \
template<> struct DFHACK_EXPORT identity_traits<type > { \
#define OPAQUE_IDENTITY_TRAITS(...) \
template<> struct DFHACK_EXPORT identity_traits<__VA_ARGS__ > { \
static opaque_identity identity; \
static opaque_identity *get() { return &identity; } \
};
Expand All @@ -577,11 +578,8 @@ namespace df
OPAQUE_IDENTITY_TRAITS(std::mutex);
OPAQUE_IDENTITY_TRAITS(std::future<void>);
OPAQUE_IDENTITY_TRAITS(std::function<void()>);

typedef std::function<void()> void_function;
#define COMMA ,
OPAQUE_IDENTITY_TRAITS(std::optional<void_function>);
OPAQUE_IDENTITY_TRAITS(std::variant<std::string COMMA void_function>);
OPAQUE_IDENTITY_TRAITS(std::optional<std::function<void()> >);
OPAQUE_IDENTITY_TRAITS(std::variant<std::string, std::function<void()> >);

#ifdef BUILD_DFHACK_LIB
template<typename T>
Expand Down