github.com/kaydxh/golang@v0.0.131/pkg/gocv/cgo/third_path/opencv4/include/opencv2/flann/matrix.h (about)

     1  /***********************************************************************
     2   * Software License Agreement (BSD License)
     3   *
     4   * Copyright 2008-2009  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.
     5   * Copyright 2008-2009  David G. Lowe (lowe@cs.ubc.ca). All rights reserved.
     6   *
     7   * THE BSD LICENSE
     8   *
     9   * Redistribution and use in source and binary forms, with or without
    10   * modification, are permitted provided that the following conditions
    11   * are met:
    12   *
    13   * 1. Redistributions of source code must retain the above copyright
    14   *    notice, this list of conditions and the following disclaimer.
    15   * 2. Redistributions in binary form must reproduce the above copyright
    16   *    notice, this list of conditions and the following disclaimer in the
    17   *    documentation and/or other materials provided with the distribution.
    18   *
    19   * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
    20   * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
    21   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
    22   * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
    23   * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
    24   * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    25   * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    26   * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    27   * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
    28   * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    29   *************************************************************************/
    30  
    31  #ifndef OPENCV_FLANN_DATASET_H_
    32  #define OPENCV_FLANN_DATASET_H_
    33  
    34  //! @cond IGNORED
    35  
    36  #include <stdio.h>
    37  
    38  namespace cvflann
    39  {
    40  
    41  /**
    42   * Class that implements a simple rectangular matrix stored in a memory buffer and
    43   * provides convenient matrix-like access using the [] operators.
    44   */
    45  template <typename T>
    46  class Matrix
    47  {
    48  public:
    49      typedef T type;
    50  
    51      size_t rows;
    52      size_t cols;
    53      size_t stride;
    54      T* data;
    55  
    56      Matrix() : rows(0), cols(0), stride(0), data(NULL)
    57      {
    58      }
    59  
    60      Matrix(T* data_, size_t rows_, size_t cols_, size_t stride_ = 0) :
    61          rows(rows_), cols(cols_),  stride(stride_), data(data_)
    62      {
    63          if (stride==0) stride = cols;
    64      }
    65  
    66      /**
    67       * Convenience function for deallocating the storage data.
    68       */
    69      CV_DEPRECATED void free()
    70      {
    71          fprintf(stderr, "The cvflann::Matrix<T>::free() method is deprecated "
    72                  "and it does not do any memory deallocation any more.  You are"
    73                  "responsible for deallocating the matrix memory (by doing"
    74                  "'delete[] matrix.data' for example)");
    75      }
    76  
    77      /**
    78       * Operator that return a (pointer to a) row of the data.
    79       */
    80      T* operator[](size_t index) const
    81      {
    82          return data+index*stride;
    83      }
    84  };
    85  
    86  
    87  class UntypedMatrix
    88  {
    89  public:
    90      size_t rows;
    91      size_t cols;
    92      void* data;
    93      flann_datatype_t type;
    94  
    95      UntypedMatrix(void* data_, long rows_, long cols_) :
    96          rows(rows_), cols(cols_), data(data_)
    97      {
    98      }
    99  
   100      ~UntypedMatrix()
   101      {
   102      }
   103  
   104  
   105      template<typename T>
   106      Matrix<T> as()
   107      {
   108          return Matrix<T>((T*)data, rows, cols);
   109      }
   110  };
   111  
   112  
   113  
   114  }
   115  
   116  //! @endcond
   117  
   118  #endif //OPENCV_FLANN_DATASET_H_