// Copyright (c) 2000,2001 // Utrecht University (The Netherlands), // ETH Zurich (Switzerland), // INRIA Sophia-Antipolis (France), // Max-Planck-Institute Saarbruecken (Germany), // and Tel-Aviv University (Israel). All rights reserved. // // This file is part of CGAL (www.cgal.org) // // $URL: https://github.com/CGAL/cgal/blob/v5.2/Kernel_d/include/CGAL/Kernel_d/Vector_d.h $ // $Id: Vector_d.h 127d76c 2020-06-10T17:57:54+02:00 Laurent Rineau // SPDX-License-Identifier: LGPL-3.0-or-later OR LicenseRef-Commercial // // Author(s) : Michael Seel #ifndef CGAL_VECTOR_D_H #define CGAL_VECTOR_D_H #include #include namespace CGAL { template class Direction_d; template class Point_d; template class Vector_d : public pR::Vector_d_base { public: typedef CGAL::Dynamic_dimension_tag Ambient_dimension; typedef CGAL::Dimension_tag<0> Feature_dimension; typedef typename pR::Vector_d_base Base; typedef Vector_d Self; typedef pR R; typedef typename R::RT RT; typedef typename R::FT FT; typedef typename R::LA LA; typedef typename Base::Base_vector Base_vector; Vector_d(int d=0) : Base(d) {} Vector_d(int d, Null_vector v) : Base(d,v) {} Vector_d(int a, int b, int c = 1) : Base(a,b,c) {} Vector_d(const RT& a, const RT& b, const RT& c = 1) : Base(a,b,c) {} Vector_d(int a, int b, int c, int d) : Base(a,b,c,d) {} Vector_d(const RT& a, const RT& b, const RT& c, const RT& d) : Base(a,b,c,d) {} Vector_d(int d, Base_vector, int i) : Base(d,Base_vector(),i) {} template Vector_d (int d, InputIterator first, InputIterator last) : Base (d, first, last) {} template Vector_d (int d, InputIterator first, InputIterator last, const RT& D) : Base (d, first, last, D) {} Vector_d(const Base& v) : Base(v) {} Direction_d direction() const { return Base::direction(); } FT operator* (const Self& w) const { return Base::operator*(w); } Self operator+(const Self& w) const { return Base::operator+(w); } Self operator-(const Self& w) const { return Base::operator-(w); } Self operator-() const { return Base::operator-(); } template Self operator/(const NT& n) const { return Base::operator/(n); } Self& operator+=(const Self& w) { return static_cast(Base::operator+=(w)); } Self& operator-=(const Self& w) { return static_cast(Base::operator-=(w)); } template Self& operator*=(const NT& n) { return static_cast(Base::operator*=(n)); } template Self& operator/=(const NT& n) { return static_cast(Base::operator/=(n)); } bool operator==(const Self& w) const { return Base::operator==(w); } bool operator!=(const Self& w) const { return Base::operator!=(w); } bool operator==(const Base& w) const { return Base::operator==(w); } bool operator!=(const Base& w) const { return Base::operator!=(w); } }; template Point_d operator+ (const Origin& o, const Vector_d& v) { return Point_d( o + static_cast::Base&>(v) ); } template Vector_d operator*(const NT& n, const Vector_d& v) { return Vector_d( n * static_cast::Base&>(v) ); } } //namespace CGAL #endif //CGAL_VECTOR_D_H