serialize.cpp 1.06 KB
Newer Older
1
2
3
#include <migraphx/serialize.hpp>
#include <migraphx/argument.hpp>
#include <migraphx/literal.hpp>
Shucai Xiao's avatar
Shucai Xiao committed
4
#include <migraphx/context.hpp>
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36

namespace migraphx {
inline namespace MIGRAPHX_INLINE_NS {

template <class RawData>
void raw_data_to_value(value& v, const RawData& rd)
{
    value result;
    result["shape"] = migraphx::to_value(rd.get_shape());
    rd.visit([&](auto x) { result["data"] = std::vector<value>(x.begin(), x.end()); });
    v = result;
}

void migraphx_to_value(value& v, const literal& l) { raw_data_to_value(v, l); }
void migraphx_from_value(const value& v, literal& l)
{
    auto s = migraphx::from_value<shape>(v.at("shape"));
    s.visit_type([&](auto as) {
        using type = typename decltype(as)::type;
        l          = literal{s, v.at("data").to_vector<type>()};
    });
}

void migraphx_to_value(value& v, const argument& a) { raw_data_to_value(v, a); }
void migraphx_from_value(const value& v, argument& a)
{
    literal l = migraphx::from_value<literal>(v);
    a         = l.get_argument();
}

} // namespace MIGRAPHX_INLINE_NS
} // namespace migraphx