Regina Calculation Engine
Public Member Functions | Static Public Attributes | Protected Member Functions | Protected Attributes | List of all members
regina::detail::BoundaryComponentFaceInterface< dim, allFaces, allowVertex_ > Class Template Reference

Helper class for querying the faces of a boundary component of a dim-dimensional triangulation. More...

#include <triangulation/detail/boundarycomponent.h>

Inheritance diagram for regina::detail::BoundaryComponentFaceInterface< dim, allFaces, allowVertex_ >:
regina::detail::BoundaryComponentFaceStorage< dim, allFaces > regina::detail::WeakFaceListSuite< dim, dim - 1 > regina::alias::FacesOfTriangulation< BoundaryComponentFaceStorage< dim, true >, dim > regina::alias::FaceOfTriangulation< BoundaryComponentFaceStorage< dim, true >, dim > regina::detail::WeakFaceList< dim, subdim >

Public Member Functions

bool isReal () const
 Determines if this boundary component is real. More...
 
bool isIdeal () const
 Determines if this boundary component is ideal. More...
 
bool isInvalidVertex () const
 Determines if this boundary component consists of a single invalid vertex and nothing else. More...
 
void writeTextShort (std::ostream &out) const
 Writes a short text representation of this object to the given output stream. More...
 
void writeTextLong (std::ostream &out) const
 Writes a detailed text representation of this object to the given output stream. More...
 
size_t size () const
 Returns the number of (dim-1)-faces in this boundary component. More...
 
size_t countRidges () const
 Returns the number of (dim-2)-faces in this boundary component. More...
 
size_t countFaces () const
 Returns the number of subdim-faces in this boundary component. More...
 
const std::vector< Face< dim, dim-1 > *> & facets () const
 Returns all (dim-1)-faces in this boundary component. More...
 
const std::vector< Face< dim, subdim > *> & faces () const
 Returns all subdim-faces in this boundary component. More...
 
Face< dim, dim-1 > * facet (size_t index) const
 Returns the requested (dim-1)-face in this boundary component. More...
 
Face< dim, subdim > * face (size_t index) const
 Returns the requested subdim-face in this boundary component. More...
 
Triangulation< dim > * triangulation () const
 Returns the triangulation to which this boundary component belongs. More...
 
Component< dim > * component () const
 Returns the connected component of the triangulation to which this boundary component belongs. More...
 

Static Public Attributes

static constexpr bool allowVertex = true
 A compile-time constant indicating whether ideal and/or invalid vertex boundary components are both possible and recognised by this boundary component class. More...
 
static constexpr bool allFaces
 A compile-time constant indicating whether this boundary component class stores all lower-dimensional faces (true), or only faces of dimension dim-1 (false). More...
 

Protected Member Functions

const Triangulation< dim-1 > * buildVertexLink () const
 Triangulates the vertex link for an ideal or invalid vertex boundary component. More...
 
void push_back (Face< dim, subdim > *face)
 Pushes the given face onto the end of the list of subdim-faces of this boundary component. More...
 
void reorderAndRelabelFaces (Triangulation< dim-1 > *tri) const
 Reorders all lower-dimensional faces of the given triangulation so that they appear in the same order as the corresponding faces of this boundary component, and relabels these faces so that their vertices are numbered in a corresponding way. More...
 
void reorderAndRelabelFaces (Triangulation< tridim > *tri, const std::vector< Face< dim, tridim > * > &tridimFaces) const
 Reorders and relabels all faces of all dimensions 0,...,subdim of the given triangulation, so that for each k, the k-faces of the given triangulation appear in the same order as the corresponding k-faces in this suite, and have their vertices numbered in a corresponding way. More...
 

Protected Attributes

std::vector< Face< dim, subdim > * > faces_
 The list of faces. More...
 

Detailed Description

template<int dim, bool allFaces, bool allowVertex_>
class regina::detail::BoundaryComponentFaceInterface< dim, allFaces, allowVertex_ >

Helper class for querying the faces of a boundary component of a dim-dimensional triangulation.

Every class BoundaryComponent<dim> inherits from this template.

Python:
This base class is not present, but the "end user" class BoundaryComponent<dim> is.
Template Parameters
dimthe dimension of the underlying triangulation. This must be between 2 and 15 inclusive.
allFacestrue if this class should store all faces of all dimensions 0,1,...,dim-1, or false if this class should only store faces of dimension dim-1.
allowVertex_true if ideal and/or invalid vertex boundary components are both possible and recognised in dimension dim, or false if only real boundary components are supported.

Member Function Documentation

§ buildVertexLink()

template<int dim, bool allFaces, bool allowVertex_>
const Triangulation<dim-1>* regina::detail::BoundaryComponentFaceInterface< dim, allFaces, allowVertex_ >::buildVertexLink ( ) const
inlineprotected

Triangulates the vertex link for an ideal or invalid vertex boundary component.

Returns
the triangulated vertex link.

§ component()

Component<dim>* regina::detail::BoundaryComponentFaceStorage< dim, allFaces_ >::component ( ) const
inlineinherited

Returns the connected component of the triangulation to which this boundary component belongs.

Returns
the component containing this boundary component.

§ countFaces()

size_t regina::detail::BoundaryComponentFaceStorage< dim, allFaces_ >::countFaces ( ) const
inlineinherited

Returns the number of subdim-faces in this boundary component.

This routine is only available where dim is one of Regina's standard dimensions.

Python:
Python does not support templates. Instead, Python users should call this function in the form countFaces(subdim); that is, the template parameter subdim becomes the first argument of the function.
Template Parameters
subdimthe dimension of the faces to query. This must be between 0 and dim-1 inclusive.
Returns
the number of subdim-faces.

§ countRidges()

size_t regina::detail::BoundaryComponentFaceStorage< dim, allFaces_ >::countRidges ( ) const
inlineinherited

Returns the number of (dim-2)-faces in this boundary component.

If this is an ideal or invalid vertex boundary component, then this routine will return 0.

Returns
the number of (dim-2)-faces in this boundary component.

§ face()

Face<dim, subdim>* regina::detail::BoundaryComponentFaceStorage< dim, allFaces_ >::face ( size_t  index) const
inlineinherited

Returns the requested subdim-face in this boundary component.

Note that the index of a face in the boundary component need not be the index of the same face in the overall triangulation. However, if this is a real boundary component (i.e., it is built from one or more (dim-1)-faces), then the index of each subdim-face in this boundary component will match the index of the corresponding subdim-face in the (dim-1)-manifold triangulation returned by build().

This routine is only available where dim is one of Regina's standard dimensions.

Python:
Python does not support templates. Instead, Python users should call this function in the form face(subdim, index); that is, the template parameter subdim becomes the first argument of the function.
Template Parameters
subdimthe dimension of the face to query. This must be between 0 and dim-1 inclusive.
Parameters
indexthe index of the desired face, ranging from 0 to countFaces<subdim>()-1 inclusive.
Returns
the requested face.

§ faces()

const std::vector<Face<dim, subdim>*>& regina::detail::BoundaryComponentFaceStorage< dim, allFaces_ >::faces ( ) const
inlineinherited

Returns all subdim-faces in this boundary component.

The reference that is returned will remain valid only for as long as this boundary component object exists. In particular, the reference will become invalid any time that the triangulation changes (since all boundary component objects will be destroyed and others rebuilt in their place).

Python:
Python users should call this function in the form faces(subdim). It will then return a Python list containing all the subdim-faces of the boundary component. Be warned that, unlike in C++, this Python list will be a snapshot of the faces when this function is called, and will not be kept up-to-date as the triangulation changes.
Template Parameters
subdimthe dimension of the faces to query. This must be between 0 and dim-1 inclusive.
Returns
access to the list of all subdim-faces.

§ facet()

Face<dim, dim-1>* regina::detail::BoundaryComponentFaceStorage< dim, allFaces_ >::facet ( size_t  index) const
inlineinherited

Returns the requested (dim-1)-face in this boundary component.

These are the top-dimensional faces for a real boundary component.

Note that the index of a face in the boundary component need not be the index of the same face in the overall triangulation. However, if this is a real boundary component (i.e., it is built from one or more (dim-1)-faces), then the index of each (dim-1)-face in this boundary component will match the index of the corresponding top-dimensional simplex in the (dim-1)-manifold triangulation returned by build().

Parameters
indexthe index of the desired face, ranging from 0 to size()-1 inclusive.
Returns
the requested face.

§ facets()

const std::vector<Face<dim, dim-1>*>& regina::detail::BoundaryComponentFaceStorage< dim, allFaces_ >::facets ( ) const
inlineinherited

Returns all (dim-1)-faces in this boundary component.

The reference that is returned will remain valid only for as long as this boundary component object exists. In particular, the reference will become invalid any time that the triangulation changes (since all boundary component objects will be destroyed and others rebuilt in their place).

Python:
This routine returns a python list.
Returns
the list of all (dim-1)-faces.

§ isIdeal()

template<int dim, bool allFaces, bool allowVertex_>
bool regina::detail::BoundaryComponentFaceInterface< dim, allFaces, allowVertex_ >::isIdeal ( ) const
inline

Determines if this boundary component is ideal.

This is the case if and only if it consists of a single ideal vertex and no faces of any other dimensions.

See the BoundaryComponent class notes for an overview of ideal boundary components, which can only occur in dimensions ≥ 3, and which are only recognised where dim is one of Regina's standard dimensions.

Note that a boundary component formed from a single invalid vertex is not considered to be ideal. This means that, if a boundary component contains no faces of positive dimension, then one and only one of isIdeal() and isInvalidVertex() will return true.

This routine is only available where dim is at least 3 and is one of Regina's standard dimensions.

Returns
true if and only if this boundary component is ideal.

§ isInvalidVertex()

template<int dim, bool allFaces, bool allowVertex_>
bool regina::detail::BoundaryComponentFaceInterface< dim, allFaces, allowVertex_ >::isInvalidVertex ( ) const
inline

Determines if this boundary component consists of a single invalid vertex and nothing else.

In particular, such a boundary component must contain no faces of any positive dimension.

See the BoundaryComponent class notes for an overview of invalid vertex boundary components, which can only occur in dimensions ≥ 4, and which are only recognised where dim is one of Regina's standard dimensions.

An invalid vertex is only placed in its own boundary component if it does not already belong to some larger boundary component (for instance, if its link is an ideal (dim-1)-manifold triangulation). This means that, for a boundary component consisting of one or more (dim-1)-faces, this routine will return false even if the boundary component also includes one or more invalid vertices.

Note that, if a boundary component contains no faces of positive dimension, then one and only one of isIdeal() and isInvalidVertex() will return true.

This routine is only available where dim is at least 3 and is one of Regina's standard dimensions.

Returns
true if and only if this boundary component consists of a single invalid vertex and nothing else.

§ isReal()

template<int dim, bool allFaces, bool allowVertex_>
bool regina::detail::BoundaryComponentFaceInterface< dim, allFaces, allowVertex_ >::isReal ( ) const
inline

Determines if this boundary component is real.

This is the case if and only if it is formed from one or more (dim-1)-faces.

See the BoundaryComponent class notes for an overview of real, ideal, and invalid vertex boundary components.

This routine is only available where dim is at least 3 and is one of Regina's standard dimensions. (In other dimensions, real boundary components are the only types of boundary component that Regina will recognise.)

Returns
true if and only if this boundary component is real.

§ push_back()

void regina::detail::BoundaryComponentFaceStorage< dim, allFaces_ >::push_back ( Face< dim, subdim > *  face)
inlineprotectedinherited

Pushes the given face onto the end of the list of subdim-faces of this boundary component.

This class does not take ownership of the given face.

Template Parameters
subdimthe dimension of the face to append. This must be between 0 and dim-1 inclusive.
Parameters
facethe face to append to the list.

§ reorderAndRelabelFaces() [1/2]

void regina::detail::WeakFaceListSuite< dim, subdim >::reorderAndRelabelFaces ( Triangulation< tridim > *  tri,
const std::vector< Face< dim, tridim > *> &  tridimFaces 
) const
inlineprotectedinherited

Reorders and relabels all faces of all dimensions 0,...,subdim of the given triangulation, so that for each k, the k-faces of the given triangulation appear in the same order as the corresponding k-faces in this suite, and have their vertices numbered in a corresponding way.

Precondition
For each dimension k = 0,...,subdim, the k-faces of the given triangulation tri are in one-to-one correspondence with the k-faces in this suite, though not necessarily in the same order. Moreover, for each i and j, this correspondence maps the ith k-face of tri->simplex(j) to the ith k-face of tridimFaces[j].
Template Parameters
tridimthe dimension of the given triangulation. This must be strictly larger than subdim, but it need not be equal to dim.
Parameters
tria tridim-dimensional triangulation, as described above.
tridimFacesa list of tridim-faces that together contain all of the faces in this suite, and that are in an ordered one-to-one correspondence with the top-dimensional simplices of tri as described in the precondition above.

§ reorderAndRelabelFaces() [2/2]

void regina::detail::BoundaryComponentFaceStorage< dim, allFaces_ >::reorderAndRelabelFaces ( Triangulation< dim-1 > *  tri) const
inlineprotectedinherited

Reorders all lower-dimensional faces of the given triangulation so that they appear in the same order as the corresponding faces of this boundary component, and relabels these faces so that their vertices are numbered in a corresponding way.

This affects all faces of dimensions 0,...,(dim-2).

Precondition
This is a real boundary component.
tri is a triangulation of this boundary component.
For each i, the ith top-dimensional simplex of tri corresponds to the ith (dim-1)-face of this boundary component, and has its vertices 0,...,(dim-1) labelled in the same way.
Parameters
tria triangulation of this boundary component, as described above.

§ size()

size_t regina::detail::BoundaryComponentFaceStorage< dim, allFaces_ >::size ( ) const
inlineinherited

Returns the number of (dim-1)-faces in this boundary component.

These are the top-dimensional faces for a real boundary component.

If this is an ideal or invalid vertex boundary component, then this routine will return 0.

Returns
the number of (dim-1)-faces in this boundary component.

§ triangulation()

Triangulation<dim>* regina::detail::BoundaryComponentFaceStorage< dim, allFaces_ >::triangulation ( ) const
inlineinherited

Returns the triangulation to which this boundary component belongs.

Returns
the triangulation containing this boundary component.

§ writeTextLong()

template<int dim, bool allFaces, bool allowVertex_>
void regina::detail::BoundaryComponentFaceInterface< dim, allFaces, allowVertex_ >::writeTextLong ( std::ostream &  out) const
inline

Writes a detailed text representation of this object to the given output stream.

Python:
Not present.
Parameters
outthe output stream to which to write.

§ writeTextShort()

template<int dim, bool allFaces, bool allowVertex_>
void regina::detail::BoundaryComponentFaceInterface< dim, allFaces, allowVertex_ >::writeTextShort ( std::ostream &  out) const
inline

Writes a short text representation of this object to the given output stream.

Python:
Not present.
Parameters
outthe output stream to which to write.

Member Data Documentation

§ allFaces

constexpr bool regina::detail::BoundaryComponentFaceStorage< dim, allFaces_ >::allFaces
staticinherited

A compile-time constant indicating whether this boundary component class stores all lower-dimensional faces (true), or only faces of dimension dim-1 (false).

This is a compile-time constant only, with no linkage - any attempt to create a reference or pointer to it will give a linker error.

Python:
Not present.

§ allowVertex

template<int dim, bool allFaces, bool allowVertex_>
constexpr bool regina::detail::BoundaryComponentFaceInterface< dim, allFaces, allowVertex_ >::allowVertex = true
static

A compile-time constant indicating whether ideal and/or invalid vertex boundary components are both possible and recognised by this boundary component class.

This is a compile-time constant only, with no linkage - any attempt to create a reference or pointer to it will give a linker error.

Python:
Not present.

§ faces_

template<int dim, int subdim>
std::vector<Face<dim, subdim>*> regina::detail::WeakFaceList< dim, subdim >::faces_
protectedinherited

The list of faces.


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

Copyright © 1999-2016, 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).