Angle Structures

## Classes

class | regina::AngleStructureVector
| A vector of integers used to indirectly store the individual angles in an angle structure. More...
class | regina::AngleStructure
| Represents an angle structure on a triangulation. More...
struct | regina::AngleStructures::StructureInserter
| An output iterator used to insert angle structures into an AngleStructures. More...
class | regina::AngleStructures
| A packet representing a collection of angle structures on a triangulation. More...
class | regina::XMLAngleStructureReader
| An XML element reader that reads a single angle structure. More...
class | regina::XMLAngleStructuresReader
| An XML packet reader that reads a single angle structure list. More...

## Typedefs

typedef AngleStructureVector | regina::NAngleStructureVector
| Deprecated typedef for backward compatibility. More...
typedef AngleStructure | regina::NAngleStructure
| Deprecated typedef for backward compatibility. More...
typedef AngleStructures | regina::NAngleStructureList
| Deprecated typedef for backward compatibility. More...

## Functions

| regina::AngleStructureVector::AngleStructureVector (size_t length)
| Creates a new vector all of whose entries are initialised to zero. More...
| regina::AngleStructureVector::AngleStructureVector (const Vector< LargeInteger > &cloneMe)
| Creates a new vector that is a clone of the given vector. More...
static MatrixInt * | regina::AngleStructureVector::makeAngleEquations (const Triangulation< 3 > *tri)
| Creates a new set of angle structure equations for the given triangulation. More...
| regina::AngleStructure::AngleStructure (const Triangulation< 3 > *triang, AngleStructureVector *newVector)
| Creates a new angle structure on the given triangulation with the given coordinate vector. More...
| regina::AngleStructure::~AngleStructure ()
| Destroys this angle structure. More...
AngleStructure * | regina::AngleStructure::clone () const
| Creates a newly allocated clone of this angle structure. More...
Rational | regina::AngleStructure::angle (size_t tetIndex, int edgePair) const
| Returns the requested angle in this angle structure. More...
const Triangulation< 3 > * | regina::AngleStructure::triangulation () const
| Returns the triangulation on which this angle structure lies. More...
bool | regina::AngleStructure::isStrict () const
| Determines whether this is a strict angle structure. More...
bool | regina::AngleStructure::isTaut () const
| Determines whether this is a taut angle structure. More...
bool | regina::AngleStructure::isVeering () const
| Determines whether this is a veering structure. More...
const AngleStructureVector * | regina::AngleStructure::rawVector () const
| Gives read-only access to the raw vector that sits beneath this angle structure. More...
void | regina::AngleStructure::writeTextShort (std::ostream &out) const
| Writes a short text representation of this object to the given output stream. More...
void | regina::AngleStructure::writeXMLData (std::ostream &out) const
| Writes a chunk of XML containing this angle structure and all of its properties. More...
void | regina::AngleStructure::calculateType () const
| Calculates the structure type (strict or taut) and stores it as a property. More...
virtual | regina::AngleStructures::~AngleStructures ()
| Destroys this list and all the angle structures within. More...
Triangulation< 3 > * | regina::AngleStructures::triangulation () const
| Returns the triangulation on which these angle structures lie. More...
bool | regina::AngleStructures::isTautOnly () const
| Returns whether this list was produced by enumerating taut angle structures only. More...
size_t | regina::AngleStructures::size () const
| Returns the number of angle structures stored in this list. More...
const AngleStructure * | regina::AngleStructures::structure (size_t index) const
| Returns the angle structure at the requested index in this list. More...
bool | regina::AngleStructures::spansStrict () const
| Determines whether any convex combination of the angle structures in this list is a strict angle structure. More...
bool | regina::AngleStructures::spansTaut () const
| Determines whether any angle structure in this list is a taut structure. More...
static AngleStructures * | regina::AngleStructures::enumerate (Triangulation< 3 > *owner, bool tautOnly=false, ProgressTracker *tracker=0)
| Enumerates all angle structures on the given triangulation. More...
static AngleStructures * | regina::AngleStructures::enumerateTautDD (Triangulation< 3 > *owner)
| A slower, alternative method to enumerate all taut angle structures on the given triangulation. More...
virtual void | regina::AngleStructures::writeTextShort (std::ostream &out) const
| Writes a short text representation of this object to the given output stream. More...
virtual void | regina::AngleStructures::writeTextLong (std::ostream &out) const
| Writes a detailed text representation of this object to the given output stream. More...
static XMLPacketReader * | regina::AngleStructures::xmlReader (Packet *parent, XMLTreeResolver &resolver)
virtual bool | regina::AngleStructures::dependsOnParent () const
| Determines if this packet depends upon its parent. More...
| regina::AngleStructures::AngleStructures (bool tautOnly)
| Creates a new empty angle structure list. More...
virtual Packet * | regina::AngleStructures::internalClonePacket (Packet *parent) const
| Makes a newly allocated copy of this packet. More...
virtual void | regina::AngleStructures::writeXMLPacketData (std::ostream &out) const
| Writes a chunk of XML containing the data for this packet only. More...
void | regina::AngleStructures::calculateSpanStrict () const
| Calculate whether the convex span of this list includes a strict angle structure. More...
void | regina::AngleStructures::calculateSpanTaut () const
| Calculate whether the convex span of this list includes a taut structure. More...
| regina::AngleStructures::StructureInserter::StructureInserter ()
| Creates a new uninitialised output iterator. More...
| regina::AngleStructures::StructureInserter::StructureInserter (AngleStructures &newList, Triangulation< 3 > *newOwner)
| Creates a new output iterator. More...
| regina::AngleStructures::StructureInserter::StructureInserter (const StructureInserter &cloneMe)
| Creates a new output iterator that is a clone of the given iterator. More...
StructureInserter & | regina::AngleStructures::StructureInserter::operator= (const StructureInserter &cloneMe)
| Sets this iterator to be a clone of the given output iterator. More...
StructureInserter & | regina::AngleStructures::StructureInserter::operator= (AngleStructure *structure)
| Appends an angle structure to the end of the appropriate structure list. More...
StructureInserter & | regina::AngleStructures::StructureInserter::operator= (AngleStructureVector *vector)
| Appends the angle structure corresponding to the given vector to the end of the appropriate structure list. More...
StructureInserter & | regina::AngleStructures::StructureInserter::operator* ()
| Returns a reference to this output iterator. More...
StructureInserter & | regina::AngleStructures::StructureInserter::operator++ ()
| Returns a reference to this output iterator. More...
StructureInserter & | regina::AngleStructures::StructureInserter::operator++ (int)
| Returns a reference to this output iterator. More...
MatrixInt * | regina::makeAngleEquations (const Triangulation< 3 > *tri)
| Creates a new set of angle structure equations for the given triangulation. More...
| regina::XMLAngleStructureReader::XMLAngleStructureReader (Triangulation< 3 > *newTri)
| Creates a new angle structure reader. More...
AngleStructure * | regina::XMLAngleStructureReader::structure ()
| Returns the angle structure that has been read. More...
virtual void | regina::XMLAngleStructureReader::startElement (const std::string &tagName, const regina::xml::XMLPropertyDict &tagProps, XMLElementReader *parentReader)
| Signifies that parsing of this XML element is beginning. More...
virtual void | regina::XMLAngleStructureReader::initialChars (const std::string &chars)
| Signifies that the initial text belonging to this XML element has been read. More...
virtual XMLElementReader * | regina::XMLAngleStructureReader::startSubElement (const std::string &subTagName, const regina::xml::XMLPropertyDict &subTagProps)
| Signifies that a subelement of this XML element is about to be parsed. More...
| regina::XMLAngleStructuresReader::XMLAngleStructuresReader (Triangulation< 3 > *newTri, XMLTreeResolver &resolver)
| Creates a new angle structure list reader. More...
virtual Packet * | regina::XMLAngleStructuresReader::packet () override
| Returns the newly allocated packet that has been read by this element reader. More...
virtual XMLElementReader * | regina::XMLAngleStructuresReader::startContentSubElement (const std::string &subTagName, const regina::xml::XMLPropertyDict &subTagProps) override
| Used instead of startSubElement() for XML subelements that are not child packets or packet tags. More...
virtual void | regina::XMLAngleStructuresReader::endContentSubElement (const std::string &subTagName, XMLElementReader *subReader) override
| Used instead of endSubElement() for XML subelements that are not child packets or packet tags. More...

## Variables

AngleStructures * | regina::AngleStructures::StructureInserter::list
| The list into which angle structures will be inserted. More...
Triangulation< 3 > * | regina::AngleStructures::StructureInserter::owner
| The triangulation on which the angle structures to be inserted lie. More...

## Friends

class | regina::XMLAngleStructureReader
class | regina::XMLAngleStructuresReader

## Detailed Description

Angle structures on triangulations.

## Typedef Documentation

## NAngleStructure

typedef AngleStructure regina::NAngleStructure

Deprecated typedef for backward compatibility.

This typedef will be removed in a future release of Regina.

Deprecated:
  The class NAngleStructure has now been renamed to AngleStructure.

## NAngleStructureList

typedef AngleStructures regina::NAngleStructureList

Deprecated typedef for backward compatibility.

This typedef will be removed in a future release of Regina.

Deprecated:
  The class NAngleStructureList has now been renamed to AngleStructures.

## NAngleStructureVector

typedef AngleStructureVector regina::NAngleStructureVector

Deprecated typedef for backward compatibility.

This typedef will be removed in a future release of Regina.

Deprecated:
  The class NAngleStructureVector has now been renamed to AngleStructureVector.

## Function Documentation

## angle()

Rational regina::AngleStructure::angle | ( | size_t | tetIndex,
|  | int | edgePair
| ) |  | const

Returns the requested angle in this angle structure.

The angle returned will be scaled down; the actual angle is the returned value multiplied by pi.

Within a tetrahedron, the three angles are indexed 0, 1 and 2. Angle i appears on edge i of the tetrahedron as well as its opposite edge (5-i).

Parameters

  tetIndex | the index in the triangulation of the tetrahedron in which the requested angle lives; this should be between 0 and Triangulation<3>::size()-1 inclusive.
  edgePair | the number representing the pair of edges holding the requested angle, as described above; this should be 0, 1 or 2.

Returns
  the requested angle scaled down by pi.

## AngleStructure()

regina::AngleStructure::AngleStructure | ( | const Triangulation< 3 > * | triang,
|  | AngleStructureVector * | newVector
| ) |  |

inline

Creates a new angle structure on the given triangulation with the given coordinate vector.

Python:\n Not present.

Parameters

  triang | the triangulation on which this angle structure lies.
  newVector | a vector containing the individual angles in the angle structure.

## AngleStructures()

regina::AngleStructures::AngleStructures | ( | bool | tautOnly | ) |

inline protected

Creates a new empty angle structure list.

All properties are marked as unknown.

Parameters

  tautOnly | `true` if only taut structures are to be enuemrated (when the time comes for enumeration to be performed), or `false` if we should enumerate all vertices of the angle structure solution space.

## AngleStructureVector() [1/2]

regina::AngleStructureVector::AngleStructureVector | ( | const Vector< LargeInteger > & | cloneMe | ) |

inline

Creates a new vector that is a clone of the given vector.

Parameters

  cloneMe | the vector to clone.

## AngleStructureVector() [2/2]

regina::AngleStructureVector::AngleStructureVector | ( | size_t | length | ) |

inline

Creates a new vector all of whose entries are initialised to zero.

Parameters

  length | the number of elements in the new vector.

## calculateSpanStrict()

void regina::AngleStructures::calculateSpanStrict | ( |  | ) | const

protected

Calculate whether the convex span of this list includes a strict angle structure.

## calculateSpanTaut()

void regina::AngleStructures::calculateSpanTaut | ( |  | ) | const

protected

Calculate whether the convex span of this list includes a taut structure.

## calculateType()

void regina::AngleStructure::calculateType | ( |  | ) | const

protected

Calculates the structure type (strict or taut) and stores it as a property.

## clone()

AngleStructure* regina::AngleStructure::clone | ( |  | ) | const

Creates a newly allocated clone of this angle structure.

Returns
  a clone of this angle structure.

## dependsOnParent()

bool regina::AngleStructures::dependsOnParent | ( |  | ) | const

inline virtual

Determines if this packet depends upon its parent.

This is true if the parent cannot be altered without invalidating or otherwise upsetting this packet.

Returns
  `true` if and only if this packet depends on its parent.

Implements regina::Packet.

## endContentSubElement()

virtual void regina::XMLAngleStructuresReader::endContentSubElement | ( | const std::string & | subTagName,
|  | XMLElementReader * | subReader
| ) |  |

override virtual

Used instead of endSubElement() for XML subelements that are not child packets or packet tags.

The default implementation does nothing.

Parameters

  subTagName | the name of the subelement closing tag.
  subReader | the child reader that was used to parse the subelement (this is the reader that was returned by the corresponding startContentSubElement() call). It is guaranteed that endElement() has already been called upon this child reader and that the child reader has not yet been destroyed.

Reimplemented from regina::XMLPacketReader.

## enumerate()

static AngleStructures* regina::AngleStructures::enumerate | ( | Triangulation< 3 > * | owner,
|  | bool | tautOnly = `false`,
|  | ProgressTracker * | tracker = `0`
| ) |  |

static

Enumerates all angle structures on the given triangulation.

A list containing all vertices of the angle structure solution space will be returned.

The option is offered to find only taut structures (which are considerably faster to enumerate) instead of enumerating all vertex angle structures. See the tautOnly argument below.

The angle structure list that is created will be inserted as the last child of the given triangulation. This triangulation must remain the parent of this angle structure list, and must not change while this angle structure list remains in existence.

If a progress tracker is passed, the angle structure enumeration will take place in a new thread and this routine will return immediately. If the user cancels the operation from another thread, then the angle structure list will not be inserted into the packet tree (but the caller of this routine will still need to delete it). Regarding progress tracking, this routine will declare and work through a series of stages whose combined weights sum to 1; typically this means that the given tracker must not have been used before.

If no progress tracker is passed, the enumeration will run in the current thread and this routine will return only when the enumeration is complete. Note that this enumeration can be extremely slow for larger triangulations.

Parameters

  owner | the triangulation for which the vertex angle structures will be enumerated.
  tautOnly | `true` if only taut structures are to be enuemrated, or `false` if we should enumerate all vertices of the angle structure solution space; this defaults to `false`.
  tracker | a progress tracker through which progress will be reported, or 0 if no progress reporting is required.

Returns
  the newly created angle structure list. Note that if a progress tracker is passed then this list may not be completely filled when this routine returns. If a progress tracker is passed and a new thread could not be started, this routine returns 0 (and no angle structure list is created).

## enumerateTautDD()

static AngleStructures* regina::AngleStructures::enumerateTautDD | ( | Triangulation< 3 > * | owner | ) |

static

A slower, alternative method to enumerate all taut angle structures on the given triangulation.

A list containing all taut angle structures will be returned.

The algorithm used by this routine is based on the double description method. The algorithm used by enumerate() (the preferred method) is instead based on linear programming, and is typically much faster than this routine for larger triangulations.

The angle structure list that is created will be inserted as the last child of the given triangulation. This triangulation must remain the parent of this angle structure list, and must not change while this angle structure list remains in existence.

Warning
  This routine is slow, and users will not want to call it unless they have some specialised need.

Parameters

  owner | the triangulation for which the taut angle structures will be enumerated.

Returns
  the newly created angle structure list.

## initialChars()

virtual void regina::XMLAngleStructureReader::initialChars | ( | const std::string & | chars | ) |

virtual

Signifies that the initial text belonging to this XML element has been read.

The initial text is everything between the opening tag and the first subelement or closing tag.

The default implementation does nothing.

Parameters

  chars | the initial text for this element.

Reimplemented from regina::XMLElementReader.

## internalClonePacket()

virtual Packet* regina::AngleStructures::internalClonePacket | ( | Packet * | parent | ) | const

protected virtual

Makes a newly allocated copy of this packet.

This routine should not insert the new packet into the tree structure, clone the packet's associated tags or give the packet a label. It should also not clone any descendants of this packet.

You may assume that the new packet will eventually be inserted into the tree beneath either the same parent as this packet or a clone of that parent.

Parameters

  parent | the parent beneath which the new packet will eventually be inserted.

Returns
  the newly allocated packet.

Implements regina::Packet.

## isStrict()

bool regina::AngleStructure::isStrict | ( |  | ) | const

inline

Determines whether this is a strict angle structure.

A strict angle structure has all angles strictly between (not including) 0 and pi.

Returns
  `true` if and only if this is a strict angle structure.

## isTaut()

bool regina::AngleStructure::isTaut | ( |  | ) | const

inline

Determines whether this is a taut angle structure.

A taut angle structure contains only angles 0 and pi.

Here we use the Kang-Rubinstein definition of a taut angle structure [1], which is based on the angles alone. In his original paper [2], Lackenby has an extra condition whereby 2-faces of the triangulation must have consistent coorientations, which we do not enforce here.

[1] E. Kang and J. H. Rubinstein, "Ideal triangulations of 3-manifolds II; Taut and angle structures", Algebr. Geom. Topol. 5 (2005), pp. 1505-1533.

[2] M. Lackenby, "Taut ideal triangulations of 3-manifolds", Geom. Topol. 4 (2000), pp. 369-395.

Returns
  `true` if and only if this is a taut structure.

## isTautOnly()

bool regina::AngleStructures::isTautOnly | ( |  | ) | const

inline

Returns whether this list was produced by enumerating taut angle structures only.

Returns
  `true` if this list was produced by enumerating taut angle structures only, or `false` if the enumeration procedure allowed for any angle structures.

## isVeering()

bool regina::AngleStructure::isVeering | ( |  | ) | const

inline

Determines whether this is a veering structure.

A veering structure is taut angle structure with additional strong combinatorial constraints, which we do not outline here. For a definition, see C. D. Hodgson, J. H. Rubinstein, H. Segerman, and S. Tillmann, "Veering triangulations admit strict angle structures", Geom. Topol., 15 (2011), pp. 2073-2089.

Note that the Hodgson et al. definition is slightly more general than Agol's veering taut triangulations from his original paper: I. Agol, " Ideal triangulations of pseudo-Anosov mapping tori", in "Topology and Geometry in Dimension Three", volume 560 of Contemp. Math., pp. 1-17, Amer. Math. Soc., 2011. This mirrors the way in which the Kang-Rubinstein definition of taut angle structure is slightly more general than Lackenby's. See the Hodgson et al. paper for full details and comparisons between the two settings.

If this angle structure is not taut, or if the underlying triangulation is non-orientable, then this routine will return `false`.

Returns
  `true` if and only if this is a veering structure.

## makeAngleEquations() [1/2]

static MatrixInt* regina::AngleStructureVector::makeAngleEquations | ( | const Triangulation< 3 > * | tri | ) |

static

Creates a new set of angle structure equations for the given triangulation.

Each equation will be represented as a row of the matrix, and each column will represent a coordinate in the underlying coordinate system (which is described in the AngleStructureVector class notes).

The returned matrix will be newly allocated and its destruction will be the responsibility of the caller of this routine.

This is identical to the global function makeAngleEquations(). It is offered again here in the vector class for consistency with the normal surface vector classes.

Parameters

  tri | the triangulation upon which these angle structure equations will be based.

Returns
  a newly allocated set of equations.

## makeAngleEquations() [2/2]

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

inline

Creates a new set of angle structure equations for the given triangulation.

Each equation will be represented as a row of the matrix, and each column will represent a coordinate in the underlying coordinate system (which is described in the AngleStructureVector class notes).

The returned matrix will be newly allocated and its destruction will be the responsibility of the caller of this routine.

This routine is identical to the static class method AngleStructureVector::makeAngleEquations(). It is offered again here as a global routine so that it is accessible to Python users (who cannot access the AngleStructureVector class).

Parameters

  tri | the triangulation upon which these angle structure equations will be based.

Returns
  a newly allocated set of equations.

## operator*()

AngleStructures::StructureInserter & regina::AngleStructures::StructureInserter::operator* | ( |  | ) |

inline

Returns a reference to this output iterator.

Returns
  this output iterator.

## operator++() [1/2]

AngleStructures::StructureInserter & regina::AngleStructures::StructureInserter::operator++ | ( |  | ) |

inline

Returns a reference to this output iterator.

Returns
  this output iterator.

## operator++() [2/2]

AngleStructures::StructureInserter & regina::AngleStructures::StructureInserter::operator++ | ( | int |  | ) |

inline

Returns a reference to this output iterator.

Returns
  this output iterator.

## operator=() [1/3]

AngleStructures::StructureInserter & regina::AngleStructures::StructureInserter::operator= | ( | AngleStructure * | structure | ) |

inline

Appends an angle structure to the end of the appropriate structure list.

The given angle structure will be deallocated with the other angle structures in this list when the list is eventually destroyed.

Parameters

  structure | the angle structure to insert.

Returns
  this output iterator.

## operator=() [2/3]

AngleStructures::StructureInserter & regina::AngleStructures::StructureInserter::operator= | ( | AngleStructureVector * | vector | ) |

inline

Appends the angle structure corresponding to the given vector to the end of the appropriate structure list.

The given vector will be owned by the newly created angle structure and will be deallocated with the other angle structures in this list when the list is eventually destroyed.

Parameters

  vector | the vector of the angle structure to insert.

Returns
  this output iterator.

## operator=() [3/3]

AngleStructures::StructureInserter & regina::AngleStructures::StructureInserter::operator= | ( | const StructureInserter & | cloneMe | ) |

inline

Sets this iterator to be a clone of the given output iterator.

Parameters

  cloneMe | the output iterator to clone.

Returns
  this output iterator.

## packet()

Packet * regina::XMLAngleStructuresReader::packet | ( |  | ) |

inline override virtual

Returns the newly allocated packet that has been read by this element reader.

Deallocation of this new packet is not the responsibility of this class. Once this routine gives a non-zero return value, it should continue to give the same non-zero return value from this point onwards.

If this routine is ever to give a non-zero return value, it must be giving that non-zero return value by the time the first child packet or packet tag is encountered; otherwise child packets will not be inserted into the packet tree and/or packet tags will not be added.

The newly allocated packet should not be given a packet label. This will be done by XMLPacketReader::endSubElement().

The newly allocated packet may or may not be inserted in the packet tree structure; this does not matter (although if it is inserted it must be inserted in the correct place).

The newly allocated packet should not be given any associated packet tags. This will be done by XMLPacketReader::startSubElement().

The default implementation returns 0.

Returns
  the packet that has been read, or 0 if packet reading is incomplete, the packet should be ignored or an error occurred.

Reimplemented from regina::XMLPacketReader.

## rawVector()

const AngleStructureVector * regina::AngleStructure::rawVector | ( |  | ) | const

inline

Gives read-only access to the raw vector that sits beneath this angle structure.

Generally users should not need this function. However, it is provided here in case the need should arise (e.g., for reasons of efficiency).

Python:\n Not present.

Returns
  the underlying raw vector.

## size()

size_t regina::AngleStructures::size | ( |  | ) | const

inline

Returns the number of angle structures stored in this list.

Returns
  the number of angle structures.

## spansStrict()

bool regina::AngleStructures::spansStrict | ( |  | ) | const

inline

Determines whether any convex combination of the angle structures in this list is a strict angle structure.

See AngleStructure::isStrict() for details on strict angle structures.

Returns
  `true` if and only if a strict angle structure can be produced.

## spansTaut()

bool regina::AngleStructures::spansTaut | ( |  | ) | const

inline

Determines whether any angle structure in this list is a taut structure.

Because taut structures always appear as vertices of the angle structure solution space, this routine is equivalent to testing whether any convex combination of the angle structures in this list is a taut structure.

See AngleStructure::isTaut() for details on taut structures.

Returns
  `true` if and only if a taut structure can be produced.

## startContentSubElement()

virtual XMLElementReader* regina::XMLAngleStructuresReader::startContentSubElement | ( | const std::string & | subTagName,
|  | const regina::xml::XMLPropertyDict & | subTagProps
| ) |  |

override virtual

Used instead of startSubElement() for XML subelements that are not child packets or packet tags.

The default implementation returns a new XMLElementReader which can be used to ignore the subelement completely.

Parameters

  subTagName | the name of the subelement opening tag.
  subTagProps | the properties associated with the subelement opening tag.

Returns
  a newly created element reader that will be used to parse the subelement. This class should not take care of the new reader's destruction; that will be done by the parser.

Reimplemented from regina::XMLPacketReader.

## startElement()

virtual void regina::XMLAngleStructureReader::startElement | ( | const std::string & | tagName,
|  | const regina::xml::XMLPropertyDict & | tagProps,
|  | XMLElementReader * | parentReader
| ) |  |

virtual

Signifies that parsing of this XML element is beginning.

The default implementation does nothing.

Parameters

  tagName | the name of the opening tag for this element.
  tagProps | the properties associated with the opening tag.
  parentReader | the reader currently parsing the parent XML element, or 0 if this is the top-level element. If this paraneter is non-zero, it is guaranteed that startSubElement() has already been called upon the parent reader.

Reimplemented from regina::XMLElementReader.

## startSubElement()

virtual XMLElementReader* regina::XMLAngleStructureReader::startSubElement | ( | const std::string & | subTagName,
|  | const regina::xml::XMLPropertyDict & | subTagProps
| ) |  |

virtual

Signifies that a subelement of this XML element is about to be parsed.

The default implementation returns a new XMLElementReader which can be used to ignore the subelement completely.

Parameters

  subTagName | the name of the subelement opening tag.
  subTagProps | the properties associated with the subelement opening tag.

Returns
  a newly created element reader that will be used to parse the subelement. This class should not take care of the new reader's destruction; that will be done by the parser.

Reimplemented from regina::XMLElementReader.

## structure() [1/2]

AngleStructure * regina::XMLAngleStructureReader::structure | ( |  | ) |

inline

Returns the angle structure that has been read.

Returns
  the newly allocated angle structure, or 0 if an error occurred.

## structure() [2/2]

const AngleStructure * regina::AngleStructures::structure | ( | size_t | index | ) | const

inline

Returns the angle structure at the requested index in this list.

Parameters

  index | the index of the requested angle structure in this list; this must be between 0 and size()-1 inclusive.

Returns
  the angle structure at the requested index.

## StructureInserter() [1/3]

regina::AngleStructures::StructureInserter::StructureInserter | ( |  | ) |

inline

Creates a new uninitialised output iterator.

Warning
  This iterator must not be used until its structure list and triangulation have been initialised.

## StructureInserter() [2/3]

regina::AngleStructures::StructureInserter::StructureInserter | ( | AngleStructures & | newList,
|  | Triangulation< 3 > * | newOwner
| ) |  |

inline

Creates a new output iterator.

The member variables of this iterator will be initialised according to the parameters passed to this constructor.

Parameters

  newList | the list into which angle structures will be inserted.
  newOwner | the triangulation on which the structures to be inserted lie.

## StructureInserter() [3/3]

regina::AngleStructures::StructureInserter::StructureInserter | ( | const StructureInserter & | cloneMe | ) |

inline

Creates a new output iterator that is a clone of the given iterator.

Parameters

  cloneMe | the output iterator to clone.

## triangulation() [1/2]

Triangulation<3>* regina::AngleStructures::triangulation | ( |  | ) | const

Returns the triangulation on which these angle structures lie.

Returns
  the corresponding triangulation.

## triangulation() [2/2]

const Triangulation< 3 > * regina::AngleStructure::triangulation | ( |  | ) | const

inline

Returns the triangulation on which this angle structure lies.

Returns
  the underlying triangulation.

## writeTextLong()

virtual void regina::AngleStructures::writeTextLong | ( | std::ostream & | out | ) | const

virtual

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

This may be reimplemented by subclasses, but the parent Packet class offers a reasonable default implementation.

Python:\n Not present.

Parameters

  out | the output stream to which to write.

Reimplemented from regina::Packet.

## writeTextShort() [1/2]

virtual void regina::AngleStructures::writeTextShort | ( | std::ostream & | out | ) | const

virtual

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

This must be reimplemented by subclasses.

Python:\n Not present.

Parameters

  out | the output stream to which to write.

Implements regina::Packet.

## writeTextShort() [2/2]

void regina::AngleStructure::writeTextShort | ( | std::ostream & | out | ) | const

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

Python:\n Not present.

Parameters

  out | the output stream to which to write.

## writeXMLData()

void regina::AngleStructure::writeXMLData | ( | std::ostream & | out | ) | const

Writes a chunk of XML containing this angle structure and all of its properties.

This routine will be called from within AngleStructures::writeXMLPacketData().

Python:\n Not present.

Parameters

  out | the output stream to which the XML should be written.

## writeXMLPacketData()

virtual void regina::AngleStructures::writeXMLPacketData | ( | std::ostream & | out | ) | const

protected virtual

Writes a chunk of XML containing the data for this packet only.

You may assume that the packet opening tag (including the packet type and label) has already been written, and that all child packets followed by the corresponding packet closing tag will be written immediately after this routine is called. This routine need only write the internal data stored in this specific packet.

Parameters

  out | the output stream to which the XML should be written.

Implements regina::Packet.

## XMLAngleStructureReader()

regina::XMLAngleStructureReader::XMLAngleStructureReader | ( | Triangulation< 3 > * | newTri | ) |

inline

Creates a new angle structure reader.

Parameters

  newTri | the triangulation on which this angle structure lies.

## XMLAngleStructuresReader()

regina::XMLAngleStructuresReader::XMLAngleStructuresReader | ( | Triangulation< 3 > * | newTri,
|  | XMLTreeResolver & | resolver
| ) |  |

inline

Creates a new angle structure list reader.

Parameters

  newTri | the triangulation on which these angle structures are placed.
  resolver | the master resolver that will be used to fix dangling packet references after the entire XML file has been read.

## ~AngleStructure()

regina::AngleStructure::~AngleStructure | ( |  | ) |

inline

Destroys this angle structure.

The underlying vector of angles will also be deallocated.

## ~AngleStructures()

regina::AngleStructures::~AngleStructures | ( |  | ) |

inline virtual

Destroys this list and all the angle structures within.

## Variable Documentation

## list

AngleStructures* regina::AngleStructures::StructureInserter::list

The list into which angle structures will be inserted.

## owner

Triangulation<3>* regina::AngleStructures::StructureInserter::owner

The triangulation on which the angle structures to be inserted lie.

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).