Regina Calculation Engine

Represents a permutation of {0,1,2,3}. More...
#include <maths/nperm4.h>
Public Types  
enum  { nPerms = 24, nPerms_1 = 6 } 
Public Member Functions  
NPerm4 ()  
Creates the identity permutation. More...  
NPerm4 (int a, int b)  
Creates the transposition of a and b. More...  
NPerm4 (int a, int b, int c, int d)  
Creates a permutation mapping (0,1,2,3) to (a,b,c,d) respectively. More...  
NPerm4 (const int *image)  
Creates a permutation mapping i to image[i] for each i = 0,1,2,3. More...  
NPerm4 (int a0, int a1, int b0, int b1, int c0, int c1, int d0, int d1)  
Creates a permutation mapping (a0,b0,c0,d0) to (a1,b1,c1,d1) respectively. More...  
NPerm4 (const NPerm4 &cloneMe)  
Creates a permutation that is a clone of the given permutation. More...  
unsigned char  getPermCode () const 
Returns the firstgeneration code representing this permutation. More...  
unsigned char  getPermCode2 () const 
Returns the secondgeneration code representing this permutation. More...  
void  setPermCode (unsigned char code) 
Sets this permutation to that represented by the given firstgeneration permutation code. More...  
void  setPermCode2 (unsigned char code) 
Sets this permutation to that represented by the given secondgeneration permutation code. More...  
void  setPerm (int a, int b) 
Sets this permutation to the transposition of a and b. More...  
void  setPerm (int a, int b, int c, int d) 
Sets this permutation to that mapping (0,1,2,3) to (a,b,c,d) respectively. More...  
NPerm4 &  operator= (const NPerm4 &cloneMe) 
Sets this permutation to be equal to the given permutation. More...  
NPerm4  operator* (const NPerm4 &q) const 
Returns the composition of this permutation with the given permutation. More...  
NPerm4  inverse () const 
Finds the inverse of this permutation. More...  
int  sign () const 
Determines the sign of this permutation. More...  
int  operator[] (int source) const 
Determines the image of the given integer under this permutation. More...  
int  preImageOf (int image) const 
Determines the preimage of the given integer under this permutation. More...  
bool  operator== (const NPerm4 &other) const 
Determines if this is equal to the given permutation. More...  
bool  operator!= (const NPerm4 &other) const 
Determines if this differs from the given permutation. More...  
int  compareWith (const NPerm4 &other) const 
Lexicographically compares the images of (0,1,2,3) under this and the given permutation. More...  
bool  isIdentity () const 
Determines if this is the identity permutation. More...  
std::string  toString () const 
A deprecated alias for str(), which returns a string representation of this permutation. More...  
std::string  str () const 
Returns a string representation of this permutation. More...  
std::string  trunc2 () const 
Returns a string representation of this permutation with only the images of 0 and 1. More...  
std::string  trunc3 () const 
Returns a string representation of this permutation with only the images of 0, 1 and 2 included. More...  
int  S4Index () const 
Returns the index of this permutation in the NPerm4::S4 array. More...  
int  SnIndex () const 
Returns the index of this permutation in the NPerm4::S4 array. More...  
int  orderedS4Index () const 
Returns the index of this permutation in the NPerm4::orderedS4 array. More...  
int  orderedSnIndex () const 
Returns the index of this permutation in the NPerm4::orderedS4 array. More...  
Static Public Member Functions  
static NPerm4  fromPermCode (unsigned char code) 
Creates a permutation from the given firstgeneration permutation code. More...  
static NPerm4  fromPermCode2 (unsigned char code) 
Creates a permutation from the given secondgeneration permutation code. More...  
static bool  isPermCode (unsigned char code) 
Determines whether the given character is a valid firstgeneration permutation code. More...  
static bool  isPermCode2 (unsigned char code) 
Determines whether the given character is a valid secondgeneration permutation code. More...  
Static Public Attributes  
static const NPerm4  S4 [24] 
Contains all possible permutations of four elements. More...  
static const NPerm4 *  Sn 
A dimensionagnostic alias for NPerm4::S4. More...  
static const unsigned  invS4 [24] 
Contains the inverses of the permutations in the array S4. More...  
static const unsigned *  invSn 
A dimensionagnostic alias for NPerm4::invS4. More...  
static const NPerm4  orderedS4 [24] 
Contains all possible permutations of four elements in lexicographical order. More...  
static const NPerm4 *  orderedSn 
A dimensionagnostic alias for NPerm4::orderedS4. More...  
static const NPerm4  S3 [6] 
Contains all possible permutations of three elements. More...  
static const NPerm4 *  Sn_1 
A dimensionagnostic alias for NPerm4::S3. More...  
static const unsigned  invS3 [6] 
Contains the inverses of the permutations in the array S3. More...  
static const NPerm4  orderedS3 [6] 
Contains all possible permutations of three elements in lexicographical order. More...  
static const NPerm4  S2 [2] 
Contains all possible permutations of two elements. More...  
static const unsigned  invS2 [2] 
Contains the inverses of the permutations in the array S2. More...  
Friends  
std::ostream &  operator<< (std::ostream &out, const NPerm4 &p) 
Writes a string representation of the given permutation to the given output stream. More...  
Represents a permutation of {0,1,2,3}.
Amongst other things, such permutations are used in specifying how simplices of a 3manifold triangulation are glued together. NPerm4 objects are small enough to pass about by value instead of by reference.
Each permutation has an internal code, and this code is sufficient to reconstruct the permutation. Thus the internal code may be a useful means for passing permutation objects to and from the engine.
The internal permutation codes have changed as of Regina 4.6.1:
It is highly recommended that, if you need to work with permutation codes at all, you use secondgeneration codes where possible. This is because the firstgeneration routines incur additional overhead in converting back and forth between the secondgeneration codes (which are used internally by NPerm4).
anonymous enum 

inline 
Creates the identity permutation.

inline 
Creates the transposition of a and b.
Note that a and b need not be distinct.
a  the element to switch with b. 
b  the element to switch with a. 

inline 
Creates a permutation mapping (0,1,2,3) to (a,b,c,d) respectively.
a  the desired image of 0. 
b  the desired image of 1. 
c  the desired image of 2. 
d  the desired image of 3. 

inline 
Creates a permutation mapping i to image[i] for each i = 0,1,2,3.
image  the array of images. 
regina::NPerm4::NPerm4  (  int  a0, 
int  a1,  
int  b0,  
int  b1,  
int  c0,  
int  c1,  
int  d0,  
int  d1  
) 
Creates a permutation mapping (a0,b0,c0,d0) to (a1,b1,c1,d1) respectively.
a0  the desired preimage of a1. 
b0  the desired preimage of b1. 
c0  the desired preimage of c1. 
d0  the desired preimage of d1. 
a1  the desired image of a0. 
b1  the desired image of b0. 
c1  the desired image of c0. 
d1  the desired image of d0. 

inline 
Creates a permutation that is a clone of the given permutation.
cloneMe  the permutation to clone. 

inline 
Lexicographically compares the images of (0,1,2,3) under this and the given permutation.
other  the permutation with which to compare this. 

inlinestatic 
Creates a permutation from the given firstgeneration permutation code.
code  the firstgeneration code for the new permutation. 

inlinestatic 
Creates a permutation from the given secondgeneration permutation code.
Secondgeneration codes are fast to work with, since they are used internally by the NPerm4 class.
code  the secondgeneration code for the new permutation. 

inline 
Returns the firstgeneration code representing this permutation.
This code is sufficient to reproduce the entire permutation.
The code returned will be a valid firstgeneration permutation code as determined by isPermCode().

inline 
Returns the secondgeneration code representing this permutation.
This code is sufficient to reproduce the entire permutation.
The code returned will be a valid secondgeneration permutation code as determined by isPermCode2().
Secondgeneration codes are fast to work with, since they are used internally by the NPerm4 class.

inline 
Finds the inverse of this permutation.

inline 
Determines if this is the identity permutation.
This is true if and only if each of 0, 1, 2 and 3 is mapped to itself.
true
if and only if this is the identity permutation.

static 
Determines whether the given character is a valid firstgeneration permutation code.
Valid firstgeneration codes can be passed to setPermCode() or fromPermCode(), and are returned by getPermCode().
code  the permutation code to test. 
true
if and only if the given code is a valid firstgeneration permutation code.

inlinestatic 
Determines whether the given character is a valid secondgeneration permutation code.
Valid secondgeneration codes can be passed to setPermCode2() or fromPermCode2(), and are returned by getPermCode2().
Secondgeneration codes are fast to work with, since they are used internally by the NPerm4 class.
code  the permutation code to test. 
true
if and only if the given code is a valid secondgeneration permutation code.

inline 
Determines if this differs from the given permutation.
This is true if and only if the two permutations have different images for at least one of 0, 1, 2 or 3.
other  the permutation with which to compare this. 
true
if and only if this and the given permutation differ. Returns the composition of this permutation with the given permutation.
If this permutation is p, the resulting permutation will be p o q, satisfying (p*q)[x] == p[q[x]]
.
q  the permutation with which to compose this. 
Sets this permutation to be equal to the given permutation.
cloneMe  the permutation whose value will be assigned to this permutation. 

inline 
Determines if this is equal to the given permutation.
This is true if and only if both permutations have the same images for 0, 1, 2 and 3.
other  the permutation with which to compare this. 
true
if and only if this and the given permutation are equal.

inline 
Determines the image of the given integer under this permutation.
source  the integer whose image we wish to find. This should be between 0 and 3 inclusive. 

inline 
Returns the index of this permutation in the NPerm4::orderedS4 array.

inline 
Returns the index of this permutation in the NPerm4::orderedS4 array.
This is a dimensionagnostic alias for orderedS4Index().

inline 
Determines the preimage of the given integer under this permutation.
image  the integer whose preimage we wish to find. This should be between 0 and 3 inclusive. 

inline 
Returns the index of this permutation in the NPerm4::S4 array.

inline 
Sets this permutation to the transposition of a and b.
Note that a and b need not be distinct.
a  the element to switch with b. 
b  the element to switch with a. 

inline 
Sets this permutation to that mapping (0,1,2,3) to (a,b,c,d) respectively.
a  the desired image of 0. 
b  the desired image of 1. 
c  the desired image of 2. 
d  the desired image of 3. 

inline 
Sets this permutation to that represented by the given firstgeneration permutation code.
code  the firstgeneration code that will determine the new value of this permutation. 

inline 
Sets this permutation to that represented by the given secondgeneration permutation code.
Secondgeneration codes are fast to work with, since they are used internally by the NPerm4 class.
code  the secondgeneration code that will determine the new value of this permutation. 

inline 
Determines the sign of this permutation.

inline 
Returns the index of this permutation in the NPerm4::S4 array.
This is a dimensionagnostic alias for S4Index().
std::string regina::NPerm4::str  (  )  const 
Returns a string representation of this permutation.
The representation will consist of four adjacent digits representing the images of 0, 1, 2 and 3 respectively. An example of a string representation is 1302
.

inline 
A deprecated alias for str(), which returns a string representation of this permutation.
std::string regina::NPerm4::trunc2  (  )  const 
Returns a string representation of this permutation with only the images of 0 and 1.
The resulting string will therefore have length two.
std::string regina::NPerm4::trunc3  (  )  const 
Returns a string representation of this permutation with only the images of 0, 1 and 2 included.
The resulting string will therefore have length three.

friend 
Writes a string representation of the given permutation to the given output stream.
The format will be the same as is used by NPerm4::str().
out  the output stream to which to write. 
p  the permutation to write. 

static 
Contains the inverses of the permutations in the array S2.
Specifically, the inverse of permutation S2[i]
is the permutation S2[ invS2[i] ]
.

static 
Contains the inverses of the permutations in the array S3.
Specifically, the inverse of permutation S3[i]
is the permutation S3[ invS3[i] ]
.

static 
Contains the inverses of the permutations in the array S4.
Specifically, the inverse of permutation S4[i]
is the permutation S4[ invS4[i] ]
.

static 
A dimensionagnostic alias for NPerm4::invS4.
In general, for each K the class NPermK will define an alias invSn that references the list of all permutations NPermK::invSK.

static 
Contains all possible permutations of three elements in lexicographical order.
In each permutation, 3 maps to 3.

static 
Contains all possible permutations of four elements in lexicographical order.

static 
A dimensionagnostic alias for NPerm4::orderedS4.
In general, for each K the class NPermK will define an alias orderedSn that references the list of all permutations NPermK::orderedSK.

static 
Contains all possible permutations of two elements.
In each permutation, 2 maps to 2 and 3 maps to 3.
The permutations with even indices in the array are the even permutations, and those with odd indices in the array are the odd permutations.
For all permutation classes (NPerm4, NPerm5 and so on), the S2 array stores the same permutations in the same order (but of course using different data types).
Note that these permutations are already in lexicographical order.

static 
Contains all possible permutations of three elements.
In each permutation, 3 maps to 3.
The permutations with even indices in the array are the even permutations, and those with odd indices in the array are the odd permutations.
For all permutation classes (NPerm4, NPerm5 and so on), the S3 array stores the same permutations in the same order (but of course using different data types).
Note that the permutations are not necessarily in lexicographical order. For the corresponding inverse array, see NPerm3::invS3.

static 
Contains all possible permutations of four elements.
The permutations with even indices in the array are the even permutations, and those with odd indices in the array are the odd permutations.
For all permutation classes (NPerm4, NPerm5 and so on), the S4 array stores the same permutations in the same order (but of course using different data types).
Note that the permutations are not necessarily in lexicographical order.

static 
A dimensionagnostic alias for NPerm4::S4.
In general, for each K the class NPermK will define an alias Sn that references the list of all permutations NPermK::SK.

static 
A dimensionagnostic alias for NPerm4::S3.
In general, for each K the class NPermK will define an alias Sn_1 that references the list of all permutations NPermK::S(K1).