coord/base: add indices method

This commit is contained in:
Danny Robson 2017-08-24 14:39:06 +10:00
parent ad345f19d5
commit efb719b822
2 changed files with 23 additions and 0 deletions

View File

@ -160,6 +160,21 @@ namespace util::coord {
std::fill (next, std::end (out), fill);
return out;
}
///////////////////////////////////////////////////////////////////////
/// returns an instance with elements specified by the Indices
/// parameter. eg, point2f p{}.indices<0,2> would return {p.x, p.z}.
///
/// it's ugly as sin, but simplifies some situations where we don't
/// want a temporary.
template <std::size_t ...Indices>
KLASS<sizeof...(Indices),T>
indices (void) const
{
static_assert (all (make_vector ((Indices < S)...)));
return KLASS<sizeof...(Indices),T> { this->data[Indices]... };
}
};
}

View File

@ -91,5 +91,13 @@ main (void)
tap.expect_eq (limit (val, 0.f, 2.f), util::vector3f { 0, 0, 2 }, "limit with vec/num/num");
}
// ensure that klass::indices appears to link correctly
{
const util::vector3i seq { 0, 1, 2 };
const util::vector4i res { 2, 0, 0, 1 };
tap.expect_eq (seq.indices<2,0,0,1> (), res, "coord::indices expansion");
};
return tap.status ();
}