Skip to content

Commit 66c4ea0

Browse files
author
Sebastiano Merlino
committed
Made order in binders
Added copy constructor in functors and binders' classes. Moved functor field creation.
1 parent da38a57 commit 66c4ea0

File tree

2 files changed

+102
-57
lines changed

2 files changed

+102
-57
lines changed

src/httpserver/binders.hpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,17 @@ namespace details
8181
generic_mem_ptr _spfunc;
8282

8383
public:
84+
binder()
85+
{
86+
}
87+
88+
binder(const binder& o):
89+
pmem(o.pmem),
90+
_pfunc(o._pfunc),
91+
_spfunc(o._spfunc)
92+
{
93+
}
94+
8495
template<typename X, typename Y>
8596
inline void bind(X* pmem, Y fun)
8697
{
@@ -224,6 +235,11 @@ namespace details
224235
typedef functor_two type;
225236
functor_two() { }
226237

238+
functor_two(const functor_two& o):
239+
_binder(o._binder)
240+
{
241+
}
242+
227243
template <typename X, typename Y>
228244
functor_two(Y* pmem, RET_TYPE(X::*func)(PAR1 p1, PAR2 p2) )
229245
{

src/httpserver/webserver.hpp

Lines changed: 86 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -133,64 +133,93 @@ namespace details
133133

134134
template<typename T>
135135
http_resource_mirror(http_resource<T>* res):
136-
render(&empty_render),
137-
render_GET(&empty_render),
138-
render_POST(&empty_render),
139-
render_PUT(&empty_render),
140-
render_HEAD(&empty_render),
141-
render_DELETE(&empty_render),
142-
render_TRACE(&empty_render),
143-
render_OPTIONS(&empty_render),
144-
render_CONNECT(&empty_render),
145-
is_allowed(&empty_is_allowed)
136+
render(
137+
HAS_METHOD(render, T, void,
138+
const http_request&, http_response**
139+
) ? functor(res, &T::render) : functor(&empty_render)
140+
),
141+
render_GET(
142+
HAS_METHOD(render_GET, T, void,
143+
const http_request&, http_response**
144+
) ? functor(res, &T::render_GET) :
145+
(
146+
HAS_METHOD(render, T, void,
147+
const http_request&, http_response**
148+
) ? functor(res, &T::render) : functor(&empty_render)
149+
)
150+
),
151+
render_POST(
152+
HAS_METHOD(render_POST, T, void,
153+
const http_request&, http_response**
154+
) ? functor(res, &T::render_POST) :
155+
(
156+
HAS_METHOD(render, T, void,
157+
const http_request&, http_response**
158+
) ? functor(res, &T::render) : functor(&empty_render)
159+
)
160+
),
161+
render_PUT(
162+
HAS_METHOD(render_PUT, T, void,
163+
const http_request&, http_response**
164+
) ? functor(res, &T::render_PUT) :
165+
(
166+
HAS_METHOD(render, T, void,
167+
const http_request&, http_response**
168+
) ? functor(res, &T::render) : functor(&empty_render)
169+
)
170+
),
171+
render_HEAD(
172+
HAS_METHOD(render_HEAD, T, void,
173+
const http_request&, http_response**
174+
) ? functor(res, &T::render_HEAD) :
175+
(
176+
HAS_METHOD(render, T, void,
177+
const http_request&, http_response**
178+
) ? functor(res, &T::render) : functor(&empty_render)
179+
)
180+
),
181+
render_DELETE(
182+
HAS_METHOD(render_DELETE, T, void,
183+
const http_request&, http_response**
184+
) ? functor(res, &T::render_DELETE) :
185+
(
186+
HAS_METHOD(render, T, void,
187+
const http_request&, http_response**
188+
) ? functor(res, &T::render) : functor(&empty_render)
189+
)
190+
),
191+
render_TRACE(
192+
HAS_METHOD(render_TRACE, T, void,
193+
const http_request&, http_response**
194+
) ? functor(res, &T::render_TRACE) :
195+
(
196+
HAS_METHOD(render, T, void,
197+
const http_request&, http_response**
198+
) ? functor(res, &T::render) : functor(&empty_render)
199+
)
200+
),
201+
render_OPTIONS(
202+
HAS_METHOD(render_OPTIONS, T, void,
203+
const http_request&, http_response**
204+
) ? functor(res, &T::render_OPTIONS) :
205+
(
206+
HAS_METHOD(render, T, void,
207+
const http_request&, http_response**
208+
) ? functor(res, &T::render) : functor(&empty_render)
209+
)
210+
),
211+
render_CONNECT(
212+
HAS_METHOD(render_CONNECT, T, void,
213+
const http_request&, http_response**
214+
) ? functor(res, &T::render_CONNECT) :
215+
(
216+
HAS_METHOD(render, T, void,
217+
const http_request&, http_response**
218+
) ? functor(res, &T::render) : functor(&empty_render)
219+
)
220+
),
221+
is_allowed(res, &T::is_allowed)
146222
{
147-
if(HAS_METHOD(render, T, void,
148-
const http_request&, http_response**)
149-
)
150-
{
151-
render.bind(res, &T::render);
152-
render_GET.bind(res, &T::render);
153-
render_POST.bind(res, &T::render);
154-
render_PUT.bind(res, &T::render);
155-
render_HEAD.bind(res, &T::render);
156-
render_DELETE.bind(res, &T::render);
157-
render_TRACE.bind(res, &T::render);
158-
render_OPTIONS.bind(res, &T::render);
159-
render_CONNECT.bind(res, &T::render);
160-
}
161-
if(HAS_METHOD(render_GET, T, void,
162-
const http_request&, http_response**)
163-
)
164-
render_GET.bind(res, &T::render_GET);
165-
if(HAS_METHOD(render_POST, T, void,
166-
const http_request&, http_response**)
167-
)
168-
render_POST.bind(res, &T::render_POST);
169-
if(HAS_METHOD(render_PUT, T, void,
170-
const http_request&, http_response**)
171-
)
172-
render_PUT.bind(res, &T::render_PUT);
173-
if(HAS_METHOD(render_HEAD, T, void,
174-
const http_request&, http_response**)
175-
)
176-
render_HEAD.bind(res, &T::render_HEAD);
177-
if(HAS_METHOD(render_DELETE, T, void,
178-
const http_request&, http_response**)
179-
)
180-
render_DELETE.bind(res, &T::render_DELETE);
181-
if(HAS_METHOD(render_TRACE, T, void,
182-
const http_request&, http_response**)
183-
)
184-
render_TRACE.bind(res, &T::render_TRACE);
185-
if(HAS_METHOD(render_OPTIONS, T, void,
186-
const http_request&, http_response**)
187-
)
188-
render_OPTIONS.bind(res, &T::render_OPTIONS);
189-
if(HAS_METHOD(render_CONNECT, T, void,
190-
const http_request&, http_response**)
191-
)
192-
render_CONNECT.bind(res, &T::render_CONNECT);
193-
is_allowed.bind(res, &T::is_allowed);
194223
}
195224

196225
friend class ::httpserver::webserver;

0 commit comments

Comments
 (0)