00001 /*********************************************************************** 00002 * Software License Agreement (BSD License) 00003 * 00004 * Copyright 2008-2009 Marius Muja (mariusm@cs.ubc.ca). All rights reserved. 00005 * Copyright 2008-2009 David G. Lowe (lowe@cs.ubc.ca). All rights reserved. 00006 * 00007 * THE BSD LICENSE 00008 * 00009 * Redistribution and use in source and binary forms, with or without 00010 * modification, are permitted provided that the following conditions 00011 * are met: 00012 * 00013 * 1. Redistributions of source code must retain the above copyright 00014 * notice, this list of conditions and the following disclaimer. 00015 * 2. Redistributions in binary form must reproduce the above copyright 00016 * notice, this list of conditions and the following disclaimer in the 00017 * documentation and/or other materials provided with the distribution. 00018 * 00019 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 00020 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 00021 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 00022 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 00023 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 00024 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 00025 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 00026 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 00027 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 00028 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00029 *************************************************************************/ 00030 00031 #ifndef _OPENCV_DATASET_H_ 00032 #define _OPENCV_DATASET_H_ 00033 00034 #include <stdio.h> 00035 00036 #include "opencv2/flann/general.h" 00037 00038 00039 namespace cvflann 00040 { 00041 00046 template <typename T> 00047 class Matrix { 00048 public: 00049 size_t rows; 00050 size_t cols; 00051 T* data; 00052 00053 Matrix() : rows(0), cols(0), data(NULL) 00054 { 00055 } 00056 00057 Matrix(T* data_, long rows_, long cols_) : 00058 rows(rows_), cols(cols_), data(data_) 00059 { 00060 } 00061 00065 void release() 00066 { 00067 if (data!=NULL) delete[] data; 00068 } 00069 00070 ~Matrix() 00071 { 00072 } 00073 00077 T* operator[](size_t index) 00078 { 00079 return data+index*cols; 00080 } 00081 00082 T* operator[](size_t index) const 00083 { 00084 return data+index*cols; 00085 } 00086 }; 00087 00088 00089 class UntypedMatrix 00090 { 00091 public: 00092 size_t rows; 00093 size_t cols; 00094 void* data; 00095 flann_datatype_t type; 00096 00097 UntypedMatrix(void* data_, long rows_, long cols_) : 00098 rows(rows_), cols(cols_), data(data_) 00099 { 00100 } 00101 00102 ~UntypedMatrix() 00103 { 00104 } 00105 00106 00107 template<typename T> 00108 Matrix<T> as() 00109 { 00110 return Matrix<T>((T*)data, rows, cols); 00111 } 00112 }; 00113 00114 00115 00116 } // namespace cvflann 00117 00118 #endif //_OPENCV_DATASET_H_