Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
gaoqiong
MIGraphX
Commits
9add94f3
Commit
9add94f3
authored
Aug 10, 2023
by
Paul
Browse files
Format
parent
065d06af
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
90 additions
and
16 deletions
+90
-16
src/include/migraphx/functional.hpp
src/include/migraphx/functional.hpp
+9
-0
src/msgpack.cpp
src/msgpack.cpp
+81
-16
No files found.
src/include/migraphx/functional.hpp
View file @
9add94f3
...
@@ -98,6 +98,9 @@ constexpr auto sequence_c_impl(F&& f, seq<Ns...>)
...
@@ -98,6 +98,9 @@ constexpr auto sequence_c_impl(F&& f, seq<Ns...>)
return
f
(
std
::
integral_constant
<
std
::
size_t
,
Ns
>
{}...);
return
f
(
std
::
integral_constant
<
std
::
size_t
,
Ns
>
{}...);
}
}
template
<
class
...
Ts
>
struct
overloaded
:
Ts
...
{
using
Ts
::
operator
()...;
};
}
// namespace detail
}
// namespace detail
template
<
std
::
size_t
N
,
class
F
>
template
<
std
::
size_t
N
,
class
F
>
...
@@ -135,6 +138,12 @@ auto unpack(F f, T&& x)
...
@@ -135,6 +138,12 @@ auto unpack(F f, T&& x)
return
sequence
(
tuple_size
(
x
),
[
&
](
auto
...
is
)
{
f
(
std
::
get
<
is
>
(
static_cast
<
T
&&>
(
x
))...);
});
return
sequence
(
tuple_size
(
x
),
[
&
](
auto
...
is
)
{
f
(
std
::
get
<
is
>
(
static_cast
<
T
&&>
(
x
))...);
});
}
}
template
<
class
...
Ts
>
detail
::
overloaded
<
Ts
...
>
overload
(
Ts
...
xs
)
{
return
{
xs
...};
}
/// Implements a fix-point combinator
/// Implements a fix-point combinator
template
<
class
R
,
class
F
>
template
<
class
R
,
class
F
>
detail
::
fix_f
<
R
,
F
>
fix
(
F
f
)
detail
::
fix_f
<
R
,
F
>
fix
(
F
f
)
...
...
src/msgpack.cpp
View file @
9add94f3
...
@@ -24,6 +24,43 @@
...
@@ -24,6 +24,43 @@
#include <migraphx/msgpack.hpp>
#include <migraphx/msgpack.hpp>
#include <migraphx/serialize.hpp>
#include <migraphx/serialize.hpp>
#include <msgpack.hpp>
#include <msgpack.hpp>
#include <variant>
namespace
migraphx
{
inline
namespace
MIGRAPHX_INLINE_NS
{
struct
msgpack_chunk
{
std
::
vector
<
value
>
chunks
;
value
as_value
()
const
{
if
(
chunks
.
empty
())
return
{};
const
value
&
v
=
chunks
.
front
();
if
(
v
.
is_array
()
or
v
.
is_object
())
{
std
::
vector
<
value
>
values
=
v
.
is_array
()
?
v
.
get_array
()
:
v
.
get_object
();
std
::
for_each
(
chunks
.
begin
()
+
1
,
chunks
.
end
(),
[
&
](
const
auto
&
chunk
)
{
values
.
insert
(
values
.
end
(),
chunk
.
begin
(),
chunk
.
end
());
});
return
values
;
}
else
if
(
v
.
is_binary
())
{
value
::
binary
data
=
v
.
get_binary
();
std
::
for_each
(
chunks
.
begin
()
+
1
,
chunks
.
end
(),
[
&
](
const
auto
&
chunk
)
{
const
value
::
binary
&
b
=
chunk
.
get_binary
();
data
.
insert
(
data
.
end
(),
b
.
begin
(),
b
.
end
());
});
return
data
;
}
MIGRAPHX_THROW
(
"Incorrect chunking"
);
}
};
}
// namespace MIGRAPHX_INLINE_NS
}
// namespace migraphx
namespace
msgpack
{
namespace
msgpack
{
MSGPACK_API_VERSION_NAMESPACE
(
MSGPACK_DEFAULT_API_NS
)
MSGPACK_API_VERSION_NAMESPACE
(
MSGPACK_DEFAULT_API_NS
)
...
@@ -62,27 +99,55 @@ MSGPACK_API_VERSION_NAMESPACE(MSGPACK_DEFAULT_API_NS)
...
@@ -62,27 +99,55 @@ MSGPACK_API_VERSION_NAMESPACE(MSGPACK_DEFAULT_API_NS)
v
=
o
.
as
<
std
::
string
>
();
v
=
o
.
as
<
std
::
string
>
();
break
;
break
;
}
}
case
msgpack
::
type
::
BIN
:
{
v
=
migraphx
::
value
::
binary
{
o
.
via
.
bin
.
ptr
,
o
.
via
.
bin
.
size
};
break
;
}
case
msgpack
::
type
::
ARRAY
:
{
case
msgpack
::
type
::
ARRAY
:
{
migraphx
::
value
r
=
migraphx
::
value
::
array
{};
if
(
o
.
via
.
array
.
size
==
0
)
{
v
=
migraphx
::
value
::
array
{};
break
;
}
std
::
variant
<
migraphx
::
value
::
array
,
migraphx
::
value
::
binary
,
migraphx
::
value
::
object
>
r
;
switch
(
o
.
via
.
array
.
ptr
->
type
)
{
case
msgpack
::
type
::
BIN
:
{
r
=
migraphx
::
value
::
binary
{};
break
;
}
case
msgpack
::
type
::
ARRAY
:
{
r
=
migraphx
::
value
::
array
{};
break
;
}
case
msgpack
::
type
::
MAP
:
{
r
=
migraphx
::
value
::
object
{};
break
;
}
default:
MIGRAPHX_THROW
(
"Incorrect chunking"
);
}
}
std
::
for_each
(
std
::
for_each
(
o
.
via
.
array
.
ptr
,
o
.
via
.
array
.
ptr
,
o
.
via
.
array
.
ptr
+
o
.
via
.
array
.
size
,
o
.
via
.
array
.
ptr
+
o
.
via
.
array
.
size
,
[
&
](
const
msgpack
::
object
&
so
)
{
r
.
push_back
(
so
.
as
<
migraphx
::
value
>
());
});
[
&
](
const
msgpack
::
object
&
sa
)
{
v
=
r
;
std
::
visit
(
overload
([
&
](
migraphx
::
value
::
binary
&
bin
)
{
break
;
bin
.
insert
(
bin
.
end
(),
o
.
via
.
bin
.
ptr
,
o
.
via
.
bin
.
ptr
+
o
.
via
.
bin
.
size
);
},
[
&
](
migraphx
::
value
::
array
&
arr
)
{
std
::
for_each
(
sa
.
via
.
array
.
ptr
,
sa
.
via
.
array
.
ptr
+
sa
.
via
.
array
.
size
,
[
&
](
const
msgpack
::
object
&
so
)
{
arr
.
push_back
(
so
.
as
<
migraphx
::
value
>
());
});
},
[
&
](
migraphx
::
value
::
object
&
obj
)
{
std
::
for_each
(
sa
.
via
.
map
.
ptr
,
sa
.
via
.
map
.
ptr
+
sa
.
via
.
map
.
size
,
[
&
](
const
msgpack
::
object_kv
&
p
)
{
obj
[
p
.
key
.
as
<
std
::
string
>
()]
=
p
.
val
.
as
<
migraphx
::
value
>
();
});
}),
r
);
});
std
::
visit
([
&
](
const
auto
&
x
)
{
v
=
x
;
},
r
);
break
;
}
}
case
msgpack
::
type
::
MAP
:
{
case
msgpack
::
type
::
MAP
:
migraphx
::
value
r
=
migraphx
::
value
::
object
{};
case
msgpack
::
type
::
BIN
:
{
std
::
for_each
(
o
.
via
.
map
.
ptr
,
MIGRAPHX_THROW
(
"Unexpected msgpack type"
);
o
.
via
.
map
.
ptr
+
o
.
via
.
map
.
size
,
[
&
](
const
msgpack
::
object_kv
&
p
)
{
r
[
p
.
key
.
as
<
std
::
string
>
()]
=
p
.
val
.
as
<
migraphx
::
value
>
();
});
v
=
r
;
break
;
break
;
}
}
case
msgpack
::
type
::
EXT
:
{
case
msgpack
::
type
::
EXT
:
{
...
...
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