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
7e1b6857
Commit
7e1b6857
authored
Jan 16, 2012
by
neverlord
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
improved pattern performance
parent
19dca133
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
22 additions
and
26 deletions
+22
-26
cppa/detail/pattern_details.hpp
cppa/detail/pattern_details.hpp
+5
-4
cppa/pattern.hpp
cppa/pattern.hpp
+17
-11
unit_testing/test__pattern.cpp
unit_testing/test__pattern.cpp
+0
-11
No files found.
cppa/detail/pattern_details.hpp
View file @
7e1b6857
...
@@ -116,19 +116,20 @@ void fill_vecs(size_t pos,
...
@@ -116,19 +116,20 @@ void fill_vecs(size_t pos,
dt
,
utis
,
data_ptrs
);
dt
,
utis
,
data_ptrs
);
}
}
template
<
class
TypesArray
>
class
pattern_iterator
class
pattern_iterator
{
{
size_t
m_pos
;
size_t
m_pos
;
size_t
m_size
;
size_t
m_size
;
void
const
*
const
*
m_data
;
void
const
*
const
*
m_data
;
cppa
::
uniform_type_info
const
*
const
*
m_types
;
TypesArray
const
&
m_types
;
public:
public:
inline
pattern_iterator
(
size_t
msize
,
inline
pattern_iterator
(
size_t
msize
,
void
const
*
const
*
mdata
,
void
const
*
const
*
mdata
,
cppa
::
uniform_type_info
const
*
const
*
mtypes
)
TypesArray
const
&
mtypes
)
:
m_pos
(
0
)
:
m_pos
(
0
)
,
m_size
(
msize
)
,
m_size
(
msize
)
,
m_data
(
mdata
)
,
m_data
(
mdata
)
...
@@ -289,8 +290,8 @@ class tuple_iterator_arg<any_tuple, VectorType>
...
@@ -289,8 +290,8 @@ class tuple_iterator_arg<any_tuple, VectorType>
};
};
template
<
class
T
,
class
VectorType
>
template
<
class
T
ypesArray
,
class
T
,
class
VectorType
>
bool
do_match
(
pattern_iterator
&
iter
,
tuple_iterator_arg
<
T
,
VectorType
>&
targ
)
bool
do_match
(
pattern_iterator
<
TypesArray
>
&
iter
,
tuple_iterator_arg
<
T
,
VectorType
>&
targ
)
{
{
for
(
;
!
(
iter
.
at_end
()
&&
targ
.
at_end
());
iter
.
next
(),
targ
.
next
())
for
(
;
!
(
iter
.
at_end
()
&&
targ
.
at_end
());
iter
.
next
(),
targ
.
next
())
{
{
...
...
cppa/pattern.hpp
View file @
7e1b6857
...
@@ -43,6 +43,7 @@
...
@@ -43,6 +43,7 @@
#include "cppa/util/type_list_apply.hpp"
#include "cppa/util/type_list_apply.hpp"
#include "cppa/detail/tdata.hpp"
#include "cppa/detail/tdata.hpp"
#include "cppa/detail/types_array.hpp"
#include "cppa/detail/pattern_details.hpp"
#include "cppa/detail/pattern_details.hpp"
namespace
cppa
{
namespace
cppa
{
...
@@ -77,8 +78,6 @@ class pattern<T0, Tn...>
...
@@ -77,8 +78,6 @@ class pattern<T0, Tn...>
pattern
()
pattern
()
{
{
cppa
::
uniform_type_info
const
*
*
iter
=
m_utis
;
detail
::
fill_uti_vec
<
decltype
(
iter
),
T0
,
Tn
...
>
(
iter
);
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
{
{
m_data_ptr
[
i
]
=
nullptr
;
m_data_ptr
[
i
]
=
nullptr
;
...
@@ -90,17 +89,20 @@ class pattern<T0, Tn...>
...
@@ -90,17 +89,20 @@ class pattern<T0, Tn...>
{
{
bool
invalid_args
[]
=
{
detail
::
is_boxed
<
Arg0
>::
value
,
bool
invalid_args
[]
=
{
detail
::
is_boxed
<
Arg0
>::
value
,
detail
::
is_boxed
<
Args
>::
value
...
};
detail
::
is_boxed
<
Args
>::
value
...
};
detail
::
fill_vecs
<
decltype
(
m_data
),
T0
,
Tn
...
>
(
0
,
for
(
size_t
i
=
0
;
i
<
sizeof
...(
Args
)
+
1
;
++
i
)
sizeof
...(
Args
)
+
1
,
{
invalid_args
,
m_data_ptr
[
i
]
=
invalid_args
[
i
]
?
nullptr
:
m_data
.
at
(
i
);
m_data
,
}
m_utis
,
m_data_ptr
);
for
(
size_t
i
=
sizeof
...(
Args
)
+
1
;
i
<
size
;
++
i
)
{
m_data_ptr
[
i
]
=
nullptr
;
}
}
}
bool
operator
()(
cppa
::
any_tuple
const
&
msg
,
bool
operator
()(
cppa
::
any_tuple
const
&
msg
,
mapping_vector
*
mapping
=
nullptr
)
const
mapping_vector
*
mapping
=
nullptr
)
const
{
{
detail
::
pattern_iterator
arg0
(
size
,
m_data_ptr
,
m_utis
);
detail
::
pattern_iterator
<
decltype
(
m_utis
)
>
arg0
(
size
,
m_data_ptr
,
m_utis
);
detail
::
tuple_iterator_arg
<
any_tuple
,
mapping_vector
>
arg1
(
msg
,
mapping
);
detail
::
tuple_iterator_arg
<
any_tuple
,
mapping_vector
>
arg1
(
msg
,
mapping
);
return
detail
::
do_match
(
arg0
,
arg1
);
return
detail
::
do_match
(
arg0
,
arg1
);
}
}
...
@@ -108,11 +110,15 @@ class pattern<T0, Tn...>
...
@@ -108,11 +110,15 @@ class pattern<T0, Tn...>
// private:
// private:
detail
::
tdata
<
T0
,
Tn
...
>
m_data
;
detail
::
tdata
<
T0
,
Tn
...
>
m_data
;
cppa
::
uniform_type_info
const
*
m_utis
[
size
];
//cppa::uniform_type_info const* m_utis[size];
static
detail
::
types_array
<
T0
,
Tn
...
>
m_utis
;
void
const
*
m_data_ptr
[
size
];
void
const
*
m_data_ptr
[
size
];
};
};
template
<
typename
T0
,
typename
...
Tn
>
detail
::
types_array
<
T0
,
Tn
...
>
pattern
<
T0
,
Tn
...
>::
m_utis
;
template
<
class
ExtendedType
,
class
BasicType
>
template
<
class
ExtendedType
,
class
BasicType
>
ExtendedType
*
extend_pattern
(
BasicType
*
p
)
ExtendedType
*
extend_pattern
(
BasicType
*
p
)
{
{
...
@@ -120,14 +126,14 @@ ExtendedType* extend_pattern(BasicType* p)
...
@@ -120,14 +126,14 @@ ExtendedType* extend_pattern(BasicType* p)
et
->
m_data
=
p
->
m_data
;
et
->
m_data
=
p
->
m_data
;
for
(
size_t
i
=
0
;
i
<
BasicType
::
size
;
++
i
)
for
(
size_t
i
=
0
;
i
<
BasicType
::
size
;
++
i
)
{
{
et
->
m_utis
[
i
]
=
p
->
m_utis
[
i
];
//
et->m_utis[i] = p->m_utis[i];
et
->
m_data_ptr
[
i
]
=
(
p
->
m_data_ptr
[
i
])
?
et
->
m_data
.
at
(
i
)
et
->
m_data_ptr
[
i
]
=
(
p
->
m_data_ptr
[
i
])
?
et
->
m_data
.
at
(
i
)
:
nullptr
;
:
nullptr
;
}
}
for
(
size_t
i
=
BasicType
::
size
;
i
<
ExtendedType
::
size
;
++
i
)
for
(
size_t
i
=
BasicType
::
size
;
i
<
ExtendedType
::
size
;
++
i
)
{
{
et
->
m_data_ptr
[
i
]
=
nullptr
;
et
->
m_data_ptr
[
i
]
=
nullptr
;
et
->
m_utis
[
i
]
=
et
->
m_data
.
type_at
(
i
);
//
et->m_utis[i] = et->m_data.type_at(i);
}
}
return
et
;
return
et
;
}
}
...
...
unit_testing/test__pattern.cpp
View file @
7e1b6857
...
@@ -17,16 +17,6 @@
...
@@ -17,16 +17,6 @@
using
namespace
cppa
;
using
namespace
cppa
;
void
subtest
()
{
typedef
pattern
<
int
,
int
,
int
>
i3
;
i3
ip
;
std
::
vector
<
int
>
vec
=
{
1
,
2
,
3
};
detail
::
pattern_iterator
arg0
(
i3
::
size
,
ip
.
m_data_ptr
,
ip
.
m_utis
);
detail
::
tuple_iterator_arg
<
std
::
vector
<
int
>
,
i3
::
mapping_vector
>
arg1
(
vec
);
cout
<<
"match(vec) ( on<int,int,int> =====> "
<<
detail
::
do_match
(
arg0
,
arg1
)
<<
endl
;
}
template
<
typename
Arr
>
template
<
typename
Arr
>
void
plot
(
Arr
const
&
arr
)
void
plot
(
Arr
const
&
arr
)
{
{
...
@@ -51,7 +41,6 @@ size_t test__pattern()
...
@@ -51,7 +41,6 @@ size_t test__pattern()
plot
(
arr1
);
plot
(
arr1
);
plot
(
arr2
);
plot
(
arr2
);
//subtest();
CPPA_TEST
(
test__pattern
);
CPPA_TEST
(
test__pattern
);
// some pattern objects to play with
// some pattern objects to play with
pattern
<
atom_value
,
int
,
std
::
string
>
p0
{
util
::
wrapped
<
atom_value
>
()};
pattern
<
atom_value
,
int
,
std
::
string
>
p0
{
util
::
wrapped
<
atom_value
>
()};
...
...
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