1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
|
// Copyright (c) 2016 CNRS and LIRIS' Establishments (France).
// All rights reserved.
//
// This file is part of CGAL (www.cgal.org)
//
// $URL: https://github.com/CGAL/cgal/blob/v6.1/Generalized_map/include/CGAL/Generalized_map/internal/Generalized_map_internal_functors.h $
// $Id: include/CGAL/Generalized_map/internal/Generalized_map_internal_functors.h b26b07a1242 $
// SPDX-License-Identifier: LGPL-3.0-or-later OR LicenseRef-Commercial
//
// Author(s) : Guillaume Damiand <guillaume.damiand@liris.cnrs.fr>
//
#ifndef CGAL_GENERALIZED_MAP_INTERNAL_FUNCTORS_H
#define CGAL_GENERALIZED_MAP_INTERNAL_FUNCTORS_H
/* Definition of functors used internally for generalized maps.
*
* internal::Alpha_functor<Dart, i...> to call several beta on the given dart.
* Indices are given as parameter of the run function.
*
* internal::Alpha_functor_static<Dart, i...> to call several beta on the given
* dart. Indices are given as template arguments.
*
*/
#include <CGAL/Combinatorial_map/internal/Combinatorial_map_internal_functors.h>
namespace CGAL
{
// ****************************************************************************
namespace internal
{
// ****************************************************************************
// Alpha functor, used to combine several alpha.
template<typename GMap, typename Dart_descriptor, typename ... Alphas>
struct Alpha_functor;
template<typename GMap, typename Dart_descriptor>
struct Alpha_functor<GMap, Dart_descriptor, int>
{
static Dart_descriptor run(GMap& AMap, Dart_descriptor ADart, int B)
{ return AMap.get_alpha(ADart, B); }
};
template<typename GMap, typename Dart_descriptor>
struct Alpha_functor<GMap, Dart_descriptor, unsigned int>
{
static Dart_descriptor run(GMap& AMap, Dart_descriptor ADart, unsigned int B)
{ return AMap.get_alpha(ADart, B); }
};
template<typename GMap, typename Dart_descriptor, typename ... Alphas>
struct Alpha_functor<GMap, Dart_descriptor, int, Alphas...>
{
static Dart_descriptor run(GMap& AMap, Dart_descriptor ADart, int B, Alphas... alphas)
{ return Alpha_functor<GMap, Dart_descriptor, Alphas...>::
run(AMap, AMap.get_alpha(ADart, B), alphas...); }
};
template<typename GMap, typename Dart_descriptor, typename ... Alphas>
struct Alpha_functor<GMap, Dart_descriptor, unsigned int, Alphas...>
{
static Dart_descriptor run(GMap& AMap, Dart_descriptor ADart, unsigned int B,
Alphas... alphas)
{ return Alpha_functor<GMap, Dart_descriptor, Alphas...>::
run(AMap, AMap.get_alpha(ADart, B), alphas...); }
};
// ****************************************************************************
template<typename GMap, typename Dart_descriptor, int ... Alphas>
struct Alpha_functor_static;
template<typename GMap, typename Dart_descriptor, int B>
struct Alpha_functor_static<GMap, Dart_descriptor, B>
{
static Dart_descriptor run(GMap& AMap, Dart_descriptor ADart)
{ return AMap.template get_alpha<B>(ADart); }
};
template<typename GMap, typename Dart_descriptor, int B, int ... Alphas>
struct Alpha_functor_static<GMap, Dart_descriptor, B, Alphas...>
{
static Dart_descriptor run(GMap& AMap, Dart_descriptor ADart)
{ return Alpha_functor_static<GMap, Dart_descriptor, Alphas...>::
run(AMap, AMap.template get_alpha<B>(ADart)); }
};
// ****************************************************************************
} // namespace internal
} // namespace CGAL
#endif // CGAL_GENERALIZED_MAP_INTERNAL_FUNCTORS_H
|