Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 #ifndef RTABMAP_FLANN_DATASET_H_
00032 #define RTABMAP_FLANN_DATASET_H_
00033
00034 #include "rtflann/general.h"
00035 #include "rtflann/util/serialization.h"
00036 #include <stdio.h>
00037
00038 namespace rtflann
00039 {
00040
00041 typedef unsigned char uchar;
00042
00043 class Matrix_
00044 {
00045 public:
00046
00047 Matrix_() : rows(0), cols(0), stride(0), type(FLANN_NONE), data(NULL)
00048 {
00049 };
00050
00051 Matrix_(void* data_, size_t rows_, size_t cols_, flann_datatype_t type_, size_t stride_ = 0) :
00052 rows(rows_), cols(cols_), stride(stride_), type(type_)
00053 {
00054 data = static_cast<uchar*>(data_);
00055
00056 if (stride==0) stride = flann_datatype_size(type)*cols;
00057 }
00058
00062 inline void* operator[](size_t index) const
00063 {
00064 return data+index*stride;
00065 }
00066
00067 void* ptr() const
00068 {
00069 return data;
00070 }
00071
00072 size_t rows;
00073 size_t cols;
00074 size_t stride;
00075 flann_datatype_t type;
00076 protected:
00077 uchar* data;
00078
00079 template<typename Archive>
00080 void serialize(Archive& ar)
00081 {
00082 ar & rows;
00083 ar & cols;
00084 ar & stride;
00085 ar & type;
00086 if (Archive::is_loading::value) {
00087 data = new uchar[rows*stride];
00088 }
00089 ar & serialization::make_binary_object(data, rows*stride);
00090 }
00091 friend struct serialization::access;
00092 };
00093
00094
00102 template <typename T>
00103 class Matrix : public Matrix_
00104 {
00105 public:
00106 typedef T type;
00107
00108 Matrix() : Matrix_()
00109 {
00110 }
00111
00112 Matrix(T* data_, size_t rows_, size_t cols_, size_t stride_ = 0) :
00113 Matrix_(data_, rows_, cols_, flann_datatype_value<T>::value, stride_)
00114 {
00115 if (stride==0) stride = sizeof(T)*cols;
00116 }
00117
00121 inline T* operator[](size_t index) const
00122 {
00123 return reinterpret_cast<T*>(data+index*stride);
00124 }
00125
00126
00127 T* ptr() const
00128 {
00129 return reinterpret_cast<T*>(data);
00130 }
00131 };
00132
00133 }
00134
00135 #endif //FLANN_DATASET_H_