Commit 08779d55 authored by Paul's avatar Paul
Browse files

Simplify target functions

parent 6a8cef34
...@@ -64,60 +64,24 @@ struct target ...@@ -64,60 +64,24 @@ struct target
#else #else
template <class T> template <class T>
auto target_allocate(rank<1>, T& x, const shape& s) -> decltype(x.allocate(s)) argument target_allocate(T& x, const shape&)
{
return x.allocate(s);
}
template <class T>
argument target_allocate(rank<0>, T& x, const shape&)
{ {
std::string name = x.name(); std::string name = x.name();
MIGRAPHX_THROW("Not computable: " + name); MIGRAPHX_THROW("Not computable: " + name);
} }
template <class T> template <class T>
argument target_allocate(T& x, const shape& s) argument copy_to_target(T&, const argument& arg)
{
return target_allocate(rank<1>{}, x, s);
}
template <class T>
auto copy_to_target(rank<1>, T& x, const argument& arg) -> decltype(x.copy_to(arg))
{
return x.copy_to(arg);
}
template <class T>
argument copy_to_target(rank<0>, T&, const argument& arg)
{ {
return arg; return arg;
} }
template <class T> template <class T>
argument copy_to_target(T& x, const argument& arg) argument copy_from_target(T&, const argument& arg)
{
return copy_to_target(rank<1>{}, x, arg);
}
template <class T>
auto copy_from_target(rank<1>, T& x, const argument& arg) -> decltype(x.copy_from(arg))
{
return x.copy_from(arg);
}
template <class T>
argument copy_from_target(rank<0>, T&, const argument& arg)
{ {
return arg; return arg;
} }
template <class T>
argument copy_from_target(T& x, const argument& arg)
{
return copy_from_target(rank<1>{}, x, arg);
}
/* /*
* Type-erased interface for: * Type-erased interface for:
* *
......
...@@ -64,60 +64,24 @@ struct target ...@@ -64,60 +64,24 @@ struct target
#else #else
template <class T> template <class T>
auto target_allocate(rank<1>, T& x, const shape& s) -> decltype(x.allocate(s)) argument target_allocate(T& x, const shape&)
{
return x.allocate(s);
}
template <class T>
argument target_allocate(rank<0>, T& x, const shape&)
{ {
std::string name = x.name(); std::string name = x.name();
MIGRAPHX_THROW("Not computable: " + name); MIGRAPHX_THROW("Not computable: " + name);
} }
template <class T> template <class T>
argument target_allocate(T& x, const shape& s) argument copy_to_target(T&, const argument& arg)
{
return target_allocate(rank<1>{}, x, s);
}
template <class T>
auto copy_to_target(rank<1>, T& x, const argument& arg) -> decltype(x.copy_to(arg))
{
return x.copy_to(arg);
}
template <class T>
argument copy_to_target(rank<0>, T&, const argument& arg)
{ {
return arg; return arg;
} }
template <class T> template <class T>
argument copy_to_target(T& x, const argument& arg) argument copy_from_target(T&, const argument& arg)
{
return copy_to_target(rank<1>{}, x, arg);
}
template <class T>
auto copy_from_target(rank<1>, T& x, const argument& arg) -> decltype(x.copy_from(arg))
{
return x.copy_from(arg);
}
template <class T>
argument copy_from_target(rank<0>, T&, const argument& arg)
{ {
return arg; return arg;
} }
template <class T>
argument copy_from_target(T& x, const argument& arg)
{
return copy_from_target(rank<1>{}, x, arg);
}
<% <%
interface('target', interface('target',
virtual('name', returns='std::string', const=True), virtual('name', returns='std::string', const=True),
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment