Time-stamp: <2011-06-17 10:42:41 raskolnikov>
More...
#include <utility>
#include <memory>
#include <boost/preprocessor/cat.hpp>
#include <boost/preprocessor/seq/size.hpp>
#include <boost/preprocessor/seq/for_each_i.hpp>
#include <boost/preprocessor/repetition/enum_params.hpp>
#include <psynth/base/preprocessor.hpp>
Go to the source code of this file.
Namespaces |
| namespace | psynth |
| namespace | psynth::base |
Defines |
| #define | PSYNTH_DECLARE_SHARED_POINTER(type_name) |
| #define | PSYNTH_DECLARE_TYPE(type_name) struct type_name; |
| #define | PSYNTH_DECLARE_SHARED_TYPE(type_name) |
| #define | PSYNTH_DECLARE_SHARED_POINTER_TEMPLATE(type_name,...) |
| #define | PSYNTH_TEMPLATE_PARAM_ITER(r, data, i, elem) BOOST_PP_COMMA_IF(i) elem BOOST_PP_CAT(Par__, i) |
| #define | PSYNTH_TEMPLATE_PARAMS_FULL(param_seq) BOOST_PP_SEQ_FOR_EACH_I(PSYNTH_TEMPLATE_PARAM_ITER, _, param_seq) |
| #define | PSYNTH_TEMPLATE_PARAMS(param_seq) BOOST_PP_ENUM_PARAMS(BOOST_PP_SEQ_SIZE(param_seq), Par__) |
| #define | PSYNTH_DECLARE_SHARED_POINTER_TEMPLATE_IMPL(type_name, param_seq) |
| #define | PSYNTH_DECLARE_TEMPLATE(type_name,...) |
| #define | PSYNTH_DECLARE_SHARED_TEMPLATE(type_name,...) |
Detailed Description
Time-stamp: <2011-06-17 10:42:41 raskolnikov>
- Author:
- Juan Pedro Bolivar Puente <raskolnikov@es.gnu.org>
- Date:
- Mon Oct 18 15:11:23 2010
Aiding in forward declaring types.
- Todo:
- The new template declarations is cool but we have to check the performance.
Define Documentation
| #define PSYNTH_DECLARE_SHARED_POINTER |
( |
|
type_name | ) |
|
Value:typedef std::shared_ptr<type_name> type_name ## _ptr; \
typedef std::weak_ptr<type_name> type_name ## _weak_ptr; \
template <typename... Args> \
type_name ## _ptr new_ ## type_name (Args && ... args) \
{ \
return std::make_shared <type_name> ( \
std::forward<Args>(args) ...); \
}
| #define PSYNTH_DECLARE_SHARED_POINTER_TEMPLATE |
( |
|
type_name, |
|
|
|
... |
|
) |
| |
Value:- Todo:
- Use template typedefs when available.
| #define PSYNTH_DECLARE_SHARED_POINTER_TEMPLATE_IMPL |
( |
|
type_name, |
|
|
|
param_seq |
|
) |
| |
Value:template <PSYNTH_TEMPLATE_PARAMS_FULL(param_seq)> \
struct type_name ## _ptr : \
public std::shared_ptr<type_name <PSYNTH_TEMPLATE_PARAMS(param_seq)> > \
{ \
typedef std::shared_ptr<type_name <PSYNTH_TEMPLATE_PARAMS(param_seq)> > base; \
template <typename... Args> \
type_name ## _ptr (Args&&... args) \
: base (std::forward<Args> (args) ...) {} \
template <typename... Args> \
type_name ## _ptr& operator= (Args&&... args) \
{ this->base::operator= (std::forward<Args> (args) ...); return *this; } \
}; \
\
template <PSYNTH_TEMPLATE_PARAMS_FULL(param_seq), typename... Args> \
type_name ## _ptr<PSYNTH_TEMPLATE_PARAMS(param_seq)> \
inline new_ ## type_name (Args && ... args) \
{ \
return \
std::make_shared <type_name <PSYNTH_TEMPLATE_PARAMS(param_seq)> > \
(std::forward<Args>(args)...); \
}
| #define PSYNTH_DECLARE_SHARED_TEMPLATE |
( |
|
type_name, |
|
|
|
... |
|
) |
| |
| #define PSYNTH_DECLARE_SHARED_TYPE |
( |
|
type_name | ) |
|
| #define PSYNTH_DECLARE_TEMPLATE |
( |
|
type_name, |
|
|
|
... |
|
) |
| |
Value:template <__VA_ARGS__> \
struct type_name;
| #define PSYNTH_DECLARE_TYPE |
( |
|
type_name | ) |
struct type_name; |
| #define PSYNTH_TEMPLATE_PARAM_ITER |
( |
|
r, |
|
|
|
data, |
|
|
|
i, |
|
|
|
elem |
|
) |
| BOOST_PP_COMMA_IF(i) elem BOOST_PP_CAT(Par__, i) |
| #define PSYNTH_TEMPLATE_PARAMS |
( |
|
param_seq | ) |
BOOST_PP_ENUM_PARAMS(BOOST_PP_SEQ_SIZE(param_seq), Par__) |
| #define PSYNTH_TEMPLATE_PARAMS_FULL |
( |
|
param_seq | ) |
BOOST_PP_SEQ_FOR_EACH_I(PSYNTH_TEMPLATE_PARAM_ITER, _, param_seq) |