Skip to content

Commit 7ba374c

Browse files
committed
WIP
1 parent d9d4361 commit 7ba374c

14 files changed

+228
-165
lines changed

extra_visitors/protobuf3/CMakeLists.txt

+10-3
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,17 @@
11
set (TGT_ARILES_VISITOR_LIB "${PROJECT_NAME}_visitor_${ARILES_VISITOR}")
22

33
if(NOT ARILES_DEB_TARGETS)
4-
find_package(Protobuf REQUIRED)
4+
set(protobuf_MODULE_COMPATIBLE ON CACHE STRING "")
5+
find_package(Protobuf CONFIG)
56

6-
set(ARILES_VISITOR_${ARILES_VISITOR}_INCLUDES "${Protobuf_INCLUDE_DIRS}")
7-
set(ARILES_VISITOR_${ARILES_VISITOR}_LIBS "${Protobuf_LIBRARIES}")
7+
if(Protobuf_FOUND)
8+
set(ARILES_VISITOR_${ARILES_VISITOR}_LIBS "protobuf::libprotobuf")
9+
else()
10+
find_package(Protobuf REQUIRED)
11+
12+
set(ARILES_VISITOR_${ARILES_VISITOR}_INCLUDES "${Protobuf_INCLUDE_DIRS}")
13+
set(ARILES_VISITOR_${ARILES_VISITOR}_LIBS "${Protobuf_LIBRARIES}")
14+
endif()
815
endif()
916

1017
add_library(${TGT_ARILES_VISITOR_LIB} INTERFACE)

include/ariles2/visitors/aggregate.h

+161
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,161 @@
1+
/**
2+
@file
3+
@author Alexander Sherikov
4+
5+
@copyright 2017-2024 Alexander Sherikov, Licensed under the Apache License, Version 2.0.
6+
(see @ref LICENSE or http://www.apache.org/licenses/LICENSE-2.0)
7+
8+
@brief
9+
*/
10+
11+
#pragma once
12+
13+
#include "common.h"
14+
15+
16+
namespace ariles2
17+
{
18+
/// @ingroup aggregate
19+
namespace aggregate
20+
{
21+
template <class t_Visitor>
22+
class ARILES2_VISIBILITY_ATTRIBUTE ParametersWrapper
23+
{
24+
public:
25+
typename t_Visitor::Parameters parameters_;
26+
27+
public:
28+
ParametersWrapper(const bool override_parameters = true) : parameters_(override_parameters)
29+
{
30+
}
31+
32+
ParametersWrapper(const typename t_Visitor::Parameters &parameters) : parameters_(parameters)
33+
{
34+
}
35+
36+
template <
37+
class t_IdType,
38+
typename = std::enable_if_t<
39+
std::is_same<t_IdType, t_Visitor>::value
40+
or std::is_base_of<t_IdType, typename t_Visitor::Parameters>::value>>
41+
typename t_Visitor::Parameters &get()
42+
{
43+
return (parameters_);
44+
}
45+
46+
template <
47+
class t_IdType,
48+
typename = std::enable_if_t<
49+
std::is_same<t_IdType, t_Visitor>::value
50+
or std::is_base_of<t_IdType, typename t_Visitor::Parameters>::value>>
51+
const typename t_Visitor::Parameters &get() const
52+
{
53+
return (parameters_);
54+
}
55+
};
56+
57+
template <class... t_Visitors>
58+
class ARILES2_VISIBILITY_ATTRIBUTE Parameters;
59+
60+
template <>
61+
class ARILES2_VISIBILITY_ATTRIBUTE Parameters<>
62+
{
63+
public:
64+
Parameters(const bool){};
65+
Parameters(){};
66+
67+
void get(){};
68+
};
69+
70+
template <class t_Visitor, class... t_Visitors>
71+
class ARILES2_VISIBILITY_ATTRIBUTE Parameters<t_Visitor, t_Visitors...> : public ParametersWrapper<t_Visitor>,
72+
public Parameters<t_Visitors...>
73+
{
74+
public:
75+
Parameters(const bool override_parameters = true)
76+
: ParametersWrapper<t_Visitor>(override_parameters), Parameters<t_Visitors...>(override_parameters)
77+
{
78+
}
79+
80+
template <class... t_Parameters>
81+
Parameters(const typename t_Visitor::Parameters &parameters, t_Parameters &&...other_parameters)
82+
: ParametersWrapper<t_Visitor>(parameters)
83+
, Parameters<t_Visitors...>(std::forward<t_Parameters>(other_parameters)...)
84+
{
85+
}
86+
87+
template <class t_Parameters>
88+
Parameters(const t_Parameters &parameters, const bool override_parameters = true)
89+
: ParametersWrapper<t_Visitor>(override_parameters)
90+
, Parameters<t_Visitors...>(parameters, override_parameters)
91+
{
92+
}
93+
94+
Parameters(const typename t_Visitor::Parameters &parameters, const bool override_parameters = true)
95+
: ParametersWrapper<t_Visitor>(parameters), Parameters<t_Visitors...>(override_parameters)
96+
{
97+
}
98+
99+
using ParametersWrapper<t_Visitor>::get;
100+
using Parameters<t_Visitors...>::get;
101+
};
102+
103+
104+
105+
/*
106+
template <class t_Visitor>
107+
class ARILES2_VISIBILITY_ATTRIBUTE BaseVisitorWrapper
108+
{
109+
public:
110+
t_Visitor visitor_;
111+
112+
public:
113+
BaseVisitorWrapper() {};
114+
115+
template<class... t_Args>
116+
BaseVisitorWrapper(t_Args &&... args) : visitor_(std::forward<t_Args>(args)...)
117+
{
118+
}
119+
120+
template <class t_GetVisitor, typename = std::enable_if_t<std::is_same<t_GetVisitor, t_Visitor>::value>>
121+
t_Visitor &get()
122+
{
123+
return (visitor_);
124+
}
125+
126+
template <class t_GetVisitor, typename = std::enable_if_t<std::is_same<t_GetVisitor, t_Visitor>::value>>
127+
const t_Visitor &get() const
128+
{
129+
return (visitor_);
130+
}
131+
};
132+
*/
133+
134+
template <class... t_Visitors>
135+
class ARILES2_VISIBILITY_ATTRIBUTE BaseVisitor;
136+
137+
template <>
138+
class ARILES2_VISIBILITY_ATTRIBUTE BaseVisitor<>
139+
{
140+
};
141+
142+
template <class t_Visitor, class... t_Visitors>
143+
class ARILES2_VISIBILITY_ATTRIBUTE BaseVisitor<t_Visitor, t_Visitors...> : // public BaseVisitorWrapper<t_Visitor>,
144+
public BaseVisitor<t_Visitors...>
145+
{
146+
};
147+
148+
149+
template <class... t_Visitors>
150+
class ARILES2_VISIBILITY_ATTRIBUTE Visitor
151+
: public BaseVisitor<t_Visitors...>,
152+
public visitor::Base<visitor::GenericVisitor, Parameters<t_Visitors...>>
153+
{
154+
public:
155+
using Parameters = aggregate::Parameters<t_Visitors...>;
156+
157+
public:
158+
using visitor::Base<visitor::GenericVisitor, Parameters>::getDefaultParameters;
159+
};
160+
} // namespace aggregate
161+
} // namespace ariles2

0 commit comments

Comments
 (0)