Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
A
Actor Framework
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
cpp-libs
Actor Framework
Commits
cc45117f
Commit
cc45117f
authored
Jan 16, 2012
by
Dominik Charousset
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
maintenance
parent
7e1b6857
Changes
37
Hide whitespace changes
Inline
Side-by-side
Showing
37 changed files
with
279 additions
and
386 deletions
+279
-386
Makefile.am
Makefile.am
+1
-5
cppa.files
cppa.files
+1
-4
cppa/detail/boxed.hpp
cppa/detail/boxed.hpp
+5
-5
cppa/detail/default_uniform_type_info_impl.hpp
cppa/detail/default_uniform_type_info_impl.hpp
+3
-3
cppa/detail/get_behavior.hpp
cppa/detail/get_behavior.hpp
+4
-4
cppa/detail/map_member.hpp
cppa/detail/map_member.hpp
+2
-2
cppa/detail/serialize_tuple.hpp
cppa/detail/serialize_tuple.hpp
+3
-3
cppa/detail/tdata.hpp
cppa/detail/tdata.hpp
+0
-1
cppa/detail/tuple_vals.hpp
cppa/detail/tuple_vals.hpp
+7
-3
cppa/get_view.hpp
cppa/get_view.hpp
+0
-1
cppa/invoke.hpp
cppa/invoke.hpp
+6
-6
cppa/on.hpp
cppa/on.hpp
+7
-9
cppa/pattern.hpp
cppa/pattern.hpp
+1
-1
cppa/tuple.hpp
cppa/tuple.hpp
+20
-11
cppa/tuple_view.hpp
cppa/tuple_view.hpp
+0
-1
cppa/util.hpp
cppa/util.hpp
+0
-5
cppa/util/a_matches_b.hpp
cppa/util/a_matches_b.hpp
+0
-102
cppa/util/compare_tuples.hpp
cppa/util/compare_tuples.hpp
+15
-17
cppa/util/eval_first_n.hpp
cppa/util/eval_first_n.hpp
+1
-1
cppa/util/eval_type_list.hpp
cppa/util/eval_type_list.hpp
+6
-6
cppa/util/eval_type_lists.hpp
cppa/util/eval_type_lists.hpp
+10
-10
cppa/util/first_n.hpp
cppa/util/first_n.hpp
+3
-3
cppa/util/has_copy_member_fun.hpp
cppa/util/has_copy_member_fun.hpp
+1
-1
cppa/util/is_array_of.hpp
cppa/util/is_array_of.hpp
+1
-1
cppa/util/is_comparable.hpp
cppa/util/is_comparable.hpp
+1
-1
cppa/util/is_copyable.hpp
cppa/util/is_copyable.hpp
+2
-2
cppa/util/is_forward_iterator.hpp
cppa/util/is_forward_iterator.hpp
+1
-1
cppa/util/is_iterable.hpp
cppa/util/is_iterable.hpp
+1
-1
cppa/util/is_legal_tuple_type.hpp
cppa/util/is_legal_tuple_type.hpp
+1
-1
cppa/util/is_primitive.hpp
cppa/util/is_primitive.hpp
+1
-1
cppa/util/reverse_type_list.hpp
cppa/util/reverse_type_list.hpp
+0
-58
cppa/util/type_list.hpp
cppa/util/type_list.hpp
+144
-38
cppa/util/type_list_apply.hpp
cppa/util/type_list_apply.hpp
+0
-60
cppa/util/type_pair.hpp
cppa/util/type_pair.hpp
+7
-13
cppa/util/void_type.hpp
cppa/util/void_type.hpp
+2
-2
unit_testing/test__pattern.cpp
unit_testing/test__pattern.cpp
+19
-0
unit_testing/test__type_list.cpp
unit_testing/test__type_list.cpp
+3
-3
No files found.
Makefile.am
View file @
cc45117f
...
@@ -170,7 +170,6 @@ nobase_library_include_HEADERS = \
...
@@ -170,7 +170,6 @@ nobase_library_include_HEADERS = \
cppa/tuple_view.hpp
\
cppa/tuple_view.hpp
\
cppa/uniform_type_info.hpp
\
cppa/uniform_type_info.hpp
\
cppa/util/abstract_uniform_type_info.hpp
\
cppa/util/abstract_uniform_type_info.hpp
\
cppa/util/a_matches_b.hpp
\
cppa/util/any_tuple_iterator.hpp
\
cppa/util/any_tuple_iterator.hpp
\
cppa/util/apply.hpp
\
cppa/util/apply.hpp
\
cppa/util/arg_match_t.hpp
\
cppa/util/arg_match_t.hpp
\
...
@@ -188,7 +187,6 @@ nobase_library_include_HEADERS = \
...
@@ -188,7 +187,6 @@ nobase_library_include_HEADERS = \
cppa/util/element_at.hpp
\
cppa/util/element_at.hpp
\
cppa/util/enable_if.hpp
\
cppa/util/enable_if.hpp
\
cppa/util/eval_first_n.hpp
\
cppa/util/eval_first_n.hpp
\
cppa/util/eval_type_list.hpp
\
cppa/util/eval_type_lists.hpp
\
cppa/util/eval_type_lists.hpp
\
cppa/util/fiber.hpp
\
cppa/util/fiber.hpp
\
cppa/util/filter_type_list.hpp
\
cppa/util/filter_type_list.hpp
\
...
@@ -205,21 +203,19 @@ nobase_library_include_HEADERS = \
...
@@ -205,21 +203,19 @@ nobase_library_include_HEADERS = \
cppa/util/is_legal_tuple_type.hpp
\
cppa/util/is_legal_tuple_type.hpp
\
cppa/util/is_one_of.hpp
\
cppa/util/is_one_of.hpp
\
cppa/util/is_primitive.hpp
\
cppa/util/is_primitive.hpp
\
cppa/util/pop_back.hpp
\
cppa/util/producer_consumer_list.hpp
\
cppa/util/producer_consumer_list.hpp
\
cppa/util/pt_dispatch.hpp
\
cppa/util/pt_dispatch.hpp
\
cppa/util/pt_token.hpp
\
cppa/util/pt_token.hpp
\
cppa/util/remove_const_reference.hpp
\
cppa/util/remove_const_reference.hpp
\
cppa/util/replace_type.hpp
\
cppa/util/replace_type.hpp
\
cppa/util/reverse_type_list.hpp
\
cppa/util/ripemd_160.hpp
\
cppa/util/ripemd_160.hpp
\
cppa/util/rm_ref.hpp
\
cppa/util/rm_ref.hpp
\
cppa/util/shared_lock_guard.hpp
\
cppa/util/shared_lock_guard.hpp
\
cppa/util/shared_spinlock.hpp
\
cppa/util/shared_spinlock.hpp
\
cppa/util/single_reader_queue.hpp
\
cppa/util/single_reader_queue.hpp
\
cppa/util/singly_linked_list.hpp
\
cppa/util/singly_linked_list.hpp
\
cppa/util/type_list_apply.hpp
\
cppa/util/type_list.hpp
\
cppa/util/type_list.hpp
\
cppa/util/type_pair.hpp
\
cppa/util/upgrade_lock_guard.hpp
\
cppa/util/upgrade_lock_guard.hpp
\
cppa/util/void_type.hpp
\
cppa/util/void_type.hpp
\
cppa/util/wrapped.hpp
cppa/util/wrapped.hpp
...
...
cppa.files
View file @
cc45117f
...
@@ -3,7 +3,6 @@ cppa/tuple.hpp
...
@@ -3,7 +3,6 @@ cppa/tuple.hpp
unit_testing/main.cpp
unit_testing/main.cpp
cppa/util/void_type.hpp
cppa/util/void_type.hpp
cppa/util/type_list.hpp
cppa/util/type_list.hpp
cppa/util/a_matches_b.hpp
cppa/util.hpp
cppa/util.hpp
cppa/util/is_one_of.hpp
cppa/util/is_one_of.hpp
cppa/util/conjunction.hpp
cppa/util/conjunction.hpp
...
@@ -28,10 +27,8 @@ cppa/util/concat_type_lists.hpp
...
@@ -28,10 +27,8 @@ cppa/util/concat_type_lists.hpp
cppa/util/filter_type_list.hpp
cppa/util/filter_type_list.hpp
cppa/util/is_comparable.hpp
cppa/util/is_comparable.hpp
cppa/util/callable_trait.hpp
cppa/util/callable_trait.hpp
cppa/util/reverse_type_list.hpp
unit_testing/test__type_list.cpp
unit_testing/test__type_list.cpp
cppa/util/remove_const_reference.hpp
cppa/util/remove_const_reference.hpp
cppa/util/type_list_apply.hpp
cppa/util/eval_type_lists.hpp
cppa/util/eval_type_lists.hpp
cppa/util/compare_tuples.hpp
cppa/util/compare_tuples.hpp
cppa/get.hpp
cppa/get.hpp
...
@@ -138,7 +135,6 @@ cppa/from_string.hpp
...
@@ -138,7 +135,6 @@ cppa/from_string.hpp
cppa/util/at.hpp
cppa/util/at.hpp
cppa/util/element_at.hpp
cppa/util/element_at.hpp
cppa/util/if_else.hpp
cppa/util/if_else.hpp
cppa/util/pop_back.hpp
cppa/util/pt_dispatch.hpp
cppa/util/pt_dispatch.hpp
cppa/detail/get_behavior.hpp
cppa/detail/get_behavior.hpp
unit_testing/test__ripemd_160.cpp
unit_testing/test__ripemd_160.cpp
...
@@ -258,3 +254,4 @@ cppa/util/producer_consumer_list.hpp
...
@@ -258,3 +254,4 @@ cppa/util/producer_consumer_list.hpp
cppa/util/arg_match_t.hpp
cppa/util/arg_match_t.hpp
cppa/detail/types_array.hpp
cppa/detail/types_array.hpp
cppa/util/is_builtin.hpp
cppa/util/is_builtin.hpp
cppa/util/type_pair.hpp
cppa/detail/boxed.hpp
View file @
cc45117f
...
@@ -57,31 +57,31 @@ struct boxed<anything>
...
@@ -57,31 +57,31 @@ struct boxed<anything>
template
<
typename
T
>
template
<
typename
T
>
struct
is_boxed
struct
is_boxed
{
{
static
const
bool
value
=
false
;
static
const
expr
bool
value
=
false
;
};
};
template
<
typename
T
>
template
<
typename
T
>
struct
is_boxed
<
util
::
wrapped
<
T
>
>
struct
is_boxed
<
util
::
wrapped
<
T
>
>
{
{
static
const
bool
value
=
true
;
static
const
expr
bool
value
=
true
;
};
};
template
<
typename
T
>
template
<
typename
T
>
struct
is_boxed
<
util
::
wrapped
<
T
>
()
>
struct
is_boxed
<
util
::
wrapped
<
T
>
()
>
{
{
static
const
bool
value
=
true
;
static
const
expr
bool
value
=
true
;
};
};
template
<
typename
T
>
template
<
typename
T
>
struct
is_boxed
<
util
::
wrapped
<
T
>
(
&
)()
>
struct
is_boxed
<
util
::
wrapped
<
T
>
(
&
)()
>
{
{
static
const
bool
value
=
true
;
static
const
expr
bool
value
=
true
;
};
};
template
<
typename
T
>
template
<
typename
T
>
struct
is_boxed
<
util
::
wrapped
<
T
>
(
*
)()
>
struct
is_boxed
<
util
::
wrapped
<
T
>
(
*
)()
>
{
{
static
const
bool
value
=
true
;
static
const
expr
bool
value
=
true
;
};
};
}
}
// namespace cppa::detail
}
}
// namespace cppa::detail
...
...
cppa/detail/default_uniform_type_info_impl.hpp
View file @
cc45117f
...
@@ -72,7 +72,7 @@ class is_stl_compliant_list
...
@@ -72,7 +72,7 @@ class is_stl_compliant_list
public:
public:
static
const
bool
value
=
util
::
is_iterable
<
T
>::
value
static
const
expr
bool
value
=
util
::
is_iterable
<
T
>::
value
&&
std
::
is_same
<
bool
,
result_type
>::
value
;
&&
std
::
is_same
<
bool
,
result_type
>::
value
;
};
};
...
@@ -99,7 +99,7 @@ class is_stl_compliant_map
...
@@ -99,7 +99,7 @@ class is_stl_compliant_map
public:
public:
static
const
bool
value
=
util
::
is_iterable
<
T
>::
value
static
const
expr
bool
value
=
util
::
is_iterable
<
T
>::
value
&&
std
::
is_same
<
bool
,
result_type
>::
value
;
&&
std
::
is_same
<
bool
,
result_type
>::
value
;
};
};
...
@@ -111,7 +111,7 @@ class default_uniform_type_info_impl : public util::abstract_uniform_type_info<T
...
@@ -111,7 +111,7 @@ class default_uniform_type_info_impl : public util::abstract_uniform_type_info<T
template
<
typename
X
>
template
<
typename
X
>
struct
is_invalid
struct
is_invalid
{
{
static
const
bool
value
=
!
util
::
is_primitive
<
X
>::
value
static
const
expr
bool
value
=
!
util
::
is_primitive
<
X
>::
value
&&
!
is_stl_compliant_map
<
X
>::
value
&&
!
is_stl_compliant_map
<
X
>::
value
&&
!
is_stl_compliant_list
<
X
>::
value
;
&&
!
is_stl_compliant_list
<
X
>::
value
;
};
};
...
...
cppa/detail/get_behavior.hpp
View file @
cc45117f
...
@@ -64,8 +64,8 @@ class ftor_behavior<true, true, F, Args...> : public scheduled_actor
...
@@ -64,8 +64,8 @@ class ftor_behavior<true, true, F, Args...> : public scheduled_actor
F
m_fun
;
F
m_fun
;
typedef
typename
tdata_from_type_list
<
typedef
typename
tdata_from_type_list
<
typename
util
::
t
ype_list
_apply
<
util
::
type_list
<
Args
...
>
,
typename
util
::
t
l
_apply
<
util
::
type_list
<
Args
...
>
,
implicit_conversions
>::
type
>::
type
implicit_conversions
>::
type
>::
type
tdata_type
;
tdata_type
;
tdata_type
m_args
;
tdata_type
m_args
;
...
@@ -103,8 +103,8 @@ class ftor_behavior<false, true, F, Args...> : public scheduled_actor
...
@@ -103,8 +103,8 @@ class ftor_behavior<false, true, F, Args...> : public scheduled_actor
F
m_fun
;
F
m_fun
;
typedef
typename
tdata_from_type_list
<
typedef
typename
tdata_from_type_list
<
typename
util
::
t
ype_list
_apply
<
util
::
type_list
<
Args
...
>
,
typename
util
::
t
l
_apply
<
util
::
type_list
<
Args
...
>
,
implicit_conversions
>::
type
>::
type
implicit_conversions
>::
type
>::
type
tdata_type
;
tdata_type
;
tdata_type
m_args
;
tdata_type
m_args
;
...
...
cppa/detail/map_member.hpp
View file @
cc45117f
...
@@ -39,10 +39,10 @@
...
@@ -39,10 +39,10 @@
namespace
cppa
{
namespace
detail
{
namespace
cppa
{
namespace
detail
{
template
<
typename
T
>
template
<
typename
T
>
struct
is_pair
{
static
const
bool
value
=
false
;
};
struct
is_pair
{
static
const
expr
bool
value
=
false
;
};
template
<
typename
First
,
typename
Second
>
template
<
typename
First
,
typename
Second
>
struct
is_pair
<
std
::
pair
<
First
,
Second
>
>
{
static
const
bool
value
=
true
;
};
struct
is_pair
<
std
::
pair
<
First
,
Second
>
>
{
static
const
expr
bool
value
=
true
;
};
template
<
typename
T
,
bool
IsPair
,
bool
IsPrimitive
>
template
<
typename
T
,
bool
IsPair
,
bool
IsPrimitive
>
struct
map_member_util
;
struct
map_member_util
;
...
...
cppa/detail/serialize_tuple.hpp
View file @
cc45117f
...
@@ -46,9 +46,9 @@ struct serialize_tuple
...
@@ -46,9 +46,9 @@ struct serialize_tuple
template
<
typename
T
>
template
<
typename
T
>
inline
static
void
_
(
serializer
&
s
,
T
const
*
tup
)
inline
static
void
_
(
serializer
&
s
,
T
const
*
tup
)
{
{
s
<<
uniform_typeid
<
typename
List
::
head
_type
>
()
->
name
()
s
<<
uniform_typeid
<
typename
List
::
head
>
()
->
name
()
<<
*
reinterpret_cast
<
const
typename
List
::
head
_type
*>
(
tup
->
at
(
Pos
));
<<
*
reinterpret_cast
<
const
typename
List
::
head
*>
(
tup
->
at
(
Pos
));
serialize_tuple
<
typename
List
::
tail
_type
,
Pos
+
1
>::
_
(
s
,
tup
);
serialize_tuple
<
typename
List
::
tail
,
Pos
+
1
>::
_
(
s
,
tup
);
}
}
};
};
...
...
cppa/detail/tdata.hpp
View file @
cc45117f
...
@@ -39,7 +39,6 @@
...
@@ -39,7 +39,6 @@
#include "cppa/util/wrapped.hpp"
#include "cppa/util/wrapped.hpp"
#include "cppa/util/type_list.hpp"
#include "cppa/util/type_list.hpp"
#include "cppa/util/arg_match_t.hpp"
#include "cppa/util/arg_match_t.hpp"
#include "cppa/util/filter_type_list.hpp"
#include "cppa/detail/abstract_tuple.hpp"
#include "cppa/detail/abstract_tuple.hpp"
...
...
cppa/detail/tuple_vals.hpp
View file @
cc45117f
...
@@ -36,6 +36,7 @@
...
@@ -36,6 +36,7 @@
#include "cppa/util/type_list.hpp"
#include "cppa/util/type_list.hpp"
#include "cppa/detail/tdata.hpp"
#include "cppa/detail/tdata.hpp"
#include "cppa/detail/types_array.hpp"
#include "cppa/detail/abstract_tuple.hpp"
#include "cppa/detail/abstract_tuple.hpp"
#include "cppa/detail/serialize_tuple.hpp"
#include "cppa/detail/serialize_tuple.hpp"
...
@@ -49,11 +50,11 @@ class tuple_vals : public abstract_tuple
...
@@ -49,11 +50,11 @@ class tuple_vals : public abstract_tuple
typedef
tdata
<
ElementTypes
...
>
data_type
;
typedef
tdata
<
ElementTypes
...
>
data_type
;
typedef
util
::
type_list
<
ElementTypes
...
>
element_types
;
typedef
types_array
<
ElementTypes
...
>
element_types
;
data_type
m_data
;
data_type
m_data
;
element_types
m_types
;
static
types_array
<
ElementTypes
...
>
m_types
;
template
<
typename
...
Types
>
template
<
typename
...
Types
>
void
*
tdata_mutable_at
(
tdata
<
Types
...
>&
d
,
size_t
pos
)
void
*
tdata_mutable_at
(
tdata
<
Types
...
>&
d
,
size_t
pos
)
...
@@ -101,7 +102,7 @@ class tuple_vals : public abstract_tuple
...
@@ -101,7 +102,7 @@ class tuple_vals : public abstract_tuple
uniform_type_info
const
&
utype_info_at
(
size_t
pos
)
const
uniform_type_info
const
&
utype_info_at
(
size_t
pos
)
const
{
{
return
m_types
.
at
(
pos
);
return
*
(
m_types
[
pos
]
);
}
}
bool
equals
(
abstract_tuple
const
&
other
)
const
bool
equals
(
abstract_tuple
const
&
other
)
const
...
@@ -117,6 +118,9 @@ class tuple_vals : public abstract_tuple
...
@@ -117,6 +118,9 @@ class tuple_vals : public abstract_tuple
};
};
template
<
typename
...
ElementTypes
>
types_array
<
ElementTypes
...
>
tuple_vals
<
ElementTypes
...
>::
m_types
;
}
}
// namespace cppa::detail
}
}
// namespace cppa::detail
#endif // TUPLE_VALS_HPP
#endif // TUPLE_VALS_HPP
cppa/get_view.hpp
View file @
cc45117f
...
@@ -39,7 +39,6 @@
...
@@ -39,7 +39,6 @@
#include "cppa/anything.hpp"
#include "cppa/anything.hpp"
#include "cppa/any_tuple.hpp"
#include "cppa/any_tuple.hpp"
#include "cppa/tuple_view.hpp"
#include "cppa/tuple_view.hpp"
#include "cppa/util/a_matches_b.hpp"
namespace
cppa
{
namespace
cppa
{
...
...
cppa/invoke.hpp
View file @
cc45117f
...
@@ -39,11 +39,11 @@
...
@@ -39,11 +39,11 @@
#include "cppa/tuple_view.hpp"
#include "cppa/tuple_view.hpp"
#include "cppa/util/at.hpp"
#include "cppa/util/at.hpp"
#include "cppa/util/pop_back.hpp"
#include "cppa/util/type_list.hpp"
#include "cppa/util/type_list.hpp"
#include "cppa/util/element_at.hpp"
#include "cppa/util/element_at.hpp"
#include "cppa/util/callable_trait.hpp"
#include "cppa/util/callable_trait.hpp"
#include "cppa/util/reverse_type_list.hpp"
//#include "cppa/util/reverse_type_list.hpp"
namespace
cppa
{
namespace
detail
{
namespace
cppa
{
namespace
detail
{
...
@@ -51,13 +51,13 @@ template<size_t N, typename F, typename ResultType, class Tuple,
...
@@ -51,13 +51,13 @@ template<size_t N, typename F, typename ResultType, class Tuple,
typename
ArgTypeList
,
typename
...
Args
>
typename
ArgTypeList
,
typename
...
Args
>
struct
invoke_helper
struct
invoke_helper
{
{
typedef
typename
util
::
reverse_type_list
<
ArgTypeList
>::
type
rlist
;
//
typedef typename util::reverse_type_list<ArgTypeList>::type rlist;
typedef
typename
rlist
::
head_type
back_type
;
typedef
typename
ArgTypeList
::
back
back
;
typedef
typename
util
::
element_at
<
N
,
Tuple
>::
type
tuple_val_type
;
typedef
typename
util
::
element_at
<
N
,
Tuple
>::
type
tuple_val_type
;
typedef
typename
util
::
pop_back
<
ArgTypeList
>::
type
next_list
;
typedef
typename
util
::
tl_
pop_back
<
ArgTypeList
>::
type
next_list
;
inline
static
ResultType
_
(
F
&
f
,
Tuple
const
&
t
,
Args
const
&
...
args
)
inline
static
ResultType
_
(
F
&
f
,
Tuple
const
&
t
,
Args
const
&
...
args
)
{
{
static_assert
(
std
::
is_convertible
<
tuple_val_type
,
back
_type
>::
value
,
static_assert
(
std
::
is_convertible
<
tuple_val_type
,
back
>::
value
,
"tuple element is not convertible to expected argument"
);
"tuple element is not convertible to expected argument"
);
return
invoke_helper
<
N
-
1
,
F
,
ResultType
,
Tuple
,
next_list
,
tuple_val_type
,
Args
...
>
return
invoke_helper
<
N
-
1
,
F
,
ResultType
,
Tuple
,
next_list
,
tuple_val_type
,
Args
...
>
::
_
(
f
,
t
,
get
<
N
>
(
t
),
args
...);
::
_
(
f
,
t
,
get
<
N
>
(
t
),
args
...);
...
...
cppa/on.hpp
View file @
cc45117f
...
@@ -41,14 +41,12 @@
...
@@ -41,14 +41,12 @@
#include "cppa/any_tuple.hpp"
#include "cppa/any_tuple.hpp"
#include "cppa/invoke_rules.hpp"
#include "cppa/invoke_rules.hpp"
#include "cppa/util/pop_back.hpp"
#include "cppa/util/duration.hpp"
#include "cppa/util/duration.hpp"
#include "cppa/util/type_list.hpp"
#include "cppa/util/type_list.hpp"
#include "cppa/util/enable_if.hpp"
#include "cppa/util/enable_if.hpp"
#include "cppa/util/arg_match_t.hpp"
#include "cppa/util/arg_match_t.hpp"
#include "cppa/util/eval_first_n.hpp"
#include "cppa/util/eval_first_n.hpp"
#include "cppa/util/callable_trait.hpp"
#include "cppa/util/callable_trait.hpp"
#include "cppa/util/type_list_apply.hpp"
#include "cppa/util/filter_type_list.hpp"
#include "cppa/util/filter_type_list.hpp"
#include "cppa/util/concat_type_lists.hpp"
#include "cppa/util/concat_type_lists.hpp"
...
@@ -88,19 +86,19 @@ class invoke_rule_builder
...
@@ -88,19 +86,19 @@ class invoke_rule_builder
typedef
util
::
type_list
<
TypeList
...
>
raw_types
;
typedef
util
::
type_list
<
TypeList
...
>
raw_types
;
static
const
bool
is_complete
=
static
const
expr
bool
is_complete
=
!
std
::
is_same
<
arg_match_t
,
typename
raw_types
::
back
_type
>::
value
;
!
std
::
is_same
<
arg_match_t
,
typename
raw_types
::
back
>::
value
;
typedef
typename
util
::
if_else_c
<
is_complete
==
false
,
typedef
typename
util
::
if_else_c
<
is_complete
==
false
,
typename
util
::
pop_back
<
raw_types
>::
type
,
typename
util
::
tl_
pop_back
<
raw_types
>::
type
,
util
::
wrapped
<
raw_types
>
>::
type
util
::
wrapped
<
raw_types
>
>::
type
types
;
types
;
static_assert
(
util
::
tl_find
<
types
,
arg_match_t
>::
value
==
-
1
,
static_assert
(
util
::
tl_find
<
types
,
arg_match_t
>::
value
==
-
1
,
"arg_match is allowed only as last parameter for on()"
);
"arg_match is allowed only as last parameter for on()"
);
typedef
typename
util
::
t
ype_list
_apply
<
types
,
typedef
typename
util
::
t
l
_apply
<
types
,
detail
::
implicit_conversions
>::
type
detail
::
implicit_conversions
>::
type
converted_types
;
converted_types
;
typedef
typename
pattern_type_from_type_list
<
converted_types
>::
type
typedef
typename
pattern_type_from_type_list
<
converted_types
>::
type
...
@@ -124,7 +122,7 @@ class invoke_rule_builder
...
@@ -124,7 +122,7 @@ class invoke_rule_builder
typedef
typename
get_callable_trait
<
F
>::
type
ctrait
;
typedef
typename
get_callable_trait
<
F
>::
type
ctrait
;
typedef
typename
ctrait
::
arg_types
raw_types
;
typedef
typename
ctrait
::
arg_types
raw_types
;
static_assert
(
raw_types
::
size
>
0
,
"functor has no arguments"
);
static_assert
(
raw_types
::
size
>
0
,
"functor has no arguments"
);
typedef
typename
t
ype_list
_apply
<
raw_types
,
rm_ref
>::
type
new_types
;
typedef
typename
t
l
_apply
<
raw_types
,
rm_ref
>::
type
new_types
;
typedef
typename
concat_type_lists
<
converted_types
,
new_types
>::
type
types
;
typedef
typename
concat_type_lists
<
converted_types
,
new_types
>::
type
types
;
typedef
typename
pattern_type_from_type_list
<
types
>::
type
epattern
;
typedef
typename
pattern_type_from_type_list
<
types
>::
type
epattern
;
typedef
typename
epattern
::
tuple_view_type
tuple_view_type
;
typedef
typename
epattern
::
tuple_view_type
tuple_view_type
;
...
@@ -167,7 +165,7 @@ class on_the_fly_invoke_rule_builder
...
@@ -167,7 +165,7 @@ class on_the_fly_invoke_rule_builder
typedef
typename
get_callable_trait
<
F
>::
type
ctrait
;
typedef
typename
get_callable_trait
<
F
>::
type
ctrait
;
typedef
typename
ctrait
::
arg_types
raw_types
;
typedef
typename
ctrait
::
arg_types
raw_types
;
static_assert
(
raw_types
::
size
>
0
,
"functor has no arguments"
);
static_assert
(
raw_types
::
size
>
0
,
"functor has no arguments"
);
typedef
typename
t
ype_list
_apply
<
raw_types
,
rm_ref
>::
type
types
;
typedef
typename
t
l
_apply
<
raw_types
,
rm_ref
>::
type
types
;
typedef
typename
pattern_type_from_type_list
<
types
>::
type
pattern_type
;
typedef
typename
pattern_type_from_type_list
<
types
>::
type
pattern_type
;
typedef
typename
pattern_type
::
tuple_view_type
tuple_view_type
;
typedef
typename
pattern_type
::
tuple_view_type
tuple_view_type
;
typedef
invokable_impl
<
tuple_view_type
,
pattern_type
,
F
>
impl
;
typedef
invokable_impl
<
tuple_view_type
,
pattern_type
,
F
>
impl
;
...
...
cppa/pattern.hpp
View file @
cc45117f
...
@@ -40,7 +40,7 @@
...
@@ -40,7 +40,7 @@
#include "cppa/uniform_type_info.hpp"
#include "cppa/uniform_type_info.hpp"
#include "cppa/util/type_list.hpp"
#include "cppa/util/type_list.hpp"
#include "cppa/util/
type_list_apply
.hpp"
#include "cppa/util/
filter_type_list
.hpp"
#include "cppa/detail/tdata.hpp"
#include "cppa/detail/tdata.hpp"
#include "cppa/detail/types_array.hpp"
#include "cppa/detail/types_array.hpp"
...
...
cppa/tuple.hpp
View file @
cc45117f
...
@@ -45,8 +45,6 @@
...
@@ -45,8 +45,6 @@
#include "cppa/util/replace_type.hpp"
#include "cppa/util/replace_type.hpp"
#include "cppa/util/is_comparable.hpp"
#include "cppa/util/is_comparable.hpp"
#include "cppa/util/compare_tuples.hpp"
#include "cppa/util/compare_tuples.hpp"
#include "cppa/util/eval_type_list.hpp"
#include "cppa/util/type_list_apply.hpp"
#include "cppa/util/is_legal_tuple_type.hpp"
#include "cppa/util/is_legal_tuple_type.hpp"
#include "cppa/detail/tuple_vals.hpp"
#include "cppa/detail/tuple_vals.hpp"
...
@@ -77,12 +75,14 @@ class tuple
...
@@ -77,12 +75,14 @@ class tuple
static_assert
(
sizeof
...(
ElementTypes
)
>
0
,
"tuple is empty"
);
static_assert
(
sizeof
...(
ElementTypes
)
>
0
,
"tuple is empty"
);
static_assert
(
util
::
eval_type_list
<
element_types
,
static_assert
(
util
::
tl_forall
<
element_types
,
util
::
is_legal_tuple_type
>::
value
,
util
::
is_legal_tuple_type
>::
value
,
"illegal types in tuple definition: "
"illegal types in tuple definition: "
"pointers and references are prohibited"
);
"pointers and references are prohibited"
);
typedef
detail
::
tuple_vals
<
ElementTypes
...
>
vals_t
;
typedef
detail
::
tuple_vals
<
ElementTypes
...
>
tuple_vals_type
;
//typedef detail::tuple_vals<ElementTypes...> vals_t;
typedef
detail
::
abstract_tuple
vals_t
;
cow_ptr
<
vals_t
>
m_vals
;
cow_ptr
<
vals_t
>
m_vals
;
...
@@ -91,7 +91,7 @@ class tuple
...
@@ -91,7 +91,7 @@ class tuple
/**
/**
* @brief Initializes each element with its default constructor.
* @brief Initializes each element with its default constructor.
*/
*/
tuple
()
:
m_vals
(
new
vals_t
)
tuple
()
:
m_vals
(
new
tuple_vals_type
)
{
{
}
}
...
@@ -99,7 +99,7 @@ class tuple
...
@@ -99,7 +99,7 @@ class tuple
* @brief Initializes the tuple with @p args.
* @brief Initializes the tuple with @p args.
* @param args Initialization values.
* @param args Initialization values.
*/
*/
tuple
(
ElementTypes
const
&
...
args
)
:
m_vals
(
new
vals_t
(
args
...))
tuple
(
ElementTypes
const
&
...
args
)
:
m_vals
(
new
tuple_vals_type
(
args
...))
{
{
}
}
...
@@ -121,6 +121,11 @@ class tuple
...
@@ -121,6 +121,11 @@ class tuple
return
m_vals
->
at
(
p
);
return
m_vals
->
at
(
p
);
}
}
inline
void
*
mutable_at
(
size_t
p
)
{
return
m_vals
->
mutable_at
(
p
);
}
/**
/**
* @brief Gets {@link uniform_type_info uniform type information}
* @brief Gets {@link uniform_type_info uniform type information}
* of an element.
* of an element.
...
@@ -195,19 +200,23 @@ tuple<Types...> make_tuple(Types const&... args);
...
@@ -195,19 +200,23 @@ tuple<Types...> make_tuple(Types const&... args);
template
<
size_t
N
,
typename
...
Types
>
template
<
size_t
N
,
typename
...
Types
>
const
typename
util
::
at
<
N
,
Types
...
>::
type
&
get
(
tuple
<
Types
...
>
const
&
tup
)
const
typename
util
::
at
<
N
,
Types
...
>::
type
&
get
(
tuple
<
Types
...
>
const
&
tup
)
{
{
return
get
<
N
>
(
tup
.
vals
()
->
data
());
typedef
typename
util
::
at
<
N
,
Types
...
>::
type
result_type
;
return
*
reinterpret_cast
<
result_type
const
*>
(
tup
.
at
(
N
));
//return get<N>(tup.vals()->data());
}
}
template
<
size_t
N
,
typename
...
Types
>
template
<
size_t
N
,
typename
...
Types
>
typename
util
::
at
<
N
,
Types
...
>::
type
&
get_ref
(
tuple
<
Types
...
>&
tup
)
typename
util
::
at
<
N
,
Types
...
>::
type
&
get_ref
(
tuple
<
Types
...
>&
tup
)
{
{
return
get_ref
<
N
>
(
tup
.
m_vals
->
data_ref
());
typedef
typename
util
::
at
<
N
,
Types
...
>::
type
result_type
;
return
*
reinterpret_cast
<
result_type
*>
(
tup
.
mutable_at
(
N
));
//return get_ref<N>(tup.m_vals->data_ref());
}
}
template
<
typename
...
Types
>
template
<
typename
...
Types
>
typename
tuple_type_from_type_list
<
typename
tuple_type_from_type_list
<
typename
util
::
t
ype_list
_apply
<
util
::
type_list
<
Types
...
>
,
typename
util
::
t
l
_apply
<
util
::
type_list
<
Types
...
>
,
detail
::
implicit_conversions
>::
type
>::
type
detail
::
implicit_conversions
>::
type
>::
type
make_tuple
(
Types
const
&
...
args
)
make_tuple
(
Types
const
&
...
args
)
{
{
return
{
args
...
};
return
{
args
...
};
...
...
cppa/tuple_view.hpp
View file @
cc45117f
...
@@ -38,7 +38,6 @@
...
@@ -38,7 +38,6 @@
#include "cppa/util/at.hpp"
#include "cppa/util/at.hpp"
#include "cppa/util/type_list.hpp"
#include "cppa/util/type_list.hpp"
#include "cppa/util/a_matches_b.hpp"
#include "cppa/util/fixed_vector.hpp"
#include "cppa/util/fixed_vector.hpp"
#include "cppa/util/compare_tuples.hpp"
#include "cppa/util/compare_tuples.hpp"
...
...
cppa/util.hpp
View file @
cc45117f
...
@@ -31,7 +31,6 @@
...
@@ -31,7 +31,6 @@
#ifndef UTIL_HPP
#ifndef UTIL_HPP
#define UTIL_HPP
#define UTIL_HPP
#include "cppa/util/a_matches_b.hpp"
#include "cppa/util/apply.hpp"
#include "cppa/util/apply.hpp"
#include "cppa/util/callable_trait.hpp"
#include "cppa/util/callable_trait.hpp"
#include "cppa/util/compare_tuples.hpp"
#include "cppa/util/compare_tuples.hpp"
...
@@ -40,8 +39,6 @@
...
@@ -40,8 +39,6 @@
#include "cppa/util/disjunction.hpp"
#include "cppa/util/disjunction.hpp"
#include "cppa/util/enable_if.hpp"
#include "cppa/util/enable_if.hpp"
#include "cppa/util/eval_first_n.hpp"
#include "cppa/util/eval_first_n.hpp"
#include "cppa/util/eval_type_list.hpp"
#include "cppa/util/eval_type_lists.hpp"
#include "cppa/util/filter_type_list.hpp"
#include "cppa/util/filter_type_list.hpp"
#include "cppa/util/first_n.hpp"
#include "cppa/util/first_n.hpp"
#include "cppa/util/has_copy_member_fun.hpp"
#include "cppa/util/has_copy_member_fun.hpp"
...
@@ -51,11 +48,9 @@
...
@@ -51,11 +48,9 @@
#include "cppa/util/is_one_of.hpp"
#include "cppa/util/is_one_of.hpp"
#include "cppa/util/remove_const_reference.hpp"
#include "cppa/util/remove_const_reference.hpp"
#include "cppa/util/replace_type.hpp"
#include "cppa/util/replace_type.hpp"
#include "cppa/util/reverse_type_list.hpp"
#include "cppa/util/single_reader_queue.hpp"
#include "cppa/util/single_reader_queue.hpp"
#include "cppa/util/singly_linked_list.hpp"
#include "cppa/util/singly_linked_list.hpp"
#include "cppa/util/type_list.hpp"
#include "cppa/util/type_list.hpp"
#include "cppa/util/type_list_apply.hpp"
#include "cppa/util/void_type.hpp"
#include "cppa/util/void_type.hpp"
#endif // UTIL_HPP
#endif // UTIL_HPP
cppa/util/a_matches_b.hpp
deleted
100644 → 0
View file @
7e1b6857
/******************************************************************************\
* ___ __ *
* /\_ \ __/\ \ *
* \//\ \ /\_\ \ \____ ___ _____ _____ __ *
* \ \ \ \/\ \ \ '__`\ /'___\/\ '__`\/\ '__`\ /'__`\ *
* \_\ \_\ \ \ \ \L\ \/\ \__/\ \ \L\ \ \ \L\ \/\ \L\.\_ *
* /\____\\ \_\ \_,__/\ \____\\ \ ,__/\ \ ,__/\ \__/.\_\ *
* \/____/ \/_/\/___/ \/____/ \ \ \/ \ \ \/ \/__/\/_/ *
* \ \_\ \ \_\ *
* \/_/ \/_/ *
* *
* Copyright (C) 2011, 2012 *
* Dominik Charousset <dominik.charousset@haw-hamburg.de> *
* *
* This file is part of libcppa. *
* libcppa is free software: you can redistribute it and/or modify it under *
* the terms of the GNU Lesser General Public License as published by the *
* Free Software Foundation, either version 3 of the License *
* or (at your option) any later version. *
* *
* libcppa is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. *
* See the GNU Lesser General Public License for more details. *
* *
* You should have received a copy of the GNU Lesser General Public License *
* along with libcppa. If not, see <http://www.gnu.org/licenses/>. *
\******************************************************************************/
#ifndef CPPA_UTIL_A_MATCHES_B_HPP
#define CPPA_UTIL_A_MATCHES_B_HPP
/*
#include <type_traits>
#include "cppa/any_type.hpp"
#include "cppa/util/void_type.hpp"
#include "cppa/util/type_list.hpp"
#include "cppa/util/is_one_of.hpp"
#include "cppa/util/conjunction.hpp"
namespace cppa { namespace detail {
template<typename HeadA, typename TailA, typename HeadB, typename TailB>
struct amb_helper : util::conjunction<util::is_one_of<HeadA, HeadB, any_type>,
amb_helper<typename TailA::head_type,
typename TailA::tail_type,
typename TailB::head_type,
typename TailB::tail_type>>
{
static_assert( std::is_same<HeadB, any_type>::value == false
&& std::is_same<HeadB, any_type*>::value == false,
"any_type in right hand type list");
};
template<>
struct amb_helper<util::void_type, util::type_list<>,
util::void_type, util::type_list<>> : std::true_type
{
};
template<typename TailA>
struct amb_helper<any_type*, TailA, util::void_type, util::type_list<>>
: amb_helper<typename TailA::head_type,
typename TailA::tail_type,
util::void_type,
util::type_list<>>
{
};
template<typename TailA, typename HeadB, typename TailB>
struct amb_helper<any_type*, TailA, HeadB, TailB>
: util::disjunction<amb_helper<typename TailA::head_type,
typename TailA::tail_type,
HeadB,
TailB>,
amb_helper<any_type*,
TailA,
typename TailB::head_type,
typename TailB::tail_type>>
{
static_assert(std::is_same<HeadB, any_type>::value == false,
"any_type in right hand type list");
};
} } // namespace cppa::detail
namespace cppa { namespace util {
template<typename ListA, typename ListB>
struct a_matches_b : detail::amb_helper<typename ListA::head_type,
typename ListA::tail_type,
typename ListB::head_type,
typename ListB::tail_type>
{
};
} } // namespace cppa::util
*/
#endif // CPPA_UTIL_A_MATCHES_B_HPP
cppa/util/compare_tuples.hpp
View file @
cc45117f
...
@@ -36,7 +36,6 @@
...
@@ -36,7 +36,6 @@
#include "cppa/util/type_list.hpp"
#include "cppa/util/type_list.hpp"
#include "cppa/util/eval_first_n.hpp"
#include "cppa/util/eval_first_n.hpp"
#include "cppa/util/is_comparable.hpp"
#include "cppa/util/is_comparable.hpp"
#include "cppa/util/eval_type_lists.hpp"
namespace
cppa
{
namespace
detail
{
namespace
cppa
{
namespace
detail
{
...
@@ -77,10 +76,11 @@ bool compare_tuples(LhsTuple<LhsTypes...> const& lhs,
...
@@ -77,10 +76,11 @@ bool compare_tuples(LhsTuple<LhsTypes...> const& lhs,
{
{
static_assert
(
sizeof
...(
LhsTypes
)
==
sizeof
...(
RhsTypes
),
static_assert
(
sizeof
...(
LhsTypes
)
==
sizeof
...(
RhsTypes
),
"could not compare tuples of different size"
);
"could not compare tuples of different size"
);
static_assert
(
util
::
eval_type_lists
<
util
::
type_list
<
LhsTypes
...
>
,
util
::
type_list
<
RhsTypes
...
>
,
static_assert
(
tl_zipped_forall
<
type_list
<
type_pair
<
LhsTypes
,
RhsTypes
>
...
>
,
util
::
is_comparable
>::
value
,
is_comparable
>::
value
,
"types of lhs are not comparable to the types of rhs"
);
"types of lhs are not comparable to the types of rhs"
);
return
detail
::
cmp_helper
<
(
sizeof
...(
LhsTypes
)
-
1
),
return
detail
::
cmp_helper
<
(
sizeof
...(
LhsTypes
)
-
1
),
LhsTuple
<
LhsTypes
...
>
,
LhsTuple
<
LhsTypes
...
>
,
RhsTuple
<
RhsTypes
...
>>::
cmp
(
lhs
,
rhs
);
RhsTuple
<
RhsTypes
...
>>::
cmp
(
lhs
,
rhs
);
...
@@ -91,19 +91,17 @@ template<template<typename...> class LhsTuple, typename... LhsTypes,
...
@@ -91,19 +91,17 @@ template<template<typename...> class LhsTuple, typename... LhsTypes,
bool
compare_first_elements
(
LhsTuple
<
LhsTypes
...
>
const
&
lhs
,
bool
compare_first_elements
(
LhsTuple
<
LhsTypes
...
>
const
&
lhs
,
RhsTuple
<
RhsTypes
...
>
const
&
rhs
)
RhsTuple
<
RhsTypes
...
>
const
&
rhs
)
{
{
typedef
util
::
type_list
<
LhsTypes
...
>
lhs_types
;
static
constexpr
size_t
cmp_size
=
(
sizeof
...(
LhsTypes
)
<
sizeof
...(
RhsTypes
))
typedef
util
::
type_list
<
RhsTypes
...
>
rhs_types
;
?
sizeof
...(
LhsTypes
)
:
sizeof
...(
RhsTypes
);
static
constexpr
size_t
lhs_size
=
sizeof
...(
LhsTypes
);
static
constexpr
size_t
rhs_size
=
sizeof
...(
RhsTypes
);
typedef
util
::
type_list
<
LhsTypes
...
>
lhs_tlist
;
static
constexpr
size_t
cmp_size
=
(
lhs_size
<
rhs_size
)
typedef
util
::
type_list
<
RhsTypes
...
>
rhs_tlist
;
?
lhs_size
typedef
typename
tl_first_n
<
cmp_size
,
lhs_tlist
>::
type
lhs_sublist
;
:
rhs_size
;
typedef
typename
tl_first_n
<
cmp_size
,
rhs_tlist
>::
type
rhs_sublist
;
typedef
typename
tl_zip
<
lhs_sublist
,
rhs_sublist
>::
type
zipped_sublists
;
static_assert
(
util
::
eval_first_n
<
cmp_size
,
lhs_types
,
static_assert
(
tl_zipped_forall
<
zipped_sublists
,
is_comparable
>::
value
,
rhs_types
,
util
::
is_comparable
>::
value
,
"types of lhs are not comparable to the types of rhs"
);
"types of lhs are not comparable to the types of rhs"
);
return
detail
::
cmp_helper
<
(
cmp_size
-
1
),
return
detail
::
cmp_helper
<
(
cmp_size
-
1
),
...
...
cppa/util/eval_first_n.hpp
View file @
cc45117f
...
@@ -54,7 +54,7 @@ struct eval_first_n<N, type_list<TypesA...>, type_list<TypesB...>, What>
...
@@ -54,7 +54,7 @@ struct eval_first_n<N, type_list<TypesA...>, type_list<TypesB...>, What>
typedef
typename
first_n
<
N
,
first_list
>::
type
slist_a
;
typedef
typename
first_n
<
N
,
first_list
>::
type
slist_a
;
typedef
typename
first_n
<
N
,
second_list
>::
type
slist_b
;
typedef
typename
first_n
<
N
,
second_list
>::
type
slist_b
;
static
const
bool
value
=
eval_type_lists
<
slist_a
,
slist_b
,
What
>::
value
;
static
const
expr
bool
value
=
eval_type_lists
<
slist_a
,
slist_b
,
What
>::
value
;
};
};
}
}
// namespace cppa::util
}
}
// namespace cppa::util
...
...
cppa/util/eval_type_list.hpp
View file @
cc45117f
...
@@ -42,18 +42,18 @@ namespace cppa { namespace util {
...
@@ -42,18 +42,18 @@ namespace cppa { namespace util {
template
<
class
List
,
template
<
typename
>
class
What
>
template
<
class
List
,
template
<
typename
>
class
What
>
struct
eval_type_list
struct
eval_type_list
{
{
typedef
typename
List
::
head
_type
head_type
;
typedef
typename
List
::
head
head
;
typedef
typename
List
::
tail
_type
tail_type
;
typedef
typename
List
::
tail
tail
;
static
const
bool
value
=
static
const
expr
bool
value
=
What
<
head
_type
>::
value
What
<
head
>::
value
&&
eval_type_list
<
tail
_type
,
What
>::
value
;
&&
eval_type_list
<
tail
,
What
>::
value
;
};
};
template
<
template
<
typename
>
class
What
>
template
<
template
<
typename
>
class
What
>
struct
eval_type_list
<
type_list
<>
,
What
>
struct
eval_type_list
<
type_list
<>
,
What
>
{
{
static
const
bool
value
=
true
;
static
const
expr
bool
value
=
true
;
};
};
}
}
// namespace cppa::util
}
}
// namespace cppa::util
...
...
cppa/util/eval_type_lists.hpp
View file @
cc45117f
...
@@ -45,24 +45,24 @@ template <class ListA, class ListB,
...
@@ -45,24 +45,24 @@ template <class ListA, class ListB,
struct
eval_type_lists
struct
eval_type_lists
{
{
typedef
typename
ListA
::
head
_type
head_type
_a
;
typedef
typename
ListA
::
head
head
_a
;
typedef
typename
ListA
::
tail
_type
tail_type
_a
;
typedef
typename
ListA
::
tail
tail
_a
;
typedef
typename
ListB
::
head
_type
head_type
_b
;
typedef
typename
ListB
::
head
head
_b
;
typedef
typename
ListB
::
tail
_type
tail_type
_b
;
typedef
typename
ListB
::
tail
tail
_b
;
static
const
bool
value
=
static
const
expr
bool
value
=
!
std
::
is_same
<
head_
type_
a
,
void_type
>::
value
!
std
::
is_same
<
head_a
,
void_type
>::
value
&&
!
std
::
is_same
<
head_
type_
b
,
void_type
>::
value
&&
!
std
::
is_same
<
head_b
,
void_type
>::
value
&&
What
<
head_
type_a
,
head_type
_b
>::
value
&&
What
<
head_
a
,
head
_b
>::
value
&&
eval_type_lists
<
tail_
type_a
,
tail_type
_b
,
What
>::
value
;
&&
eval_type_lists
<
tail_
a
,
tail
_b
,
What
>::
value
;
};
};
template
<
template
<
typename
,
typename
>
class
What
>
template
<
template
<
typename
,
typename
>
class
What
>
struct
eval_type_lists
<
type_list
<>
,
type_list
<>
,
What
>
struct
eval_type_lists
<
type_list
<>
,
type_list
<>
,
What
>
{
{
static
const
bool
value
=
true
;
static
const
expr
bool
value
=
true
;
};
};
}
}
// namespace cppa::util
}
}
// namespace cppa::util
...
...
cppa/util/first_n.hpp
View file @
cc45117f
...
@@ -47,11 +47,11 @@ template<size_t N, typename List>
...
@@ -47,11 +47,11 @@ template<size_t N, typename List>
struct
n_
struct
n_
{
{
typedef
typename
util
::
element_at
<
N
-
1
,
List
>::
type
head
_type
;
typedef
typename
util
::
element_at
<
N
-
1
,
List
>::
type
head
;
typedef
typename
util
::
if_else
<
std
::
is_same
<
util
::
void_type
,
head
_type
>
,
typedef
typename
util
::
if_else
<
std
::
is_same
<
util
::
void_type
,
head
>
,
util
::
type_list
<>
,
util
::
type_list
<>
,
util
::
wrapped
<
util
::
type_list
<
head
_type
>>>::
type
util
::
wrapped
<
util
::
type_list
<
head
>>>::
type
head_list
;
head_list
;
typedef
typename
n_
<
N
-
1
,
List
>::
type
tail_list
;
typedef
typename
n_
<
N
-
1
,
List
>::
type
tail_list
;
...
...
cppa/util/has_copy_member_fun.hpp
View file @
cc45117f
...
@@ -52,7 +52,7 @@ class has_copy_member_fun
...
@@ -52,7 +52,7 @@ class has_copy_member_fun
public:
public:
static
const
bool
value
=
std
::
is_same
<
bool
,
result_type
>::
value
;
static
const
expr
bool
value
=
std
::
is_same
<
bool
,
result_type
>::
value
;
};
};
...
...
cppa/util/is_array_of.hpp
View file @
cc45117f
...
@@ -44,7 +44,7 @@ struct is_array_of
...
@@ -44,7 +44,7 @@ struct is_array_of
{
{
typedef
typename
std
::
remove_all_extents
<
T
>::
type
step1_type
;
typedef
typename
std
::
remove_all_extents
<
T
>::
type
step1_type
;
typedef
typename
std
::
remove_cv
<
step1_type
>::
type
step2_type
;
typedef
typename
std
::
remove_cv
<
step1_type
>::
type
step2_type
;
static
const
bool
value
=
std
::
is_array
<
T
>::
value
static
const
expr
bool
value
=
std
::
is_array
<
T
>::
value
&&
std
::
is_same
<
step2_type
,
U
>::
value
;
&&
std
::
is_same
<
step2_type
,
U
>::
value
;
};
};
...
...
cppa/util/is_comparable.hpp
View file @
cc45117f
...
@@ -64,7 +64,7 @@ class is_comparable
...
@@ -64,7 +64,7 @@ class is_comparable
public:
public:
static
const
bool
value
=
std
::
is_same
<
bool
,
result_type
>::
value
;
static
const
expr
bool
value
=
std
::
is_same
<
bool
,
result_type
>::
value
;
};
};
...
...
cppa/util/is_copyable.hpp
View file @
cc45117f
...
@@ -54,7 +54,7 @@ class is_copyable_
...
@@ -54,7 +54,7 @@ class is_copyable_
public:
public:
static
const
bool
value
=
std
::
is_same
<
bool
,
result_type
>::
value
;
static
const
expr
bool
value
=
std
::
is_same
<
bool
,
result_type
>::
value
;
};
};
...
@@ -64,7 +64,7 @@ class is_copyable_<true, T>
...
@@ -64,7 +64,7 @@ class is_copyable_<true, T>
public:
public:
static
const
bool
value
=
false
;
static
const
expr
bool
value
=
false
;
};
};
...
...
cppa/util/is_forward_iterator.hpp
View file @
cc45117f
...
@@ -64,7 +64,7 @@ class is_forward_iterator
...
@@ -64,7 +64,7 @@ class is_forward_iterator
public:
public:
static
const
bool
value
=
std
::
is_same
<
bool
,
result_type
>::
value
;
static
const
expr
bool
value
=
std
::
is_same
<
bool
,
result_type
>::
value
;
};
};
...
...
cppa/util/is_iterable.hpp
View file @
cc45117f
...
@@ -61,7 +61,7 @@ class is_iterable
...
@@ -61,7 +61,7 @@ class is_iterable
public:
public:
static
const
bool
value
=
util
::
is_primitive
<
T
>::
value
==
false
static
const
expr
bool
value
=
util
::
is_primitive
<
T
>::
value
==
false
&&
std
::
is_same
<
bool
,
result_type
>::
value
;
&&
std
::
is_same
<
bool
,
result_type
>::
value
;
};
};
...
...
cppa/util/is_legal_tuple_type.hpp
View file @
cc45117f
...
@@ -38,7 +38,7 @@ namespace cppa { namespace util {
...
@@ -38,7 +38,7 @@ namespace cppa { namespace util {
template
<
typename
T
>
template
<
typename
T
>
struct
is_legal_tuple_type
struct
is_legal_tuple_type
{
{
static
const
bool
value
=
std
::
is_pointer
<
T
>::
value
==
false
static
const
expr
bool
value
=
std
::
is_pointer
<
T
>::
value
==
false
&&
std
::
is_reference
<
T
>::
value
==
false
&&
std
::
is_reference
<
T
>::
value
==
false
&&
std
::
is_array
<
T
>::
value
==
false
;
&&
std
::
is_array
<
T
>::
value
==
false
;
};
};
...
...
cppa/util/is_primitive.hpp
View file @
cc45117f
...
@@ -50,7 +50,7 @@ namespace cppa { namespace util {
...
@@ -50,7 +50,7 @@ namespace cppa { namespace util {
template
<
typename
T
>
template
<
typename
T
>
struct
is_primitive
struct
is_primitive
{
{
static
const
bool
value
=
detail
::
type_to_ptype
<
T
>::
ptype
!=
pt_null
;
static
const
expr
bool
value
=
detail
::
type_to_ptype
<
T
>::
ptype
!=
pt_null
;
};
};
}
}
// namespace cppa::util
}
}
// namespace cppa::util
...
...
cppa/util/reverse_type_list.hpp
deleted
100644 → 0
View file @
7e1b6857
/******************************************************************************\
* ___ __ *
* /\_ \ __/\ \ *
* \//\ \ /\_\ \ \____ ___ _____ _____ __ *
* \ \ \ \/\ \ \ '__`\ /'___\/\ '__`\/\ '__`\ /'__`\ *
* \_\ \_\ \ \ \ \L\ \/\ \__/\ \ \L\ \ \ \L\ \/\ \L\.\_ *
* /\____\\ \_\ \_,__/\ \____\\ \ ,__/\ \ ,__/\ \__/.\_\ *
* \/____/ \/_/\/___/ \/____/ \ \ \/ \ \ \/ \/__/\/_/ *
* \ \_\ \ \_\ *
* \/_/ \/_/ *
* *
* Copyright (C) 2011, 2012 *
* Dominik Charousset <dominik.charousset@haw-hamburg.de> *
* *
* This file is part of libcppa. *
* libcppa is free software: you can redistribute it and/or modify it under *
* the terms of the GNU Lesser General Public License as published by the *
* Free Software Foundation, either version 3 of the License *
* or (at your option) any later version. *
* *
* libcppa is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. *
* See the GNU Lesser General Public License for more details. *
* *
* You should have received a copy of the GNU Lesser General Public License *
* along with libcppa. If not, see <http://www.gnu.org/licenses/>. *
\******************************************************************************/
#ifndef CPPA_UTIL_REVERSE_TYPE_LIST_HPP
#define CPPA_UTIL_REVERSE_TYPE_LIST_HPP
#include "cppa/util/type_list.hpp"
#include "cppa/util/concat_type_lists.hpp"
namespace
cppa
{
namespace
util
{
template
<
typename
ListFrom
,
typename
ListTo
=
type_list
<
>
>
struct
reverse_type_list
;
template
<
typename
HeadA
,
typename
...
TailA
,
typename
...
ListB
>
struct
reverse_type_list
<
type_list
<
HeadA
,
TailA
...
>
,
type_list
<
ListB
...
>>
{
typedef
typename
reverse_type_list
<
type_list
<
TailA
...
>
,
type_list
<
HeadA
,
ListB
...
>>::
type
type
;
};
template
<
typename
...
Types
>
struct
reverse_type_list
<
type_list
<>
,
type_list
<
Types
...
>>
{
typedef
type_list
<
Types
...
>
type
;
};
}
}
// namespace cppa::util
#endif // CPPA_UTIL_REVERSE_TYPE_LIST_HPP
cppa/util/type_list.hpp
View file @
cc45117f
...
@@ -34,6 +34,7 @@
...
@@ -34,6 +34,7 @@
#include <typeinfo>
#include <typeinfo>
#include "cppa/util/if_else.hpp"
#include "cppa/util/if_else.hpp"
#include "cppa/util/type_pair.hpp"
#include "cppa/util/void_type.hpp"
#include "cppa/util/void_type.hpp"
namespace
cppa
{
namespace
cppa
{
...
@@ -51,9 +52,9 @@ template<typename... Types> struct type_list;
...
@@ -51,9 +52,9 @@ template<typename... Types> struct type_list;
template
<
>
template
<
>
struct
type_list
<>
struct
type_list
<>
{
{
typedef
void_type
head
_type
;
typedef
void_type
head
;
typedef
void_type
back
_type
;
typedef
void_type
back
;
typedef
type_list
<>
tail
_type
;
typedef
type_list
<>
tail
;
static
const
size_t
size
=
0
;
static
const
size_t
size
=
0
;
};
};
...
@@ -61,48 +62,66 @@ template<typename Head, typename... Tail>
...
@@ -61,48 +62,66 @@ template<typename Head, typename... Tail>
struct
type_list
<
Head
,
Tail
...
>
struct
type_list
<
Head
,
Tail
...
>
{
{
typedef
uniform_type_info
const
*
uti_ptr
;
typedef
Head
head
;
typedef
Head
head_type
;
typedef
type_list
<
Tail
...
>
tail
;
typedef
type_list
<
Tail
...
>
tail_type
;
typedef
typename
if_else_c
<
sizeof
...(
Tail
)
==
0
,
typedef
typename
if_else_c
<
sizeof
...(
Tail
)
==
0
,
Head
,
Head
,
wrapped
<
typename
tail
_type
::
back_type
>
>::
type
wrapped
<
typename
tail
::
back
>
>::
type
back
_type
;
back
;
static
const
size_t
size
=
sizeof
...(
Tail
)
+
1
;
static
const
size_t
size
=
sizeof
...(
Tail
)
+
1
;
type_list
()
};
{
init
<
type_list
>
(
m_arr
);
}
inline
uniform_type_info
const
&
at
(
size_t
pos
)
const
/**
{
* @brief Zips two lists of equal size.
return
*
m_arr
[
pos
];
*
}
* Creates a list formed from the two lists @p ListA and @p ListB,
* e.g., tl_zip<type_list<int,double>,type_list<float,string>>::type
* is type_list<type_pair<int,float>,type_pair<double,string>>.
*/
template
<
class
ListA
,
class
ListB
>
struct
tl_zip
;
template
<
typename
TypeList
>
template
<
typename
...
LhsElements
,
typename
...
RhsElements
>
static
void
init
(
uti_ptr
*
what
)
struct
tl_zip
<
type_list
<
LhsElements
...
>
,
type_list
<
RhsElements
...
>
>
{
{
what
[
0
]
=
uniform_typeid
(
typeid
(
typename
TypeList
::
head_type
));
static_assert
(
type_list
<
LhsElements
...
>::
size
==
if
(
TypeList
::
size
>
1
)
type_list
<
RhsElements
...
>::
size
,
{
"Lists have different size"
);
++
what
;
typedef
type_list
<
type_pair
<
LhsElements
,
RhsElements
>
...
>
type
;
init
<
typename
TypeList
::
tail_type
>
(
what
);
};
}
}
private:
template
<
class
From
,
typename
...
Elements
>
struct
tl_reverse_impl
;
uti_ptr
m_arr
[
size
];
template
<
typename
T0
,
typename
...
T
,
typename
...
E
>
struct
tl_reverse_impl
<
type_list
<
T0
,
T
...
>
,
E
...
>
{
typedef
typename
tl_reverse_impl
<
type_list
<
T
...
>
,
T0
,
E
...
>::
type
type
;
};
template
<
typename
...
E
>
struct
tl_reverse_impl
<
type_list
<>
,
E
...
>
{
typedef
type_list
<
E
...
>
type
;
};
};
// type_list::find
/**
* @brief Creates a new list wih elements in reversed order.
*/
template
<
class
List
>
struct
tl_reverse
{
typedef
typename
tl_reverse_impl
<
List
>::
type
type
;
};
/**
* @brief Finds the first element of type @p What beginning at
* index @p Pos.
*/
template
<
class
List
,
typename
What
,
int
Pos
=
0
>
template
<
class
List
,
typename
What
,
int
Pos
=
0
>
struct
tl_find
;
struct
tl_find
;
...
@@ -120,7 +139,31 @@ struct tl_find<type_list<Head, Tail...>, What, Pos>
...
@@ -120,7 +139,31 @@ struct tl_find<type_list<Head, Tail...>, What, Pos>
:
tl_find
<
type_list
<
Tail
...
>
,
What
,
Pos
+
1
>::
value
;
:
tl_find
<
type_list
<
Tail
...
>
,
What
,
Pos
+
1
>::
value
;
};
};
// type_list::forall
template
<
size_t
N
,
class
List
,
typename
...
T
>
struct
tl_first_n_impl
;
template
<
class
List
,
typename
...
T
>
struct
tl_first_n_impl
<
0
,
List
,
T
...
>
{
typedef
type_list
<
T
...
>
type
;
};
template
<
size_t
N
,
typename
L0
,
typename
...
L
,
typename
...
T
>
struct
tl_first_n_impl
<
N
,
type_list
<
L0
,
L
...
>
,
T
...
>
{
typedef
typename
tl_first_n_impl
<
N
-
1
,
type_list
<
L
...
>
,
T
...,
L0
>::
type
type
;
};
/**
* @brief Creates a new list from the first @p N elements of @p List.
*/
template
<
size_t
N
,
class
List
>
struct
tl_first_n
{
static_assert
(
N
>
0
,
"N == 0"
);
static_assert
(
List
::
size
>=
N
,
"List::size < N"
);
typedef
typename
tl_first_n_impl
<
N
,
List
>::
type
type
;
};
/**
/**
* @brief Tests whether a predicate holds for all elements of a list.
* @brief Tests whether a predicate holds for all elements of a list.
...
@@ -128,20 +171,83 @@ struct tl_find<type_list<Head, Tail...>, What, Pos>
...
@@ -128,20 +171,83 @@ struct tl_find<type_list<Head, Tail...>, What, Pos>
template
<
class
List
,
template
<
typename
>
class
Predicate
>
template
<
class
List
,
template
<
typename
>
class
Predicate
>
struct
tl_forall
struct
tl_forall
{
{
typedef
typename
List
::
head_type
head_type
;
static
constexpr
bool
value
=
typedef
typename
List
::
tail_type
tail_type
;
Predicate
<
typename
List
::
head
>::
value
&&
tl_forall
<
typename
List
::
tail
,
Predicate
>::
value
;
static
const
bool
value
=
Predicate
<
head_type
>::
value
&&
tl_forall
<
tail_type
,
Predicate
>::
value
;
};
};
template
<
template
<
typename
>
class
Predicate
>
template
<
template
<
typename
>
class
Predicate
>
struct
tl_forall
<
type_list
<>
,
Predicate
>
struct
tl_forall
<
type_list
<>
,
Predicate
>
{
{
static
const
bool
value
=
true
;
static
const
expr
bool
value
=
true
;
};
};
/**
* @brief Tests whether a predicate holds for all elements of a zipped list.
*/
template
<
class
ZippedList
,
template
<
typename
,
typename
>
class
Predicate
>
struct
tl_zipped_forall
{
typedef
typename
ZippedList
::
head
head
;
static
constexpr
bool
value
=
Predicate
<
typename
head
::
first
,
typename
head
::
second
>::
value
&&
tl_zipped_forall
<
typename
ZippedList
::
tail
,
Predicate
>::
value
;
};
template
<
template
<
typename
,
typename
>
class
Predicate
>
struct
tl_zipped_forall
<
type_list
<>
,
Predicate
>
{
static
constexpr
bool
value
=
true
;
};
/**
* @brief Concatenates two lists.
*/
template
<
typename
ListA
,
typename
ListB
>
struct
tl_concat
;
template
<
typename
...
ListATypes
,
typename
...
ListBTypes
>
struct
tl_concat
<
type_list
<
ListATypes
...
>
,
type_list
<
ListBTypes
...
>
>
{
typedef
type_list
<
ListATypes
...,
ListBTypes
...
>
type
;
};
/**
* @brief Applies a "template function" to each element in the list.
*/
template
<
typename
List
,
template
<
typename
>
class
What
>
struct
tl_apply
;
template
<
template
<
typename
>
class
What
,
typename
...
Elements
>
struct
tl_apply
<
type_list
<
Elements
...
>
,
What
>
{
typedef
type_list
<
typename
What
<
Elements
>::
type
...
>
type
;
};
/**
* @brief Applies a binary "template function" to each element
* in the zipped list.
*/
template
<
typename
List
,
template
<
typename
,
typename
>
class
What
>
struct
tl_zipped_apply
;
template
<
template
<
typename
,
typename
>
class
What
,
typename
...
T
>
struct
tl_zipped_apply
<
type_list
<
T
...
>
,
What
>
{
typedef
type_list
<
typename
What
<
typename
T
::
first
,
typename
T
::
second
>::
type
...
>
type
;
};
/**
* @brief Creates a new list wih all but the last element of @p List.
*/
template
<
class
List
>
struct
tl_pop_back
{
typedef
typename
tl_reverse
<
List
>::
type
rlist
;
typedef
typename
tl_reverse
<
typename
rlist
::
tail
>::
type
type
;
};
}
}
// namespace cppa::util
}
}
// namespace cppa::util
#endif // LIBCPPA_UTIL_TYPE_LIST_HPP
#endif // LIBCPPA_UTIL_TYPE_LIST_HPP
cppa/util/type_list_apply.hpp
deleted
100644 → 0
View file @
7e1b6857
/******************************************************************************\
* ___ __ *
* /\_ \ __/\ \ *
* \//\ \ /\_\ \ \____ ___ _____ _____ __ *
* \ \ \ \/\ \ \ '__`\ /'___\/\ '__`\/\ '__`\ /'__`\ *
* \_\ \_\ \ \ \ \L\ \/\ \__/\ \ \L\ \ \ \L\ \/\ \L\.\_ *
* /\____\\ \_\ \_,__/\ \____\\ \ ,__/\ \ ,__/\ \__/.\_\ *
* \/____/ \/_/\/___/ \/____/ \ \ \/ \ \ \/ \/__/\/_/ *
* \ \_\ \ \_\ *
* \/_/ \/_/ *
* *
* Copyright (C) 2011, 2012 *
* Dominik Charousset <dominik.charousset@haw-hamburg.de> *
* *
* This file is part of libcppa. *
* libcppa is free software: you can redistribute it and/or modify it under *
* the terms of the GNU Lesser General Public License as published by the *
* Free Software Foundation, either version 3 of the License *
* or (at your option) any later version. *
* *
* libcppa is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. *
* See the GNU Lesser General Public License for more details. *
* *
* You should have received a copy of the GNU Lesser General Public License *
* along with libcppa. If not, see <http://www.gnu.org/licenses/>. *
\******************************************************************************/
#ifndef TYPE_LIST_APPLY_HPP
#define TYPE_LIST_APPLY_HPP
#include "cppa/util/type_list.hpp"
#include "cppa/util/concat_type_lists.hpp"
namespace
cppa
{
namespace
util
{
/**
* @brief Apply @p What to each element of @p List.
*/
template
<
typename
List
,
template
<
typename
>
class
What
>
struct
type_list_apply
{
typedef
typename
What
<
typename
List
::
head_type
>::
type
head_type
;
typedef
typename
concat_type_lists
<
type_list
<
head_type
>
,
typename
type_list_apply
<
typename
List
::
tail_type
,
What
>::
type
>::
type
type
;
};
template
<
template
<
typename
>
class
What
>
struct
type_list_apply
<
type_list
<>
,
What
>
{
typedef
type_list
<>
type
;
};
}
}
// namespace cppa::util
#endif // TYPE_LIST_APPLY_HPP
cppa/util/
pop_back
.hpp
→
cppa/util/
type_pair
.hpp
View file @
cc45117f
...
@@ -28,24 +28,18 @@
...
@@ -28,24 +28,18 @@
\******************************************************************************/
\******************************************************************************/
#ifndef POP_BACK_HPP
#ifndef TYPE_PAIR_HPP
#define POP_BACK_HPP
#define TYPE_PAIR_HPP
#include "cppa/util/type_list.hpp"
#include "cppa/util/reverse_type_list.hpp"
namespace
cppa
{
namespace
util
{
namespace
cppa
{
namespace
util
{
template
<
class
C
>
template
<
typename
First
,
typename
Second
>
struct
pop_back
;
struct
type_pair
template
<
typename
...
Tn
>
struct
pop_back
<
type_list
<
Tn
...
>
>
{
{
typedef
typename
reverse_type_list
<
type_list
<
Tn
...
>>::
type
rli
st
;
typedef
First
fir
st
;
typedef
typename
reverse_type_list
<
typename
rlist
::
tail_type
>::
type
type
;
typedef
Second
second
;
};
};
}
}
// namespace cppa::util
}
}
// namespace cppa::util
#endif //
POP_BACK
_HPP
#endif //
TYPE_PAIR
_HPP
cppa/util/void_type.hpp
View file @
cc45117f
...
@@ -38,8 +38,8 @@ template<typename... Types> struct type_list;
...
@@ -38,8 +38,8 @@ template<typename... Types> struct type_list;
struct
void_type
struct
void_type
{
{
typedef
void_type
head
_type
;
typedef
void_type
head
;
typedef
type_list
<>
tail
_type
;
typedef
type_list
<>
tail
;
};
};
inline
bool
operator
==
(
void_type
const
&
,
void_type
const
&
)
{
return
true
;
}
inline
bool
operator
==
(
void_type
const
&
,
void_type
const
&
)
{
return
true
;
}
...
...
unit_testing/test__pattern.cpp
View file @
cc45117f
...
@@ -34,8 +34,27 @@ typedef std::pair<int,int> foobar;
...
@@ -34,8 +34,27 @@ typedef std::pair<int,int> foobar;
static
detail
::
types_array
<
int
,
anything
,
float
>
arr1
;
static
detail
::
types_array
<
int
,
anything
,
float
>
arr1
;
static
detail
::
types_array
<
int
,
anything
,
foobar
>
arr2
;
static
detail
::
types_array
<
int
,
anything
,
foobar
>
arr2
;
template
<
template
<
typename
,
typename
>
class
Tpl
,
typename
Arg1
>
struct
tbind
{
template
<
typename
Arg2
>
struct
type
{
static
constexpr
bool
value
=
Tpl
<
Arg1
,
Arg2
>::
value
;
};
};
template
<
template
<
typename
>
class
Predicate
,
class
Value
>
struct
foobaz
{
static
constexpr
bool
value
=
Predicate
<
Value
>::
value
;
};
size_t
test__pattern
()
size_t
test__pattern
()
{
{
cout
<<
"foobaz: "
<<
foobaz
<
tbind
<
std
::
is_same
,
void
>::
type
,
void
>::
value
<<
endl
;
announce
<
foobar
>
(
&
foobar
::
first
,
&
foobar
::
second
);
announce
<
foobar
>
(
&
foobar
::
first
,
&
foobar
::
second
);
plot
(
arr1
);
plot
(
arr1
);
...
...
unit_testing/test__type_list.cpp
View file @
cc45117f
...
@@ -26,7 +26,7 @@ size_t test__type_list()
...
@@ -26,7 +26,7 @@ size_t test__type_list()
CPPA_CHECK
((
is_same
<
int
,
int_typedef
>::
value
));
CPPA_CHECK
((
is_same
<
int
,
int_typedef
>::
value
));
typedef
type_list
<
int
,
float
,
std
::
string
>
l1
;
typedef
type_list
<
int
,
float
,
std
::
string
>
l1
;
typedef
reverse_type_list
<
l1
>::
type
r1
;
typedef
typename
tl_reverse
<
l1
>::
type
r1
;
CPPA_CHECK
((
is_same
<
int
,
element_at
<
0
,
l1
>::
type
>::
value
));
CPPA_CHECK
((
is_same
<
int
,
element_at
<
0
,
l1
>::
type
>::
value
));
CPPA_CHECK
((
is_same
<
float
,
element_at
<
1
,
l1
>::
type
>::
value
));
CPPA_CHECK
((
is_same
<
float
,
element_at
<
1
,
l1
>::
type
>::
value
));
...
@@ -40,8 +40,8 @@ size_t test__type_list()
...
@@ -40,8 +40,8 @@ size_t test__type_list()
typedef
concat_type_lists
<
type_list
<
int
>
,
l1
>::
type
l2
;
typedef
concat_type_lists
<
type_list
<
int
>
,
l1
>::
type
l2
;
CPPA_CHECK
((
is_same
<
int
,
l2
::
head
_type
>::
value
));
CPPA_CHECK
((
is_same
<
int
,
l2
::
head
>::
value
));
CPPA_CHECK
((
is_same
<
l1
,
l2
::
tail
_type
>::
value
));
CPPA_CHECK
((
is_same
<
l1
,
l2
::
tail
>::
value
));
return
CPPA_TEST_RESULT
;
return
CPPA_TEST_RESULT
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment