Regina 7.4 Calculation Engine
Knots and Links

Classical and virtual knots and links More...

Classes

class  regina::ExampleLink
 This class offers routines for constructing ready-made examples of knots and links. More...
 
class  regina::StrandRef
 A reference to one of the two strands of a link that pass each other at a crossing. More...
 
class  regina::Crossing
 Represents a single crossing in a link diagram. More...
 
class  regina::Link
 Represents a combinatorial diagram of a directed knot or link. More...
 
class  regina::ModelLinkGraphArc
 A reference to an outgoing edge from a node of a model graph for a knot or link. More...
 
class  regina::ModelLinkGraphNode
 Represents a single node in a model graph for a knot or link. More...
 
class  regina::ModelLinkGraph
 Represents an undirected 4-valent graph with a specific embedding in some closed orientable surface. More...
 
class  regina::ModelLinkGraphCells
 Describes the cellular decomposition of a closed orientable surface induced by a 4-valent graph embedded within it. More...
 
class  regina::SpatialLink
 Represents a specific embedding of a directed knot or link in real 3-dimensional space. More...
 
class  regina::Tangle
 Represents a 2-tangle in the 3-ball. More...
 

Enumerations

enum class  regina::Framing { regina::Framing::Seifert = 1 , regina::Framing::Blackboard = 2 }
 Indicates one of the standard framings of a knot or link. More...
 
enum class  regina::GraphConstraint { regina::GraphConstraint::All = 0x00 , regina::GraphConstraint::NoTwists = 0x01 , regina::GraphConstraint::SingleTraversal = 0x02 }
 Represents different classes of graph embeddings that one might want to generate. More...
 

Functions

std::ostream & regina::operator<< (std::ostream &out, const StrandRef &s)
 Writes a depiction of the given strand reference to the given output stream.
 
void regina::swap (Link &lhs, Link &rhs)
 Swaps the contents of the two given links.
 
Flags< GraphConstraintregina::operator| (GraphConstraint lhs, GraphConstraint rhs)
 Returns the bitwise OR of the two given flags.
 
std::ostream & regina::operator<< (std::ostream &out, const ModelLinkGraphArc &a)
 Writes a depiction of the given arc reference to the given output stream.
 
void regina::swap (ModelLinkGraph &lhs, ModelLinkGraph &rhs) noexcept
 Swaps the contents of the two given graphs.
 
void regina::swap (SpatialLink &lhs, SpatialLink &rhs)
 Swaps the contents of the two given spatial links.
 
void regina::swap (Tangle &lhs, Tangle &rhs) noexcept
 Swaps the contents of the two given tangles.
 

Detailed Description

Classical and virtual knots and links

Enumeration Type Documentation

◆ Framing

enum class regina::Framing
strong

Indicates one of the standard framings of a knot or link.

Here a framing refers to a choice of normal vector field along the knot or link. Equivalently, a framing refers to a choice of longitude on the torus bounding each component of the link.

Enumerator
Seifert 

Indicates the Seifert framing, which is defined algebraically and is independent of the knot/link projection.

There are several ways in which the Seifert framing can be defined. One simple definition that works for both classical and virtual links is this: for each component of the link, the Seifert framing chooses the unique longitude for the corresponding knot that has linking number zero with the knot itself.

Some alternative definitions for classical links:

  • For each component of the link, draw a Seifert surface (i.e., an orientable surface embedded in the 3-sphere that is bounded by the corresponding knot). The Seifert framing is the vector field that points into the corresponding surface.
  • For each component of the link, the Seifert framing chooses the unique longitude for the corresponding knot that is trivial in the homology of the knot complement.
Blackboard 

Indicates the blackboard framing, which is specific to the knot/link projection.

For the blackboard framing, the normal vector field stays within the projection surface. Equivalently, the blackboard framing chooses longitudes whose projections do not intersect the original link diagram.

◆ GraphConstraint

enum class regina::GraphConstraint
strong

Represents different classes of graph embeddings that one might want to generate.

Specifically, this enumeration type is used with the routine ModelLinkGraph::generateAllEmbeddings().

These values can be combined using the bitwise OR operator, resulting in an object of type Flags<GraphConstraint>. If a graph generation function takes an argument of type Flags<GraphConstraint>, then it will only generate those graphs that satisfy all of the constraints that have been ORed together. For such an argument, you can pass a single GraphConstraint constant, or a bitwise combination of such constants (flag1 | flag2), or empty braces {} to indicate no flags at all (which is equivalent to passing GraphConstraint::All).

Enumerator
All 

Indicates that all graph embeddings should be generated.

NoTwists 

Indicates that only graph embeddings without twists should be generated.

By a twist, we mean that the embedding has some node with two adjacent arcs connected together. An embedding that fails this constraint must always model knot or links with twists that can be undone using type I Reidemeister moves.

SingleTraversal 

Indicates that only graph embeddings with a single traversal should be generated.

That is, for every embedding e that is generated, e.countTraversals() should be precisely 1.

An embedding that satisfies this constraint must always model knots (classical or virtual). An embedding that fails this constraint must either be empty, or must always model multiple-component links.

Function Documentation

◆ operator<<() [1/2]

std::ostream & regina::operator<< ( std::ostream & out,
const ModelLinkGraphArc & a )
inline

Writes a depiction of the given arc reference to the given output stream.

Parameters
outthe output stream to which to write.
athe arc reference to write.
Returns
a reference to the given output stream.

◆ operator<<() [2/2]

std::ostream & regina::operator<< ( std::ostream & out,
const StrandRef & s )
inline

Writes a depiction of the given strand reference to the given output stream.

The reference will be written in the form ^n or _n, denoting the upper or lower strand at crossing n respectively. For example, the upper strand of crossing 7 will be written as ^7.

Parameters
outthe output stream to which to write.
sthe reference to write.
Returns
a reference to the given output stream.

◆ operator|()

Flags< GraphConstraint > regina::operator| ( GraphConstraint lhs,
GraphConstraint 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/4]

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

Swaps the contents of the two given links.

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

See Link::swap() for more details.

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

◆ swap() [2/4]

void regina::swap ( ModelLinkGraph & lhs,
ModelLinkGraph & rhs )
inlinenoexcept

Swaps the contents of the two given graphs.

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

See ModelLinkGraph::swap() for more details.

Parameters
lhsthe graph whose contents should be swapped with rhs.
rhsthe graph whose contents should be swapped with lhs.

◆ swap() [3/4]

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

Swaps the contents of the two given spatial links.

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

See SpatialLink::swap() for more details.

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

◆ swap() [4/4]

void regina::swap ( Tangle & lhs,
Tangle & rhs )
inlinenoexcept

Swaps the contents of the two given tangles.

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

See Tangle::swap() for more details.

Parameters
lhsthe tangle whose contents should be swapped with rhs.
rhsthe tangle whose contents should be swapped with lhs.