34 #ifndef RIEGL_RDB_POINTCLOUD_DATATYPES_HPP
35 #define RIEGL_RDB_POINTCLOUD_DATATYPES_HPP
44 #include <type_traits>
50 namespace pointcloud {
79 template <
typename ValueType>
83 template <
bool Integer,
bool Signed, std::
size_t Size,
typename dummy =
void>
struct data_type_of { };
84 template <
typename dummy>
struct data_type_of<true, false, 1, dummy> {
static const auto type =
UINT8; };
85 template <
typename dummy>
struct data_type_of<true, true, 1, dummy> {
static const auto type =
INT8; };
86 template <
typename dummy>
struct data_type_of<true, false, 2, dummy> {
static const auto type =
UINT16; };
87 template <
typename dummy>
struct data_type_of<true, true, 2, dummy> {
static const auto type =
INT16; };
88 template <
typename dummy>
struct data_type_of<true, false, 4, dummy> {
static const auto type =
UINT32; };
89 template <
typename dummy>
struct data_type_of<true, true, 4, dummy> {
static const auto type =
INT32; };
90 template <
typename dummy>
struct data_type_of<true, false, 8, dummy> {
static const auto type =
UINT64; };
91 template <
typename dummy>
struct data_type_of<true, true, 8, dummy> {
static const auto type =
INT64; };
92 template <
typename dummy>
struct data_type_of<false, true, 4, dummy> {
static const auto type =
FLOAT32; };
93 template <
typename dummy>
struct data_type_of<false, true, 8, dummy> {
static const auto type =
FLOAT64; };
96 template <
typename SomeType>
97 struct remove_container
99 typedef SomeType
type;
102 template <
typename SomeType, std::
size_t Size>
103 struct remove_container< SomeType[Size] >
105 typedef SomeType
type;
108 template <
typename SomeType, std::
size_t Size>
109 struct remove_container<
std::array<SomeType, Size> >
111 typedef SomeType
type;
114 template <
typename SomeType,
class Allocator>
115 struct remove_container<
std::vector<SomeType, Allocator> >
117 typedef SomeType
type;
121 typedef typename std::remove_cv <ValueType>::type TempType1;
122 typedef typename std::remove_pointer<TempType1>::type TempType2;
123 typedef typename std::remove_cv <TempType2>::type TempType3;
124 typedef typename remove_container <TempType3>::type TempType4;
125 typedef typename remove_container <TempType4>::type CoreType;
130 std::numeric_limits<CoreType>::is_integer,
131 std::numeric_limits<CoreType>::is_signed,
146 template <
typename ValueType>
164 template <
typename ValueType>
175 template <
typename ValueType>
181 template <
typename ValueType>
187 template <
typename ValueType>
193 template <
typename ValueType>
199 template <
typename ValueType, std::
size_t Size>
205 template <
typename ValueType, std::
size_t Size>
211 template <
typename ValueType,
class Allocator>
217 template <
typename ValueType,
class Allocator>
218 const ValueType*
dataPointerOf(
const std::vector<ValueType, Allocator>& value)
225 #endif // RIEGL_RDB_POINTCLOUD_DATATYPES_HPP