// Copyright (c) 1998-2003 ETH Zurich (Switzerland). // All rights reserved. // // This file is part of CGAL (www.cgal.org). // // $URL: https://github.com/CGAL/cgal/blob/v5.1/Matrix_search/include/CGAL/Cartesian_matrix.h $ // $Id: Cartesian_matrix.h 0779373 2020-03-26T13:31:46+01:00 Sébastien Loriot // SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-Commercial // // // Author(s) : Michael Hoffmann #ifndef CGAL_CARTESIAN_MATRIX_H #define CGAL_CARTESIAN_MATRIX_H 1 #include #include #include namespace CGAL { template < class Operation, class RandomAccessIC_row, class RandomAccessIC_column > class Cartesian_matrix { public: typedef typename Operation::result_type Value; Cartesian_matrix(RandomAccessIC_row r_f, RandomAccessIC_row r_l, RandomAccessIC_column c_f, RandomAccessIC_column c_l) : row_vec(r_f), column_vec(c_f), n_rows(static_cast(r_l - r_f)), n_columns(static_cast(c_l - c_f)) {} Cartesian_matrix(RandomAccessIC_row r_f, RandomAccessIC_row r_l, RandomAccessIC_column c_f, RandomAccessIC_column c_l, const Operation& o) : row_vec(r_f), column_vec(c_f), n_rows(static_cast(r_l - r_f)), n_columns(static_cast(c_l - c_f)), op(o) {} int number_of_rows() const { return n_rows; } int number_of_columns() const { return n_columns; } Value operator()(int r, int c) const { CGAL_optimisation_precondition(r >= 0 && r < number_of_rows()); CGAL_optimisation_precondition(c >= 0 && c < number_of_columns()); return op(row_vec[r], column_vec[c]); } protected: RandomAccessIC_row row_vec; RandomAccessIC_column column_vec; int n_rows; int n_columns; Operation op; }; // class Cartesian_matrix< ... > template < class Operation, class RandomAccessIC_row, class RandomAccessIC_column > inline Cartesian_matrix< Operation, RandomAccessIC_row, RandomAccessIC_column > cartesian_matrix( RandomAccessIC_row r_f, RandomAccessIC_row r_l, RandomAccessIC_column c_f, RandomAccessIC_column c_l, const Operation& o) { return Cartesian_matrix< Operation, RandomAccessIC_row, RandomAccessIC_column > ( r_f, r_l, c_f, c_l, o); } } //namespace CGAL #endif // ! (CGAL_CARTESIAN_MATRIX_H) // ---------------------------------------------------------------------------- // ** EOF // ----------------------------------------------------------------------------