#ifndef CGAL_KERNEL_D_CARTESIAN_LA_BASE_H #define CGAL_KERNEL_D_CARTESIAN_LA_BASE_H #include #include #include #include #include #include #include #include #include #ifdef CGAL_EIGEN3_ENABLED #include #else #include #endif namespace CGAL { template < typename FT_, typename Dim_, #if 0 typename Vec_=Array_vector, #else typename Vec_=LA_eigen, #endif typename LA_=LA_eigen > /* Default LA to Vec or to LA_eigen? */ struct Cartesian_LA_base_d : public Dimension_base { typedef FT_ FT; typedef FT_ RT; typedef Cartesian_LA_base_d Self; typedef Cartesian_tag Rep_tag; typedef Cartesian_tag Kernel_tag; typedef Dim_ Default_ambient_dimension; typedef Dim_ Max_ambient_dimension; typedef LA_ LA; typedef typename Same_uncertainty_nt::type Boolean; typedef typename Same_uncertainty_nt::type Sign; typedef typename Same_uncertainty_nt::type Comparison_result; typedef typename Same_uncertainty_nt::type Orientation; typedef typename Same_uncertainty_nt::type Oriented_side; typedef typename Same_uncertainty_nt::type Bounded_side; typedef typename Same_uncertainty_nt::type Angle; typedef Vec_ LA_vector; typedef typename LA_vector::Vector Point; typedef typename LA_vector::Vector Vector; typedef typename LA_vector::Vector Vector_; typedef typename LA_vector::Construct_vector Constructor; typedef typename LA_vector::Vector_const_iterator Point_cartesian_const_iterator; typedef typename LA_vector::Vector_const_iterator Vector_cartesian_const_iterator; template struct Type {}; template struct Type< Point_tag, D> { typedef Vector_ type; }; template struct Type { typedef Vector_ type; }; template struct Type< RT_tag, D> { typedef RT type; }; template struct Type< FT_tag, D> { typedef FT type; }; typedef typeset ::add::type Object_list; typedef typeset< Point_cartesian_const_iterator_tag>::type ::add::type Iterator_list; template struct Functor { typedef Null_functor type; }; template struct Functor,D> { typedef CartesianDVectorBase::Construct_LA_vector type; }; template struct Functor,D> { typedef CartesianDVectorBase::Construct_LA_vector type; }; template struct Functor,D> { typedef CartesianDVectorBase::Construct_cartesian_const_iterator type; }; template struct Functor,D> { typedef CartesianDVectorBase::Construct_cartesian_const_iterator type; }; template struct Functor::value> { typedef CartesianDVectorBase::Sum_of_vectors type; }; template struct Functor::value> { typedef CartesianDVectorBase::Difference_of_vectors type; }; template struct Functor::value> { typedef CartesianDVectorBase::Opposite_vector type; }; template struct Functor::value && LA_vector::template Property::value> { typedef CartesianDVectorBase::Midpoint type; }; template struct Functor { typedef CartesianDVectorBase::Compute_cartesian_coordinate type; }; template struct Functor { typedef CartesianDVectorBase::Compute_cartesian_coordinate type; }; template struct Functor { typedef CartesianDVectorBase::PV_dimension type; }; template struct Functor { typedef CartesianDVectorBase::PV_dimension type; }; template struct Functor::value> { typedef CartesianDVectorBase::Orientation_of_vectors type; }; template struct Functor::value> { typedef CartesianDVectorBase::Orientation_of_points type; }; template struct Functor::value> { typedef CartesianDVectorBase::Scalar_product type; }; template struct Functor::value> { typedef CartesianDVectorBase::Squared_distance_to_origin_stored type; }; template struct Functor::value && LA_vector::template Property::value> { typedef CartesianDVectorBase::Squared_distance_to_origin_via_dotprod type; }; CGAL_CONSTEXPR Cartesian_LA_base_d(){} CGAL_CONSTEXPR Cartesian_LA_base_d(int d):Dimension_base(d){} }; } //namespace CGAL #endif // CGAL_KERNEL_D_CARTESIAN_LA_BASE_H