Regina Calculation Engine
|
Normal hypersurfaces in 4-manifold triangulations. More...
Classes | |
class | regina::HSVectorStandard |
A normal hypersurface vector using standard tetrahedron-prism coordinates. More... | |
class | regina::Matrix< T, ring > |
Represents a matrix of elements of the given type T. More... | |
struct | regina::HyperInfo< coordType > |
A template that stores information about a particular normal hypersurface coordinate system. More... | |
class | regina::NormalHypersurfaceVector |
Stores the vector of a single normal hypersurface in a 4-manifold triangulation. More... | |
class | regina::NormalHypersurface |
Represents a single normal hypersurface in a 4-manifold triangulation. More... | |
class | regina::NormalHypersurfaces |
A packet representing a collection of normal hypersurfaces in a 4-manifold triangulation. More... | |
class | regina::XMLNormalHypersurfaceReader |
An XML element reader that reads a single normal hypersurface in a 4-manifold triangulation. More... | |
class | regina::XMLNormalHypersurfacesReader |
An XML packet reader that reads a single normal hypersurface list. More... | |
Macros | |
#define | REGINA_NORMAL_HYPERSURFACE_FLAVOUR(class_, id, superclass) |
Defines various constants, types and virtual functions for a subclass of NormalHypersurfaceVector. More... | |
Typedefs | |
typedef HSVectorStandard | regina::NNormalHypersurfaceVectorStandard |
Deprecated typedef for backward compatibility. More... | |
typedef regina::Flags< HyperListFlags > | regina::HyperList |
A combination of flags for types of normal hypersurface lists. More... | |
typedef regina::Flags< HyperAlgFlags > | regina::HyperAlg |
A combination of flags for types of normal surface lists. More... | |
typedef Matrix< Integer, true > | regina::MatrixInt |
A matrix of arbitrary-precision integers. More... | |
typedef NormalHypersurfaceVector | regina::NNormalHypersurfaceVector |
Deprecated typedef for backward compatibility. More... | |
typedef NormalHypersurface | regina::NNormalHypersurface |
Deprecated typedef for backward compatibility. More... | |
typedef NormalHypersurfaces | regina::NNormalHypersurfaceList |
Deprecated typedef for backward compatibility. More... | |
Enumerations | |
enum | regina::HyperCoords { regina::HS_STANDARD = 0, regina::HS_PRISM = 1, regina::HS_EDGE_WEIGHT = 200 } |
Represents different coordinate systems that can be used for enumerating and displaying normal hypersurface within 4-manifold triangulations. More... | |
enum | regina::HyperListFlags { regina::HS_LIST_DEFAULT = 0x0000, regina::HS_EMBEDDED_ONLY = 0x0001, regina::HS_IMMERSED_SINGULAR = 0x0002, regina::HS_VERTEX = 0x0004, regina::HS_FUNDAMENTAL = 0x0008, regina::HS_LEGACY = 0x4000, regina::HS_CUSTOM = 0x8000 } |
Represents different lists of normal hypersurfaces that might be constructed for a given 4-manifold triangulation. More... | |
enum | regina::HyperAlgFlags { regina::HS_ALG_DEFAULT = 0x0000, regina::HS_VERTEX_DD = 0x0020, regina::HS_HILBERT_PRIMAL = 0x0100, regina::HS_HILBERT_DUAL = 0x0200, regina::HS_ALG_LEGACY = 0x4000, regina::HS_ALG_CUSTOM = 0x8000 } |
Represents options and variants of algorithms for enumerating various types of normal hypersurfaces in 4-manifold triangulations. More... | |
Functions | |
template<typename FunctionObject , typename... Args> | |
ReturnsTraits< FunctionObject >::ReturnType | regina::forCoords (HyperCoords coords, FunctionObject &&func, typename ReturnsTraits< FunctionObject >::ReturnType defaultReturn, Args &&... args) |
Allows the user to call a template function whose template parameter matches a given value of HyperCoords, which is not known until runtime. More... | |
template<typename FunctionObject , typename... Args> | |
ReturnsTraits< FunctionObject >::Void | regina::forCoords (HyperCoords coords, FunctionObject &&func, Args &&... args) |
Allows the user to call a template function whose template parameter matches a given value of HyperCoords, which is not known until runtime. More... | |
HyperList | regina::operator| (HyperListFlags lhs, HyperListFlags rhs) |
Returns the bitwise OR of the two given flags. More... | |
HyperAlg | regina::operator| (HyperAlgFlags lhs, HyperAlgFlags rhs) |
Returns the bitwise OR of the two given flags. More... | |
NormalHypersurfaceVector * | regina::makeZeroVector (const Triangulation< 4 > *triangulation, HyperCoords coords) |
Returns a new normal hypersurface vector of the appropriate length for the given triangulation and the given coordinate system. More... | |
MatrixInt * | regina::makeMatchingEquations (const Triangulation< 4 > *triangulation, HyperCoords coords) |
Creates a new set of normal hypersurface matching equations for the given triangulation using the given coordinate system. More... | |
EnumConstraints * | regina::makeEmbeddedConstraints (const Triangulation< 4 > *triangulation, HyperCoords coords) |
Creates a new set of validity constraints representing the condition that normal hypersurfaces be embedded. More... | |
Normal hypersurfaces in 4-manifold triangulations.
#define REGINA_NORMAL_HYPERSURFACE_FLAVOUR | ( | class_, | |
id, | |||
superclass | |||
) |
Defines various constants, types and virtual functions for a subclass of NormalHypersurfaceVector.
Every subclass of NormalHypersurfaceVector must include REGINA_NORMAL_HYPERSURFACE_FLAVOUR at the beginning of the class definition.
This macro provides the class with:
class_ | the name of this subclass of NormalHypersurfaceVector. |
id | the corresponding NNormalCoords constant. |
superclass | the vector class from which class_ is derived. This is typically NormalHypersurfaceVector, though in some cases (e.g., prism coordinates) it may be different. |
typedef regina::Flags<HyperAlgFlags> regina::HyperAlg |
A combination of flags for types of normal surface lists.
typedef regina::Flags<HyperListFlags> regina::HyperList |
A combination of flags for types of normal hypersurface lists.
typedef Matrix< Integer, true > regina::MatrixInt |
A matrix of arbitrary-precision integers.
This is the most common class used by Regina when running algebraic algorithms over integer matrices. Since the underlying type is Regina's Integer class, calculations will be exact regardless of how large the integers become.
Deprecated typedef for backward compatibility.
This typedef will be removed in a future release of Regina.
Deprecated typedef for backward compatibility.
This typedef will be removed in a future release of Regina.
Deprecated typedef for backward compatibility.
This typedef will be removed in a future release of Regina.
Deprecated typedef for backward compatibility.
This typedef will be removed in a future release of Regina.
Represents options and variants of algorithms for enumerating various types of normal hypersurfaces in 4-manifold triangulations.
These options are typically combined in a bitwise fashion using the HyperAlg type, and then passed to enumeration routines such as NormalHypersurfaces::enumerate().
enum regina::HyperCoords |
Represents different coordinate systems that can be used for enumerating and displaying normal hypersurface within 4-manifold triangulations.
IDs 0-9999 are reserved for future use by Regina. If you are extending Regina to include your own coordinate system, you should choose an ID >= 10000.
Represents different lists of normal hypersurfaces that might be constructed for a given 4-manifold triangulation.
The HyperList enumeration refers to the contents of the list, whereas the HyperAlgFlags enumeration refers to the algorithm used to build it.
ReturnsTraits<FunctionObject>::ReturnType regina::forCoords | ( | HyperCoords | coords, |
FunctionObject && | func, | ||
typename ReturnsTraits< FunctionObject >::ReturnType | defaultReturn, | ||
Args &&... | args | ||
) |
Allows the user to call a template function whose template parameter matches a given value of HyperCoords, which is not known until runtime.
In essence, this routine contains a switch/case statement that runs through all possible coordinate sytems.
The advantages of this routine are that (i) the user does not need to repeatedly type such switch/case statements themselves; and (ii) if a new coordinate system is added then only a small amount of code needs to be extended to incorporate it.
This function can only work with coordinate systems in which you can create and store normal hypersurfaces. All other coordinate systems are considered invalid for our purposes here.
In detail: the function object func must define a templated bracket operator, so that func.operator()<HyperInfo<c>>(...)
is defined for any valid HyperCoords enum value c. Then, when the user calls forCoords(coords, func, defaultReturn, ...)
, this routine will call func.operator()<HyperInfo<coords>>(...)
and pass back the corresponding return value. If coords does not denote a valid coordinate system as described above, then forCoords() will pass back defaultReturn instead.
There is also a variant of forCoords() that works with void functions, and so does not take the extra defaultReturn argument.
coords | the given normal hypersurface coordinate system. |
func | the function object whose bracket operator we will call with a HyperInfo<coords> object. |
defaultReturn | the value to return if the given coordinate system is invalid. |
args | any additional arguments to pass to the bracket operator for func. These will be copied/moved, so if you wish to pass references then you may need to wrap them in std::ref or std::cref. |
ReturnsTraits<FunctionObject>::Void regina::forCoords | ( | HyperCoords | coords, |
FunctionObject && | func, | ||
Args &&... | args | ||
) |
Allows the user to call a template function whose template parameter matches a given value of HyperCoords, which is not known until runtime.
In essence, this routine contains a switch/case statement that runs through all possible coordinate sytems.
The advantages of this routine are that (i) the user does not need to repeatedly type such switch/case statements themselves; and (ii) if a new coordinate system is added then only a small amount of code needs to be extended to incorporate it.
This function can only work with coordinate systems in which you can create and store normal hypersurfaces. All other coordinate systems are considered invalid for our purposes here.
In detail: the function object func must define a templated bracket operator, so that func.operator()<HyperInfo<c>>(...)
is defined for any valid HyperCoords enum value c. Then, when the user calls forCoords(coords, func, ...)
, this routine will call func.operator()<HyperInfo<coords>>(...)
in turn. If coords does not denote a valid coordinate system as described above, then forCoords() will do nothing.
There is also a variant of forCoords() that works with functions with return values, and which takes an extra defaultReturn argument.
coords | the given normal hypersurface coordinate system. |
func | the function object whose bracket operator we will call with a HyperInfo<coords> object. |
args | any additional arguments to pass to the bracket operator for func. These will be copied/moved, so if you wish to pass references then you may need to wrap them in std::ref or std::cref. |
ReturnsTraits<FunctionObject>::Void
simply evaluates to void
. EnumConstraints* regina::makeEmbeddedConstraints | ( | const Triangulation< 4 > * | triangulation, |
HyperCoords | coords | ||
) |
Creates a new set of validity constraints representing the condition that normal hypersurfaces be embedded.
The validity constraints will be expressed relative to the given coordinate system.
triangulation | the triangulation upon which these validity constraints will be based. |
coords | the coordinate system to be used; this must be one of the predefined coordinate system constants in NormalHypersurfaces. |
MatrixInt* regina::makeMatchingEquations | ( | const Triangulation< 4 > * | triangulation, |
HyperCoords | coords | ||
) |
Creates a new set of normal hypersurface matching equations for the given triangulation using the given coordinate system.
The returned matrix will be newly allocated and its destruction will be the responsibility of the caller of this routine.
Each equation will be represented as a row of the matrix. Each column of the matrix represents a coordinate in the given coordinate system.
For some coordinate systems, Regina may not be able to create matching equations for all triangulations (any such coordinate systems will be explicitly mentioned as such in the HyperCoords enum documentation). If Regina cannot create the matching equations as requested, this routine will return null
instead.
triangulation | the triangulation upon which these matching equations will be based. |
coords | the coordinate system to be used; this must be one of the predefined coordinate system constants in NormalHypersurfaces. |
null
if Regina is not able to construct them for the given combination of triangulation and coordinate system. NormalHypersurfaceVector* regina::makeZeroVector | ( | const Triangulation< 4 > * | triangulation, |
HyperCoords | coords | ||
) |
Returns a new normal hypersurface vector of the appropriate length for the given triangulation and the given coordinate system.
All elements of this vector will be initialised to zero.
The new vector will be of the subclass of NormalHypersurfaceVector corresponding to the given coordinate system. The caller of this routine is responsible for destroying the new vector.
triangulation | the triangulation upon which the underlying coordinate system is based. |
coords | the coordinate system to be used; this must be one of the predefined coordinate system constants in NormalHypersurfaces. |
|
inline |
Returns the bitwise OR of the two given flags.
lhs | the first flag to combine. |
rhs | the second flag to combine. |
|
inline |
Returns the bitwise OR of the two given flags.
lhs | the first flag to combine. |
rhs | the second flag to combine. |