Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F87331247
kokkos_few.h
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Sat, Oct 12, 01:22
Size
2 KB
Mime Type
text/x-c++
Expires
Mon, Oct 14, 01:22 (1 d, 22 h)
Engine
blob
Format
Raw Data
Handle
21577999
Attached To
rLAMMPS lammps
kokkos_few.h
View Options
#ifndef KOKKOS_FEW_H
#define KOKKOS_FEW_H
#include <Kokkos_Core.hpp>
template
<
typename
T
,
std
::
size_t
n
>
class
Few
{
alignas
(
T
)
char
array_
[
n
*
sizeof
(
T
)];
public:
enum
{
size
=
n
};
Few
(
std
::
initializer_list
<
T
>
l
)
{
std
::
size_t
i
=
0
;
for
(
auto
it
=
l
.
begin
();
it
!=
l
.
end
();
++
it
)
{
new
(
data
()
+
(
i
++
))
T
(
*
it
);
}
}
KOKKOS_INLINE_FUNCTION
Few
(
T
const
a
[])
{
for
(
std
::
size_t
i
=
0
;
i
<
n
;
++
i
)
new
(
data
()
+
i
)
T
(
a
[
i
]);
}
KOKKOS_INLINE_FUNCTION
Few
()
{
for
(
std
::
size_t
i
=
0
;
i
<
n
;
++
i
)
new
(
data
()
+
i
)
T
();
}
KOKKOS_INLINE_FUNCTION
~
Few
()
{
for
(
std
::
size_t
i
=
0
;
i
<
n
;
++
i
)
(
data
()[
i
]).
~
T
();
}
KOKKOS_INLINE_FUNCTION
Few
(
Few
<
T
,
n
>
const
&
rhs
)
{
for
(
std
::
size_t
i
=
0
;
i
<
n
;
++
i
)
new
(
data
()
+
i
)
T
(
rhs
[
i
]);
}
KOKKOS_INLINE_FUNCTION
Few
(
Few
<
T
,
n
>
const
volatile
&
rhs
)
{
for
(
std
::
size_t
i
=
0
;
i
<
n
;
++
i
)
new
(
data
()
+
i
)
T
(
rhs
[
i
]);
}
KOKKOS_INLINE_FUNCTION
void
operator
=
(
Few
<
T
,
n
>
const
&
rhs
)
volatile
{
for
(
std
::
size_t
i
=
0
;
i
<
n
;
++
i
)
data
()[
i
]
=
rhs
[
i
];
}
KOKKOS_INLINE_FUNCTION
void
operator
=
(
Few
<
T
,
n
>
const
&
rhs
)
{
for
(
std
::
size_t
i
=
0
;
i
<
n
;
++
i
)
data
()[
i
]
=
rhs
[
i
];
}
KOKKOS_INLINE_FUNCTION
void
operator
=
(
Few
<
T
,
n
>
const
volatile
&
rhs
)
{
for
(
std
::
size_t
i
=
0
;
i
<
n
;
++
i
)
data
()[
i
]
=
rhs
[
i
];
}
KOKKOS_INLINE_FUNCTION
T
*
data
()
{
return
reinterpret_cast
<
T
*>
(
array_
);
}
KOKKOS_INLINE_FUNCTION
T
const
*
data
()
const
{
return
reinterpret_cast
<
T
const
*>
(
array_
);
}
KOKKOS_INLINE_FUNCTION
T
volatile
*
data
()
volatile
{
return
reinterpret_cast
<
T
volatile
*>
(
array_
);
}
KOKKOS_INLINE_FUNCTION
T
const
volatile
*
data
()
const
volatile
{
return
reinterpret_cast
<
T
const
volatile
*>
(
array_
);
}
KOKKOS_INLINE_FUNCTION
T
&
operator
[](
std
::
size_t
i
)
{
return
data
()[
i
];
}
KOKKOS_INLINE_FUNCTION
T
const
&
operator
[](
std
::
size_t
i
)
const
{
return
data
()[
i
];
}
KOKKOS_INLINE_FUNCTION
T
volatile
&
operator
[](
std
::
size_t
i
)
volatile
{
return
data
()[
i
];
}
KOKKOS_INLINE_FUNCTION
T
const
volatile
&
operator
[](
std
::
size_t
i
)
const
volatile
{
return
data
()[
i
];
}
};
#endif
Event Timeline
Log In to Comment