serialize.cpp 1.22 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

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());
Paul Fultz II's avatar
Paul Fultz II committed
14
15
16
17
18
    if(rd.get_shape().type() == shape::tuple_type)
        result["sub"] = migraphx::to_value(rd.get_sub_objects());
    else
        result["data"] = migraphx::value::binary(rd.data(), rd.get_shape().bytes());
    v = result;
19
20
21
22
23
24
}

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"));
25
    l      = literal(s, v.at("data").get_binary().data());
26
27
28
29
30
}

void migraphx_to_value(value& v, const argument& a) { raw_data_to_value(v, a); }
void migraphx_from_value(const value& v, argument& a)
{
Paul Fultz II's avatar
Paul Fultz II committed
31
32
33
34
35
36
37
38
39
    if(v.contains("data"))
    {
        literal l = migraphx::from_value<literal>(v);
        a         = l.get_argument();
    }
    else
    {
        a = migraphx::from_value<std::vector<argument>>(v.at("sub"));
    }
40
41
42
43
}

} // namespace MIGRAPHX_INLINE_NS
} // namespace migraphx