mirror of
https://github.com/MaskRay/ccls.git
synced 2024-11-21 23:25:07 +00:00
more changes
This commit is contained in:
parent
8219a39a32
commit
c8afc0f022
@ -92,36 +92,6 @@ std::string Join(const std::vector<std::string>& elements, std::string sep) {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct Ipc_Quit : public IpcMessage<Ipc_Quit> {
|
|
||||||
static constexpr IpcId kIpcId = IpcId::Quit;
|
|
||||||
};
|
|
||||||
template <typename TVisitor>
|
|
||||||
void Reflect(TVisitor& visitor, Ipc_Quit& value) {}
|
|
||||||
|
|
||||||
struct Ipc_IsAlive : public IpcMessage<Ipc_IsAlive> {
|
|
||||||
static constexpr IpcId kIpcId = IpcId::IsAlive;
|
|
||||||
};
|
|
||||||
template <typename TVisitor>
|
|
||||||
void Reflect(TVisitor& visitor, Ipc_IsAlive& value) {}
|
|
||||||
|
|
||||||
struct Ipc_OpenProject : public IpcMessage<Ipc_OpenProject> {
|
|
||||||
static constexpr IpcId kIpcId = IpcId::OpenProject;
|
|
||||||
std::string project_path;
|
|
||||||
};
|
|
||||||
template <typename TVisitor>
|
|
||||||
void Reflect(TVisitor& visitor, Ipc_OpenProject& value) {
|
|
||||||
Reflect(visitor, value.project_path);
|
|
||||||
}
|
|
||||||
|
|
||||||
struct Ipc_Cout : public IpcMessage<Ipc_Cout> {
|
|
||||||
static constexpr IpcId kIpcId = IpcId::Cout;
|
|
||||||
std::string content;
|
|
||||||
};
|
|
||||||
template <typename TVisitor>
|
|
||||||
void Reflect(TVisitor& visitor, Ipc_Cout& value) {
|
|
||||||
Reflect(visitor, value.content);
|
|
||||||
}
|
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
void SendOutMessageToClient(IpcMessageQueue* queue, T& response) {
|
void SendOutMessageToClient(IpcMessageQueue* queue, T& response) {
|
||||||
std::ostringstream sstream;
|
std::ostringstream sstream;
|
||||||
@ -132,8 +102,6 @@ void SendOutMessageToClient(IpcMessageQueue* queue, T& response) {
|
|||||||
queue->SendMessage(&queue->for_client, Ipc_Cout::kIpcId, out);
|
queue->SendMessage(&queue->for_client, Ipc_Cout::kIpcId, out);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
void RegisterId(IpcMessageQueue* t) {
|
void RegisterId(IpcMessageQueue* t) {
|
||||||
t->RegisterId(T::kIpcId,
|
t->RegisterId(T::kIpcId,
|
||||||
@ -767,7 +735,7 @@ int main(int argc, char** argv) {
|
|||||||
if (context.shouldExit())
|
if (context.shouldExit())
|
||||||
return res;
|
return res;
|
||||||
|
|
||||||
//RunTests();
|
RunTests();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
else if (options.find("--help") != options.end()) {
|
else if (options.find("--help") != options.end()) {
|
||||||
|
28
src/ipc.cc
Normal file
28
src/ipc.cc
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
#include "ipc.h"
|
||||||
|
|
||||||
|
#include <cassert>
|
||||||
|
|
||||||
|
const char* IpcIdToString(IpcId id) {
|
||||||
|
switch (id) {
|
||||||
|
case IpcId::CancelRequest:
|
||||||
|
return "$/cancelRequest";
|
||||||
|
case IpcId::Initialize:
|
||||||
|
return "initialize";
|
||||||
|
case IpcId::Initialized:
|
||||||
|
return "initialized";
|
||||||
|
case IpcId::TextDocumentDocumentSymbol:
|
||||||
|
return "textDocument/documentSymbol";
|
||||||
|
case IpcId::TextDocumentCodeLens:
|
||||||
|
return "textDocument/codeLens";
|
||||||
|
case IpcId::CodeLensResolve:
|
||||||
|
return "codeLens/resolve";
|
||||||
|
case IpcId::WorkspaceSymbol:
|
||||||
|
return "workspace/symbol";
|
||||||
|
default:
|
||||||
|
assert(false);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
BaseIpcMessage::BaseIpcMessage(IpcId method_id)
|
||||||
|
: method_id(method_id) {}
|
58
src/ipc.h
Normal file
58
src/ipc.h
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "utils.h"
|
||||||
|
#include "serializer.h"
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
enum class IpcId : int {
|
||||||
|
// Language server specific requests.
|
||||||
|
CancelRequest = 0,
|
||||||
|
Initialize,
|
||||||
|
Initialized,
|
||||||
|
TextDocumentDocumentSymbol,
|
||||||
|
TextDocumentCodeLens,
|
||||||
|
CodeLensResolve,
|
||||||
|
WorkspaceSymbol,
|
||||||
|
|
||||||
|
// Internal implementation detail.
|
||||||
|
Quit,
|
||||||
|
IsAlive,
|
||||||
|
OpenProject,
|
||||||
|
Cout
|
||||||
|
};
|
||||||
|
MAKE_ENUM_HASHABLE(IpcId)
|
||||||
|
MAKE_REFLECT_TYPE_PROXY(IpcId, int)
|
||||||
|
const char* IpcIdToString(IpcId id);
|
||||||
|
|
||||||
|
struct BaseIpcMessage {
|
||||||
|
const IpcId method_id;
|
||||||
|
BaseIpcMessage(IpcId method_id);
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
struct IpcMessage : public BaseIpcMessage {
|
||||||
|
IpcMessage() : BaseIpcMessage(T::kIpcId) {}
|
||||||
|
};
|
||||||
|
|
||||||
|
struct Ipc_Quit : public IpcMessage<Ipc_Quit> {
|
||||||
|
static constexpr IpcId kIpcId = IpcId::Quit;
|
||||||
|
};
|
||||||
|
MAKE_REFLECT_EMPTY_STRUCT(Ipc_Quit);
|
||||||
|
|
||||||
|
struct Ipc_IsAlive : public IpcMessage<Ipc_IsAlive> {
|
||||||
|
static constexpr IpcId kIpcId = IpcId::IsAlive;
|
||||||
|
};
|
||||||
|
MAKE_REFLECT_EMPTY_STRUCT(Ipc_IsAlive);
|
||||||
|
|
||||||
|
struct Ipc_OpenProject : public IpcMessage<Ipc_OpenProject> {
|
||||||
|
static constexpr IpcId kIpcId = IpcId::OpenProject;
|
||||||
|
std::string project_path;
|
||||||
|
};
|
||||||
|
MAKE_REFLECT_STRUCT(Ipc_OpenProject, project_path);
|
||||||
|
|
||||||
|
struct Ipc_Cout : public IpcMessage<Ipc_Cout> {
|
||||||
|
static constexpr IpcId kIpcId = IpcId::Cout;
|
||||||
|
std::string content;
|
||||||
|
};
|
||||||
|
MAKE_REFLECT_STRUCT(Ipc_Cout, content);
|
@ -1,27 +1,5 @@
|
|||||||
#include "language_server_api.h"
|
#include "language_server_api.h"
|
||||||
|
|
||||||
const char* IpcIdToString(IpcId id) {
|
|
||||||
switch (id) {
|
|
||||||
case IpcId::CancelRequest:
|
|
||||||
return "$/cancelRequest";
|
|
||||||
case IpcId::Initialize:
|
|
||||||
return "initialize";
|
|
||||||
case IpcId::Initialized:
|
|
||||||
return "initialized";
|
|
||||||
case IpcId::TextDocumentDocumentSymbol:
|
|
||||||
return "textDocument/documentSymbol";
|
|
||||||
case IpcId::TextDocumentCodeLens:
|
|
||||||
return "textDocument/codeLens";
|
|
||||||
case IpcId::CodeLensResolve:
|
|
||||||
return "codeLens/resolve";
|
|
||||||
case IpcId::WorkspaceSymbol:
|
|
||||||
return "workspace/symbol";
|
|
||||||
default:
|
|
||||||
assert(false);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void Reflect(Writer& visitor, lsRequestId& value) {
|
void Reflect(Writer& visitor, lsRequestId& value) {
|
||||||
assert(value.id0.has_value() || value.id1.has_value());
|
assert(value.id0.has_value() || value.id1.has_value());
|
||||||
|
|
||||||
@ -111,9 +89,6 @@ MessageRegistry* MessageRegistry::instance() {
|
|||||||
return instance_;
|
return instance_;
|
||||||
}
|
}
|
||||||
|
|
||||||
BaseIpcMessage::BaseIpcMessage(IpcId method_id)
|
|
||||||
: method_id(method_id) {}
|
|
||||||
|
|
||||||
void lsResponseError::Write(Writer& visitor) {
|
void lsResponseError::Write(Writer& visitor) {
|
||||||
auto& value = *this;
|
auto& value = *this;
|
||||||
int code = static_cast<int>(this->code);
|
int code = static_cast<int>(this->code);
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include "ipc.h"
|
||||||
#include "serializer.h"
|
#include "serializer.h"
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
|
|
||||||
@ -22,25 +23,6 @@ using std::experimental::nullopt;
|
|||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
enum class IpcId : int {
|
|
||||||
// Language server specific requests.
|
|
||||||
CancelRequest = 0,
|
|
||||||
Initialize,
|
|
||||||
Initialized,
|
|
||||||
TextDocumentDocumentSymbol,
|
|
||||||
TextDocumentCodeLens,
|
|
||||||
CodeLensResolve,
|
|
||||||
WorkspaceSymbol,
|
|
||||||
|
|
||||||
// Internal implementation detail.
|
|
||||||
Quit,
|
|
||||||
IsAlive,
|
|
||||||
OpenProject,
|
|
||||||
Cout
|
|
||||||
};
|
|
||||||
MAKE_ENUM_HASHABLE(IpcId)
|
|
||||||
MAKE_REFLECT_TYPE_PROXY(IpcId, int)
|
|
||||||
const char* IpcIdToString(IpcId id);
|
|
||||||
|
|
||||||
struct lsRequestId {
|
struct lsRequestId {
|
||||||
optional<int> id0;
|
optional<int> id0;
|
||||||
@ -99,8 +81,6 @@ void Reflect(Reader& visitor, lsRequestId& id);
|
|||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
struct BaseIpcMessage;
|
|
||||||
|
|
||||||
struct MessageRegistry {
|
struct MessageRegistry {
|
||||||
static MessageRegistry* instance_;
|
static MessageRegistry* instance_;
|
||||||
static MessageRegistry* instance();
|
static MessageRegistry* instance();
|
||||||
@ -123,15 +103,6 @@ struct MessageRegistry {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
struct BaseIpcMessage {
|
|
||||||
const IpcId method_id;
|
|
||||||
BaseIpcMessage(IpcId method_id);
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
struct IpcMessage : public BaseIpcMessage {
|
|
||||||
IpcMessage() : BaseIpcMessage(T::kIpcId) {}
|
|
||||||
};
|
|
||||||
|
|
||||||
template<typename TDerived>
|
template<typename TDerived>
|
||||||
struct lsOutMessage {
|
struct lsOutMessage {
|
||||||
@ -152,8 +123,6 @@ struct lsOutMessage {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
struct lsResponseError {
|
struct lsResponseError {
|
||||||
struct Data {
|
struct Data {
|
||||||
virtual void Write(Writer& writer) = 0;
|
virtual void Write(Writer& writer) = 0;
|
||||||
@ -241,7 +210,7 @@ struct lsDocumentUri {
|
|||||||
|
|
||||||
lsDocumentUri();
|
lsDocumentUri();
|
||||||
bool operator==(const lsDocumentUri& other) const;
|
bool operator==(const lsDocumentUri& other) const;
|
||||||
|
|
||||||
void SetPath(const std::string& path);
|
void SetPath(const std::string& path);
|
||||||
std::string GetPath();
|
std::string GetPath();
|
||||||
|
|
||||||
@ -266,14 +235,7 @@ struct lsPosition {
|
|||||||
int character = 0;
|
int character = 0;
|
||||||
};
|
};
|
||||||
MAKE_HASHABLE(lsPosition, t.line, t.character);
|
MAKE_HASHABLE(lsPosition, t.line, t.character);
|
||||||
template<typename TVisitor>
|
MAKE_REFLECT_STRUCT(lsPosition, line, character);
|
||||||
void Reflect(TVisitor& visitor, lsPosition& value) {
|
|
||||||
REFLECT_MEMBER_START();
|
|
||||||
REFLECT_MEMBER(line);
|
|
||||||
REFLECT_MEMBER(character);
|
|
||||||
REFLECT_MEMBER_END();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
struct lsRange {
|
struct lsRange {
|
||||||
lsRange();
|
lsRange();
|
||||||
@ -285,15 +247,7 @@ struct lsRange {
|
|||||||
lsPosition end;
|
lsPosition end;
|
||||||
};
|
};
|
||||||
MAKE_HASHABLE(lsRange, t.start, t.end);
|
MAKE_HASHABLE(lsRange, t.start, t.end);
|
||||||
|
MAKE_REFLECT_STRUCT(lsRange, start, end);
|
||||||
template<typename TVisitor>
|
|
||||||
void Reflect(TVisitor& visitor, lsRange& value) {
|
|
||||||
REFLECT_MEMBER_START();
|
|
||||||
REFLECT_MEMBER(start);
|
|
||||||
REFLECT_MEMBER(end);
|
|
||||||
REFLECT_MEMBER_END();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
struct lsLocation {
|
struct lsLocation {
|
||||||
lsLocation();
|
lsLocation();
|
||||||
@ -304,15 +258,8 @@ struct lsLocation {
|
|||||||
lsDocumentUri uri;
|
lsDocumentUri uri;
|
||||||
lsRange range;
|
lsRange range;
|
||||||
};
|
};
|
||||||
MAKE_HASHABLE(lsLocation, t.uri, t.range)
|
MAKE_HASHABLE(lsLocation, t.uri, t.range);
|
||||||
template<typename TVisitor>
|
MAKE_REFLECT_STRUCT(lsLocation, uri, range);
|
||||||
void Reflect(TVisitor& visitor, lsLocation& value) {
|
|
||||||
REFLECT_MEMBER_START();
|
|
||||||
REFLECT_MEMBER(uri);
|
|
||||||
REFLECT_MEMBER(range);
|
|
||||||
REFLECT_MEMBER_END();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
enum class lsSymbolKind : int {
|
enum class lsSymbolKind : int {
|
||||||
File = 1,
|
File = 1,
|
||||||
@ -334,7 +281,7 @@ enum class lsSymbolKind : int {
|
|||||||
Boolean = 17,
|
Boolean = 17,
|
||||||
Array = 18
|
Array = 18
|
||||||
};
|
};
|
||||||
MAKE_REFLECT_TYPE_PROXY(lsSymbolKind, int)
|
MAKE_REFLECT_TYPE_PROXY(lsSymbolKind, int);
|
||||||
|
|
||||||
struct lsSymbolInformation {
|
struct lsSymbolInformation {
|
||||||
std::string name;
|
std::string name;
|
||||||
@ -342,16 +289,7 @@ struct lsSymbolInformation {
|
|||||||
lsLocation location;
|
lsLocation location;
|
||||||
std::string containerName;
|
std::string containerName;
|
||||||
};
|
};
|
||||||
|
MAKE_REFLECT_STRUCT(lsSymbolInformation, name, kind, location, containerName);
|
||||||
template<typename TVisitor>
|
|
||||||
void Reflect(TVisitor& visitor, lsSymbolInformation& value) {
|
|
||||||
REFLECT_MEMBER_START();
|
|
||||||
REFLECT_MEMBER(name);
|
|
||||||
REFLECT_MEMBER(kind);
|
|
||||||
REFLECT_MEMBER(location);
|
|
||||||
REFLECT_MEMBER(containerName);
|
|
||||||
REFLECT_MEMBER_END();
|
|
||||||
}
|
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
struct lsCommand {
|
struct lsCommand {
|
||||||
@ -362,7 +300,6 @@ struct lsCommand {
|
|||||||
// Arguments to run the command with.
|
// Arguments to run the command with.
|
||||||
T arguments;
|
T arguments;
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename TVisitor, typename T>
|
template<typename TVisitor, typename T>
|
||||||
void Reflect(TVisitor& visitor, lsCommand<T>& value) {
|
void Reflect(TVisitor& visitor, lsCommand<T>& value) {
|
||||||
REFLECT_MEMBER_START();
|
REFLECT_MEMBER_START();
|
||||||
@ -383,7 +320,6 @@ struct lsCodeLens {
|
|||||||
// a code lens and a code lens resolve request.
|
// a code lens and a code lens resolve request.
|
||||||
TData data;
|
TData data;
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename TVisitor, typename TData, typename TCommandArguments>
|
template<typename TVisitor, typename TData, typename TCommandArguments>
|
||||||
void Reflect(TVisitor& visitor, lsCodeLens<TData, TCommandArguments>& value) {
|
void Reflect(TVisitor& visitor, lsCodeLens<TData, TCommandArguments>& value) {
|
||||||
REFLECT_MEMBER_START();
|
REFLECT_MEMBER_START();
|
||||||
@ -399,13 +335,7 @@ void Reflect(TVisitor& visitor, lsCodeLens<TData, TCommandArguments>& value) {
|
|||||||
struct lsTextDocumentIdentifier {
|
struct lsTextDocumentIdentifier {
|
||||||
lsDocumentUri uri;
|
lsDocumentUri uri;
|
||||||
};
|
};
|
||||||
|
MAKE_REFLECT_STRUCT(lsTextDocumentIdentifier, uri);
|
||||||
template<typename TVisitor>
|
|
||||||
void Reflect(TVisitor& visitor, lsTextDocumentIdentifier& value) {
|
|
||||||
REFLECT_MEMBER_START();
|
|
||||||
REFLECT_MEMBER(uri);
|
|
||||||
REFLECT_MEMBER_END();
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO: TextDocumentItem
|
// TODO: TextDocumentItem
|
||||||
// TODO: VersionedTextDocumentIdentifier
|
// TODO: VersionedTextDocumentIdentifier
|
||||||
@ -550,31 +480,16 @@ struct lsWorkspaceClientCapabilites {
|
|||||||
optional<lsGenericDynamicReg> executeCommand;
|
optional<lsGenericDynamicReg> executeCommand;
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename TVisitor>
|
MAKE_REFLECT_STRUCT(lsWorkspaceClientCapabilites::lsWorkspaceEdit, documentChanges);
|
||||||
void Reflect(TVisitor& visitor, lsWorkspaceClientCapabilites::lsWorkspaceEdit& value) {
|
MAKE_REFLECT_STRUCT(lsWorkspaceClientCapabilites::lsGenericDynamicReg, dynamicRegistration);
|
||||||
REFLECT_MEMBER_START();
|
MAKE_REFLECT_STRUCT(lsWorkspaceClientCapabilites,
|
||||||
REFLECT_MEMBER(documentChanges);
|
applyEdit,
|
||||||
REFLECT_MEMBER_END();
|
workspaceEdit,
|
||||||
}
|
didChangeConfiguration,
|
||||||
|
didChangeWatchedFiles,
|
||||||
|
symbol,
|
||||||
|
executeCommand);
|
||||||
|
|
||||||
template<typename TVisitor>
|
|
||||||
void Reflect(TVisitor& visitor, lsWorkspaceClientCapabilites::lsGenericDynamicReg& value) {
|
|
||||||
REFLECT_MEMBER_START();
|
|
||||||
REFLECT_MEMBER(dynamicRegistration);
|
|
||||||
REFLECT_MEMBER_END();
|
|
||||||
}
|
|
||||||
|
|
||||||
template<typename TVisitor>
|
|
||||||
void Reflect(TVisitor& visitor, lsWorkspaceClientCapabilites& value) {
|
|
||||||
REFLECT_MEMBER_START();
|
|
||||||
REFLECT_MEMBER(applyEdit);
|
|
||||||
REFLECT_MEMBER(workspaceEdit);
|
|
||||||
REFLECT_MEMBER(didChangeConfiguration);
|
|
||||||
REFLECT_MEMBER(didChangeWatchedFiles);
|
|
||||||
REFLECT_MEMBER(symbol);
|
|
||||||
REFLECT_MEMBER(executeCommand);
|
|
||||||
REFLECT_MEMBER_END();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Text document specific client capabilities.
|
// Text document specific client capabilities.
|
||||||
@ -668,66 +583,27 @@ struct lsTextDocumentClientCapabilities {
|
|||||||
optional<lsGenericDynamicReg> rename;
|
optional<lsGenericDynamicReg> rename;
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename TVisitor>
|
MAKE_REFLECT_STRUCT(lsTextDocumentClientCapabilities::lsSynchronization, dynamicRegistration, willSave, willSaveWaitUntil, didSave);
|
||||||
void Reflect(TVisitor& visitor, lsTextDocumentClientCapabilities::lsSynchronization& value) {
|
MAKE_REFLECT_STRUCT(lsTextDocumentClientCapabilities::lsCompletion, dynamicRegistration, completionItem);
|
||||||
REFLECT_MEMBER_START();
|
MAKE_REFLECT_STRUCT(lsTextDocumentClientCapabilities::lsCompletion::lsCompletionItem, snippetSupport);
|
||||||
REFLECT_MEMBER(dynamicRegistration);
|
MAKE_REFLECT_STRUCT(lsTextDocumentClientCapabilities::lsGenericDynamicReg, dynamicRegistration);
|
||||||
REFLECT_MEMBER(willSave);
|
MAKE_REFLECT_STRUCT(lsTextDocumentClientCapabilities::CodeLensRegistrationOptions, dynamicRegistration, resolveProvider);
|
||||||
REFLECT_MEMBER(willSaveWaitUntil);
|
MAKE_REFLECT_STRUCT(lsTextDocumentClientCapabilities,
|
||||||
REFLECT_MEMBER(didSave);
|
synchronization,
|
||||||
REFLECT_MEMBER_END();
|
completion,
|
||||||
}
|
hover,
|
||||||
|
signatureHelp,
|
||||||
template<typename TVisitor>
|
references,
|
||||||
void Reflect(TVisitor& visitor, lsTextDocumentClientCapabilities::lsCompletion& value) {
|
documentHighlight,
|
||||||
REFLECT_MEMBER_START();
|
documentSymbol,
|
||||||
REFLECT_MEMBER(dynamicRegistration);
|
formatting,
|
||||||
REFLECT_MEMBER(completionItem);
|
rangeFormatting,
|
||||||
REFLECT_MEMBER_END();
|
onTypeFormatting,
|
||||||
}
|
definition,
|
||||||
|
codeAction,
|
||||||
template<typename TVisitor>
|
codeLens,
|
||||||
void Reflect(TVisitor& visitor, lsTextDocumentClientCapabilities::lsCompletion::lsCompletionItem& value) {
|
documentLink,
|
||||||
REFLECT_MEMBER_START();
|
rename);
|
||||||
REFLECT_MEMBER(snippetSupport);
|
|
||||||
REFLECT_MEMBER_END();
|
|
||||||
}
|
|
||||||
|
|
||||||
template<typename TVisitor>
|
|
||||||
void Reflect(TVisitor& visitor, lsTextDocumentClientCapabilities::lsGenericDynamicReg& value) {
|
|
||||||
REFLECT_MEMBER_START();
|
|
||||||
REFLECT_MEMBER(dynamicRegistration);
|
|
||||||
REFLECT_MEMBER_END();
|
|
||||||
}
|
|
||||||
|
|
||||||
template<typename TVisitor>
|
|
||||||
void Reflect(TVisitor& visitor, lsTextDocumentClientCapabilities::CodeLensRegistrationOptions& value) {
|
|
||||||
REFLECT_MEMBER_START();
|
|
||||||
REFLECT_MEMBER(dynamicRegistration);
|
|
||||||
REFLECT_MEMBER(resolveProvider);
|
|
||||||
REFLECT_MEMBER_END();
|
|
||||||
}
|
|
||||||
|
|
||||||
template<typename TVisitor>
|
|
||||||
void Reflect(TVisitor& visitor, lsTextDocumentClientCapabilities& value) {
|
|
||||||
REFLECT_MEMBER_START();
|
|
||||||
REFLECT_MEMBER(synchronization);
|
|
||||||
REFLECT_MEMBER(completion);
|
|
||||||
REFLECT_MEMBER(hover);
|
|
||||||
REFLECT_MEMBER(signatureHelp);
|
|
||||||
REFLECT_MEMBER(references);
|
|
||||||
REFLECT_MEMBER(documentHighlight);
|
|
||||||
REFLECT_MEMBER(documentSymbol);
|
|
||||||
REFLECT_MEMBER(formatting);
|
|
||||||
REFLECT_MEMBER(rangeFormatting);
|
|
||||||
REFLECT_MEMBER(onTypeFormatting);
|
|
||||||
REFLECT_MEMBER(definition);
|
|
||||||
REFLECT_MEMBER(codeAction);
|
|
||||||
REFLECT_MEMBER(codeLens);
|
|
||||||
REFLECT_MEMBER(documentLink);
|
|
||||||
REFLECT_MEMBER(rename);
|
|
||||||
REFLECT_MEMBER_END();
|
|
||||||
}
|
|
||||||
|
|
||||||
struct lsClientCapabilities {
|
struct lsClientCapabilities {
|
||||||
// Workspace specific client capabilities.
|
// Workspace specific client capabilities.
|
||||||
@ -741,14 +617,7 @@ struct lsClientCapabilities {
|
|||||||
*/
|
*/
|
||||||
// experimental?: any; // TODO
|
// experimental?: any; // TODO
|
||||||
};
|
};
|
||||||
|
MAKE_REFLECT_STRUCT(lsClientCapabilities, workspace, textDocument);
|
||||||
template<typename TVisitor>
|
|
||||||
void Reflect(TVisitor& visitor, lsClientCapabilities& value) {
|
|
||||||
REFLECT_MEMBER_START();
|
|
||||||
REFLECT_MEMBER(workspace);
|
|
||||||
REFLECT_MEMBER(textDocument);
|
|
||||||
REFLECT_MEMBER_END();
|
|
||||||
}
|
|
||||||
|
|
||||||
struct lsInitializeParams {
|
struct lsInitializeParams {
|
||||||
// The process Id of the parent process that started
|
// The process Id of the parent process that started
|
||||||
@ -785,17 +654,7 @@ struct lsInitializeParams {
|
|||||||
};
|
};
|
||||||
void Reflect(Reader& reader, lsInitializeParams::lsTrace& value);
|
void Reflect(Reader& reader, lsInitializeParams::lsTrace& value);
|
||||||
void Reflect(Writer& writer, lsInitializeParams::lsTrace& value);
|
void Reflect(Writer& writer, lsInitializeParams::lsTrace& value);
|
||||||
|
MAKE_REFLECT_STRUCT(lsInitializeParams, processId, rootPath, rootUri, capabilities, trace);
|
||||||
template<typename TVisitor>
|
|
||||||
void Reflect(TVisitor& visitor, lsInitializeParams& value) {
|
|
||||||
REFLECT_MEMBER_START();
|
|
||||||
REFLECT_MEMBER(processId);
|
|
||||||
REFLECT_MEMBER(rootPath);
|
|
||||||
REFLECT_MEMBER(rootUri);
|
|
||||||
REFLECT_MEMBER(capabilities);
|
|
||||||
REFLECT_MEMBER(trace);
|
|
||||||
REFLECT_MEMBER_END();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
struct lsInitializeError {
|
struct lsInitializeError {
|
||||||
@ -804,13 +663,7 @@ struct lsInitializeError {
|
|||||||
// in the ResponseError.
|
// in the ResponseError.
|
||||||
bool retry;
|
bool retry;
|
||||||
};
|
};
|
||||||
|
MAKE_REFLECT_STRUCT(lsInitializeError, retry);
|
||||||
template<typename TVisitor>
|
|
||||||
void Reflect(TVisitor& visitor, lsInitializeError& value) {
|
|
||||||
REFLECT_MEMBER_START();
|
|
||||||
REFLECT_MEMBER(retry);
|
|
||||||
REFLECT_MEMBER_END();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Defines how the host (editor) should sync document changes to the language server.
|
// Defines how the host (editor) should sync document changes to the language server.
|
||||||
enum class lsTextDocumentSyncKind {
|
enum class lsTextDocumentSyncKind {
|
||||||
@ -837,40 +690,21 @@ struct lsCompletionOptions {
|
|||||||
// The characters that trigger completion automatically.
|
// The characters that trigger completion automatically.
|
||||||
std::vector<std::string> triggerCharacters;
|
std::vector<std::string> triggerCharacters;
|
||||||
};
|
};
|
||||||
|
MAKE_REFLECT_STRUCT(lsCompletionOptions, resolveProvider, triggerCharacters);
|
||||||
template<typename TVisitor>
|
|
||||||
void Reflect(TVisitor& visitor, lsCompletionOptions& value) {
|
|
||||||
REFLECT_MEMBER_START();
|
|
||||||
REFLECT_MEMBER(resolveProvider);
|
|
||||||
REFLECT_MEMBER(triggerCharacters);
|
|
||||||
REFLECT_MEMBER_END();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Signature help options.
|
// Signature help options.
|
||||||
struct lsSignatureHelpOptions {
|
struct lsSignatureHelpOptions {
|
||||||
// The characters that trigger signature help automatically.
|
// The characters that trigger signature help automatically.
|
||||||
std::vector<std::string> triggerCharacters;
|
std::vector<std::string> triggerCharacters;
|
||||||
};
|
};
|
||||||
|
MAKE_REFLECT_STRUCT(lsSignatureHelpOptions, triggerCharacters);
|
||||||
template<typename TVisitor>
|
|
||||||
void Reflect(TVisitor& visitor, lsSignatureHelpOptions& value) {
|
|
||||||
REFLECT_MEMBER_START();
|
|
||||||
REFLECT_MEMBER(triggerCharacters);
|
|
||||||
REFLECT_MEMBER_END();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Code Lens options.
|
// Code Lens options.
|
||||||
struct lsCodeLensOptions {
|
struct lsCodeLensOptions {
|
||||||
// Code lens has a resolve provider as well.
|
// Code lens has a resolve provider as well.
|
||||||
bool resolveProvider = false;
|
bool resolveProvider = false;
|
||||||
};
|
};
|
||||||
|
MAKE_REFLECT_STRUCT(lsCodeLensOptions, resolveProvider);
|
||||||
template<typename TVisitor>
|
|
||||||
void Reflect(TVisitor& visitor, lsCodeLensOptions& value) {
|
|
||||||
REFLECT_MEMBER_START();
|
|
||||||
REFLECT_MEMBER(resolveProvider);
|
|
||||||
REFLECT_MEMBER_END();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Format document on type options
|
// Format document on type options
|
||||||
struct lsDocumentOnTypeFormattingOptions {
|
struct lsDocumentOnTypeFormattingOptions {
|
||||||
@ -880,53 +714,28 @@ struct lsDocumentOnTypeFormattingOptions {
|
|||||||
// More trigger characters.
|
// More trigger characters.
|
||||||
std::vector<std::string> moreTriggerCharacter;
|
std::vector<std::string> moreTriggerCharacter;
|
||||||
};
|
};
|
||||||
|
MAKE_REFLECT_STRUCT(lsDocumentOnTypeFormattingOptions, firstTriggerCharacter, moreTriggerCharacter);
|
||||||
template<typename TVisitor>
|
|
||||||
void Reflect(TVisitor& visitor, lsDocumentOnTypeFormattingOptions& value) {
|
|
||||||
REFLECT_MEMBER_START();
|
|
||||||
REFLECT_MEMBER(firstTriggerCharacter);
|
|
||||||
REFLECT_MEMBER(moreTriggerCharacter);
|
|
||||||
REFLECT_MEMBER_END();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Document link options
|
// Document link options
|
||||||
struct lsDocumentLinkOptions {
|
struct lsDocumentLinkOptions {
|
||||||
// Document links have a resolve provider as well.
|
// Document links have a resolve provider as well.
|
||||||
bool resolveProvider = false;
|
bool resolveProvider = false;
|
||||||
};
|
};
|
||||||
|
MAKE_REFLECT_STRUCT(lsDocumentLinkOptions, resolveProvider);
|
||||||
template<typename TVisitor>
|
|
||||||
void Reflect(TVisitor& visitor, lsDocumentLinkOptions& value) {
|
|
||||||
REFLECT_MEMBER_START();
|
|
||||||
REFLECT_MEMBER(resolveProvider);
|
|
||||||
REFLECT_MEMBER_END();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Execute command options.
|
// Execute command options.
|
||||||
struct lsExecuteCommandOptions {
|
struct lsExecuteCommandOptions {
|
||||||
// The commands to be executed on the server
|
// The commands to be executed on the server
|
||||||
std::vector<std::string> commands;
|
std::vector<std::string> commands;
|
||||||
};
|
};
|
||||||
|
MAKE_REFLECT_STRUCT(lsExecuteCommandOptions, commands);
|
||||||
template<typename TVisitor>
|
|
||||||
void Reflect(TVisitor& visitor, lsExecuteCommandOptions& value) {
|
|
||||||
REFLECT_MEMBER_START();
|
|
||||||
REFLECT_MEMBER(commands);
|
|
||||||
REFLECT_MEMBER_END();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Save options.
|
// Save options.
|
||||||
struct lsSaveOptions {
|
struct lsSaveOptions {
|
||||||
// The client is supposed to include the content on save.
|
// The client is supposed to include the content on save.
|
||||||
bool includeText = false;
|
bool includeText = false;
|
||||||
};
|
};
|
||||||
|
MAKE_REFLECT_STRUCT(lsSaveOptions, includeText);
|
||||||
template<typename TVisitor>
|
|
||||||
void Reflect(TVisitor& visitor, lsSaveOptions& value) {
|
|
||||||
REFLECT_MEMBER_START();
|
|
||||||
REFLECT_MEMBER(includeText);
|
|
||||||
REFLECT_MEMBER_END();
|
|
||||||
}
|
|
||||||
|
|
||||||
struct lsTextDocumentSyncOptions {
|
struct lsTextDocumentSyncOptions {
|
||||||
// Open and close notifications are sent to the server.
|
// Open and close notifications are sent to the server.
|
||||||
@ -941,17 +750,7 @@ struct lsTextDocumentSyncOptions {
|
|||||||
// Save notifications are sent to the server.
|
// Save notifications are sent to the server.
|
||||||
optional<lsSaveOptions> save;
|
optional<lsSaveOptions> save;
|
||||||
};
|
};
|
||||||
|
MAKE_REFLECT_STRUCT(lsTextDocumentSyncOptions, openClose, change, willSave, willSaveWaitUntil, save);
|
||||||
template<typename TVisitor>
|
|
||||||
void Reflect(TVisitor& visitor, lsTextDocumentSyncOptions& value) {
|
|
||||||
REFLECT_MEMBER_START();
|
|
||||||
REFLECT_MEMBER(openClose);
|
|
||||||
REFLECT_MEMBER(change);
|
|
||||||
REFLECT_MEMBER(willSave);
|
|
||||||
REFLECT_MEMBER(willSaveWaitUntil);
|
|
||||||
REFLECT_MEMBER(save);
|
|
||||||
REFLECT_MEMBER_END();
|
|
||||||
}
|
|
||||||
|
|
||||||
struct lsServerCapabilities {
|
struct lsServerCapabilities {
|
||||||
// Defines how text documents are synced. Is either a detailed structure defining each notification or
|
// Defines how text documents are synced. Is either a detailed structure defining each notification or
|
||||||
@ -990,42 +789,30 @@ struct lsServerCapabilities {
|
|||||||
// The server provides execute command support.
|
// The server provides execute command support.
|
||||||
optional<lsExecuteCommandOptions> executeCommandProvider;
|
optional<lsExecuteCommandOptions> executeCommandProvider;
|
||||||
};
|
};
|
||||||
|
MAKE_REFLECT_STRUCT(lsServerCapabilities,
|
||||||
template<typename TVisitor>
|
textDocumentSync,
|
||||||
void Reflect(TVisitor& visitor, lsServerCapabilities& value) {
|
hoverProvider,
|
||||||
REFLECT_MEMBER_START();
|
completionProvider,
|
||||||
REFLECT_MEMBER(textDocumentSync);
|
signatureHelpProvider,
|
||||||
REFLECT_MEMBER(hoverProvider);
|
definitionProvider,
|
||||||
REFLECT_MEMBER(completionProvider);
|
referencesProvider,
|
||||||
REFLECT_MEMBER(signatureHelpProvider);
|
documentHighlightProvider,
|
||||||
REFLECT_MEMBER(definitionProvider);
|
documentSymbolProvider,
|
||||||
REFLECT_MEMBER(referencesProvider);
|
workspaceSymbolProvider,
|
||||||
REFLECT_MEMBER(documentHighlightProvider);
|
codeActionProvider,
|
||||||
REFLECT_MEMBER(documentSymbolProvider);
|
codeLensProvider,
|
||||||
REFLECT_MEMBER(workspaceSymbolProvider);
|
documentFormattingProvider,
|
||||||
REFLECT_MEMBER(codeActionProvider);
|
documentRangeFormattingProvider,
|
||||||
REFLECT_MEMBER(codeLensProvider);
|
documentOnTypeFormattingProvider,
|
||||||
REFLECT_MEMBER(documentFormattingProvider);
|
renameProvider,
|
||||||
REFLECT_MEMBER(documentRangeFormattingProvider);
|
documentLinkProvider,
|
||||||
REFLECT_MEMBER(documentOnTypeFormattingProvider);
|
executeCommandProvider);
|
||||||
REFLECT_MEMBER(renameProvider);
|
|
||||||
REFLECT_MEMBER(documentLinkProvider);
|
|
||||||
REFLECT_MEMBER(executeCommandProvider);
|
|
||||||
REFLECT_MEMBER_END();
|
|
||||||
}
|
|
||||||
|
|
||||||
struct lsInitializeResult {
|
struct lsInitializeResult {
|
||||||
// The capabilities the language server provides.
|
// The capabilities the language server provides.
|
||||||
lsServerCapabilities capabilities;
|
lsServerCapabilities capabilities;
|
||||||
};
|
};
|
||||||
|
MAKE_REFLECT_STRUCT(lsInitializeResult, capabilities);
|
||||||
template<typename TVisitor>
|
|
||||||
void Reflect(TVisitor& visitor, lsInitializeResult& value) {
|
|
||||||
REFLECT_MEMBER_START();
|
|
||||||
REFLECT_MEMBER(capabilities);
|
|
||||||
REFLECT_MEMBER_END();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
struct Ipc_InitializeRequest : public IpcMessage<Ipc_InitializeRequest> {
|
struct Ipc_InitializeRequest : public IpcMessage<Ipc_InitializeRequest> {
|
||||||
const static IpcId kIpcId = IpcId::Initialize;
|
const static IpcId kIpcId = IpcId::Initialize;
|
||||||
@ -1033,38 +820,20 @@ struct Ipc_InitializeRequest : public IpcMessage<Ipc_InitializeRequest> {
|
|||||||
lsRequestId id;
|
lsRequestId id;
|
||||||
lsInitializeParams params;
|
lsInitializeParams params;
|
||||||
};
|
};
|
||||||
template<typename TVisitor>
|
MAKE_REFLECT_STRUCT(Ipc_InitializeRequest, id, params);
|
||||||
void Reflect(TVisitor& visitor, Ipc_InitializeRequest& value) {
|
|
||||||
REFLECT_MEMBER_START();
|
|
||||||
REFLECT_MEMBER(id);
|
|
||||||
REFLECT_MEMBER(params);
|
|
||||||
REFLECT_MEMBER_END();
|
|
||||||
}
|
|
||||||
|
|
||||||
struct Out_InitializeResponse : public lsOutMessage<Out_InitializeResponse> {
|
struct Out_InitializeResponse : public lsOutMessage<Out_InitializeResponse> {
|
||||||
lsRequestId id;
|
lsRequestId id;
|
||||||
lsInitializeResult result;
|
lsInitializeResult result;
|
||||||
};
|
};
|
||||||
template<typename TVisitor>
|
MAKE_REFLECT_STRUCT(Out_InitializeResponse, jsonrpc, id, result);
|
||||||
void Reflect(TVisitor& visitor, Out_InitializeResponse& value) {
|
|
||||||
REFLECT_MEMBER_START();
|
|
||||||
REFLECT_MEMBER(jsonrpc);
|
|
||||||
REFLECT_MEMBER(id);
|
|
||||||
REFLECT_MEMBER(result);
|
|
||||||
REFLECT_MEMBER_END();
|
|
||||||
}
|
|
||||||
|
|
||||||
struct Ipc_InitializedNotification : public IpcMessage<Ipc_InitializedNotification> {
|
struct Ipc_InitializedNotification : public IpcMessage<Ipc_InitializedNotification> {
|
||||||
const static IpcId kIpcId = IpcId::Initialized;
|
const static IpcId kIpcId = IpcId::Initialized;
|
||||||
|
|
||||||
lsRequestId id;
|
lsRequestId id;
|
||||||
};
|
};
|
||||||
template<typename TVisitor>
|
MAKE_REFLECT_STRUCT(Ipc_InitializedNotification, id);
|
||||||
void Reflect(TVisitor& visitor, Ipc_InitializedNotification& value) {
|
|
||||||
REFLECT_MEMBER_START();
|
|
||||||
REFLECT_MEMBER(id);
|
|
||||||
REFLECT_MEMBER_END();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -1112,65 +881,33 @@ struct Ipc_CancelRequest : public IpcMessage<Ipc_CancelRequest> {
|
|||||||
static const IpcId kIpcId = IpcId::CancelRequest;
|
static const IpcId kIpcId = IpcId::CancelRequest;
|
||||||
lsRequestId id;
|
lsRequestId id;
|
||||||
};
|
};
|
||||||
template<typename TVisitor>
|
MAKE_REFLECT_STRUCT(Ipc_CancelRequest, id);
|
||||||
void Reflect(TVisitor& visitor, Ipc_CancelRequest& value) {
|
|
||||||
REFLECT_MEMBER_START();
|
|
||||||
REFLECT_MEMBER(id);
|
|
||||||
REFLECT_MEMBER_END();
|
|
||||||
}
|
|
||||||
|
|
||||||
// List symbols in a document.
|
// List symbols in a document.
|
||||||
struct lsDocumentSymbolParams {
|
struct lsDocumentSymbolParams {
|
||||||
lsTextDocumentIdentifier textDocument;
|
lsTextDocumentIdentifier textDocument;
|
||||||
};
|
};
|
||||||
template<typename TVisitor>
|
MAKE_REFLECT_STRUCT(lsDocumentSymbolParams, textDocument);
|
||||||
void Reflect(TVisitor& visitor, lsDocumentSymbolParams& value) {
|
|
||||||
REFLECT_MEMBER_START();
|
|
||||||
REFLECT_MEMBER(textDocument);
|
|
||||||
REFLECT_MEMBER_END();
|
|
||||||
}
|
|
||||||
struct Ipc_TextDocumentDocumentSymbol : public IpcMessage<Ipc_TextDocumentDocumentSymbol> {
|
struct Ipc_TextDocumentDocumentSymbol : public IpcMessage<Ipc_TextDocumentDocumentSymbol> {
|
||||||
const static IpcId kIpcId = IpcId::TextDocumentDocumentSymbol;
|
const static IpcId kIpcId = IpcId::TextDocumentDocumentSymbol;
|
||||||
|
|
||||||
lsRequestId id;
|
lsRequestId id;
|
||||||
lsDocumentSymbolParams params;
|
lsDocumentSymbolParams params;
|
||||||
};
|
};
|
||||||
template<typename TVisitor>
|
MAKE_REFLECT_STRUCT(Ipc_TextDocumentDocumentSymbol, id, params);
|
||||||
void Reflect(TVisitor& visitor, Ipc_TextDocumentDocumentSymbol& value) {
|
|
||||||
REFLECT_MEMBER_START();
|
|
||||||
REFLECT_MEMBER(id);
|
|
||||||
REFLECT_MEMBER(params);
|
|
||||||
REFLECT_MEMBER_END();
|
|
||||||
}
|
|
||||||
struct Out_TextDocumentDocumentSymbol : public lsOutMessage<Out_TextDocumentDocumentSymbol> {
|
struct Out_TextDocumentDocumentSymbol : public lsOutMessage<Out_TextDocumentDocumentSymbol> {
|
||||||
lsRequestId id;
|
lsRequestId id;
|
||||||
std::vector<lsSymbolInformation> result;
|
std::vector<lsSymbolInformation> result;
|
||||||
};
|
};
|
||||||
template<typename TVisitor>
|
MAKE_REFLECT_STRUCT(Out_TextDocumentDocumentSymbol, jsonrpc, id, result);
|
||||||
void Reflect(TVisitor& visitor, Out_TextDocumentDocumentSymbol& value) {
|
|
||||||
REFLECT_MEMBER_START();
|
|
||||||
REFLECT_MEMBER(jsonrpc);
|
|
||||||
REFLECT_MEMBER(id);
|
|
||||||
REFLECT_MEMBER(result);
|
|
||||||
REFLECT_MEMBER_END();
|
|
||||||
}
|
|
||||||
|
|
||||||
// List code lens in a document.
|
// List code lens in a document.
|
||||||
struct lsDocumentCodeLensParams {
|
struct lsDocumentCodeLensParams {
|
||||||
lsTextDocumentIdentifier textDocument;
|
lsTextDocumentIdentifier textDocument;
|
||||||
};
|
};
|
||||||
template<typename TVisitor>
|
MAKE_REFLECT_STRUCT(lsDocumentCodeLensParams, textDocument);
|
||||||
void Reflect(TVisitor& visitor, lsDocumentCodeLensParams& value) {
|
|
||||||
REFLECT_MEMBER_START();
|
|
||||||
REFLECT_MEMBER(textDocument);
|
|
||||||
REFLECT_MEMBER_END();
|
|
||||||
}
|
|
||||||
struct lsCodeLensUserData {};
|
struct lsCodeLensUserData {};
|
||||||
template<typename TVisitor>
|
MAKE_REFLECT_EMPTY_STRUCT(lsCodeLensUserData);
|
||||||
void Reflect(TVisitor& visitor, lsCodeLensUserData& value) {
|
|
||||||
REFLECT_MEMBER_START();
|
|
||||||
REFLECT_MEMBER_END();
|
|
||||||
}
|
|
||||||
struct lsCodeLensCommandArguments {
|
struct lsCodeLensCommandArguments {
|
||||||
lsDocumentUri uri;
|
lsDocumentUri uri;
|
||||||
lsPosition position;
|
lsPosition position;
|
||||||
@ -1184,85 +921,41 @@ struct Ipc_TextDocumentCodeLens : public IpcMessage<Ipc_TextDocumentCodeLens> {
|
|||||||
lsRequestId id;
|
lsRequestId id;
|
||||||
lsDocumentCodeLensParams params;
|
lsDocumentCodeLensParams params;
|
||||||
};
|
};
|
||||||
template<typename TVisitor>
|
MAKE_REFLECT_STRUCT(Ipc_TextDocumentCodeLens, id, params);
|
||||||
void Reflect(TVisitor& visitor, Ipc_TextDocumentCodeLens& value) {
|
|
||||||
REFLECT_MEMBER_START();
|
|
||||||
REFLECT_MEMBER(id);
|
|
||||||
REFLECT_MEMBER(params);
|
|
||||||
REFLECT_MEMBER_END();
|
|
||||||
}
|
|
||||||
struct Out_TextDocumentCodeLens : public lsOutMessage<Out_TextDocumentCodeLens> {
|
struct Out_TextDocumentCodeLens : public lsOutMessage<Out_TextDocumentCodeLens> {
|
||||||
lsRequestId id;
|
lsRequestId id;
|
||||||
std::vector<lsCodeLens<lsCodeLensUserData, lsCodeLensCommandArguments>> result;
|
std::vector<lsCodeLens<lsCodeLensUserData, lsCodeLensCommandArguments>> result;
|
||||||
};
|
};
|
||||||
template<typename TVisitor>
|
MAKE_REFLECT_STRUCT(Out_TextDocumentCodeLens, jsonrpc, id, result);
|
||||||
void Reflect(TVisitor& visitor, Out_TextDocumentCodeLens& value) {
|
|
||||||
REFLECT_MEMBER_START();
|
|
||||||
REFLECT_MEMBER(jsonrpc);
|
|
||||||
REFLECT_MEMBER(id);
|
|
||||||
REFLECT_MEMBER(result);
|
|
||||||
REFLECT_MEMBER_END();
|
|
||||||
}
|
|
||||||
struct Ipc_CodeLensResolve : public IpcMessage<Ipc_CodeLensResolve> {
|
struct Ipc_CodeLensResolve : public IpcMessage<Ipc_CodeLensResolve> {
|
||||||
const static IpcId kIpcId = IpcId::CodeLensResolve;
|
const static IpcId kIpcId = IpcId::CodeLensResolve;
|
||||||
|
|
||||||
lsRequestId id;
|
lsRequestId id;
|
||||||
TCodeLens params;
|
TCodeLens params;
|
||||||
};
|
};
|
||||||
template<typename TVisitor>
|
MAKE_REFLECT_STRUCT(Ipc_CodeLensResolve, id, params);
|
||||||
void Reflect(TVisitor& visitor, Ipc_CodeLensResolve& value) {
|
|
||||||
REFLECT_MEMBER_START();
|
|
||||||
REFLECT_MEMBER(id);
|
|
||||||
REFLECT_MEMBER(params);
|
|
||||||
REFLECT_MEMBER_END();
|
|
||||||
}
|
|
||||||
struct Out_CodeLensResolve : public lsOutMessage<Out_CodeLensResolve> {
|
struct Out_CodeLensResolve : public lsOutMessage<Out_CodeLensResolve> {
|
||||||
lsRequestId id;
|
lsRequestId id;
|
||||||
TCodeLens result;
|
TCodeLens result;
|
||||||
};
|
};
|
||||||
template<typename TVisitor>
|
MAKE_REFLECT_STRUCT(Out_CodeLensResolve, jsonrpc, id, result);
|
||||||
void Reflect(TVisitor& visitor, Out_CodeLensResolve& value) {
|
|
||||||
REFLECT_MEMBER_START();
|
|
||||||
REFLECT_MEMBER(jsonrpc);
|
|
||||||
REFLECT_MEMBER(id);
|
|
||||||
REFLECT_MEMBER(result);
|
|
||||||
REFLECT_MEMBER_END();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Search for symbols in the workspace.
|
// Search for symbols in the workspace.
|
||||||
struct lsWorkspaceSymbolParams {
|
struct lsWorkspaceSymbolParams {
|
||||||
std::string query;
|
std::string query;
|
||||||
};
|
};
|
||||||
template<typename TVisitor>
|
MAKE_REFLECT_STRUCT(lsWorkspaceSymbolParams, query);
|
||||||
void Reflect(TVisitor& visitor, lsWorkspaceSymbolParams& value) {
|
|
||||||
REFLECT_MEMBER_START();
|
|
||||||
REFLECT_MEMBER(query);
|
|
||||||
REFLECT_MEMBER_END();
|
|
||||||
}
|
|
||||||
struct Ipc_WorkspaceSymbol : public IpcMessage<Ipc_WorkspaceSymbol > {
|
struct Ipc_WorkspaceSymbol : public IpcMessage<Ipc_WorkspaceSymbol > {
|
||||||
const static IpcId kIpcId = IpcId::WorkspaceSymbol;
|
const static IpcId kIpcId = IpcId::WorkspaceSymbol;
|
||||||
lsRequestId id;
|
lsRequestId id;
|
||||||
lsWorkspaceSymbolParams params;
|
lsWorkspaceSymbolParams params;
|
||||||
};
|
};
|
||||||
template<typename TVisitor>
|
MAKE_REFLECT_STRUCT(Ipc_WorkspaceSymbol, id, params);
|
||||||
void Reflect(TVisitor& visitor, Ipc_WorkspaceSymbol& value) {
|
|
||||||
REFLECT_MEMBER_START();
|
|
||||||
REFLECT_MEMBER(id);
|
|
||||||
REFLECT_MEMBER(params);
|
|
||||||
REFLECT_MEMBER_END();
|
|
||||||
}
|
|
||||||
struct Out_WorkspaceSymbol : public lsOutMessage<Out_WorkspaceSymbol> {
|
struct Out_WorkspaceSymbol : public lsOutMessage<Out_WorkspaceSymbol> {
|
||||||
lsRequestId id;
|
lsRequestId id;
|
||||||
std::vector<lsSymbolInformation> result;
|
std::vector<lsSymbolInformation> result;
|
||||||
};
|
};
|
||||||
template<typename TVisitor>
|
MAKE_REFLECT_STRUCT(Out_WorkspaceSymbol, jsonrpc, id, result);
|
||||||
void Reflect(TVisitor& visitor, Out_WorkspaceSymbol& value) {
|
|
||||||
REFLECT_MEMBER_START();
|
|
||||||
REFLECT_MEMBER(jsonrpc);
|
|
||||||
REFLECT_MEMBER(id);
|
|
||||||
REFLECT_MEMBER(result);
|
|
||||||
REFLECT_MEMBER_END();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Show a message to the user.
|
// Show a message to the user.
|
||||||
enum class lsMessageType : int {
|
enum class lsMessageType : int {
|
||||||
@ -1276,19 +969,13 @@ struct Out_ShowLogMessageParams {
|
|||||||
lsMessageType type = lsMessageType::Error;
|
lsMessageType type = lsMessageType::Error;
|
||||||
std::string message;
|
std::string message;
|
||||||
};
|
};
|
||||||
template<typename TVisitor>
|
MAKE_REFLECT_STRUCT(Out_ShowLogMessageParams, type, message);
|
||||||
void Reflect(TVisitor& visitor, Out_ShowLogMessageParams& value) {
|
|
||||||
REFLECT_MEMBER_START();
|
|
||||||
REFLECT_MEMBER(type);
|
|
||||||
REFLECT_MEMBER(message);
|
|
||||||
REFLECT_MEMBER_END();
|
|
||||||
}
|
|
||||||
struct Out_ShowLogMessage : public lsOutMessage<Out_ShowLogMessage> {
|
struct Out_ShowLogMessage : public lsOutMessage<Out_ShowLogMessage> {
|
||||||
enum class DisplayType {
|
enum class DisplayType {
|
||||||
Show, Log
|
Show, Log
|
||||||
};
|
};
|
||||||
DisplayType display_type = DisplayType::Show;
|
DisplayType display_type = DisplayType::Show;
|
||||||
|
|
||||||
std::string method();
|
std::string method();
|
||||||
Out_ShowLogMessageParams params;
|
Out_ShowLogMessageParams params;
|
||||||
};
|
};
|
||||||
|
105
src/query.h
105
src/query.h
@ -58,16 +58,7 @@ struct QueryableLocation {
|
|||||||
interesting < o.interesting;
|
interesting < o.interesting;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
MAKE_REFLECT_STRUCT(QueryableLocation, path, line, column, interesting);
|
||||||
template<typename TVisitor>
|
|
||||||
void Reflect(TVisitor& visitor, QueryableLocation& value) {
|
|
||||||
REFLECT_MEMBER_START();
|
|
||||||
REFLECT_MEMBER(path);
|
|
||||||
REFLECT_MEMBER(line);
|
|
||||||
REFLECT_MEMBER(column);
|
|
||||||
REFLECT_MEMBER(interesting);
|
|
||||||
REFLECT_MEMBER_END();
|
|
||||||
}
|
|
||||||
|
|
||||||
struct UsrRef {
|
struct UsrRef {
|
||||||
Usr usr;
|
Usr usr;
|
||||||
@ -84,14 +75,7 @@ struct UsrRef {
|
|||||||
return usr < other.usr && loc < other.loc;
|
return usr < other.usr && loc < other.loc;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
MAKE_REFLECT_STRUCT(UsrRef, usr, loc);
|
||||||
template<typename TVisitor>
|
|
||||||
void Reflect(TVisitor& visitor, UsrRef& value) {
|
|
||||||
REFLECT_MEMBER_START();
|
|
||||||
REFLECT_MEMBER(usr);
|
|
||||||
REFLECT_MEMBER(loc);
|
|
||||||
REFLECT_MEMBER_END();
|
|
||||||
}
|
|
||||||
|
|
||||||
// There are two sources of reindex updates: the (single) definition of a
|
// There are two sources of reindex updates: the (single) definition of a
|
||||||
// symbol has changed, or one of many users of the symbol has changed.
|
// symbol has changed, or one of many users of the symbol has changed.
|
||||||
@ -135,14 +119,7 @@ struct QueryableFile {
|
|||||||
QueryableFile() {} // For serialization.
|
QueryableFile() {} // For serialization.
|
||||||
QueryableFile(const IndexedFile& indexed);
|
QueryableFile(const IndexedFile& indexed);
|
||||||
};
|
};
|
||||||
|
MAKE_REFLECT_STRUCT(QueryableFile, file_id, outline);
|
||||||
template<typename TVisitor>
|
|
||||||
void Reflect(TVisitor& visitor, QueryableFile& value) {
|
|
||||||
REFLECT_MEMBER_START();
|
|
||||||
REFLECT_MEMBER(file_id);
|
|
||||||
REFLECT_MEMBER(outline);
|
|
||||||
REFLECT_MEMBER_END();
|
|
||||||
}
|
|
||||||
|
|
||||||
struct QueryableTypeDef {
|
struct QueryableTypeDef {
|
||||||
using DefUpdate = TypeDefDefinitionData<Usr, Usr, Usr, QueryableLocation>;
|
using DefUpdate = TypeDefDefinitionData<Usr, Usr, Usr, QueryableLocation>;
|
||||||
@ -156,15 +133,7 @@ struct QueryableTypeDef {
|
|||||||
QueryableTypeDef() : def("") {} // For serialization.
|
QueryableTypeDef() : def("") {} // For serialization.
|
||||||
QueryableTypeDef(IdCache& id_cache, const IndexedTypeDef& indexed);
|
QueryableTypeDef(IdCache& id_cache, const IndexedTypeDef& indexed);
|
||||||
};
|
};
|
||||||
|
MAKE_REFLECT_STRUCT(QueryableTypeDef, def, derived, uses);
|
||||||
template<typename TVisitor>
|
|
||||||
void Reflect(TVisitor& visitor, QueryableTypeDef& value) {
|
|
||||||
REFLECT_MEMBER_START();
|
|
||||||
REFLECT_MEMBER(def);
|
|
||||||
REFLECT_MEMBER(derived);
|
|
||||||
REFLECT_MEMBER(uses);
|
|
||||||
REFLECT_MEMBER_END();
|
|
||||||
}
|
|
||||||
|
|
||||||
struct QueryableFuncDef {
|
struct QueryableFuncDef {
|
||||||
using DefUpdate = FuncDefDefinitionData<Usr, Usr, Usr, UsrRef, QueryableLocation>;
|
using DefUpdate = FuncDefDefinitionData<Usr, Usr, Usr, UsrRef, QueryableLocation>;
|
||||||
@ -182,17 +151,7 @@ struct QueryableFuncDef {
|
|||||||
QueryableFuncDef() : def("") {} // For serialization.
|
QueryableFuncDef() : def("") {} // For serialization.
|
||||||
QueryableFuncDef(IdCache& id_cache, const IndexedFuncDef& indexed);
|
QueryableFuncDef(IdCache& id_cache, const IndexedFuncDef& indexed);
|
||||||
};
|
};
|
||||||
|
MAKE_REFLECT_STRUCT(QueryableFuncDef, def, declarations, derived, callers, uses);
|
||||||
template<typename TVisitor>
|
|
||||||
void Reflect(TVisitor& visitor, QueryableFuncDef& value) {
|
|
||||||
REFLECT_MEMBER_START();
|
|
||||||
REFLECT_MEMBER(def);
|
|
||||||
REFLECT_MEMBER(declarations);
|
|
||||||
REFLECT_MEMBER(derived);
|
|
||||||
REFLECT_MEMBER(callers);
|
|
||||||
REFLECT_MEMBER(uses);
|
|
||||||
REFLECT_MEMBER_END();
|
|
||||||
}
|
|
||||||
|
|
||||||
struct QueryableVarDef {
|
struct QueryableVarDef {
|
||||||
using DefUpdate = VarDefDefinitionData<Usr, Usr, Usr, QueryableLocation>;
|
using DefUpdate = VarDefDefinitionData<Usr, Usr, Usr, QueryableLocation>;
|
||||||
@ -204,14 +163,7 @@ struct QueryableVarDef {
|
|||||||
QueryableVarDef() : def("") {} // For serialization.
|
QueryableVarDef() : def("") {} // For serialization.
|
||||||
QueryableVarDef(IdCache& id_cache, const IndexedVarDef& indexed);
|
QueryableVarDef(IdCache& id_cache, const IndexedVarDef& indexed);
|
||||||
};
|
};
|
||||||
|
MAKE_REFLECT_STRUCT(QueryableVarDef, def, uses);
|
||||||
template<typename TVisitor>
|
|
||||||
void Reflect(TVisitor& visitor, QueryableVarDef& value) {
|
|
||||||
REFLECT_MEMBER_START();
|
|
||||||
REFLECT_MEMBER(def);
|
|
||||||
REFLECT_MEMBER(uses);
|
|
||||||
REFLECT_MEMBER_END();
|
|
||||||
}
|
|
||||||
|
|
||||||
enum class SymbolKind { Invalid, File, Type, Func, Var };
|
enum class SymbolKind { Invalid, File, Type, Func, Var };
|
||||||
struct SymbolIdx {
|
struct SymbolIdx {
|
||||||
@ -284,31 +236,26 @@ struct IndexUpdate {
|
|||||||
// Merges the contents of |update| into this IndexUpdate instance.
|
// Merges the contents of |update| into this IndexUpdate instance.
|
||||||
void Merge(const IndexUpdate& update);
|
void Merge(const IndexUpdate& update);
|
||||||
};
|
};
|
||||||
|
MAKE_REFLECT_STRUCT(IndexUpdate,
|
||||||
template<typename TVisitor>
|
files_removed,
|
||||||
void Reflect(TVisitor& visitor, IndexUpdate& value) {
|
files_added,
|
||||||
REFLECT_MEMBER_START();
|
files_outline,
|
||||||
REFLECT_MEMBER(files_removed);
|
types_removed,
|
||||||
REFLECT_MEMBER(files_added);
|
types_added,
|
||||||
REFLECT_MEMBER(files_outline);
|
types_def_changed,
|
||||||
REFLECT_MEMBER(types_removed);
|
types_derived,
|
||||||
REFLECT_MEMBER(types_added);
|
types_uses,
|
||||||
REFLECT_MEMBER(types_def_changed);
|
funcs_removed,
|
||||||
REFLECT_MEMBER(types_derived);
|
funcs_added,
|
||||||
REFLECT_MEMBER(types_uses);
|
funcs_def_changed,
|
||||||
REFLECT_MEMBER(funcs_removed);
|
funcs_declarations,
|
||||||
REFLECT_MEMBER(funcs_added);
|
funcs_derived,
|
||||||
REFLECT_MEMBER(funcs_def_changed);
|
funcs_callers,
|
||||||
REFLECT_MEMBER(funcs_declarations);
|
funcs_uses,
|
||||||
REFLECT_MEMBER(funcs_derived);
|
vars_removed,
|
||||||
REFLECT_MEMBER(funcs_callers);
|
vars_added,
|
||||||
REFLECT_MEMBER(funcs_uses);
|
vars_def_changed,
|
||||||
REFLECT_MEMBER(vars_removed);
|
vars_uses);
|
||||||
REFLECT_MEMBER(vars_added);
|
|
||||||
REFLECT_MEMBER(vars_def_changed);
|
|
||||||
REFLECT_MEMBER(vars_uses);
|
|
||||||
REFLECT_MEMBER_END();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// The query database is heavily optimized for fast queries. It is stored
|
// The query database is heavily optimized for fast queries. It is stored
|
||||||
|
186
src/serializer.h
186
src/serializer.h
@ -1,5 +1,6 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <macro_map.h>
|
||||||
#include <optional.h>
|
#include <optional.h>
|
||||||
#include <rapidjson/document.h>
|
#include <rapidjson/document.h>
|
||||||
#include <rapidjson/prettywriter.h>
|
#include <rapidjson/prettywriter.h>
|
||||||
@ -38,6 +39,40 @@ struct IndexedFile;
|
|||||||
value = static_cast<type>(value0); \
|
value = static_cast<type>(value0); \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define _MAPPABLE_REFLECT_MEMBER(name) \
|
||||||
|
REFLECT_MEMBER(name);
|
||||||
|
|
||||||
|
#define MAKE_REFLECT_EMPTY_STRUCT(type, ...) \
|
||||||
|
template<typename TVisitor> \
|
||||||
|
void Reflect(TVisitor& visitor, type& value) { \
|
||||||
|
REFLECT_MEMBER_START(); \
|
||||||
|
REFLECT_MEMBER_END(); \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define MAKE_REFLECT_STRUCT(type, ...) \
|
||||||
|
template<typename TVisitor> \
|
||||||
|
void Reflect(TVisitor& visitor, type& value) { \
|
||||||
|
REFLECT_MEMBER_START(); \
|
||||||
|
MACRO_MAP(_MAPPABLE_REFLECT_MEMBER, __VA_ARGS__) \
|
||||||
|
REFLECT_MEMBER_END(); \
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// API:
|
// API:
|
||||||
/*
|
/*
|
||||||
@ -158,156 +193,5 @@ void ReflectMember(Reader& visitor, const char* name, T& value) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#if false
|
|
||||||
|
|
||||||
void Serialize(Writer& writer, int value);
|
|
||||||
void Serialize(Writer& writer, const std::string& value);
|
|
||||||
void Serialize(Writer& writer, Location location);
|
|
||||||
void Serialize(Writer& writer, uint64_t value);
|
|
||||||
void Serialize(Writer& writer, IndexedFile& file);
|
|
||||||
|
|
||||||
template<typename T>
|
|
||||||
void Serialize(Writer& writer, Id<T> id) {
|
|
||||||
writer.Uint64(id.id);
|
|
||||||
}
|
|
||||||
|
|
||||||
template<typename T>
|
|
||||||
void Serialize(Writer& writer, optional<T> value) {
|
|
||||||
if (value)
|
|
||||||
Serialize(writer, value.value());
|
|
||||||
else
|
|
||||||
writer.Null();
|
|
||||||
}
|
|
||||||
|
|
||||||
template<typename T>
|
|
||||||
void Serialize(Writer& writer, const std::vector<T>& values) {
|
|
||||||
writer.StartArray();
|
|
||||||
for (const T& value : values)
|
|
||||||
Serialize(writer, value);
|
|
||||||
writer.EndArray();
|
|
||||||
}
|
|
||||||
|
|
||||||
template<typename T>
|
|
||||||
void Serialize(Writer& writer, Ref<T> ref) {
|
|
||||||
std::string s = std::to_string(ref.id.id) + "@" + ref.loc.ToString();
|
|
||||||
writer.String(s.c_str());
|
|
||||||
}
|
|
||||||
|
|
||||||
template<typename T>
|
|
||||||
void Serialize(Writer& writer, const char* key, const std::vector<Ref<T>>& refs) {
|
|
||||||
if (refs.size() == 0)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (key) writer.Key(key);
|
|
||||||
writer.StartArray();
|
|
||||||
for (Ref<T> ref : refs)
|
|
||||||
Serialize(writer, nullptr, ref);
|
|
||||||
writer.EndArray();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#define SERIALIZE_MEMBER(name) \
|
|
||||||
SerializeMember(writer, #name, value.name)
|
|
||||||
#define SERIALIZE_MEMBER2(name, value) \
|
|
||||||
SerializeMember(writer, name, value)
|
|
||||||
#define DESERIALIZE_MEMBER(name) \
|
|
||||||
DeserializeMember(reader, #name, value.name)
|
|
||||||
#define DESERIALIZE_MEMBER2(name, value) \
|
|
||||||
DeserializeMember(reader, name, value)
|
|
||||||
|
|
||||||
// Special templates used by (DE)SERIALIZE_MEMBER macros.
|
|
||||||
template<typename T>
|
|
||||||
void SerializeMember(Writer& writer, const char* name, const T& value) {
|
|
||||||
writer.Key(name);
|
|
||||||
Serialize(writer, value);
|
|
||||||
}
|
|
||||||
template<typename T>
|
|
||||||
void SerializeMember(Writer& writer, const char* name, const std::vector<T>& value) {
|
|
||||||
if (value.empty())
|
|
||||||
return;
|
|
||||||
writer.Key(name);
|
|
||||||
Serialize(writer, value);
|
|
||||||
}
|
|
||||||
template<typename T>
|
|
||||||
void SerializeMember(Writer& writer, const char* name, const optional<T>& value) {
|
|
||||||
if (!value)
|
|
||||||
return;
|
|
||||||
writer.Key(name);
|
|
||||||
Serialize(writer, value.value());
|
|
||||||
}
|
|
||||||
|
|
||||||
void SerializeMember(Writer& writer, const char* name, const std::string& value);
|
|
||||||
|
|
||||||
template<typename T>
|
|
||||||
void DeserializeMember(const Reader& reader, const char* name, T& value) {
|
|
||||||
auto it = reader.FindMember(name);
|
|
||||||
if (it != reader.MemberEnd())
|
|
||||||
Deserialize(it->value, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
template<typename T>
|
|
||||||
void Deserialize(const Reader& reader, Id<T>& output) {
|
|
||||||
output = Id<T>(reader.GetUint64());
|
|
||||||
}
|
|
||||||
|
|
||||||
template<typename T>
|
|
||||||
void Deserialize(const Reader& reader, Ref<T>& output) {
|
|
||||||
const char* str_value = reader.GetString();
|
|
||||||
uint64_t id = atoi(str_value);
|
|
||||||
const char* loc_string = strchr(str_value, '@') + 1;
|
|
||||||
|
|
||||||
output.id = Id<T>(id);
|
|
||||||
output.loc = Location(loc_string);
|
|
||||||
}
|
|
||||||
|
|
||||||
template<typename T>
|
|
||||||
void Deserialize(const Reader& reader, std::vector<T>& value) {
|
|
||||||
for (const auto& entry : reader.GetArray()) {
|
|
||||||
T entry_value;
|
|
||||||
Deserialize(entry, entry_value);
|
|
||||||
value.push_back(entry_value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
template<typename T>
|
|
||||||
void Deserialize(const Reader& reader, optional<T>& value) {
|
|
||||||
T real_value;
|
|
||||||
Deserialize(reader, real_value);
|
|
||||||
value = real_value;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Deserialize(const Reader& reader, int& value);
|
|
||||||
void Deserialize(const Reader& reader, bool& value);
|
|
||||||
void Deserialize(const Reader& reader, std::string& value);
|
|
||||||
void Deserialize(const Reader& reader, Location& output);
|
|
||||||
void Deserialize(const Reader& reader, IndexedTypeDef& value);
|
|
||||||
void Deserialize(const Reader& reader, IndexedFuncDef& value);
|
|
||||||
void Deserialize(const Reader& reader, IndexedVarDef& value);
|
|
||||||
void Deserialize(const Reader& reader, IndexedFile& file);
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
std::string Serialize(IndexedFile& file);
|
std::string Serialize(IndexedFile& file);
|
||||||
IndexedFile Deserialize(std::string path, std::string serialized);
|
IndexedFile Deserialize(std::string path, std::string serialized);
|
||||||
|
@ -99,7 +99,7 @@ void RunTests() {
|
|||||||
for (std::string path : GetFilesInFolder("tests", true /*recursive*/, true /*add_folder_to_path*/)) {
|
for (std::string path : GetFilesInFolder("tests", true /*recursive*/, true /*add_folder_to_path*/)) {
|
||||||
//if (path != "tests/templates/specialized_func_definition.cc") continue;
|
//if (path != "tests/templates/specialized_func_definition.cc") continue;
|
||||||
//if (path != "tests/templates/namespace_template_class_template_func_usage_folded_into_one.cc") continue;
|
//if (path != "tests/templates/namespace_template_class_template_func_usage_folded_into_one.cc") continue;
|
||||||
if (path != "tests/foo2.cc") continue;
|
//if (path != "tests/foo2.cc") continue;
|
||||||
//if (path != "tests/namespaces/namespace_reference.cc") continue;
|
//if (path != "tests/namespaces/namespace_reference.cc") continue;
|
||||||
//if (path != "tests/templates/implicit_variable_instantiation.cc") continue;
|
//if (path != "tests/templates/implicit_variable_instantiation.cc") continue;
|
||||||
|
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <functional>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
134
third_party/macro_map.h
vendored
Normal file
134
third_party/macro_map.h
vendored
Normal file
@ -0,0 +1,134 @@
|
|||||||
|
/*
|
||||||
|
Boost Software License - Version 1.0 - August 17th, 2003
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person or organization
|
||||||
|
obtaining a copy of the software and accompanying documentation covered by
|
||||||
|
this license (the "Software") to use, reproduce, display, distribute,
|
||||||
|
execute, and transmit the Software, and to prepare derivative works of the
|
||||||
|
Software, and to permit third-parties to whom the Software is furnished to
|
||||||
|
do so, all subject to the following:
|
||||||
|
|
||||||
|
The copyright notices in the Software and this entire statement, including
|
||||||
|
the above license grant, this restriction and the following disclaimer,
|
||||||
|
must be included in all copies of the Software, in whole or in part, and
|
||||||
|
all derivative works of the Software, unless such copies or derivative
|
||||||
|
works are solely in the form of machine-executable object code generated by
|
||||||
|
a source language processor.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||||
|
SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||||
|
FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||||
|
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||||
|
DEALINGS IN THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Taken from https://github.com/cbeck88/visit_struct.
|
||||||
|
//
|
||||||
|
// Usage
|
||||||
|
//
|
||||||
|
// #define PRINT_DOUBLE(x) printf(#x " = %d\n", x);
|
||||||
|
//
|
||||||
|
// MACRO_MAP(PRINT_DOUBLE, 1, 2, 3)
|
||||||
|
// #define PRINT_DOUBLES(...) MACRO_MAP(PRINT_DOUBLE, __VA_ARGS__)
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
static constexpr const int max_visitable_members = 69;
|
||||||
|
|
||||||
|
#define VISIT_STRUCT_EXPAND(x) x
|
||||||
|
#define VISIT_STRUCT_PP_ARG_N( \
|
||||||
|
_1, _2, _3, _4, _5, _6, _7, _8, _9, _10,\
|
||||||
|
_11, _12, _13, _14, _15, _16, _17, _18, _19, _20,\
|
||||||
|
_21, _22, _23, _24, _25, _26, _27, _28, _29, _30,\
|
||||||
|
_31, _32, _33, _34, _35, _36, _37, _38, _39, _40,\
|
||||||
|
_41, _42, _43, _44, _45, _46, _47, _48, _49, _50,\
|
||||||
|
_51, _52, _53, _54, _55, _56, _57, _58, _59, _60,\
|
||||||
|
_61, _62, _63, _64, _65, _66, _67, _68, _69, N, ...) N
|
||||||
|
#define VISIT_STRUCT_PP_NARG(...) VISIT_STRUCT_EXPAND(VISIT_STRUCT_PP_ARG_N(__VA_ARGS__, \
|
||||||
|
69, 68, 67, 66, 65, 64, 63, 62, 61, 60, \
|
||||||
|
59, 58, 57, 56, 55, 54, 53, 52, 51, 50, \
|
||||||
|
49, 48, 47, 46, 45, 44, 43, 42, 41, 40, \
|
||||||
|
39, 38, 37, 36, 35, 34, 33, 32, 31, 30, \
|
||||||
|
29, 28, 27, 26, 25, 24, 23, 22, 21, 20, \
|
||||||
|
19, 18, 17, 16, 15, 14, 13, 12, 11, 10, \
|
||||||
|
9, 8, 7, 6, 5, 4, 3, 2, 1, 0))
|
||||||
|
|
||||||
|
/* need extra level to force extra eval */
|
||||||
|
#define VISIT_STRUCT_CONCAT_(a,b) a ## b
|
||||||
|
#define VISIT_STRUCT_CONCAT(a,b) VISIT_STRUCT_CONCAT_(a,b)
|
||||||
|
|
||||||
|
#define VISIT_STRUCT_APPLYF0(f)
|
||||||
|
#define VISIT_STRUCT_APPLYF1(f,_1) f(_1)
|
||||||
|
#define VISIT_STRUCT_APPLYF2(f,_1,_2) f(_1) f(_2)
|
||||||
|
#define VISIT_STRUCT_APPLYF3(f,_1,_2,_3) f(_1) f(_2) f(_3)
|
||||||
|
#define VISIT_STRUCT_APPLYF4(f,_1,_2,_3,_4) f(_1) f(_2) f(_3) f(_4)
|
||||||
|
#define VISIT_STRUCT_APPLYF5(f,_1,_2,_3,_4,_5) f(_1) f(_2) f(_3) f(_4) f(_5)
|
||||||
|
#define VISIT_STRUCT_APPLYF6(f,_1,_2,_3,_4,_5,_6) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6)
|
||||||
|
#define VISIT_STRUCT_APPLYF7(f,_1,_2,_3,_4,_5,_6,_7) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7)
|
||||||
|
#define VISIT_STRUCT_APPLYF8(f,_1,_2,_3,_4,_5,_6,_7,_8) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8)
|
||||||
|
#define VISIT_STRUCT_APPLYF9(f,_1,_2,_3,_4,_5,_6,_7,_8,_9) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9)
|
||||||
|
#define VISIT_STRUCT_APPLYF10(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10)
|
||||||
|
#define VISIT_STRUCT_APPLYF11(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11)
|
||||||
|
#define VISIT_STRUCT_APPLYF12(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12)
|
||||||
|
#define VISIT_STRUCT_APPLYF13(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13)
|
||||||
|
#define VISIT_STRUCT_APPLYF14(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14)
|
||||||
|
#define VISIT_STRUCT_APPLYF15(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15)
|
||||||
|
#define VISIT_STRUCT_APPLYF16(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16)
|
||||||
|
#define VISIT_STRUCT_APPLYF17(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17)
|
||||||
|
#define VISIT_STRUCT_APPLYF18(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18)
|
||||||
|
#define VISIT_STRUCT_APPLYF19(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19)
|
||||||
|
#define VISIT_STRUCT_APPLYF20(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20)
|
||||||
|
#define VISIT_STRUCT_APPLYF21(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21)
|
||||||
|
#define VISIT_STRUCT_APPLYF22(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22)
|
||||||
|
#define VISIT_STRUCT_APPLYF23(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23)
|
||||||
|
#define VISIT_STRUCT_APPLYF24(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24)
|
||||||
|
#define VISIT_STRUCT_APPLYF25(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25)
|
||||||
|
#define VISIT_STRUCT_APPLYF26(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26)
|
||||||
|
#define VISIT_STRUCT_APPLYF27(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26,_27) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27)
|
||||||
|
#define VISIT_STRUCT_APPLYF28(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26,_27,_28) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28)
|
||||||
|
#define VISIT_STRUCT_APPLYF29(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26,_27,_28,_29) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29)
|
||||||
|
#define VISIT_STRUCT_APPLYF30(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26,_27,_28,_29,_30) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30)
|
||||||
|
#define VISIT_STRUCT_APPLYF31(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26,_27,_28,_29,_30,_31) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31)
|
||||||
|
#define VISIT_STRUCT_APPLYF32(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26,_27,_28,_29,_30,_31,_32) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32)
|
||||||
|
#define VISIT_STRUCT_APPLYF33(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26,_27,_28,_29,_30,_31,_32,_33) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) f(_33)
|
||||||
|
#define VISIT_STRUCT_APPLYF34(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26,_27,_28,_29,_30,_31,_32,_33,_34) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) f(_33) f(_34)
|
||||||
|
#define VISIT_STRUCT_APPLYF35(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26,_27,_28,_29,_30,_31,_32,_33,_34,_35) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) f(_33) f(_34) f(_35)
|
||||||
|
#define VISIT_STRUCT_APPLYF36(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26,_27,_28,_29,_30,_31,_32,_33,_34,_35,_36) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) f(_33) f(_34) f(_35) f(_36)
|
||||||
|
#define VISIT_STRUCT_APPLYF37(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26,_27,_28,_29,_30,_31,_32,_33,_34,_35,_36,_37) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) f(_33) f(_34) f(_35) f(_36) f(_37)
|
||||||
|
#define VISIT_STRUCT_APPLYF38(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26,_27,_28,_29,_30,_31,_32,_33,_34,_35,_36,_37,_38) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) f(_33) f(_34) f(_35) f(_36) f(_37) f(_38)
|
||||||
|
#define VISIT_STRUCT_APPLYF39(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26,_27,_28,_29,_30,_31,_32,_33,_34,_35,_36,_37,_38,_39) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39)
|
||||||
|
#define VISIT_STRUCT_APPLYF40(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26,_27,_28,_29,_30,_31,_32,_33,_34,_35,_36,_37,_38,_39,_40) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39) f(_40)
|
||||||
|
#define VISIT_STRUCT_APPLYF41(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26,_27,_28,_29,_30,_31,_32,_33,_34,_35,_36,_37,_38,_39,_40,_41) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39) f(_40) f(_41)
|
||||||
|
#define VISIT_STRUCT_APPLYF42(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26,_27,_28,_29,_30,_31,_32,_33,_34,_35,_36,_37,_38,_39,_40,_41,_42) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39) f(_40) f(_41) f(_42)
|
||||||
|
#define VISIT_STRUCT_APPLYF43(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26,_27,_28,_29,_30,_31,_32,_33,_34,_35,_36,_37,_38,_39,_40,_41,_42,_43) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39) f(_40) f(_41) f(_42) f(_43)
|
||||||
|
#define VISIT_STRUCT_APPLYF44(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26,_27,_28,_29,_30,_31,_32,_33,_34,_35,_36,_37,_38,_39,_40,_41,_42,_43,_44) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39) f(_40) f(_41) f(_42) f(_43) f(_44)
|
||||||
|
#define VISIT_STRUCT_APPLYF45(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26,_27,_28,_29,_30,_31,_32,_33,_34,_35,_36,_37,_38,_39,_40,_41,_42,_43,_44,_45) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39) f(_40) f(_41) f(_42) f(_43) f(_44) f(_45)
|
||||||
|
#define VISIT_STRUCT_APPLYF46(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26,_27,_28,_29,_30,_31,_32,_33,_34,_35,_36,_37,_38,_39,_40,_41,_42,_43,_44,_45,_46) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39) f(_40) f(_41) f(_42) f(_43) f(_44) f(_45) f(_46)
|
||||||
|
#define VISIT_STRUCT_APPLYF47(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26,_27,_28,_29,_30,_31,_32,_33,_34,_35,_36,_37,_38,_39,_40,_41,_42,_43,_44,_45,_46,_47) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39) f(_40) f(_41) f(_42) f(_43) f(_44) f(_45) f(_46) f(_47)
|
||||||
|
#define VISIT_STRUCT_APPLYF48(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26,_27,_28,_29,_30,_31,_32,_33,_34,_35,_36,_37,_38,_39,_40,_41,_42,_43,_44,_45,_46,_47,_48) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39) f(_40) f(_41) f(_42) f(_43) f(_44) f(_45) f(_46) f(_47) f(_48)
|
||||||
|
#define VISIT_STRUCT_APPLYF49(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26,_27,_28,_29,_30,_31,_32,_33,_34,_35,_36,_37,_38,_39,_40,_41,_42,_43,_44,_45,_46,_47,_48,_49) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39) f(_40) f(_41) f(_42) f(_43) f(_44) f(_45) f(_46) f(_47) f(_48) f(_49)
|
||||||
|
#define VISIT_STRUCT_APPLYF50(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26,_27,_28,_29,_30,_31,_32,_33,_34,_35,_36,_37,_38,_39,_40,_41,_42,_43,_44,_45,_46,_47,_48,_49,_50) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39) f(_40) f(_41) f(_42) f(_43) f(_44) f(_45) f(_46) f(_47) f(_48) f(_49) f(_50)
|
||||||
|
#define VISIT_STRUCT_APPLYF51(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26,_27,_28,_29,_30,_31,_32,_33,_34,_35,_36,_37,_38,_39,_40,_41,_42,_43,_44,_45,_46,_47,_48,_49,_50,_51) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39) f(_40) f(_41) f(_42) f(_43) f(_44) f(_45) f(_46) f(_47) f(_48) f(_49) f(_50) f(_51)
|
||||||
|
#define VISIT_STRUCT_APPLYF52(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26,_27,_28,_29,_30,_31,_32,_33,_34,_35,_36,_37,_38,_39,_40,_41,_42,_43,_44,_45,_46,_47,_48,_49,_50,_51,_52) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39) f(_40) f(_41) f(_42) f(_43) f(_44) f(_45) f(_46) f(_47) f(_48) f(_49) f(_50) f(_51) f(_52)
|
||||||
|
#define VISIT_STRUCT_APPLYF53(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26,_27,_28,_29,_30,_31,_32,_33,_34,_35,_36,_37,_38,_39,_40,_41,_42,_43,_44,_45,_46,_47,_48,_49,_50,_51,_52,_53) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39) f(_40) f(_41) f(_42) f(_43) f(_44) f(_45) f(_46) f(_47) f(_48) f(_49) f(_50) f(_51) f(_52) f(_53)
|
||||||
|
#define VISIT_STRUCT_APPLYF54(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26,_27,_28,_29,_30,_31,_32,_33,_34,_35,_36,_37,_38,_39,_40,_41,_42,_43,_44,_45,_46,_47,_48,_49,_50,_51,_52,_53,_54) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39) f(_40) f(_41) f(_42) f(_43) f(_44) f(_45) f(_46) f(_47) f(_48) f(_49) f(_50) f(_51) f(_52) f(_53) f(_54)
|
||||||
|
#define VISIT_STRUCT_APPLYF55(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26,_27,_28,_29,_30,_31,_32,_33,_34,_35,_36,_37,_38,_39,_40,_41,_42,_43,_44,_45,_46,_47,_48,_49,_50,_51,_52,_53,_54,_55) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39) f(_40) f(_41) f(_42) f(_43) f(_44) f(_45) f(_46) f(_47) f(_48) f(_49) f(_50) f(_51) f(_52) f(_53) f(_54) f(_55)
|
||||||
|
#define VISIT_STRUCT_APPLYF56(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26,_27,_28,_29,_30,_31,_32,_33,_34,_35,_36,_37,_38,_39,_40,_41,_42,_43,_44,_45,_46,_47,_48,_49,_50,_51,_52,_53,_54,_55,_56) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39) f(_40) f(_41) f(_42) f(_43) f(_44) f(_45) f(_46) f(_47) f(_48) f(_49) f(_50) f(_51) f(_52) f(_53) f(_54) f(_55) f(_56)
|
||||||
|
#define VISIT_STRUCT_APPLYF57(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26,_27,_28,_29,_30,_31,_32,_33,_34,_35,_36,_37,_38,_39,_40,_41,_42,_43,_44,_45,_46,_47,_48,_49,_50,_51,_52,_53,_54,_55,_56,_57) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39) f(_40) f(_41) f(_42) f(_43) f(_44) f(_45) f(_46) f(_47) f(_48) f(_49) f(_50) f(_51) f(_52) f(_53) f(_54) f(_55) f(_56) f(_57)
|
||||||
|
#define VISIT_STRUCT_APPLYF58(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26,_27,_28,_29,_30,_31,_32,_33,_34,_35,_36,_37,_38,_39,_40,_41,_42,_43,_44,_45,_46,_47,_48,_49,_50,_51,_52,_53,_54,_55,_56,_57,_58) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39) f(_40) f(_41) f(_42) f(_43) f(_44) f(_45) f(_46) f(_47) f(_48) f(_49) f(_50) f(_51) f(_52) f(_53) f(_54) f(_55) f(_56) f(_57) f(_58)
|
||||||
|
#define VISIT_STRUCT_APPLYF59(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26,_27,_28,_29,_30,_31,_32,_33,_34,_35,_36,_37,_38,_39,_40,_41,_42,_43,_44,_45,_46,_47,_48,_49,_50,_51,_52,_53,_54,_55,_56,_57,_58,_59) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39) f(_40) f(_41) f(_42) f(_43) f(_44) f(_45) f(_46) f(_47) f(_48) f(_49) f(_50) f(_51) f(_52) f(_53) f(_54) f(_55) f(_56) f(_57) f(_58) f(_59)
|
||||||
|
#define VISIT_STRUCT_APPLYF60(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26,_27,_28,_29,_30,_31,_32,_33,_34,_35,_36,_37,_38,_39,_40,_41,_42,_43,_44,_45,_46,_47,_48,_49,_50,_51,_52,_53,_54,_55,_56,_57,_58,_59,_60) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39) f(_40) f(_41) f(_42) f(_43) f(_44) f(_45) f(_46) f(_47) f(_48) f(_49) f(_50) f(_51) f(_52) f(_53) f(_54) f(_55) f(_56) f(_57) f(_58) f(_59) f(_60)
|
||||||
|
#define VISIT_STRUCT_APPLYF61(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26,_27,_28,_29,_30,_31,_32,_33,_34,_35,_36,_37,_38,_39,_40,_41,_42,_43,_44,_45,_46,_47,_48,_49,_50,_51,_52,_53,_54,_55,_56,_57,_58,_59,_60,_61) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39) f(_40) f(_41) f(_42) f(_43) f(_44) f(_45) f(_46) f(_47) f(_48) f(_49) f(_50) f(_51) f(_52) f(_53) f(_54) f(_55) f(_56) f(_57) f(_58) f(_59) f(_60) f(_61)
|
||||||
|
#define VISIT_STRUCT_APPLYF62(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26,_27,_28,_29,_30,_31,_32,_33,_34,_35,_36,_37,_38,_39,_40,_41,_42,_43,_44,_45,_46,_47,_48,_49,_50,_51,_52,_53,_54,_55,_56,_57,_58,_59,_60,_61,_62) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39) f(_40) f(_41) f(_42) f(_43) f(_44) f(_45) f(_46) f(_47) f(_48) f(_49) f(_50) f(_51) f(_52) f(_53) f(_54) f(_55) f(_56) f(_57) f(_58) f(_59) f(_60) f(_61) f(_62)
|
||||||
|
#define VISIT_STRUCT_APPLYF63(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26,_27,_28,_29,_30,_31,_32,_33,_34,_35,_36,_37,_38,_39,_40,_41,_42,_43,_44,_45,_46,_47,_48,_49,_50,_51,_52,_53,_54,_55,_56,_57,_58,_59,_60,_61,_62,_63) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39) f(_40) f(_41) f(_42) f(_43) f(_44) f(_45) f(_46) f(_47) f(_48) f(_49) f(_50) f(_51) f(_52) f(_53) f(_54) f(_55) f(_56) f(_57) f(_58) f(_59) f(_60) f(_61) f(_62) f(_63)
|
||||||
|
#define VISIT_STRUCT_APPLYF64(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26,_27,_28,_29,_30,_31,_32,_33,_34,_35,_36,_37,_38,_39,_40,_41,_42,_43,_44,_45,_46,_47,_48,_49,_50,_51,_52,_53,_54,_55,_56,_57,_58,_59,_60,_61,_62,_63,_64) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39) f(_40) f(_41) f(_42) f(_43) f(_44) f(_45) f(_46) f(_47) f(_48) f(_49) f(_50) f(_51) f(_52) f(_53) f(_54) f(_55) f(_56) f(_57) f(_58) f(_59) f(_60) f(_61) f(_62) f(_63) f(_64)
|
||||||
|
#define VISIT_STRUCT_APPLYF65(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26,_27,_28,_29,_30,_31,_32,_33,_34,_35,_36,_37,_38,_39,_40,_41,_42,_43,_44,_45,_46,_47,_48,_49,_50,_51,_52,_53,_54,_55,_56,_57,_58,_59,_60,_61,_62,_63,_64,_65) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39) f(_40) f(_41) f(_42) f(_43) f(_44) f(_45) f(_46) f(_47) f(_48) f(_49) f(_50) f(_51) f(_52) f(_53) f(_54) f(_55) f(_56) f(_57) f(_58) f(_59) f(_60) f(_61) f(_62) f(_63) f(_64) f(_65)
|
||||||
|
#define VISIT_STRUCT_APPLYF66(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26,_27,_28,_29,_30,_31,_32,_33,_34,_35,_36,_37,_38,_39,_40,_41,_42,_43,_44,_45,_46,_47,_48,_49,_50,_51,_52,_53,_54,_55,_56,_57,_58,_59,_60,_61,_62,_63,_64,_65,_66) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39) f(_40) f(_41) f(_42) f(_43) f(_44) f(_45) f(_46) f(_47) f(_48) f(_49) f(_50) f(_51) f(_52) f(_53) f(_54) f(_55) f(_56) f(_57) f(_58) f(_59) f(_60) f(_61) f(_62) f(_63) f(_64) f(_65) f(_66)
|
||||||
|
#define VISIT_STRUCT_APPLYF67(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26,_27,_28,_29,_30,_31,_32,_33,_34,_35,_36,_37,_38,_39,_40,_41,_42,_43,_44,_45,_46,_47,_48,_49,_50,_51,_52,_53,_54,_55,_56,_57,_58,_59,_60,_61,_62,_63,_64,_65,_66,_67) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39) f(_40) f(_41) f(_42) f(_43) f(_44) f(_45) f(_46) f(_47) f(_48) f(_49) f(_50) f(_51) f(_52) f(_53) f(_54) f(_55) f(_56) f(_57) f(_58) f(_59) f(_60) f(_61) f(_62) f(_63) f(_64) f(_65) f(_66) f(_67)
|
||||||
|
#define VISIT_STRUCT_APPLYF68(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26,_27,_28,_29,_30,_31,_32,_33,_34,_35,_36,_37,_38,_39,_40,_41,_42,_43,_44,_45,_46,_47,_48,_49,_50,_51,_52,_53,_54,_55,_56,_57,_58,_59,_60,_61,_62,_63,_64,_65,_66,_67,_68) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39) f(_40) f(_41) f(_42) f(_43) f(_44) f(_45) f(_46) f(_47) f(_48) f(_49) f(_50) f(_51) f(_52) f(_53) f(_54) f(_55) f(_56) f(_57) f(_58) f(_59) f(_60) f(_61) f(_62) f(_63) f(_64) f(_65) f(_66) f(_67) f(_68)
|
||||||
|
#define VISIT_STRUCT_APPLYF69(f,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26,_27,_28,_29,_30,_31,_32,_33,_34,_35,_36,_37,_38,_39,_40,_41,_42,_43,_44,_45,_46,_47,_48,_49,_50,_51,_52,_53,_54,_55,_56,_57,_58,_59,_60,_61,_62,_63,_64,_65,_66,_67,_68,_69) f(_1) f(_2) f(_3) f(_4) f(_5) f(_6) f(_7) f(_8) f(_9) f(_10) f(_11) f(_12) f(_13) f(_14) f(_15) f(_16) f(_17) f(_18) f(_19) f(_20) f(_21) f(_22) f(_23) f(_24) f(_25) f(_26) f(_27) f(_28) f(_29) f(_30) f(_31) f(_32) f(_33) f(_34) f(_35) f(_36) f(_37) f(_38) f(_39) f(_40) f(_41) f(_42) f(_43) f(_44) f(_45) f(_46) f(_47) f(_48) f(_49) f(_50) f(_51) f(_52) f(_53) f(_54) f(_55) f(_56) f(_57) f(_58) f(_59) f(_60) f(_61) f(_62) f(_63) f(_64) f(_65) f(_66) f(_67) f(_68) f(_69)
|
||||||
|
|
||||||
|
#define VISIT_STRUCT_APPLY_F_(M, ...) VISIT_STRUCT_EXPAND(M(__VA_ARGS__))
|
||||||
|
#define MACRO_MAP(f, ...) VISIT_STRUCT_EXPAND(VISIT_STRUCT_APPLY_F_(VISIT_STRUCT_CONCAT(VISIT_STRUCT_APPLYF, VISIT_STRUCT_PP_NARG(__VA_ARGS__)), f, __VA_ARGS__))
|
Loading…
Reference in New Issue
Block a user