regina::BanConstraintBase Class Reference
Vertex Enumeration

A base class for additional banning and marking constraints that we can place on tree traversal algorithms. More...

`#include <enumerate/treeconstraint.h>`

Inheritance diagram for regina::BanConstraintBase:

## Protected Member Functions

| BanConstraintBase (const Triangulation< 3 > *tri, int coords)
| Constructs and initialises the banned_ and marked_ arrays to be entirely `false`. More...
| ~BanConstraintBase ()
| Destroys this object and all associated data. More...
template<class LPConstraint , typename IntType >
void | enforceBans (LPData< LPConstraint, IntType > &lp) const
| Enforces all bans described by this class in the given tableaux. More...
void | init (const int *columnPerm)
| Identifies which coordinates to ban and mark, and records the corresponding tableaux columns in the banned_ and marked_ arrays respectively. More...

## Static Protected Member Functions

static bool | supported (NormalCoords coords)
| Indicates whether the given coordinate system is supported by this constraint class. More...

## Protected Attributes

const Triangulation< 3 > * | tri_
| The triangulation with which we are working. More...
int | coords_
| The normal or almost normal coordinate system in which we are working. More...
bool * | banned_
| Indicates which columns of a tableaux correspond to banned coordinates (e.g., banned normal disc types). More...
bool * | marked_
| Indicates which columns of a tableaux correspond to marked coordinates (e.g., marked normal disc types). More...

## Detailed Description

A base class for additional banning and marking constraints that we can place on tree traversal algorithms.

This is used with TreeEnumeration, TreeSingleSoln and related algorithms for enumerating and locating normal surfaces and angle structures in a 3-manifold triangulation.

This class adds constraints of two types:

- Banning constraints, which ensure that certain coordinates are set to zero;
- Marking constraints, which are more flexible and can be used in different ways by different algorithms.

All of these constraints operate only on normal or angle structure coordinates in the underlying tableaux (and in particular not the additional variables introduced by additional linear constraints, as described by LPConstraintBase and its subclasses).

Currently marking is used in the following ways:

- The TreeEnumeration and TautEnumeration algorithms do not use marking at all.
- In the TreeSingleSoln algorithm, marking affects what is considered a non-trivial normal surface. Normally, a non-trivial surface is defined to be one in which some triangle coordinate is zero. With marking, a non-trivial surface is redefined to be one in which some unmarked triangle coordinate is zero. In other words, marked triangle types are effectively ignored when determining whether a surface is non-trivial or not.

At present, marking is not used at all for quadrilateral coordinates or angle structures. However, marking is a very new feature, and this concept may be expanded in future versions of Regina.

This class does not record disc types in the order of their normal or angle structure coordinates; instead it records them in the order of their columns in a tableaux for linear programming (as used in LPInitialTableaux). This means that there is a little more work required in setting up the initial lists of banned and marked columns, but then these lists are easy to use on the fly during tree traversal algorithms.

This base class provides limited functionality (as documented below). Subclasses must implement a constructor (which, like this base class, takes a triangulation and a coordinate system), must implement init() which determines which coordinates are banned and/or marked, and must implement supported(), which indicates which normal or angle structure coordinate system this constraint class can work with.

Warning
  The API for this class has not yet been finalised. This means that the class interface may change in new versions of Regina, without maintaining backward compatibility. If you use this class directly in your own code, please watch the detailed changelogs upon new releases to see if you need to make changes to your code.

Python:\n Not present.

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

- enumerate/treeconstraint.h

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