Regina 7.0 Calculation Engine
Static Public Member Functions | Static Public Attributes | Static Protected Attributes | List of all members
regina::detail::FaceNumberingImpl< dim, subdim, codim > Class Template Reference

Implementation details for numbering subdim-faces of a dim-dimensional simplex. More...

#include <triangulation/detail/facenumbering.h>

Inheritance diagram for regina::detail::FaceNumberingImpl< dim, subdim, codim >:
regina::detail::FaceNumberingAPI< dim, subdim > regina::FaceNumbering< dim, subdim > regina::detail::FaceBase< 3, 0 > regina::detail::FaceBase< 3, 2 > regina::detail::FaceBase< 4, 0 > regina::detail::FaceBase< 4, 1 > regina::detail::FaceBase< dim, subdim > regina::Face< 3, 0 > regina::Face< 3, 2 > regina::Face< 4, 0 > regina::Face< 4, 1 > regina::Face< dim, subdim >

Static Public Member Functions

static constexpr Perm< dim+1 > ordering (unsigned face)
 Given a subdim-face number within a dim-dimensional simplex, returns the corresponding canonical ordering of the simplex vertices. More...
 
static constexpr unsigned faceNumber (Perm< dim+1 > vertices)
 Identifies which subdim-face in a dim-dimensional simplex is represented by the first (subdim + 1) elements of the given permutation. More...
 
static constexpr bool containsVertex (unsigned face, unsigned vertex)
 Tests whether the given subdim-face of a dim-dimensional simplex contains the given vertex of the simplex. More...
 

Static Public Attributes

static constexpr int oppositeDim = (dim - 1 - subdim)
 The dimension of the faces opposite these in a top-dimensional simplex of a dim-dimensional triangulation. More...
 
static constexpr bool lexNumbering = (subdim <= oppositeDim)
 true if faces are numbered in lexicographical order according to their vertices, or false if faces are numbered in reverse lexicographical order. More...
 
static constexpr int nFaces = binomSmall(dim + 1, lexDim + 1)
 The total number of subdim-dimensional faces in each dim-dimensional simplex. More...
 

Static Protected Attributes

static constexpr int lexDim = (lexNumbering ? subdim : oppositeDim)
 Whichever of subdim or oppositeDim uses lexicographical face numbering. More...
 

Detailed Description

template<int dim, int subdim, int codim = dim - subdim - 1>
class regina::detail::FaceNumberingImpl< dim, subdim, codim >

Implementation details for numbering subdim-faces of a dim-dimensional simplex.

This numbering scheme can be accessed via FaceNumbering<dim, subdim> or Face<dim, subdim>, both of which use this as a base class. End users should not need to refer to FaceNumberingImpl directly.

See the FaceNumbering template class notes for further information, including details of how the face numbering scheme works.

Python
This base class is not present, and neither is FaceNumbering<dim, subdim>. Python users can access these routines through the class Face<dim, subdim> (which in Python becomes Facedim_subdim, or one of the type aliases such as Vertex3, Edge2 and so on).
Template Parameters
dimthe dimension of the simplex whose faces are being numbered. This must be between 1 and 15 inclusive.
subdimthe dimension of the faces being numbered. This must be between 0 and dim-1 inclusive.
codimthe codimension (dim-subdim-1) of the faces being numbered. Ideally this would be specified directly as dim-subdim-1 in the partial template specialisation, and this should be legal according to CWG1315; however, it fails to build under some versions of gcc (e.g., 10.2.0).

Member Function Documentation

◆ containsVertex()

template<int dim, int subdim>
static constexpr bool regina::detail::FaceNumberingAPI< dim, subdim >::containsVertex ( unsigned  face,
unsigned  vertex 
)
staticconstexprinherited

Tests whether the given subdim-face of a dim-dimensional simplex contains the given vertex of the simplex.

Parameters
facea subdim-face number in a dim-simplex; this must be between 0 and (dim+1 choose subdim+1)-1 inclusive.
vertexa vertex number in a dim-simplex; this must be between 0 and dim inclusive.
Returns
true if and only if the given subdim-face contains the given vertex.

◆ faceNumber()

template<int dim, int subdim>
static constexpr unsigned regina::detail::FaceNumberingAPI< dim, subdim >::faceNumber ( Perm< dim+1 >  vertices)
staticconstexprinherited

Identifies which subdim-face in a dim-dimensional simplex is represented by the first (subdim + 1) elements of the given permutation.

In other words, this routine identifies which subdim-face number within a dim-dimensional simplex spans vertices vertices[0, ..., subdim].

Parameters
verticesa permutation whose first (subdim + 1) elements represent some vertex numbers in a dim-simplex.
Returns
the corresponding subdim-face number in the dim-simplex. This will be between 0 and (dim+1 choose subdim+1)-1 inclusive.

◆ ordering()

template<int dim, int subdim>
static constexpr Perm< dim+1 > regina::detail::FaceNumberingAPI< dim, subdim >::ordering ( unsigned  face)
staticconstexprinherited

Given a subdim-face number within a dim-dimensional simplex, returns the corresponding canonical ordering of the simplex vertices.

If this canonical ordering is c, then c[0,...,subdim] will be the vertices of the given face in increasing numerical order. That is, c[0] < ... < c[subdim]. The remaining images c[(subdim + 1),...,dim] will be ordered arbitrarily.

Note that this is not the same permutation as returned by Simplex<dim>::faceMapping<subdim>():

  • ordering() is a static function, which returns the same permutation for the same face number, regardless of which dim-simplex we are looking at. The images of 0,...,subdim will always appear in increasing order, and the images of (subdim + 1),...,dim will be arbitrary.
  • faceMapping() examines the underlying face F of the triangulation and, across all appearances of F in different dim-simplices: (i) chooses the images of 0,...,subdim to map to the same respective vertices of F; and (ii) chooses the images of (subdim + 1),...,dim to maintain a "consistent orientation" constraint.
Parameters
faceidentifies which subdim-face of a dim-dimensional simplex to query. This must be between 0 and (dim+1 choose subdim+1)-1 inclusive.
Returns
the corresponding canonical ordering of the simplex vertices.

Member Data Documentation

◆ lexDim

template<int dim, int subdim>
constexpr int regina::detail::FaceNumberingAPI< dim, subdim >::lexDim = (lexNumbering ? subdim : oppositeDim)
staticconstexprprotectedinherited

Whichever of subdim or oppositeDim uses lexicographical face numbering.

◆ lexNumbering

template<int dim, int subdim>
constexpr bool regina::detail::FaceNumberingAPI< dim, subdim >::lexNumbering = (subdim <= oppositeDim)
staticconstexprinherited

true if faces are numbered in lexicographical order according to their vertices, or false if faces are numbered in reverse lexicographical order.

◆ nFaces

template<int dim, int subdim>
constexpr int regina::detail::FaceNumberingAPI< dim, subdim >::nFaces = binomSmall(dim + 1, lexDim + 1)
staticconstexprinherited

The total number of subdim-dimensional faces in each dim-dimensional simplex.

◆ oppositeDim

template<int dim, int subdim>
constexpr int regina::detail::FaceNumberingAPI< dim, subdim >::oppositeDim = (dim - 1 - subdim)
staticconstexprinherited

The dimension of the faces opposite these in a top-dimensional simplex of a dim-dimensional triangulation.


The documentation for this class was generated from the following file:

Copyright © 1999-2021, The Regina development team
This software is released under the GNU General Public License, with some additional permissions; see the source code for details.
For further information, or to submit a bug or other problem, please contact Ben Burton (bab@maths.uq.edu.au).