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
DataType
Point attribute access data type.
Get RDB data type enumerator from data type.
ValueType * dataPointerOf(ValueType *const value)
Get pointer to variable or to data in a std::array or vector container.
32 bit single precision floating point value
64 bit double precision floating point value
RIEGL Laser Measurement Systems GmbH, Austria.
DataType dataTypeOf()
Convenience wrapper for DataTypeOf class.
64 bit double precision floating point value
32 bit single precision floating point value
static const DataType type
Result RDB data type enumerator for given ValueType.