| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| #ifndef FLANN_GENERAL_H_ |
| #define FLANN_GENERAL_H_ |
|
|
| #include "defines.h" |
| #include <stdexcept> |
| #include <cassert> |
| #include <limits.h> |
|
|
| namespace flann |
| { |
|
|
| class FLANNException : public std::runtime_error |
| { |
| public: |
| FLANNException(const char* message) : std::runtime_error(message) { } |
|
|
| FLANNException(const std::string& message) : std::runtime_error(message) { } |
| }; |
|
|
|
|
| template <typename T> |
| struct flann_datatype_value |
| { |
| static const flann_datatype_t value = FLANN_NONE; |
| }; |
|
|
| template<> |
| struct flann_datatype_value<char> |
| { |
| static const flann_datatype_t value = FLANN_INT8; |
| }; |
|
|
| template<> |
| struct flann_datatype_value<short> |
| { |
| static const flann_datatype_t value = FLANN_INT16; |
| }; |
|
|
| template<> |
| struct flann_datatype_value<int> |
| { |
| static const flann_datatype_t value = FLANN_INT32; |
| }; |
|
|
| #ifdef LLONG_MAX |
| template<> |
| struct flann_datatype_value<long long> |
| { |
| static const flann_datatype_t value = FLANN_INT64; |
| }; |
| #endif |
|
|
| template<> |
| struct flann_datatype_value<unsigned char> |
| { |
| static const flann_datatype_t value = FLANN_UINT8; |
| }; |
|
|
| template<> |
| struct flann_datatype_value<unsigned short> |
| { |
| static const flann_datatype_t value = FLANN_UINT16; |
| }; |
|
|
| template<> |
| struct flann_datatype_value<unsigned int> |
| { |
| static const flann_datatype_t value = FLANN_UINT32; |
| }; |
|
|
| #ifdef ULLONG_MAX |
| template<> |
| struct flann_datatype_value<unsigned long long> |
| { |
| static const flann_datatype_t value = FLANN_UINT64; |
| }; |
| #endif |
|
|
|
|
| template<> |
| struct flann_datatype_value<float> |
| { |
| static const flann_datatype_t value = FLANN_FLOAT32; |
| }; |
|
|
| template<> |
| struct flann_datatype_value<double> |
| { |
| static const flann_datatype_t value = FLANN_FLOAT64; |
| }; |
|
|
|
|
|
|
| template <flann_datatype_t datatype> |
| struct flann_datatype_type |
| { |
| typedef void type; |
| }; |
|
|
| template<> |
| struct flann_datatype_type<FLANN_INT8> |
| { |
| typedef char type; |
| }; |
|
|
| template<> |
| struct flann_datatype_type<FLANN_INT16> |
| { |
| typedef short type; |
| }; |
|
|
| template<> |
| struct flann_datatype_type<FLANN_INT32> |
| { |
| typedef int type; |
| }; |
|
|
| #ifdef LLONG_MAX |
| template<> |
| struct flann_datatype_type<FLANN_INT64> |
| { |
| typedef long long type; |
| }; |
| #endif |
|
|
| template<> |
| struct flann_datatype_type<FLANN_UINT8> |
| { |
| typedef unsigned char type; |
| }; |
|
|
|
|
| template<> |
| struct flann_datatype_type<FLANN_UINT16> |
| { |
| typedef unsigned short type; |
| }; |
|
|
| template<> |
| struct flann_datatype_type<FLANN_UINT32> |
| { |
| typedef unsigned int type; |
| }; |
|
|
| #ifdef ULLONG_MAX |
| template<> |
| struct flann_datatype_type<FLANN_UINT64> |
| { |
| typedef unsigned long long type; |
| }; |
| #endif |
|
|
| template<> |
| struct flann_datatype_type<FLANN_FLOAT32> |
| { |
| typedef float type; |
| }; |
|
|
| template<> |
| struct flann_datatype_type<FLANN_FLOAT64> |
| { |
| typedef double type; |
| }; |
|
|
|
|
| inline size_t flann_datatype_size(flann_datatype_t type) |
| { |
| switch (type) { |
| case FLANN_INT8: |
| return sizeof(flann_datatype_type<FLANN_INT8>::type); |
| case FLANN_INT16: |
| return sizeof(flann_datatype_type<FLANN_INT16>::type); |
| case FLANN_INT32: |
| return sizeof(flann_datatype_type<FLANN_INT32>::type); |
| case FLANN_INT64: |
| return sizeof(flann_datatype_type<FLANN_INT64>::type); |
| case FLANN_UINT8: |
| return sizeof(flann_datatype_type<FLANN_UINT8>::type); |
| case FLANN_UINT16: |
| return sizeof(flann_datatype_type<FLANN_UINT16>::type); |
| case FLANN_UINT32: |
| return sizeof(flann_datatype_type<FLANN_UINT32>::type); |
| case FLANN_UINT64: |
| return sizeof(flann_datatype_type<FLANN_UINT64>::type); |
| case FLANN_FLOAT32: |
| return sizeof(flann_datatype_type<FLANN_FLOAT32>::type); |
| case FLANN_FLOAT64: |
| return sizeof(flann_datatype_type<FLANN_FLOAT64>::type); |
| default: |
| return 0; |
| } |
| } |
|
|
| } |
|
|
|
|
| #endif |
|
|