Regina Calculation Engine
Classes | Public Types | Public Member Functions | Static Public Member Functions | Public Attributes | Protected Member Functions | List of all members
regina::NPacket Class Referenceabstract

Represents a packet of information that may be individually edited or operated upon. More...

#include <packet/npacket.h>

Inheritance diagram for regina::NPacket:
regina::Output< NPacket > regina::SafePointeeBase< NPacket > regina::NAngleStructureList regina::NContainer regina::NNormalHypersurfaceList regina::NNormalSurfaceList regina::NPDF regina::NScript regina::NSurfaceFilter regina::NText regina::Triangulation< int > regina::Triangulation< 2 > regina::Triangulation< 3 > regina::Triangulation< 4 > regina::Triangulation< dim >

Classes

class  ChangeEventSpan
 An object that facilitates firing packetToBeChanged() and packetWasChanged() events. More...
 

Public Types

typedef NPacket SafePointeeType
 The type of object being pointed to. More...
 

Public Member Functions

virtual void writeTextShort (std::ostream &out) const =0
 Writes a short text representation of this object to the given output stream. More...
 
virtual void writeTextLong (std::ostream &out) const
 Writes a detailed text representation of this object to the given output stream. More...
 
bool hasOwner () const
 Indicates whether some other object in the calculation engine is responsible for ultimately destroying this object. More...
 
std::string str () const
 Returns a short text representation of this object. More...
 
std::string utf8 () const
 Returns a short text representation of this object using unicode characters. More...
 
std::string detail () const
 Returns a detailed text representation of this object. More...
 
REGINA_DEPRECATED std::string toString () const
 A deprecated alias for str(). More...
 
REGINA_DEPRECATED std::string toStringLong () const
 A deprecated alias for detail(). More...
 
Constructors and Destructors
 NPacket (NPacket *parent=0)
 Constructor that inserts the new packet into the overall tree structure. More...
 
virtual ~NPacket ()
 Destructor that also orphans this packet and destroys all of its descendants. More...
 
Packet Identification
virtual PacketType type () const =0
 Returns the unique integer ID representing this type of packet. More...
 
REGINA_DEPRECATED PacketType getPacketType () const
 Deprecated routine that returns the unique integer ID representing this type of packet. More...
 
virtual std::string typeName () const =0
 Returns an English name for this type of packet. More...
 
REGINA_DEPRECATED std::string getPacketTypeName () const
 Deprecated routine that returns an English name for this type of packet. More...
 
const std::string & label () const
 Returns the label associated with this individual packet. More...
 
REGINA_DEPRECATED const
std::string & 
getPacketLabel () const
 Deprecated routine that returns the label associated with this individual packet. More...
 
std::string humanLabel () const
 Returns the label associated with this individual packet, adjusted if necessary for human-readable output. More...
 
REGINA_DEPRECATED std::string getHumanLabel () const
 Deprecated routine that returns the label associated with this individual packet, adjusted if necessary for human-readable output. More...
 
std::string adornedLabel (const std::string &adornment) const
 Returns the label of this packet adorned with the given string. More...
 
void setLabel (const std::string &label)
 Sets the label associated with this individual packet. More...
 
REGINA_DEPRECATED void setPacketLabel (const std::string &label)
 Deprecated routine that sets the label associated with this individual packet. More...
 
std::string fullName () const
 Returns a descriptive text string for the packet. More...
 
REGINA_DEPRECATED std::string getFullName () const
 Deprecated routine that returns a descriptive text string for the packet. More...
 
REGINA_DEPRECATED std::string makeUniqueLabel (const std::string &base) const
 Returns a new label that cannot be found anywhere in the entire tree structure. More...
 
REGINA_DEPRECATED bool makeUniqueLabels (NPacket *reference)
 Ensures that all packet labels in both this and the given packet tree combined are distinct. More...
 
Tags
bool hasTag (const std::string &tag) const
 Determines whether this packet has the given associated tag. More...
 
bool hasTags () const
 Determines whether this packet has any associated tags at all. More...
 
bool addTag (const std::string &tag)
 Associates the given tag with this packet. More...
 
bool removeTag (const std::string &tag)
 Removes the association of the given tag with this packet. More...
 
void removeAllTags ()
 Removes all associated tags from this packet. More...
 
const std::set< std::string > & tags () const
 Returns the set of all tags associated with this packet. More...
 
REGINA_DEPRECATED const
std::set< std::string > & 
getTags () const
 Deprecated routine that returns the set of all tags associated with this packet. More...
 
Event Handling
bool listen (NPacketListener *listener)
 Registers the given packet listener to listen for events on this packet. More...
 
bool isListening (NPacketListener *listener)
 Determines whether the given packet listener is currently listening for events on this packet. More...
 
bool unlisten (NPacketListener *listener)
 Unregisters the given packet listener so that it no longer listens for events on this packet. More...
 
Tree Queries
NPacketparent () const
 Determines the parent packet in the tree structure. More...
 
REGINA_DEPRECATED NPacketgetTreeParent () const
 Deprecated routine that determines the parent packet in the tree structure. More...
 
NPacketfirstChild () const
 Determines the first child of this packet in the tree structure. More...
 
REGINA_DEPRECATED NPacketgetFirstTreeChild () const
 Deprecated routine that determines the first child of this packet in the tree structure. More...
 
NPacketlastChild () const
 Determines the last child of this packet in the tree structure. More...
 
REGINA_DEPRECATED NPacketgetLastTreeChild () const
 Deprecated routine that determines the last child of this packet in the tree structure. More...
 
NPacketnextSibling () const
 Determines the next sibling of this packet in the tree structure. More...
 
REGINA_DEPRECATED NPacketgetNextTreeSibling () const
 Deprecated routine that determines the next sibling of this packet in the tree structure. More...
 
NPacketprevSibling () const
 Determines the previous sibling of this packet in the tree structure. More...
 
REGINA_DEPRECATED NPacketgetPrevTreeSibling () const
 Deprecated routine that determines the previous sibling of this packet in the tree structure. More...
 
NPacketroot () const
 Determines the root of the tree to which this packet belongs. More...
 
REGINA_DEPRECATED NPacketgetTreeMatriarch () const
 Deprecated routine that determines the root of the tree to which this packet belongs. More...
 
unsigned levelsDownTo (const NPacket *descendant) const
 Counts the number of levels between this packet and its given descendant in the tree structure. More...
 
unsigned levelsUpTo (const NPacket *ancestor) const
 Counts the number of levels between this packet and its given ancestor in the tree structure. More...
 
bool isGrandparentOf (const NPacket *descendant) const
 Determines if this packet is equal to or an ancestor of the given packet in the tree structure. More...
 
size_t countChildren () const
 Returns the number of immediate children of this packet. More...
 
REGINA_DEPRECATED size_t getNumberOfChildren () const
 Deprecated routine that returns the number of immediate children of this packet. More...
 
size_t countDescendants () const
 Returns the total number of descendants of this packet. More...
 
REGINA_DEPRECATED size_t getNumberOfDescendants () const
 Deprecated routine that returns the total number of descendants of this packet. More...
 
size_t totalTreeSize () const
 Determines the total number of packets in the tree or subtree for which this packet is matriarch. More...
 
REGINA_DEPRECATED size_t getTotalTreeSize () const
 Deprecated routine that returns the total number of packets in the tree or subtree for which this packet is matriarch. More...
 
Tree Manipulation
void insertChildFirst (NPacket *child)
 Inserts the given packet as the first child of this packet. More...
 
void insertChildLast (NPacket *child)
 Inserts the given packet as the last child of this packet. More...
 
void insertChildAfter (NPacket *newChild, NPacket *prevChild)
 Inserts the given packet as a child of this packet at the given location in this packet's child list. More...
 
void makeOrphan ()
 Cuts this packet away from its parent in the tree structure and instead makes it matriarch of its own tree. More...
 
void reparent (NPacket *newParent, bool first=false)
 Cuts this packet away from its parent in the tree structure, and inserts it as a child of the given packet instead. More...
 
void transferChildren (NPacket *newParent)
 Cuts all of this packet's children out of the packet tree, and reinserts them as children of the given packet instead. More...
 
void swapWithNextSibling ()
 Swaps this packet with its next sibling in the sequence of children beneath their common parent packet. More...
 
void moveUp (unsigned steps=1)
 Moves this packet the given number of steps towards the beginning of its sibling list. More...
 
void moveDown (unsigned steps=1)
 Moves this packet the given number of steps towards the end of its sibling list. More...
 
void moveToFirst ()
 Moves this packet to be the first in its sibling list. More...
 
void moveToLast ()
 Moves this packet to be the last in its sibling list. More...
 
void sortChildren ()
 Sorts the immediate children of this packet according to their packet labels. More...
 
Searching and Iterating
NPacketnextTreePacket ()
 Finds the next packet after this in a complete depth-first iteration of the entire tree structure to which this packet belongs. More...
 
const NPacketnextTreePacket () const
 Finds the next packet after this in a complete depth-first iteration of the entire tree structure to which this packet belongs. More...
 
NPacketfirstTreePacket (const std::string &type)
 Finds the first packet of the requested type in a complete depth-first iteration of the tree structure. More...
 
const NPacketfirstTreePacket (const std::string &type) const
 Finds the first packet of the requested type in a complete depth-first iteration of the tree structure. More...
 
NPacketnextTreePacket (const std::string &type)
 Finds the next packet after this of the requested type in a complete depth-first iteration of the entire tree structure. More...
 
const NPacketnextTreePacket (const std::string &type) const
 Finds the next packet after this of the requested type in a complete depth-first iteration of the entire tree structure. More...
 
NPacketfindPacketLabel (const std::string &label)
 Finds the packet with the requested label in the tree or subtree for which this packet is matriarch. More...
 
const NPacketfindPacketLabel (const std::string &label) const
 Finds the packet with the requested label in the tree or subtree for which this packet is matriarch. More...
 
Packet Dependencies
virtual bool dependsOnParent () const =0
 Determines if this packet depends upon its parent. More...
 
bool isPacketEditable () const
 Determines whether this packet can be altered without invalidating or otherwise upsetting any of its immediate children. More...
 
Cloning
NPacketclone (bool cloneDescendants=false, bool end=true) const
 Clones this packet (and possibly its descendants), assigns to it a suitable unused label and inserts the clone into the tree as a sibling of this packet. More...
 
File I/O
bool save (const char *filename, bool compressed=true) const
 Saves the subtree rooted at this packet to the given Regina data file, using Regina's native XML file format. More...
 
bool save (std::ostream &s, bool compressed=true) const
 Writes the subtree rooted at this packet to the given output stream, in the format of a Regina XML data file. More...
 
void writeXMLFile (std::ostream &out) const
 Writes the subtree rooted at this packet to the given output stream in Regina's native XML file format. More...
 
std::string internalID () const
 Returns a unique string ID that identifies this packet. More...
 

Static Public Member Functions

static NXMLPacketReaderxmlReader (NPacket *parent, NXMLTreeResolver &resolver)
 Returns a newly created XML element reader that will read the contents of a single XML packet element. More...
 

Public Attributes

REGINA_DEPRECATED typedef
ChangeEventSpan 
ChangeEventBlock
 A deprecated typedef for ChangeEventSpan. More...
 

Protected Member Functions

virtual NPacketinternalClonePacket (NPacket *parent) const =0
 Makes a newly allocated copy of this packet. More...
 
void writeXMLPacketTree (std::ostream &out) const
 Writes a chunk of XML containing the subtree with this packet as matriarch. More...
 
virtual void writeXMLPacketData (std::ostream &out) const =0
 Writes a chunk of XML containing the data for this packet only. More...
 

Detailed Description

Represents a packet of information that may be individually edited or operated upon.

Packets are stored in a dependency tree, where child packets fit within the context of (or otherwise cannot live without) parent packets.

When deriving classes from NPacket:

Note that external objects can listen for events on packets, such as when packets are changed or about to be destroyed. See the NPacketListener class notes for details.

Todo:
Feature: Provide automatic name selection/specification upon child packet insertion.

Member Typedef Documentation

The type of object being pointed to.

Constructor & Destructor Documentation

regina::NPacket::NPacket ( NPacket parent = 0)
inline

Constructor that inserts the new packet into the overall tree structure.

The new packet will be inserted as the last child of the given parent, and will be initialised with no children of its own.

Note that NPacket is an abstract class and cannot be instantiated directly.

Python:
Not present.
Parameters
parentthe parent beneath which to insert this packet, or 0 if this packet is to be the matriarch of a new tree.
virtual regina::NPacket::~NPacket ( )
virtual

Destructor that also orphans this packet and destroys all of its descendants.

Member Function Documentation

bool regina::NPacket::addTag ( const std::string &  tag)

Associates the given tag with this packet.

Each packet can have an arbitrary set of string tags associated with it. The tags are not used by this calculation engine; the feature is provided for whatever use a developer or user chooses to make of it.

Tags are case-sensitive. Tags associated with a single packet must be distinct, i.e., a particular tag cannot be associated more than once with the same packet.

Precondition
The given tag is not the empty string.
Parameters
tagthe tag to add.
Returns
true if the given tag was successfully added, or false if the given tag was already present beforehand.
std::string regina::NPacket::adornedLabel ( const std::string &  adornment) const

Returns the label of this packet adorned with the given string.

An adornment typically shows how a packet has been created and/or modified. For instance, the adornment argument might be "Filled", or "Summand #1".

The way in which the packet label is adorned depends upon the label itself (in particular, an empty packet label will be handled in a sensible way). The way in which the packet label is adorned is subject to change in future versions of Regina.

Note that, whilst this routine returns a modified version of the packet label, the label itself will not be permamently changed.

Parameters
adornmentthe string that will be used to adorn this packet label. The adornment should just be a piece of English, ideally beginning with an upper-case letter. It should not contain any surrounding punctuation such as brackets or a dash (this will be added automatically by this routine as required).
Returns
a copy of the packet label with the given adornment.
NPacket* regina::NPacket::clone ( bool  cloneDescendants = false,
bool  end = true 
) const

Clones this packet (and possibly its descendants), assigns to it a suitable unused label and inserts the clone into the tree as a sibling of this packet.

Note that any string tags associated with this packet will not be cloned.

If this packet has no parent in the tree structure, no clone will be created and 0 will be returned.

Parameters
cloneDescendantstrue if the descendants of this packet should also be cloned and inserted as descendants of the new packet. If this is passed as false (the default), only this packet will be cloned.
endtrue if the new packet should be inserted at the end of the parent's list of children (the default), or false if the new packet should be inserted as the sibling immediately after this packet.
Returns
the newly inserted packet, or 0 if this packet has no parent.
size_t regina::NPacket::countChildren ( ) const

Returns the number of immediate children of this packet.

Grandchildren and so on are not counted.

Returns
the number of immediate children.
size_t regina::NPacket::countDescendants ( ) const
inline

Returns the total number of descendants of this packet.

This includes children, grandchildren and so on. This packet is not included in the count.

Returns
the total number of descendants.
virtual bool regina::NPacket::dependsOnParent ( ) const
pure 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.

Implemented in regina::NSnapPeaTriangulation, regina::NNormalSurfaceList, regina::Triangulation< 3 >, regina::NScript, regina::Triangulation< int >, regina::Triangulation< dim >, regina::NAngleStructureList, regina::NNormalHypersurfaceList, regina::NPDF, regina::NSurfaceFilter, regina::Triangulation< 4 >, regina::Triangulation< 2 >, regina::NText, and regina::NContainer.

std::string regina::Output< NPacket , false >::detail ( ) const
inherited

Returns a detailed text representation of this object.

This text may span many lines, and should provide the user with all the information they could want. It should be human-readable, should not contain extremely long lines (which cause problems for users reading the output in a terminal), and should end with a final newline. There are no restrictions on the underlying character set.

Returns
a detailed text representation of this object.
NPacket* regina::NPacket::findPacketLabel ( const std::string &  label)

Finds the packet with the requested label in the tree or subtree for which this packet is matriarch.

Note that label comparisons are case sensitive.

Parameters
labelthe label to search for.
Returns
the packet with the requested label, or 0 if there is no such packet.
const NPacket* regina::NPacket::findPacketLabel ( const std::string &  label) const

Finds the packet with the requested label in the tree or subtree for which this packet is matriarch.

Note that label comparisons are case sensitive.

Parameters
labelthe label to search for.
Returns
the packet with the requested label, or 0 if there is no such packet.
NPacket * regina::NPacket::firstChild ( ) const
inline

Determines the first child of this packet in the tree structure.

This routine takes small constant time.

Returns
the first child packet, or 0 if there is none.
NPacket* regina::NPacket::firstTreePacket ( const std::string &  type)

Finds the first packet of the requested type in a complete depth-first iteration of the tree structure.

Note that this packet must be the matriarch of the entire tree.

A parent packet is always reached before its children. The tree matriarch will be the first packet visited in a complete depth-first iteration.

Parameters
typethe type of packet to search for, as returned by typeName(). Note that string comparisons are case sensitive.
Returns
the first such packet, or 0 if there are no packets of the requested type.
const NPacket* regina::NPacket::firstTreePacket ( const std::string &  type) const

Finds the first packet of the requested type in a complete depth-first iteration of the tree structure.

Note that this packet must be the matriarch of the entire tree.

A parent packet is always reached before its children. The tree matriarch will be the first packet visited in a complete depth-first iteration.

Parameters
typethe type of packet to search for, as returned by typeName(). Note that string comparisons are case sensitive.
Returns
the first such packet, or 0 if there are no packets of the requested type.
std::string regina::NPacket::fullName ( ) const

Returns a descriptive text string for the packet.

The string is of the form label (packet-type).

The packet label will be adjusted for human-readable output according to the behaviour of humanLabel().

Returns
the descriptive text string.
NPacket * regina::NPacket::getFirstTreeChild ( ) const
inline

Deprecated routine that determines the first child of this packet in the tree structure.

Deprecated:
This routine has been renamed as firstChild(). See the firstChild() documentation for further details.
std::string regina::NPacket::getFullName ( ) const
inline

Deprecated routine that returns a descriptive text string for the packet.

Deprecated:
This routine has been renamed to fullName(). See the fullName() documentation for further details.
std::string regina::NPacket::getHumanLabel ( ) const
inline

Deprecated routine that returns the label associated with this individual packet, adjusted if necessary for human-readable output.

Deprecated:
This routine has been renamed to humanLabel(). See the humanLabel() documentation for further details.
NPacket * regina::NPacket::getLastTreeChild ( ) const
inline

Deprecated routine that determines the last child of this packet in the tree structure.

Deprecated:
This routine has been renamed as lastChild(). See the lastChild() documentation for further details.
NPacket * regina::NPacket::getNextTreeSibling ( ) const
inline

Deprecated routine that determines the next sibling of this packet in the tree structure.

Deprecated:
This routine has been renamed as nextSibling(). See the nextSibling() documentation for further details.
size_t regina::NPacket::getNumberOfChildren ( ) const
inline

Deprecated routine that returns the number of immediate children of this packet.

Deprecated:
This routine has been renamed to countChildren(). See the countChildren() documentation for further details.
size_t regina::NPacket::getNumberOfDescendants ( ) const
inline

Deprecated routine that returns the total number of descendants of this packet.

Deprecated:
This routine has been renamed to countDescendants(). See the countDescendants() documentation for further details.
const std::string & regina::NPacket::getPacketLabel ( ) const
inline

Deprecated routine that returns the label associated with this individual packet.

Deprecated:
This routine has been renamed to label(). See the label() documentation for further information.
PacketType regina::NPacket::getPacketType ( ) const
inline

Deprecated routine that returns the unique integer ID representing this type of packet.

Deprecated:
This routine has been renamed to type(). See the type() documentation for further details.
std::string regina::NPacket::getPacketTypeName ( ) const
inline

Deprecated routine that returns an English name for this type of packet.

Deprecated:
This routine has been renamed to typeName(). See the typeName() documentation for further details.
NPacket * regina::NPacket::getPrevTreeSibling ( ) const
inline

Deprecated routine that determines the previous sibling of this packet in the tree structure.

Deprecated:
This routine has been renamed as prevSibling(). See the prevSibling() documentation for further details.
const std::set< std::string > & regina::NPacket::getTags ( ) const
inline

Deprecated routine that returns the set of all tags associated with this packet.

Deprecated:
This routine has been renamed to tags(). See the tags() documentation for further information.
size_t regina::NPacket::getTotalTreeSize ( ) const
inline

Deprecated routine that returns the total number of packets in the tree or subtree for which this packet is matriarch.

Deprecated:
This routine has been renamed to totalTreeSize(). See the totalTreeSize() documentation for further details.
NPacket * regina::NPacket::getTreeMatriarch ( ) const
inline

Deprecated routine that determines the root of the tree to which this packet belongs.

Deprecated:
This routine has been renamed as root(). See the root() documentation for further details.
NPacket * regina::NPacket::getTreeParent ( ) const
inline

Deprecated routine that determines the parent packet in the tree structure.

Deprecated:
This routine has been renamed as parent(). See the parent() documentation for further details.
bool regina::NPacket::hasOwner ( ) const
inline

Indicates whether some other object in the calculation engine is responsible for ultimately destroying this object.

For packets, this returns true if and only if this packet has a parent in the packet tree (i.e., is not the root).

Returns
true if and only if some other object owns this object.
bool regina::NPacket::hasTag ( const std::string &  tag) const
inline

Determines whether this packet has the given associated tag.

Each packet can have an arbitrary set of string tags associated with it. The tags are not used by this calculation engine; the feature is provided for whatever use a developer or user chooses to make of it.

Tags are case-sensitive. Tags associated with a single packet must be distinct, i.e., a particular tag cannot be associated more than once with the same packet.

Parameters
tagthe tag to search for.
Returns
true if the given tag is found, false otherwise.
bool regina::NPacket::hasTags ( ) const
inline

Determines whether this packet has any associated tags at all.

Each packet can have an arbitrary set of string tags associated with it. The tags are not used by this calculation engine; the feature is provided for whatever use a developer or user chooses to make of it.

Tags are case-sensitive. Tags associated with a single packet must be distinct, i.e., a particular tag cannot be associated more than once with the same packet.

Returns
true if this packet has any tags, false otherwise.
std::string regina::NPacket::humanLabel ( ) const
inline

Returns the label associated with this individual packet, adjusted if necessary for human-readable output.

In particular, if the packet has no label assigned then this routine will return "(no label)", not the empty string.

Warning
The method by which this routine adjusts packet labels is subject to change in future versions of Regina.
Returns
this individual packet's label.
void regina::NPacket::insertChildAfter ( NPacket newChild,
NPacket prevChild 
)

Inserts the given packet as a child of this packet at the given location in this packet's child list.

This routine takes small constant time.

Precondition
Parameter newChild has no parent packet.
Parameter prevChild is already a child of this packet.
This packet is not a descendant of newChild.
Python:
Since this packet takes ownership of the given child packet, the python object containing the given child packet becomes a null object and should no longer be used. See reparent() for a way of avoiding these problems in some cases.
Parameters
newChildthe child to insert.
prevChildthe preexisting child of this packet after which newChild will be inserted, or 0 if newChild is to be the first child of this packet.
void regina::NPacket::insertChildFirst ( NPacket child)

Inserts the given packet as the first child of this packet.

This routine takes small constant time.

Precondition
The given child has no parent packet.
This packet is not a descendant of the given child.
Python:
Since this packet takes ownership of the given child packet, the python object containing the given child packet becomes a null object and should no longer be used. See reparent() for a way of avoiding these problems in some cases.
Parameters
childthe child to insert.
void regina::NPacket::insertChildLast ( NPacket child)

Inserts the given packet as the last child of this packet.

This routine takes small constant time.

Precondition
The given child has no parent packet.
This packet is not a descendant of the given child.
Python:
Since this packet takes ownership of the given child packet, the python object containing the given child packet becomes a null object and should no longer be used. See reparent() for a way of avoiding these problems in some cases.
Parameters
childthe child to insert.
virtual NPacket* regina::NPacket::internalClonePacket ( NPacket parent) const
protectedpure 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
parentthe parent beneath which the new packet will eventually be inserted.
Returns
the newly allocated packet.

Implemented in regina::Triangulation< 3 >, regina::NSnapPeaTriangulation, regina::NNormalSurfaceList, regina::Triangulation< 4 >, regina::Triangulation< 2 >, regina::NNormalHypersurfaceList, regina::NAngleStructureList, regina::NScript, regina::Triangulation< int >, regina::Triangulation< dim >, regina::NSurfaceFilterProperties, regina::NSurfaceFilter, regina::NPDF, regina::NText, regina::NSurfaceFilterCombination, and regina::NContainer.

std::string regina::NPacket::internalID ( ) const

Returns a unique string ID that identifies this packet.

The user has no control over this ID, and it is not human readable. It is guaranteed to remain fixed throughout the lifetime of the program for a given packet, and it is guaranteed not to clash with the ID of any other packet.

If you change the contents of a packet, its ID will not change.

If you clone a packet, the new clone will receive a different ID. If you save and then load a packet to/from file, the ID will change. These behaviours are necessary to ensure that IDs remain unique (since, for instance, you could load several copies of the same data file into memory simultaneously).

The ID is implemented as an encoding of the underlying C++ pointer. This encoding is subject to change in later versions of Regina.

Returns
a unique ID that identifies this packet.
bool regina::NPacket::isGrandparentOf ( const NPacket descendant) const

Determines if this packet is equal to or an ancestor of the given packet in the tree structure.

Parameters
descendantthe other packet whose relationships we are examining.
Returns
true if and only if this packet is equal to or an ancestor of descendant.
bool regina::NPacket::isListening ( NPacketListener listener)
inline

Determines whether the given packet listener is currently listening for events on this packet.

See the NPacketListener class notes for details.

Python:
Not present.
Parameters
listenerthe listener to search for.
Returns
true if the given listener is currently registered with this packet, or false otherwise.
bool regina::NPacket::isPacketEditable ( ) const

Determines whether this packet can be altered without invalidating or otherwise upsetting any of its immediate children.

Descendants further down the packet tree are not (and should not need to be) considered.

Returns
true if and only if this packet may be edited.
const std::string & regina::NPacket::label ( ) const
inline

Returns the label associated with this individual packet.

An example is MyTriangulation.

Returns
this individual packet's label.
NPacket * regina::NPacket::lastChild ( ) const
inline

Determines the last child of this packet in the tree structure.

This routine takes small constant time.

Returns
the last child packet, or 0 if there is none.
unsigned regina::NPacket::levelsDownTo ( const NPacket descendant) const

Counts the number of levels between this packet and its given descendant in the tree structure.

If descendant is this packet, the number of levels is zero.

Precondition
This packet is equal to descendant, or can be obtained from descendant using only child-to-parent steps.
Parameters
descendantthe packet whose relationship with this packet we are examining.
Returns
the number of levels difference.
unsigned regina::NPacket::levelsUpTo ( const NPacket ancestor) const
inline

Counts the number of levels between this packet and its given ancestor in the tree structure.

If ancestor is this packet, the number of levels is zero.

Precondition
This packet is equal to ancestor, or can be obtained from ancestor using only parent-to-child steps.
Parameters
ancestorthe packet whose relationship with this packet we are examining.
Returns
the number of levels difference.
bool regina::NPacket::listen ( NPacketListener listener)

Registers the given packet listener to listen for events on this packet.

See the NPacketListener class notes for details.

Python:
Not present.
Parameters
listenerthe listener to register.
Returns
true if the given listener was successfully registered, or false if the given listener was already registered beforehand.
void regina::NPacket::makeOrphan ( )

Cuts this packet away from its parent in the tree structure and instead makes it matriarch of its own tree.

The tree information for both this packet and its parent will be updated.

This routine takes small constant time.

Precondition
This packet has a parent.
This packet does not depend on its parent; see dependsOnParent() for details.
Python:
After makeOrphan() is called, this packet will become the root of a new packet tree that is owned by Python. In particular, if you call makeOrphan() and then delete all Python references to this packet, the entire packet subtree will be automatically destroyed.
REGINA_DEPRECATED std::string regina::NPacket::makeUniqueLabel ( const std::string &  base) const

Returns a new label that cannot be found anywhere in the entire tree structure.

This packet need not be the tree matriarch; this routine will search the entire tree to which this packet belongs.

The new label will consist of the given base, possibly followed by a space and a number.

Deprecated:
This routine is deprecated, since (as of Regina 4.95) packet labels in a data file are no longer required to be distinct.
Parameters
basea string upon which the new label will be based.
Returns
a new unique label.
REGINA_DEPRECATED bool regina::NPacket::makeUniqueLabels ( NPacket reference)

Ensures that all packet labels in both this and the given packet tree combined are distinct.

If two packets have the same label, one will be renamed by adding a space and a number.

Packets in the given packet tree will be given priority over the labels; that is, if a packet in this tree has the same label as a packet in the given tree, it will be the packet in this tree that is renamed.

The given packet tree may be null, in which case only this tree will be examined.

Deprecated:
This routine is deprecated, since (as of Regina 4.95) packet labels in a data file are no longer required to be distinct.
Precondition
This and the given packet belong to different packet trees, and are each matriarchs in their respective trees.
Parameters
referencethe packet tree with which to compare this tree.
Returns
true if and only if any of the packets were relabelled.
void regina::NPacket::moveDown ( unsigned  steps = 1)

Moves this packet the given number of steps towards the end of its sibling list.

If the number of steps is larger than the greatest possible movement, the packet will be moved to the very end of its sibling list.

This routine takes time proportional to the number of steps.

Precondition
The given number of steps is strictly positive.
void regina::NPacket::moveToFirst ( )

Moves this packet to be the first in its sibling list.

This routine takes small constant time.

void regina::NPacket::moveToLast ( )

Moves this packet to be the last in its sibling list.

This routine takes small constant time.

void regina::NPacket::moveUp ( unsigned  steps = 1)

Moves this packet the given number of steps towards the beginning of its sibling list.

If the number of steps is larger than the greatest possible movement, the packet will be moved to the very beginning of its sibling list.

This routine takes time proportional to the number of steps.

Precondition
The given number of steps is strictly positive.
NPacket * regina::NPacket::nextSibling ( ) const
inline

Determines the next sibling of this packet in the tree structure.

This is the child of the parent that follows this packet.

This routine takes small constant time.

Returns
the next sibling of this packet, or 0 if there is none.
NPacket* regina::NPacket::nextTreePacket ( )

Finds the next packet after this in a complete depth-first iteration of the entire tree structure to which this packet belongs.

Note that this packet need not be the tree matriarch.

A parent packet is always reached before its children. The tree matriarch will be the first packet visited in a complete depth-first iteration.

Returns
the next packet, or 0 if this is the last packet in such an iteration.
const NPacket* regina::NPacket::nextTreePacket ( ) const

Finds the next packet after this in a complete depth-first iteration of the entire tree structure to which this packet belongs.

Note that this packet need not be the tree matriarch.

A parent packet is always reached before its children. The tree matriarch will be the first packet visited in a complete depth-first iteration.

Returns
the next packet, or 0 if this is the last packet in such an iteration.
NPacket* regina::NPacket::nextTreePacket ( const std::string &  type)

Finds the next packet after this of the requested type in a complete depth-first iteration of the entire tree structure.

Note that this packet need not be the tree matriarch. The order of tree searching is described in firstTreePacket().

Parameters
typethe type of packet to search for, as returned by typeName(). Note that string comparisons are case sensitive.
Returns
the next such packet, or 0 if this is the last packet of the requested type in such an iteration.
const NPacket* regina::NPacket::nextTreePacket ( const std::string &  type) const

Finds the next packet after this of the requested type in a complete depth-first iteration of the entire tree structure.

Note that this packet need not be the tree matriarch. The order of tree searching is described in firstTreePacket().

Parameters
typethe type of packet to search for, as returned by typeName(). Note that string comparisons are case sensitive.
Returns
the next such packet, or 0 if this is the last packet of the requested type in such an iteration.
NPacket * regina::NPacket::parent ( ) const
inline

Determines the parent packet in the tree structure.

This routine takes small constant time.

Returns
the parent packet, or 0 if there is none.
NPacket * regina::NPacket::prevSibling ( ) const
inline

Determines the previous sibling of this packet in the tree structure.

This is the child of the parent that precedes this packet.

This routine takes small constant time.

Returns
the previous sibling of this packet, or 0 if there is none.
void regina::NPacket::removeAllTags ( )

Removes all associated tags from this packet.

Each packet can have an arbitrary set of string tags associated with it. The tags are not used by this calculation engine; the feature is provided for whatever use a developer or user chooses to make of it.

Tags are case-sensitive. Tags associated with a single packet must be distinct, i.e., a particular tag cannot be associated more than once with the same packet.

bool regina::NPacket::removeTag ( const std::string &  tag)

Removes the association of the given tag with this packet.

Each packet can have an arbitrary set of string tags associated with it. The tags are not used by this calculation engine; the feature is provided for whatever use a developer or user chooses to make of it.

Tags are case-sensitive. Tags associated with a single packet must be distinct, i.e., a particular tag cannot be associated more than once with the same packet.

Parameters
tagthe tag to remove.
Returns
true if the given tag was removed, or false if the given tag was not actually associated with this packet.
void regina::NPacket::reparent ( NPacket newParent,
bool  first = false 
)

Cuts this packet away from its parent in the tree structure, and inserts it as a child of the given packet instead.

This routine is essentially a combination of makeOrphan() followed by either insertChildFirst() or insertChildLast().

This routine takes small constant time. It is safe to use regardless of whether this packet has a parent or not.

If you wish to reparent all of the children of a given packet, see transferChildren() instead.

Precondition
This packet does not depend on its parent; see dependsOnParent() for details.
The given parent is not a descendant of this packet.
Python:
This routine is much simpler than combinations of makeOrphan() and insertChildFirst() / insertChildLast(), since there are no unpleasant ownership issues to deal with. However, if this packet currently has no parent then the ownership issues are unavoidable; in this case reparent() will do nothing, and one of the insertChild...() routines must be used instead.
Parameters
newParentthe new parent of this packet, i.e., the packet beneath which this packet will be inserted.
firsttrue if this packet should be inserted as the first child of the given parent, or false (the default) if it should be inserted as the last child.
NPacket* regina::NPacket::root ( ) const

Determines the root of the tree to which this packet belongs.

Returns
the matriarch of the packet tree.
bool regina::NPacket::save ( const char *  filename,
bool  compressed = true 
) const

Saves the subtree rooted at this packet to the given Regina data file, using Regina's native XML file format.

The XML file may be optionally compressed (Regina can happily read both compressed and uncompressed XML).

This is the preferred way of saving a Regina data file. Typically this will be called from the root of the packet tree, which will save the entire packet tree to file.

Precondition
The given packet does not depend on its parent.
Internationalisation:
This routine makes no assumptions about the character encoding used in the given file name, and simply passes it through unchanged to low-level C/C++ file I/O routines. The contents of the file will be written using UTF-8.
Parameters
filenamethe pathname of the file to write to.
compressedtrue if the XML data should be compressed, or false if it should be written as plain text.
Returns
true if and only if the file was successfully written.
bool regina::NPacket::save ( std::ostream &  s,
bool  compressed = true 
) const

Writes the subtree rooted at this packet to the given output stream, in the format of a Regina XML data file.

The data file may be optionally compressed (Regina can happily read both compressed and uncompressed XML).

Typically this will be called from the root of the packet tree, which will write the entire packet tree to the given output stream.

Precondition
The given stream is open for writing.
The given packet does not depend on its parent.
Python:
Not present.
Parameters
sthe output stream to which to write.
compressedtrue if the XML data should be compressed, or false if it should be written as plain text.
Returns
true if and only if the data was successfully written.
void regina::NPacket::setLabel ( const std::string &  label)

Sets the label associated with this individual packet.

Parameters
labelthe new label to give this packet.
void regina::NPacket::setPacketLabel ( const std::string &  label)
inline

Deprecated routine that sets the label associated with this individual packet.

Deprecated:
This routine has been renamed to setLabel(). See the setLabel() documentation for further details.
void regina::NPacket::sortChildren ( )

Sorts the immediate children of this packet according to their packet labels.

Note that this routine is not recursive (for instance, grandchildren will not be sorted within each child packet).

This routine takes quadratic time in the number of immediate children (and it's slow quadratic at that).

std::string regina::Output< NPacket , false >::str ( ) const
inherited

Returns a short text representation of this object.

This text should be human-readable, should fit on a single line, and should not end with a newline. Where possible, it should use plain ASCII characters.

Python:
In addition to str(), this is also used as the Python "stringification" function __str__().
Returns
a short text representation of this object.
void regina::NPacket::swapWithNextSibling ( )

Swaps this packet with its next sibling in the sequence of children beneath their common parent packet.

Calling this routine is equivalent to calling moveDown().

This routine takes small constant time.

If this packet has no next sibling then this routine does nothing.

const std::set< std::string > & regina::NPacket::tags ( ) const
inline

Returns the set of all tags associated with this packet.

Each packet can have an arbitrary set of string tags associated with it. The tags are not used by this calculation engine; the feature is provided for whatever use a developer or user chooses to make of it.

Tags are case-sensitive. Tags associated with a single packet must be distinct, i.e., a particular tag cannot be associated more than once with the same packet.

Python:
This routine returns a python list of strings.
Returns
the set of all tags associated with this packet.
REGINA_DEPRECATED std::string regina::Output< NPacket , false >::toString ( ) const
inherited

A deprecated alias for str().

Deprecated:
This routine has (at long last) been deprecated; use the simpler-to-type str() instead.
Returns
a short text representation of this object.
REGINA_DEPRECATED std::string regina::Output< NPacket , false >::toStringLong ( ) const
inherited

A deprecated alias for detail().

Deprecated:
This routine has (at long last) been deprecated; use the simpler-to-type detail() instead.
Returns
a long text representation of this object.
size_t regina::NPacket::totalTreeSize ( ) const

Determines the total number of packets in the tree or subtree for which this packet is matriarch.

This packet is included in the count.

Returns
the total tree or subtree size.
void regina::NPacket::transferChildren ( NPacket newParent)

Cuts all of this packet's children out of the packet tree, and reinserts them as children of the given packet instead.

The children of this packet will be appended to the end of the new parent's child list, in the same order as they were previously.

This is equivalent to calling reparent() on each child, but should be somewhat faster if there are many children to move.

Precondition
None of the children of this packet depend on their current parent; see dependsOnParent() for details.
The given parent is not a descendant of this packet.
Parameters
newParentthe new parent beneath which the children will be inserted.
virtual PacketType regina::NPacket::type ( ) const
pure virtual

Returns the unique integer ID representing this type of packet.

This is the same for all packets of this class.

Returns
the packet type ID.
virtual std::string regina::NPacket::typeName ( ) const
pure virtual

Returns an English name for this type of packet.

An example is NTriangulation. This is the same for all packets of this class.

Returns
the packet type name.
bool regina::NPacket::unlisten ( NPacketListener listener)

Unregisters the given packet listener so that it no longer listens for events on this packet.

See the NPacketListener class notes for details.

Python:
Not present.
Parameters
listenerthe listener to unregister.
Returns
true if the given listener was successfully unregistered, or false if the given listener was not registered in the first place.
std::string regina::Output< NPacket , false >::utf8 ( ) const
inherited

Returns a short text representation of this object using unicode characters.

Like str(), this text should be human-readable, should fit on a single line, and should not end with a newline. In addition, it may use unicode characters to make the output more pleasant to read. This string will be encoded in UTF-8.

Returns
a short text representation of this object.
void regina::NPacket::writeTextLong ( std::ostream &  out) const
inlinevirtual

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

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

Python:
Not present.
Parameters
outthe output stream to which to write.

Reimplemented in regina::NSnapPeaTriangulation, regina::NNormalSurfaceList, regina::Triangulation< 3 >, regina::NSurfaceFilterProperties, regina::NScript, regina::Triangulation< int >, regina::Triangulation< dim >, regina::NAngleStructureList, regina::NNormalHypersurfaceList, regina::Triangulation< 4 >, regina::Triangulation< 2 >, regina::NText, and regina::NSurfaceFilterCombination.

virtual void regina::NPacket::writeTextShort ( std::ostream &  out) const
pure virtual

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

This must be reimplemented by subclasses.

Python:
Not present.
Parameters
outthe output stream to which to write.

Implemented in regina::NSnapPeaTriangulation, regina::NNormalSurfaceList, regina::Triangulation< 3 >, regina::NScript, regina::Triangulation< int >, regina::Triangulation< dim >, regina::NAngleStructureList, regina::NNormalHypersurfaceList, regina::NPDF, regina::NSurfaceFilter, regina::Triangulation< 4 >, regina::Triangulation< 2 >, regina::NText, and regina::NContainer.

void regina::NPacket::writeXMLFile ( std::ostream &  out) const

Writes the subtree rooted at this packet to the given output stream in Regina's native XML file format.

Ths is similar to calling save(), except that (i) the user has a more flexible choice of output stream, and (ii) the XML will always be written in plain text (i.e., it will not be compressed).

If you simply wish to save your data to a file on the filesystem, you should call save() instead.

Typically this will be called from the root of the packet tree, which will write the entire packet tree to the output stream.

The output from this routine cannot be used as a piece of an XML file; it must be the entire XML file. For a piece of an XML file, see routine writeXMLPacketTree() instead.

Precondition
This packet does not depend upon its parent.
Python:
Not present.
Parameters
outthe output stream to which the XML data file should be written.
virtual void regina::NPacket::writeXMLPacketData ( std::ostream &  out) const
protectedpure 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
outthe output stream to which the XML should be written.

Implemented in regina::Triangulation< 3 >, regina::NSnapPeaTriangulation, regina::NNormalSurfaceList, regina::Triangulation< 4 >, regina::Triangulation< 2 >, regina::NNormalHypersurfaceList, regina::NAngleStructureList, regina::NScript, regina::Triangulation< int >, regina::Triangulation< dim >, regina::NSurfaceFilter, regina::NPDF, regina::NText, and regina::NContainer.

void regina::NPacket::writeXMLPacketTree ( std::ostream &  out) const
protected

Writes a chunk of XML containing the subtree with this packet as matriarch.

This is the preferred way of writing a packet tree to file.

The output from this routine is only a piece of XML; it should not be used as a complete XML file. For a complete XML file, see routine writeXMLFile() instead.

Parameters
outthe output stream to which the XML should be written.
static NXMLPacketReader* regina::NPacket::xmlReader ( NPacket parent,
NXMLTreeResolver resolver 
)
static

Returns a newly created XML element reader that will read the contents of a single XML packet element.

You may assume that the packet to be read is of the same type as the class in which you are implementing this routine.

The XML element reader should read exactly what writeXMLPacketData() writes, and vice versa.

parent represents the packet which will become the new packet's parent in the tree structure, and may be assumed to have already been read from the file. This information is for reference only, and does not need to be used. The XML element reader can either insert or not insert the new packet beneath parent in the tree structure as it pleases. Note however that parent will be 0 if the new packet is to become a tree matriarch.

If the new packet needs to store pointers to other packets that might not have been read yet (such as a script packet that needs pointers to its variables), then it should queue a new NXMLTreeResolutionTask to the given NXMLTreeResolver. After the complete data file has been read, NXMLTreeResolver::resolve() will run all of its queued tasks, at which point the new packet can resolve any dangling references.

This routine is not actually provided for NPacket itself, but must be declared and implemented for every packet subclass that will be instantiated.

Python:
Not present.
Parameters
parentthe packet which will become the new packet's parent in the tree structure, or 0 if the new packet is to be tree matriarch.
resolverthe master resolver that will be used to fix dangling packet references after the entire XML file has been read.
Returns
the newly created XML element reader.

Member Data Documentation

REGINA_DEPRECATED typedef ChangeEventSpan regina::NPacket::ChangeEventBlock

A deprecated typedef for ChangeEventSpan.

Deprecated:
ChangeEventSpan is now the correct way to fire a "packet changed" event. The class ChangeEventSpan is similar to the old ChangeEventBlock except that it fires both NPacketListener::packetToBeChanged() and NPacketListener::packetWasChanged() (on construction and destruction respectively), and the old boolean argument fireOnDestruction is gone (events are now fired always).

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

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