Regina 7.4 Calculation Engine
Angle Structures

Angle structures on triangulations. More...

Classes

class  regina::AngleStructure
 Represents an angle structure on a triangulation. More...
 
class  regina::AngleStructures
 A collection of angle structures on a 3-manifold triangulation. More...
 

Enumerations

enum class  regina::AngleAlg {
  regina::AngleAlg::Default = 0x0000 , regina::AngleAlg::Tree = 0x0010 , regina::AngleAlg::DD = 0x0020 , regina::AngleAlg::Legacy = 0x4000 ,
  regina::AngleAlg::Custom = 0x8000
}
 Represents options and variants of algorithms for enumerating various types of angle structures on 3-manifold triangulations. More...
 

Functions

Flags< AngleAlgregina::operator| (AngleAlg lhs, AngleAlg rhs)
 Returns the bitwise OR of the two given flags.
 
void regina::swap (AngleStructure &a, AngleStructure &b) noexcept
 Swaps the contents of the given angle structures.
 
void regina::swap (AngleStructures &lhs, AngleStructures &rhs)
 Swaps the contents of the two given lists.
 
MatrixInt regina::makeAngleEquations (const Triangulation< 3 > &tri)
 Generates the set of angle structure equations for the given triangulation.
 

Detailed Description

Angle structures on triangulations.

Enumeration Type Documentation

◆ AngleAlg

enum class regina::AngleAlg
strong

Represents options and variants of algorithms for enumerating various types of angle structures on 3-manifold triangulations.

This enumeration type is used with angle structure enumeration routines, such as the AngleStructures class constructor.

These values can be combined using the bitwise OR operator (resulting in an object of type Flags<AngleAlg>). In particular, if a hypersurface enumeration function takes an argument of type Flags<AngleAlg>, then you can pass a single AngleAlg constant, or a bitwise combination of such constants (flag1 | flag2), or empty braces {} to indicate no flags at all (which is equivalent to passing AngleAlg::Default).

Enumerator
Default 

An empty flag, indicating to an enumeration routine that it should use its default behaviour.

The numeric value of this flag is zero (i.e., it has no effect when combined with other flags using bitwise OR).

Tree 

When enumerating taut angle structures, this flag indicates that the tree traversal algorithm should be used.

This algorithm is based on linear and integer programming techniques, and has many desirable properties including a relatively low overhead. Enumeration algorithms will use it if possible unless a different method is explicitly requested.

This is a variant of the tree traversal algorithm from B. A. Burton and M. Ozlen, "A tree traversal algorithm for decision problems in knot theory and 3-manifold topology", Algorithmica 65 (2013), pp. 772-801.

This flag is incompatible with DD.

DD 

When enumerating vertex or taut angle structures, this flag indicates that a modified double description method should be used.

This is currently the only supported algorithm for enumerating all vertex angle structures (not just taut structures).

This flag is incompatible with Tree.

Legacy 

Indicates that an angle structure list was enumerated using an older version of Regina (6.0.1 or earlier).

These older versions did not retain details of the algorithm used to build each list, and so in such cases no further algorithmic information is available.

If this flag is passed to an enumeration algorithm, it will be ignored.

Custom 

Indicates that an angle structure list was built using a customised algorithm.

In such cases, no further details on the algorithm are available.

If this flag is passed to an enumeration algorithm, it will be ignored.

Function Documentation

◆ makeAngleEquations()

MatrixInt regina::makeAngleEquations ( const Triangulation< 3 > & tri)

Generates the set of angle structure equations for the given triangulation.

These are the angle equations that will be used when enumerating angle structures on the given triangulation.

Each equation will be represented as a row of the resulting matrix, and each column will represent a coordinate in the underlying coordinate system (which is described in the notes for AngleStructure::vector()).

Parameters
trithe triangulation upon which these angle structure equations will be based.
Returns
the resulting set of angle structure equations.

◆ operator|()

Flags< AngleAlg > regina::operator| ( AngleAlg lhs,
AngleAlg rhs )
inline

Returns the bitwise OR of the two given flags.

Parameters
lhsthe first flag to combine.
rhsthe second flag to combine.
Returns
the combination of both flags.

◆ swap() [1/2]

void regina::swap ( AngleStructure & a,
AngleStructure & b )
inlinenoexcept

Swaps the contents of the given angle structures.

This global routine simply calls AngleStructure::swap(); it is provided so that AngleStructure meets the C++ Swappable requirements.

Parameters
athe first angle structure whose contents should be swapped.
bthe second angle structure whose contents should be swapped.

◆ swap() [2/2]

void regina::swap ( AngleStructures & lhs,
AngleStructures & rhs )
inline

Swaps the contents of the two given lists.

This global routine simply calls AngleStructures::swap(); it is provided so that AngleStructures meets the C++ Swappable requirements.

See AngleStructures::swap() for more details.

Note
This swap function is not marked noexcept, since it fires change events on both lists which may in turn call arbitrary code via any registered packet listeners.
Parameters
lhsthe list whose contents should be swapped with rhs.
rhsthe list whose contents should be swapped with lhs.