Regina 7.3 Calculation Engine
Public Member Functions | Public Attributes | List of all members
regina::EulerSearcher::TetEdgeState Struct Reference

A structure used to track equivalence classes of tetrahedron edges as the gluing permutation set is constructed. More...

#include <census/gluingpermsearcher3.h>

Public Member Functions

 TetEdgeState ()
 Constructor for a standalone tetrahedron edge in an equivalence class all of its own. More...
 
void dumpData (std::ostream &out, size_t nTets) const
 Dumps all internal data in a plain text format to the given output stream. More...
 
bool readData (std::istream &in, size_t nTets)
 Fills this state with data read from the given input stream. More...
 
 TetEdgeState (const TetEdgeState &)=delete
 
TetEdgeStateoperator= (const TetEdgeState &)=delete
 

Public Attributes

ssize_t parent
 The index of the parent object in the current tree, or -1 if this object is the root of the tree. More...
 
size_t rank
 The depth of the subtree beneath this object (where a leaf node has depth zero). More...
 
size_t size
 The total number of objects in the subtree descending from this object (where this object is counted also). More...
 
bool bounded
 Does this equivalence class of tetrahedron edges represent a boundary edge? More...
 
char twistUp
 Each tetrahedron edge can be assigned an orientation pointing from the lower numbered tetrahedron vertex to the higher. More...
 
bool hadEqualRank
 Did this tree have rank equal to its parent immediately before it was grafted beneath its parent? This information is used to maintain the ranks correctly when grafting operations are undone. More...
 
Qitmask1< uint64_t > facesPos
 Indicates how many times this edge runs along the boundary of each tetrahedron face in the positive direction. More...
 
Qitmask1< uint64_t > facesNeg
 Indicates how many times this edge runs along the boundary of each tetrahedron face in the negative direction. More...
 

Detailed Description

A structure used to track equivalence classes of tetrahedron edges as the gluing permutation set is constructed.

Two edges are considered equivalent if they are identified within the triangulation.

Tetrahedron edges are indexed linearly by tetrahedron and then edge number. Specifically, edge e (0..5) of tetrahedron t (0..nTets-1) has index 6t+e.

Each equivalence class of edges corresponds to a tree of TetEdgeState objects, arranged to form a modified union-find structure.

Constructor & Destructor Documentation

◆ TetEdgeState()

regina::EulerSearcher::TetEdgeState::TetEdgeState ( )
inline

Constructor for a standalone tetrahedron edge in an equivalence class all of its own.

Member Function Documentation

◆ dumpData()

void regina::EulerSearcher::TetEdgeState::dumpData ( std::ostream &  out,
size_t  nTets 
) const

Dumps all internal data in a plain text format to the given output stream.

This state can be recreated from this text data by calling readData().

This routine may be useful for transferring objects from one processor to another.

Warning
The data format is liable to change between Regina releases. Data in this format should be used on a short-term temporary basis only.
Parameters
nTetsthe number of tetrahedra under consideration in the census.
outthe output stream to which the data should be written.

◆ readData()

bool regina::EulerSearcher::TetEdgeState::readData ( std::istream &  in,
size_t  nTets 
)

Fills this state with data read from the given input stream.

This routine reads data in the format written by dumpData().

Warning
The data format is liable to change between Regina releases. Data in this format should be used on a short-term temporary basis only.

This routine does test for bad input data, but it does not test for end-of-file.

Parameters
inthe input stream from which to read.
nTetsthe number of tetrahedra under consideration in the census.
Returns
false if any errors were encountered during reading, or true otherwise.

Member Data Documentation

◆ bounded

bool regina::EulerSearcher::TetEdgeState::bounded

Does this equivalence class of tetrahedron edges represent a boundary edge?

If this equivalence class describes a complete loop of tetrahedron edges then the value of bounded is false. If this equivalence class describes a string of tetrahedron edges with two endpoints, the value of bounded is true. Here we treat any face whose gluing permutation has not yet been decided as a boundary face.

This value is only maintained correctly for the root of the corresponding object tree; other objects in the tree will have older values to facilitate backtracking.

◆ facesNeg

Qitmask1<uint64_t> regina::EulerSearcher::TetEdgeState::facesNeg

Indicates how many times this edge runs along the boundary of each tetrahedron face in the negative direction.

Specifically, the (4t+i)th trit counts how many times it runs in the negative direction around the boundary of face i of tetrahedron t. Which direction is "negative" is chosen arbitrarily for each face; for details see the implementation of the EulerSearcher constructor.

Because of the fixed-size data type, this only stores information for the faces of the first 16 tetrahedra.

Currently this data member is initialised by the EulerSearcher constructors (since it belongs to TetEdgeState), but it is only used and updated in the subclass ClosedPrimeMinSearcher (where it allows us to optimise the census algorithm).

◆ facesPos

Qitmask1<uint64_t> regina::EulerSearcher::TetEdgeState::facesPos

Indicates how many times this edge runs along the boundary of each tetrahedron face in the positive direction.

Specifically, the (4t+i)th trit counts how many times it runs in the positive direction around the boundary of face i of tetrahedron t. Which direction is "positive" is chosen arbitrarily for each face; for details see the implementation of the EulerSearcher constructor.

Because of the fixed-size data type, this only stores information for the faces of the first 16 tetrahedra.

Currently this data member is initialised by the EulerSearcher constructors (since it belongs to TetEdgeState), but it is only used and updated in the subclass ClosedPrimeMinSearcher (where it allows us to optimise the census algorithm).

◆ hadEqualRank

bool regina::EulerSearcher::TetEdgeState::hadEqualRank

Did this tree have rank equal to its parent immediately before it was grafted beneath its parent? This information is used to maintain the ranks correctly when grafting operations are undone.

If this object is still the root of its tree, this value is set to false.

◆ parent

ssize_t regina::EulerSearcher::TetEdgeState::parent

The index of the parent object in the current tree, or -1 if this object is the root of the tree.

◆ rank

size_t regina::EulerSearcher::TetEdgeState::rank

The depth of the subtree beneath this object (where a leaf node has depth zero).

◆ size

size_t regina::EulerSearcher::TetEdgeState::size

The total number of objects in the subtree descending from this object (where this object is counted also).

◆ twistUp

char regina::EulerSearcher::TetEdgeState::twistUp

Each tetrahedron edge can be assigned an orientation pointing from the lower numbered tetrahedron vertex to the higher.

The parameter twistUp is 0 if the identification of this object and its parent in the tree preserves this orientation, or 1 if it does not. If this object has no parent, the value of twistUp is undefined.


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

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