12 template <
class E, std::
size_t n >
struct IsArraylike< E[n] > : std::true_type {};
13 template <
class E, std::
size_t n >
struct IsArraylike<
std::array<E,n> > : std::true_type {};
14 template <
class E,
class A >
struct IsArraylike< std::vector<E,A> > : std::true_type {};
15 template <
class C,
class T,
class A >
struct IsArraylike< std::basic_string<C,T,A> > : std::true_type {};
28 template <
class E, std::
size_t n > E *
ArraylikeData(E(&a)[n]) {
return a; }
29 template <
class E, std::
size_t n > E *
ArraylikeData( std::array<E,n>& a) {
return a.data(); }
30 template <
class E, std::
size_t n > E
const *
ArraylikeData(
const std::array<E,n>& a) {
return a.data(); }
31 template <
class E,
class A > E *
ArraylikeData( std::vector<E,A>& a) {
return a.data(); }
32 template <
class E,
class A > E
const *
ArraylikeData(
const std::vector<E,A>& a) {
return a.data(); }
33 template <
class C,
class T,
class A > C *
ArraylikeData( std::basic_string<C,T,A>& a) {
return &a[0]; }
34 template <
class C,
class T,
class A > C
const *
ArraylikeData(
const std::basic_string<C,T,A>& a) {
return &a[0]; }
37 template <
class E, std::
size_t n > std::size_t
ArraylikeSize(E(&)[n]) {
return n; }
38 template <
class E, std::
size_t n > std::size_t
ArraylikeSize(
const std::array<E,n>&) {
return n; }
39 template <
class E,
class A > std::size_t
ArraylikeSize(
const std::vector<E,A>& a) {
return a.size(); }
40 template <
class C,
class T,
class A > std::size_t
ArraylikeSize(
const std::basic_string<C,T,A>& a) {
return a.size(); }
C Type
Definition: arraylike.hpp:23
typename ArraylikeElementType< T >::type ArraylikeElement
Definition: arraylike.hpp:25
E Type
Definition: arraylike.hpp:22
E * ArraylikeData(E(&a)[n])
Definition: arraylike.hpp:28
Definition: arraylike.hpp:10
Definition: advanced_ownership.hpp:5
std::size_t ArraylikeSize(E(&)[n])
Definition: arraylike.hpp:37
Definition: arraylike.hpp:18
E Type
Definition: arraylike.hpp:20
E Type
Definition: arraylike.hpp:21