Regina Calculation Engine
Namespaces | Classes | Macros | Functions
Engine Structure

Overall structure of the calculation engine. More...

Namespaces

namespace  regina
 Contains the entire Regina calculation engine.
 

Classes

struct  regina::Output< T, supportsUtf8 >
 A common base class for objects that write human-readable text output. More...
 
struct  regina::ShortOutput< T, supportsUtf8 >
 A common base class for objects that provide short text output only. More...
 
struct  regina::OutputBase< T >
 Provides a typedef to help identify where in the class hierarchy the output functions T::str() and T::detail() are implemented. More...
 

Macros

#define REGINA_INLINE_REQUIRED   inline
 A synonym for inline, used in some special cases to avoid noisy warnings under Windows. More...
 
#define REGINA_API
 All non-templated, non-static functions, classes and global variables that are part of Regina's public interface must be declared with REGINA_API. More...
 
#define REGINA_LOCAL
 Classes and functions that are local to the current compilation unit and should not be publicly exported may be declared with REGINA_LOCAL. More...
 
#define REGINA_DEPRECATED
 Any deprecated class, function, typedef or constant in Regina's API must be declared with REGINA_DEPRECATED. More...
 
#define REGINA_DEPRECATED_ENUM
 Any deprecated enumeration constant in Regina's API must be declared with REGINA_DEPRECATED_ENUM. More...
 

Functions

REGINA_API const char * regina::versionString ()
 Returns the full version number of this calculation engine. More...
 
REGINA_DEPRECATED REGINA_API
const char * 
regina::getVersionString ()
 Deprecated routine that returns the full version number of this calculation engine. More...
 
REGINA_API int regina::versionMajor ()
 Returns the major version number of this calculation engine. More...
 
REGINA_DEPRECATED REGINA_API int regina::getVersionMajor ()
 Deprecated routine that returns the major version number of this calculation engine. More...
 
REGINA_API int regina::versionMinor ()
 Returns the minor version number of this calculation engine. More...
 
REGINA_DEPRECATED REGINA_API int regina::getVersionMinor ()
 Deprecated routine that returns the minor version number of this calculation engine. More...
 
REGINA_API bool regina::versionUsesUTF8 (const char *version)
 Did the given version of Regina consistently use UTF-8 in its data files? More...
 
REGINA_API const char * regina::versionSnapPy ()
 Returns the version of SnapPy whose underlying SnapPea kernel is built into Regina. More...
 
REGINA_API const char * regina::versionSnapPea ()
 An alias for versionSnapPy(), which returns the version of SnapPy whose underlying SnapPea kernel is built into Regina. More...
 
REGINA_API bool regina::hasInt128 ()
 Does this particular build of Regina support native 128-bit arithmetic? More...
 
REGINA_API int regina::testEngine (int value)
 Tests to see if an interface can successfully communicate with the underlying C++ calculation engine. More...
 
template<class T , bool supportsUtf8>
std::ostream & regina::operator<< (std::ostream &out, const Output< T, supportsUtf8 > &object)
 Writes the short text representation of the given object to the given output stream. More...
 

Detailed Description

Overall structure of the calculation engine.

Macro Definition Documentation

#define REGINA_API

All non-templated, non-static functions, classes and global variables that are part of Regina's public interface must be declared with REGINA_API.

Template classes or functions should not be declared with REGINA_API, but any explicit instantiations should. Global variables must also be declared with extern, as per normal.

This is required for DLL linking under Windows, and also to avoid breakage with optimisations such as gcc's -fvisibility=hidden.

Note: When building the Regina calculation engine shared library, REGINA_DLL_EXPORTS must be defined (this ensures that API symbols are marked for export). When importing (using) this library, REGINA_DLL_EXPORTS must not be defined (this ensures that API symbols are marked for import instead).

#define REGINA_DEPRECATED

Any deprecated class, function, typedef or constant in Regina's API must be declared with REGINA_DEPRECATED.

If the user passes the compile flag -DREGINA_STRICT, then this macro attempts to declare the deprecated attribute. If it cannot work out how to declare such an attribute under the current compiler, then this macro expands to nothing instead.

If a function or constant is declared as both REGINA_API and REGINA_DEPRECATED, the REGINA_DEPRECATED attribute should be listed first.

Conversely, if a class or struct is declared as both REGINA_API and REGINA_DEPRECATED, the REGINA_API attribute should be listed first.

If/when Regina moves to C++14, this macro can be replaced with [[deprecated]] instead.

#define REGINA_DEPRECATED_ENUM

Any deprecated enumeration constant in Regina's API must be declared with REGINA_DEPRECATED_ENUM.

This macro plays a similar role to REGINA_DEPRECATED. It is defined separately because some compilers support the deprecated attribute on classes and functions, but not on enumeration constants.

See the REGINA_DEPRECATED macro for further details.

#define REGINA_INLINE_REQUIRED   inline

A synonym for inline, used in some special cases to avoid noisy warnings under Windows.

Typically this macro is used with inline functions of some class or struct that are called by other inline function(s).

Such a function should:

  • be declared as REGINA_INLINE_REQUIRED at the point where the function is first declared inside the class definition;
  • be declared again as inline when the function is later defined (as Regina does with all its inline functions).

The reason for using REGINA_INLINE_REQUIRED in such situations is to avoid noisy warnings about dllimport attributes under Windows. The reason for using this particular macro instead of just the keyword inline is to remind the Regina developers not to remove it.

This is not the first, and will surely not be the last, piece of code bloat that Windows forces upon us. Sigh.

#define REGINA_LOCAL

Classes and functions that are local to the current compilation unit and should not be publicly exported may be declared with REGINA_LOCAL.

Use of this macro is optional.

Function Documentation

REGINA_DEPRECATED REGINA_API int regina::getVersionMajor ( )

Deprecated routine that returns the major version number of this calculation engine.

Deprecated:
Simply call versionMajor() instead.
REGINA_DEPRECATED REGINA_API int regina::getVersionMinor ( )

Deprecated routine that returns the minor version number of this calculation engine.

Deprecated:
Simply call versionMinor() instead.
REGINA_DEPRECATED REGINA_API const char* regina::getVersionString ( )

Deprecated routine that returns the full version number of this calculation engine.

Deprecated:
Simply call versionString() instead.
REGINA_API bool regina::hasInt128 ( )

Does this particular build of Regina support native 128-bit arithmetic?

On those platforms that do support native 128-bit arithmetic, some expensive algorithms (in particular for normal surface enumeration) are optimised to run significantly faster in some cases.

Returns
true if and only if this build supports native 128-bit arithmetic.
template<class T , bool supportsUtf8>
std::ostream& regina::operator<< ( std::ostream &  out,
const Output< T, supportsUtf8 > &  object 
)

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

This is equivalent to calling out << object.str().

Parameters
outthe output stream to which to write.
objectthe object to write.
Returns
a reference to the given output stream.
REGINA_API int regina::testEngine ( int  value)

Tests to see if an interface can successfully communicate with the underlying C++ calculation engine.

This routine simply uses the engine to return the same value that is passed to it; it can be used to test whether communications between the interface and the C++ engine are working properly.

Parameters
valueany integer; this same integer will be returned.
Returns
the same integer that was passed as value.
REGINA_API int regina::versionMajor ( )

Returns the major version number of this calculation engine.

For instance, version 2.3.1 would have major version 2.

Returns
the major version number of this calculation engine.
REGINA_API int regina::versionMinor ( )

Returns the minor version number of this calculation engine.

For instance, version 2.3.1 would have minor version 3.

Returns
the minor version number of this calculation engine.
REGINA_API const char* regina::versionSnapPea ( )

An alias for versionSnapPy(), which returns the version of SnapPy whose underlying SnapPea kernel is built into Regina.

See versionSnapPy() for details.

Returns
the version of SnapPy whose underlying SnapPea kernel is built into Regina.
REGINA_API const char* regina::versionSnapPy ( )

Returns the version of SnapPy whose underlying SnapPea kernel is built into Regina.

The SnapPea kernel is now maintained by the larger SnapPy project, and Regina sources its version of the SnapPea kernel from one of the recent SnapPy releases. See http://snappy.computop.org/ for details.

In Regina, you can access the SnapPea kernel through the NSnapPeaTriangulation class.

Returns
the version of SnapPy whose underlying SnapPea kernel is built into Regina.
REGINA_API const char* regina::versionString ( )

Returns the full version number of this calculation engine.

For instance, version 2.3.1 would have full version "2.3.1".

Returns
the version of this calculation engine.
REGINA_API bool regina::versionUsesUTF8 ( const char *  version)

Did the given version of Regina consistently use UTF-8 in its data files?

In Regina versions 4.4 and below, no particular attention was paid to character encodings. As a result, the GUI typically stored data in LATIN1 (the default for the Qt libraries).

As of Regina 4.5, all strings are now stored in UTF-8 where possible.

This routine allows programs to determine which regime a particular version of Regina belongs to. This can be useful when working with Regina data files on a low-level basis.

Any whitespace in the version string will confuse the result, and the return value will be undefined.

As a special case, an empty string is treated as belonging to the UTF-8 regime.

Parameters
versiona version string from some release of Regina, such as "4.2". This must not contain any whitespace padding.
Returns
true if the given version uses UTF-8 consistently, or false if the given version is an older version that did not pay attention to character encodings.

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