diff --git a/docs/CF_8cpp.html b/docs/CF_8cpp.html new file mode 100644 index 00000000..0ab729cd --- /dev/null +++ b/docs/CF_8cpp.html @@ -0,0 +1,123 @@ + + + + + + + +HPCombi: /home/florent/src/HPCombi/examples/CF.cpp File Reference + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+Classes | +Functions
+
+
CF.cpp File Reference
+
+
+
#include <array>
+#include <cassert>
+#include <cstdint>
+#include <iostream>
+#include "hpcombi/perm16.hpp"
+
+ + + +

+Classes

class  EqEpu8
 
+ + + +

+Functions

int main ()
 
+

Function Documentation

+ +

◆ main()

+ +
+
+ + + + + + + +
int main ()
+
+ +
+
+
+ + + + diff --git a/docs/RD_8cpp.html b/docs/RD_8cpp.html new file mode 100644 index 00000000..63a84f57 --- /dev/null +++ b/docs/RD_8cpp.html @@ -0,0 +1,430 @@ + + + + + + + +HPCombi: /home/florent/src/HPCombi/examples/RD.cpp File Reference + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+Functions | +Variables
+
+
RD.cpp File Reference
+
+
+
#include <array>
+#include <cassert>
+#include <cstdint>
+#include <functional>
+#include <iostream>
+#include <vector>
+#include <unordered_set>
+#include "hpcombi/perm16.hpp"
+
+ + + + + + + +

+Functions

PTransf16 act1 (PTransf16 x, PTransf16 y)
 
PTransf16 act0 (PTransf16 x, PTransf16 y)
 
int main ()
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Variables

const PTransf16 id {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}
 
const PTransf16 s0 {0, 1, 2, 3, 4, 5, 6, 8, 7, 9, 10, 11, 12, 13, 14, 15}
 
const PTransf16 s1e {0, 1, 2, 3, 4, 5, 7, 6, 9, 8, 10, 11, 12, 13, 14, 15}
 
const PTransf16 s1f {0, 1, 2, 3, 4, 5, 8, 9, 6, 7, 10, 11, 12, 13, 14, 15}
 
const PTransf16 s2 {0, 1, 2, 3, 4, 6, 5, 7, 8, 10, 9, 11, 12, 13, 14, 15}
 
const PTransf16 s3 {0, 1, 2, 3, 5, 4, 6, 7, 8, 9, 11, 10, 12, 13, 14, 15}
 
const PTransf16 s4 {0, 1, 2, 4, 3, 5, 6, 7, 8, 9, 10, 12, 11, 13, 14, 15}
 
const PTransf16 s5 {0, 1, 3, 2, 4, 5, 6, 7, 8, 9, 10, 11, 13, 12, 14, 15}
 
const PTransf16 s6 {0, 2, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 13, 15}
 
const PTransf16 s7 {1, 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 14}
 
const uint8_t FF = 0xff
 
const uint8_t FE = 0xfe
 
const PTransf16 gene
 
const PTransf16 genf
 
+

Function Documentation

+ +

◆ act0()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
PTransf16 act0 (PTransf16 x,
PTransf16 y 
)
+
+inline
+
+ +
+
+ +

◆ act1()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
PTransf16 act1 (PTransf16 x,
PTransf16 y 
)
+
+inline
+
+ +
+
+ +

◆ main()

+ +
+
+ + + + + + + +
int main ()
+
+ +
+
+

Variable Documentation

+ +

◆ FE

+ +
+
+ + + + +
const uint8_t FE = 0xfe
+
+ +
+
+ +

◆ FF

+ +
+
+ + + + +
const uint8_t FF = 0xff
+
+ +
+
+ +

◆ gene

+ +
+
+ + + + +
const PTransf16 gene
+
+Initial value:
{FF, FF, FF, FF, FF, FF, FF, FF,
+
8, 9, 10, 11, 12, 13, 14, 15}
+
const uint8_t FF
Definition: RD.cpp:47
+
+
+
+ +

◆ genf

+ +
+
+ + + + +
const PTransf16 genf
+
+Initial value:
{FF, FF, FF, FF, FF, FF, FF, 7,
+
FF, 9, 10, 11, 12, 13, 14, 15}
+
+
+
+ +

◆ id

+ +
+
+ + + + +
const PTransf16 id {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}
+
+ +
+
+ +

◆ s0

+ +
+
+ + + + +
const PTransf16 s0 {0, 1, 2, 3, 4, 5, 6, 8, 7, 9, 10, 11, 12, 13, 14, 15}
+
+ +
+
+ +

◆ s1e

+ +
+
+ + + + +
const PTransf16 s1e {0, 1, 2, 3, 4, 5, 7, 6, 9, 8, 10, 11, 12, 13, 14, 15}
+
+ +
+
+ +

◆ s1f

+ +
+
+ + + + +
const PTransf16 s1f {0, 1, 2, 3, 4, 5, 8, 9, 6, 7, 10, 11, 12, 13, 14, 15}
+
+ +
+
+ +

◆ s2

+ +
+
+ + + + +
const PTransf16 s2 {0, 1, 2, 3, 4, 6, 5, 7, 8, 10, 9, 11, 12, 13, 14, 15}
+
+ +
+
+ +

◆ s3

+ +
+
+ + + + +
const PTransf16 s3 {0, 1, 2, 3, 5, 4, 6, 7, 8, 9, 11, 10, 12, 13, 14, 15}
+
+ +
+
+ +

◆ s4

+ +
+
+ + + + +
const PTransf16 s4 {0, 1, 2, 4, 3, 5, 6, 7, 8, 9, 10, 12, 11, 13, 14, 15}
+
+ +
+
+ +

◆ s5

+ +
+
+ + + + +
const PTransf16 s5 {0, 1, 3, 2, 4, 5, 6, 7, 8, 9, 10, 11, 13, 12, 14, 15}
+
+ +
+
+ +

◆ s6

+ +
+
+ + + + +
const PTransf16 s6 {0, 2, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 13, 15}
+
+ +
+
+ +

◆ s7

+ +
+
+ + + + +
const PTransf16 s7 {1, 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 14}
+
+ +
+
+
+ + + + diff --git a/docs/README_8md.html b/docs/README_8md.html new file mode 100644 index 00000000..45abc8c1 --- /dev/null +++ b/docs/README_8md.html @@ -0,0 +1,82 @@ + + + + + + + +HPCombi: /home/florent/src/HPCombi/README.md File Reference + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+
/home/florent/src/HPCombi/README.md File Reference
+
+
+
+ + + + diff --git a/docs/Renner_8cpp.html b/docs/Renner_8cpp.html new file mode 100644 index 00000000..8136cec7 --- /dev/null +++ b/docs/Renner_8cpp.html @@ -0,0 +1,640 @@ + + + + + + + +HPCombi: /home/florent/src/HPCombi/examples/Renner.cpp File Reference + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+Functions | +Variables
+
+
Renner.cpp File Reference
+
+
+
#include <array>
+#include <cassert>
+#include <cstdint>
+#include <functional>
+#include <iomanip>
+#include <iostream>
+#include <string>
+#include <vector>
+#include <unordered_map>
+#include "simde/x86/sse4.1.h"
+#include "hpcombi/perm16.hpp"
+
+ + + + + + + + + + + + + + + + + + +

+Functions

template<typename T >
std::ostream & operator<< (std::ostream &out, const std::vector< T > &v)
 
PTransf16 act1 (PTransf16 x, PTransf16 y)
 
PTransf16 mult1 (PTransf16 x, PTransf16 y)
 
PTransf16 act0 (PTransf16 x, PTransf16 y)
 
std::vector< int > reduced_word (PTransf16 x)
 
PTransf16 mult0 (PTransf16 x, PTransf16 y)
 
std::vector< int > sym_renner (PTransf16 v, int n)
 
int main ()
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Variables

const PTransf16 id {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}
 
const PTransf16 s0 {0, 1, 2, 3, 4, 5, 6, 8, 7, 9, 10, 11, 12, 13, 14, 15}
 
const PTransf16 s1e {0, 1, 2, 3, 4, 5, 7, 6, 9, 8, 10, 11, 12, 13, 14, 15}
 
const PTransf16 s1f {0, 1, 2, 3, 4, 5, 8, 9, 6, 7, 10, 11, 12, 13, 14, 15}
 
const PTransf16 s2 {0, 1, 2, 3, 4, 6, 5, 7, 8, 10, 9, 11, 12, 13, 14, 15}
 
const PTransf16 s3 {0, 1, 2, 3, 5, 4, 6, 7, 8, 9, 11, 10, 12, 13, 14, 15}
 
const PTransf16 s4 {0, 1, 2, 4, 3, 5, 6, 7, 8, 9, 10, 12, 11, 13, 14, 15}
 
const PTransf16 s5 {0, 1, 3, 2, 4, 5, 6, 7, 8, 9, 10, 11, 13, 12, 14, 15}
 
const PTransf16 s6 {0, 2, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 13, 15}
 
const PTransf16 s7 {1, 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 14}
 
const uint8_t FF = 0xff
 
const uint8_t FE = 0xfe
 
const PTransf16 gene
 
const PTransf16 genf
 
const vector< PTransf16gens {gene, genf, s1e, s1f, s2, s3, s4, s5}
 
const int nprint = 6
 
unordered_map< PTransf16, std::pair< PTransf16, int > > elems
 
+

Function Documentation

+ +

◆ act0()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
PTransf16 act0 (PTransf16 x,
PTransf16 y 
)
+
+inline
+
+ +
+
+ +

◆ act1()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
PTransf16 act1 (PTransf16 x,
PTransf16 y 
)
+
+inline
+
+ +
+
+ +

◆ main()

+ +
+
+ + + + + + + +
int main ()
+
+ +
+
+ +

◆ mult0()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
PTransf16 mult0 (PTransf16 x,
PTransf16 y 
)
+
+inline
+
+ +
+
+ +

◆ mult1()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
PTransf16 mult1 (PTransf16 x,
PTransf16 y 
)
+
+inline
+
+ +
+
+ +

◆ operator<<()

+ +
+
+
+template<typename T >
+ + + + + + + + + + + + + + + + + + +
std::ostream& operator<< (std::ostream & out,
const std::vector< T > & v 
)
+
+ +
+
+ +

◆ reduced_word()

+ +
+
+ + + + + + + + +
std::vector<int> reduced_word (PTransf16 x)
+
+ +
+
+ +

◆ sym_renner()

+ +
+
+ + + + + + + + + + + + + + + + + + +
std::vector<int> sym_renner (PTransf16 v,
int n 
)
+
+ +
+
+

Variable Documentation

+ +

◆ elems

+ +
+
+ + + + +
unordered_map<PTransf16, std::pair<PTransf16, int> > elems
+
+ +
+
+ +

◆ FE

+ +
+
+ + + + +
const uint8_t FE = 0xfe
+
+ +
+
+ +

◆ FF

+ +
+
+ + + + +
const uint8_t FF = 0xff
+
+ +
+
+ +

◆ gene

+ +
+
+ + + + +
const PTransf16 gene
+
+Initial value:
{FF, FF, FF, FF, FF, FF, FF, FF,
+
8, 9, 10, 11, 12, 13, 14, 15}
+
const uint8_t FF
Definition: Renner.cpp:64
+
+
+
+ +

◆ genf

+ +
+
+ + + + +
const PTransf16 genf
+
+Initial value:
{FF, FF, FF, FF, FF, FF, FF, 7,
+
FF, 9, 10, 11, 12, 13, 14, 15}
+
+
+
+ +

◆ gens

+ +
+
+ + + + +
const vector<PTransf16> gens {gene, genf, s1e, s1f, s2, s3, s4, s5}
+
+ +
+
+ +

◆ id

+ +
+
+ + + + +
const PTransf16 id {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}
+
+ +
+
+ +

◆ nprint

+ +
+
+ + + + +
const int nprint = 6
+
+ +
+
+ +

◆ s0

+ +
+
+ + + + +
const PTransf16 s0 {0, 1, 2, 3, 4, 5, 6, 8, 7, 9, 10, 11, 12, 13, 14, 15}
+
+ +
+
+ +

◆ s1e

+ +
+
+ + + + +
const PTransf16 s1e {0, 1, 2, 3, 4, 5, 7, 6, 9, 8, 10, 11, 12, 13, 14, 15}
+
+ +
+
+ +

◆ s1f

+ +
+
+ + + + +
const PTransf16 s1f {0, 1, 2, 3, 4, 5, 8, 9, 6, 7, 10, 11, 12, 13, 14, 15}
+
+ +
+
+ +

◆ s2

+ +
+
+ + + + +
const PTransf16 s2 {0, 1, 2, 3, 4, 6, 5, 7, 8, 10, 9, 11, 12, 13, 14, 15}
+
+ +
+
+ +

◆ s3

+ +
+
+ + + + +
const PTransf16 s3 {0, 1, 2, 3, 5, 4, 6, 7, 8, 9, 11, 10, 12, 13, 14, 15}
+
+ +
+
+ +

◆ s4

+ +
+
+ + + + +
const PTransf16 s4 {0, 1, 2, 4, 3, 5, 6, 7, 8, 9, 10, 12, 11, 13, 14, 15}
+
+ +
+
+ +

◆ s5

+ +
+
+ + + + +
const PTransf16 s5 {0, 1, 3, 2, 4, 5, 6, 7, 8, 9, 10, 11, 13, 12, 14, 15}
+
+ +
+
+ +

◆ s6

+ +
+
+ + + + +
const PTransf16 s6 {0, 2, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 13, 15}
+
+ +
+
+ +

◆ s7

+ +
+
+ + + + +
const PTransf16 s7 {1, 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 14}
+
+ +
+
+
+ + + + diff --git a/docs/Trans_8cpp.html b/docs/Trans_8cpp.html new file mode 100644 index 00000000..39eb9558 --- /dev/null +++ b/docs/Trans_8cpp.html @@ -0,0 +1,205 @@ + + + + + + + +HPCombi: /home/florent/src/HPCombi/examples/Trans.cpp File Reference + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+Functions | +Variables
+
+
Trans.cpp File Reference
+
+
+
#include <array>
+#include <cassert>
+#include <cstdint>
+#include <functional>
+#include <iostream>
+#include <vector>
+#include <unordered_set>
+#include "hpcombi/perm16.hpp"
+
+ + + +

+Functions

int main ()
 
+ + + + + + + + + + + +

+Variables

const Transf16 s {1, 0, 2, 3, 4, 5, 6}
 
const Transf16 cy {1, 2, 3, 4, 5, 6, 0}
 
const Transf16 pi {0, 0, 2, 3, 4, 5, 6}
 
const std::vector< Transf16gens {s, cy, pi}
 
const uint8_t FE = 0xfe
 
+

Function Documentation

+ +

◆ main()

+ +
+
+ + + + + + + +
int main ()
+
+ +
+
+

Variable Documentation

+ +

◆ cy

+ +
+
+ + + + +
const Transf16 cy {1, 2, 3, 4, 5, 6, 0}
+
+ +
+
+ +

◆ FE

+ +
+
+ + + + +
const uint8_t FE = 0xfe
+
+ +
+
+ +

◆ gens

+ +
+
+ + + + +
const std::vector<Transf16> gens {s, cy, pi}
+
+ +
+
+ +

◆ pi

+ +
+
+ + + + +
const Transf16 pi {0, 0, 2, 3, 4, 5, 6}
+
+ +
+
+ +

◆ s

+ +
+
+ + + + +
const Transf16 s {1, 0, 2, 3, 4, 5, 6}
+
+ +
+
+
+ + + + diff --git a/docs/annotated.html b/docs/annotated.html new file mode 100644 index 00000000..44daf973 --- /dev/null +++ b/docs/annotated.html @@ -0,0 +1,135 @@ + + + + + + + +HPCombi: Class List + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
Class List
+
+
+
Here are the classes, structs, unions and interfaces with brief descriptions:
+
[detail level 123]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 NHPCombi
 Npower_helper
 CMonoid< Perm16 >
 CMonoidAlgebraic monoid structure used by default for type T by the pow function and prod function
 CMonoid< std::string >
 CBMat8Class for fast boolean matrices of dimension up to 8 x 8
 CTPUBuildClass for factory object associated to a SIMD packed unsigned integers
 CPTransf16Partial transformation of \(\{0\dots 15\}\)
 CTransf16Full transformation of \(\{0\dots 15\}\)
 CPPerm16Partial permutation of \(\{0, \dots, 15\}\)
 CPerm16Permutations of \(\{0\dots 15\}\)
 CPermGeneric
 CVect16
 CVectGenericA generic class for combinatorial integer vectors
 Nlibsemigroups
 CTimer
 Nstd
 Chash< HPCombi::BMat8 >
 Cequal_to< HPCombi::epu8 >
 Cnot_equal_to< HPCombi::epu8 >
 Chash< HPCombi::epu8 >
 Cless< HPCombi::epu8 >
 Chash< HPCombi::PTransf16 >
 Chash< HPCombi::Transf16 >
 Chash< HPCombi::PPerm16 >
 Chash< HPCombi::Perm16 >
 Chash< HPCombi::PermGeneric< Size, Expo > >
 Chash< HPCombi::Vect16 >
 Chash< HPCombi::VectGeneric< Size, Expo > >
 Ccommon_eval16Evaluation of a HPCombi::epu8
 Ccommon_first_diffThe first difference between two HPCombi::epu8
 Ccommon_horiz_maxHorizontal sum of a HPCombi::epu8
 Ccommon_horiz_minHorizontal sum of a HPCombi::epu8
 Ccommon_horiz_sumHorizontal sum of a HPCombi::epu8
 Ccommon_inverseThe inverse permutation
 Ccommon_inverse_ppermThe inverse of a partial permutation
 Ccommon_is_permutation
 Ccommon_last_diffThe last difference between two HPCombi::epu8
 Ccommon_left_weak_leqCompare two permutations for the left weak order
 Ccommon_lehmerThe Lehmer code of a permutation
 Ccommon_lengthThe Coxeter length (ie: number of inversion) of a permutation
 Ccommon_mergeMerge two sorted epu8
 Ccommon_nb_cyclesThe number of cycles of a permutation
 Ccommon_nb_descentThe number of descent of a permutation
 Ccommon_partial_maxHorizontal partial sum of a HPCombi::epu8
 Ccommon_partial_minHorizontal partial sum of a HPCombi::epu8
 Ccommon_partial_sumsHorizontal partial sum of a HPCombi::epu8
 Ccommon_permutation_ofFind if a vector is a permutation of one other
 CEqEpu8
+
+
+ + + + diff --git a/docs/arch_8hpp.html b/docs/arch_8hpp.html new file mode 100644 index 00000000..7554c8a1 --- /dev/null +++ b/docs/arch_8hpp.html @@ -0,0 +1,88 @@ + + + + + + + +HPCombi: /home/florent/src/HPCombi/include/hpcombi/arch.hpp File Reference + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
arch.hpp File Reference
+
+
+ +

Go to the source code of this file.

+
+ + + + diff --git a/docs/arch_8hpp_source.html b/docs/arch_8hpp_source.html new file mode 100644 index 00000000..949f2a51 --- /dev/null +++ b/docs/arch_8hpp_source.html @@ -0,0 +1,111 @@ + + + + + + + +HPCombi: /home/florent/src/HPCombi/include/hpcombi/arch.hpp Source File + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
arch.hpp
+
+
+Go to the documentation of this file.
1 // Copyright (C) 2023 Florent Hivert <Florent.Hivert@lisn.fr>, //
+
3 // //
+
4 // Distributed under the terms of the GNU General Public License (GPL) //
+
5 // //
+
6 // This code is distributed in the hope that it will be useful, //
+
7 // but WITHOUT ANY WARRANTY; without even the implied warranty of //
+
8 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU //
+
9 // General Public License for more details. //
+
10 // //
+
11 // The full text of the GPL is available at: //
+
12 // //
+
13 // http://www.gnu.org/licenses/ //
+
15 
+
16 #ifndef HPCOMBI_ARCH_HPP_
+
17 #define HPCOMBI_ARCH_HPP_
+
18 
+
19 #if defined(SIMDE_ARCH_AMD64) && !defined(SIMDE_ARCH_X86_SSE4_1)
+
20 char const msg[] =
+
21  R("x86_64 architecture without required compiler flags for SSE-4.1 "
+
22  "instruction set. Did you forget to provide the flag -march="
+
23  "(native,avx,sse4.1) flag ?");
+
24 #error(msg)
+
25 #endif
+
26 
+
27 #endif // HPCOMBI_ARCH_HPP_
+
+ + + + diff --git a/docs/bc_s.png b/docs/bc_s.png new file mode 100644 index 00000000..224b29aa Binary files /dev/null and b/docs/bc_s.png differ diff --git a/docs/bdwn.png b/docs/bdwn.png new file mode 100644 index 00000000..940a0b95 Binary files /dev/null and b/docs/bdwn.png differ diff --git a/docs/bmat8_8hpp.html b/docs/bmat8_8hpp.html new file mode 100644 index 00000000..4c66f1f6 --- /dev/null +++ b/docs/bmat8_8hpp.html @@ -0,0 +1,120 @@ + + + + + + + +HPCombi: /home/florent/src/HPCombi/include/hpcombi/bmat8.hpp File Reference + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+Classes | +Namespaces
+
+
bmat8.hpp File Reference
+
+
+
#include <array>
+#include <bitset>
+#include <cstddef>
+#include <cstdint>
+#include <functional>
+#include <iostream>
+#include <memory>
+#include <utility>
+#include <vector>
+#include "debug.hpp"
+#include "epu8.hpp"
+#include "perm16.hpp"
+#include "bmat8_impl.hpp"
+
+

Go to the source code of this file.

+ + + + + + + +

+Classes

class  HPCombi::BMat8
 Class for fast boolean matrices of dimension up to 8 x 8. More...
 
struct  std::hash< HPCombi::BMat8 >
 
+ + + + + +

+Namespaces

 HPCombi
 
 std
 
+
+ + + + diff --git a/docs/bmat8_8hpp_source.html b/docs/bmat8_8hpp_source.html new file mode 100644 index 00000000..acab5138 --- /dev/null +++ b/docs/bmat8_8hpp_source.html @@ -0,0 +1,324 @@ + + + + + + + +HPCombi: /home/florent/src/HPCombi/include/hpcombi/bmat8.hpp Source File + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
bmat8.hpp
+
+
+Go to the documentation of this file.
1 // Copyright (C) 2018 Finn Smith <fls3@st-andrews.ac.uk> //
+
3 // Copyright (C) 2018 James Mitchell <jdm3@st-andrews.ac.uk> //
+
4 // Copyright (C) 2018 Florent Hivert <Florent.Hivert@lri.fr>, //
+
5 // //
+
6 // Distributed under the terms of the GNU General Public License (GPL) //
+
7 // //
+
8 // This code is distributed in the hope that it will be useful, //
+
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of //
+
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU //
+
11 // General Public License for more details. //
+
12 // //
+
13 // The full text of the GPL is available at: //
+
14 // //
+
15 // http://www.gnu.org/licenses/ //
+
17 
+
18 // This file contains a declaration of fast boolean matrices up to dimension 8.
+
19 
+
20 #ifndef HPCOMBI_BMAT8_HPP_
+
21 #define HPCOMBI_BMAT8_HPP_
+
22 
+
23 #include <array> // for array
+
24 #include <bitset> // for bitset
+
25 #include <cstddef> // for size_t
+
26 #include <cstdint> // for uint64_t, uint8_t
+
27 #include <functional> // for hash, __scalar_hash
+
28 #include <iostream> // for ostream
+
29 #include <memory> // for hash
+
30 #include <utility> // for pair, swap
+
31 #include <vector> // for vector
+
32 
+
33 #include "debug.hpp" // for HPCOMBI_ASSERT
+
34 #include "epu8.hpp" // for epu8
+
35 #include "perm16.hpp" // for Perm16
+
36 
+
37 namespace HPCombi {
+
38 
+
48 class BMat8 {
+
49  public:
+
53  BMat8() noexcept = default;
+
54 
+
59  explicit BMat8(uint64_t mat) noexcept : _data(mat) {}
+
60 
+
65  // Not sure if this is noexcept or not
+
66  explicit BMat8(std::vector<std::vector<bool>> const &mat);
+
67 
+
71  BMat8(BMat8 const &) noexcept = default;
+
72 
+
76  BMat8(BMat8 &&) noexcept = default;
+
77 
+
81  BMat8 &operator=(BMat8 const &) noexcept = default;
+
82 
+
86  BMat8 &operator=(BMat8 &&) noexcept = default;
+
87 
+
89  ~BMat8() = default;
+
90 
+
94  bool operator==(BMat8 const &that) const noexcept {
+
95  return _data == that._data;
+
96  }
+
97 
+
101  bool operator!=(BMat8 const &that) const noexcept {
+
102  return _data != that._data;
+
103  }
+
104 
+
109  bool operator<(BMat8 const &that) const noexcept {
+
110  return _data < that._data;
+
111  }
+
112 
+
117  bool operator>(BMat8 const &that) const noexcept {
+
118  return _data > that._data;
+
119  }
+
120 
+
126  bool operator()(size_t i, size_t j) const noexcept;
+
127 
+
133  void set(size_t i, size_t j, bool val) noexcept;
+
134 
+
140  uint64_t to_int() const noexcept { return _data; }
+
141 
+
146  BMat8 transpose() const noexcept;
+
147 
+
152  BMat8 transpose_mask() const noexcept;
+
153 
+
158  BMat8 transpose_maskd() const noexcept;
+
159 
+
164  static void transpose2(BMat8 &, BMat8 &) noexcept;
+
165 
+
172  BMat8 mult_transpose(BMat8 const &that) const noexcept;
+
173 
+
179  BMat8 operator*(BMat8 const &that) const noexcept {
+
180  return mult_transpose(that.transpose());
+
181  }
+
182 
+
189  BMat8 row_space_basis() const noexcept;
+
190 
+
195  BMat8 col_space_basis() const noexcept {
+
196  return transpose().row_space_basis().transpose();
+
197  }
+
198 
+
200  size_t nr_rows() const noexcept;
+
201 
+
203  // Not noexcept because it constructs a vector
+
204  std::vector<uint8_t> rows() const;
+
205 
+
209  // Not noexcept because row_space_bitset_ref isn't
+
210  uint64_t row_space_size_ref() const;
+
211 
+
215  // Not noexcept because it creates a vector
+
216  std::bitset<256> row_space_bitset_ref() const;
+
217 
+
221  void row_space_bitset(epu8 &res1, epu8 &res2) const noexcept;
+
222 
+
227  uint64_t row_space_size_bitset() const noexcept;
+
228 
+
234  uint64_t row_space_size_incl() const noexcept;
+
235 
+
240  uint64_t row_space_size_incl1() const noexcept;
+
241 
+
245  uint64_t row_space_size() const noexcept { return row_space_size_incl(); }
+
246 
+
250  bool row_space_included_ref(BMat8 other) const noexcept;
+
251 
+
255  bool row_space_included_bitset(BMat8 other) const noexcept;
+
256 
+
261  epu8 row_space_mask(epu8 vects) const noexcept;
+
262 
+
266  bool row_space_included(BMat8 other) const noexcept;
+
267 
+
271  // Not noexcept because std::make_pair is not
+
272  static std::pair<bool, bool> row_space_included2(BMat8 a1, BMat8 b1,
+
273  BMat8 a2, BMat8 b2);
+
274 
+
279  BMat8 row_permuted(Perm16 p) const noexcept;
+
280 
+
285  BMat8 col_permuted(Perm16 p) const noexcept;
+
286 
+
291  static BMat8 row_permutation_matrix(Perm16 p) noexcept;
+
292 
+
297  static BMat8 col_permutation_matrix(Perm16 p) noexcept;
+
298 
+
304  Perm16 right_perm_action_on_basis(BMat8) const noexcept;
+
305 
+
311  // Not noexcept because vectors are allocated
+ +
313 
+
317  static BMat8 one(size_t dim = 8) noexcept {
+
318  HPCOMBI_ASSERT(dim <= 8);
+
319  static std::array<uint64_t, 9> const ones = {
+
320  0x0000000000000000, 0x8000000000000000, 0x8040000000000000,
+
321  0x8040200000000000, 0x8040201000000000, 0x8040201008000000,
+
322  0x8040201008040000, 0x8040201008040200, 0x8040201008040201};
+
323  return BMat8(ones[dim]);
+
324  }
+
325 
+
329  // Not noexcept because random things aren't
+
330  static BMat8 random();
+
331 
+
336  // Not noexcept because BMat8::random above is not
+
337  static BMat8 random(size_t dim);
+
338 
+
339  void swap(BMat8 &that) noexcept { std::swap(this->_data, that._data); }
+
340 
+
342  // Not noexcept
+
343  std::ostream &write(std::ostream &os) const;
+
344 
+
345 #ifdef HPCOMBI_HAVE_DENSEHASHMAP
+
346  // FIXME do this another way
+
347  BMat8 empty_key() const noexcept { return BMat8(0xFF7FBFDFEFF7FBFE); }
+
348 #endif
+
349 
+
350  private:
+
351  uint64_t _data;
+
352 
+
353  epu8 row_space_basis_internal() const noexcept;
+
354 };
+
355 
+
356 } // namespace HPCombi
+
357 
+
358 #include "bmat8_impl.hpp"
+
359 
+
360 namespace std {
+
361 template <> struct hash<HPCombi::BMat8> {
+
362  inline size_t operator()(HPCombi::BMat8 const &bm) const {
+
363  return hash<uint64_t>()(bm.to_int());
+
364  }
+
365 };
+
366 } // namespace std
+
367 #endif // HPCOMBI_BMAT8_HPP_
+
Class for fast boolean matrices of dimension up to 8 x 8.
Definition: bmat8.hpp:48
+
uint64_t row_space_size_incl() const noexcept
Returns the cardinality of the row space of this.
Definition: bmat8_impl.hpp:312
+
BMat8 row_space_basis() const noexcept
Returns a canonical basis of the row space of this.
Definition: bmat8_impl.hpp:234
+
static std::pair< bool, bool > row_space_included2(BMat8 a1, BMat8 b1, BMat8 a2, BMat8 b2)
Returns inclusion of row spaces.
Definition: bmat8_impl.hpp:357
+
static void transpose2(BMat8 &, BMat8 &) noexcept
Transpose two matrices at once.
Definition: bmat8_impl.hpp:185
+
uint64_t row_space_size_bitset() const noexcept
Returns the cardinality of the row space of this.
Definition: bmat8_impl.hpp:287
+
static BMat8 row_permutation_matrix(Perm16 p) noexcept
Returns the matrix associated to the permutation p by rows.
Definition: bmat8_impl.hpp:432
+
BMat8 mult_transpose(BMat8 const &that) const noexcept
Returns the matrix product of this and the transpose of that.
Definition: bmat8_impl.hpp:205
+
BMat8(BMat8 const &) noexcept=default
A constructor.
+
BMat8 transpose_maskd() const noexcept
Returns the transpose of this.
Definition: bmat8_impl.hpp:171
+
BMat8(BMat8 &&) noexcept=default
A constructor.
+
bool row_space_included_bitset(BMat8 other) const noexcept
Returns whether the row space of this is included in other's.
Definition: bmat8_impl.hpp:328
+
bool operator>(BMat8 const &that) const noexcept
Returns true if this is greater than that.
Definition: bmat8.hpp:117
+
BMat8 transpose() const noexcept
Returns the transpose of this.
Definition: bmat8_impl.hpp:148
+
static BMat8 col_permutation_matrix(Perm16 p) noexcept
Returns the matrix associated to the permutation p by columns.
Definition: bmat8_impl.hpp:436
+
epu8 row_space_mask(epu8 vects) const noexcept
Returns a mask for which vectors of a 16 rows epu8 are in the row space of this.
Definition: bmat8_impl.hpp:347
+
BMat8 row_permuted(Perm16 p) const noexcept
Returns the matrix whose rows have been permuted according to p.
Definition: bmat8_impl.hpp:420
+
BMat8() noexcept=default
A default constructor.
+
BMat8 col_space_basis() const noexcept
Returns a canonical basis of the col space of this.
Definition: bmat8.hpp:195
+
bool row_space_included(BMat8 other) const noexcept
Returns whether the row space of this is included in other's.
Definition: bmat8_impl.hpp:336
+
std::ostream & write(std::ostream &os) const
Write this on os.
Definition: bmat8_impl.hpp:481
+
void row_space_bitset(epu8 &res1, epu8 &res2) const noexcept
Returns the the row space of this as 256 bits.
Definition: bmat8_impl.hpp:272
+
Perm16 right_perm_action_on_basis(BMat8) const noexcept
Give the permutation whose right multiplication change *this to other.
Definition: bmat8_impl.hpp:471
+
std::bitset< 256 > row_space_bitset_ref() const
Returns the the row space of this.
Definition: bmat8_impl.hpp:371
+
bool operator!=(BMat8 const &that) const noexcept
Returns true if this does not equal that.
Definition: bmat8.hpp:101
+
BMat8 col_permuted(Perm16 p) const noexcept
Returns the matrix whose columns have been permuted according to p.
Definition: bmat8_impl.hpp:428
+
uint64_t to_int() const noexcept
Returns the integer representation of this.
Definition: bmat8.hpp:140
+
uint64_t row_space_size_ref() const
Returns the cardinality of the row space of this.
Definition: bmat8_impl.hpp:399
+
uint64_t row_space_size() const noexcept
Returns the cardinality of the row space of this.
Definition: bmat8.hpp:245
+
BMat8 transpose_mask() const noexcept
Returns the transpose of this.
Definition: bmat8_impl.hpp:159
+
void swap(BMat8 &that) noexcept
Definition: bmat8.hpp:339
+
static BMat8 one(size_t dim=8) noexcept
Returns the identity BMat8.
Definition: bmat8.hpp:317
+
std::vector< uint8_t > rows() const
Returns a std::vector for rows of this.
Definition: bmat8_impl.hpp:403
+
size_t nr_rows() const noexcept
Returns the number of non-zero rows of this.
Definition: bmat8_impl.hpp:412
+
void set(size_t i, size_t j, bool val) noexcept
Sets the (i, j)th position to val.
Definition: bmat8_impl.hpp:106
+
static BMat8 random()
Returns a random BMat8.
Definition: bmat8_impl.hpp:130
+
bool operator()(size_t i, size_t j) const noexcept
Returns the entry in the (i, j)th position.
Definition: bmat8_impl.hpp:100
+
bool operator<(BMat8 const &that) const noexcept
Returns true if this is less than that.
Definition: bmat8.hpp:109
+
uint64_t row_space_size_incl1() const noexcept
Returns the cardinality of the row space of this.
Definition: bmat8_impl.hpp:296
+
bool row_space_included_ref(BMat8 other) const noexcept
Returns whether the row space of this is included in other's.
Definition: bmat8_impl.hpp:393
+
Perm16 right_perm_action_on_basis_ref(BMat8) const
Give the permutation whose right multiplication change *this to other.
Definition: bmat8_impl.hpp:440
+ +
#define HPCOMBI_ASSERT(x)
Definition: debug.hpp:23
+ +
const Transf16 a1
Definition: image.cpp:48
+
const Transf16 a2
Definition: image.cpp:49
+
Definition: bmat8.hpp:37
+
uint8_t __attribute__((vector_size(16))) epu8
SIMD vector of 16 unsigned bytes.
Definition: epu8.hpp:41
+
Definition: bmat8.hpp:360
+ +
Permutations of .
Definition: perm16.hpp:204
+
size_t operator()(HPCombi::BMat8 const &bm) const
Definition: bmat8.hpp:362
+
+ + + + diff --git a/docs/bmat8__impl_8hpp.html b/docs/bmat8__impl_8hpp.html new file mode 100644 index 00000000..bd94106d --- /dev/null +++ b/docs/bmat8__impl_8hpp.html @@ -0,0 +1,141 @@ + + + + + + + +HPCombi: /home/florent/src/HPCombi/include/hpcombi/bmat8_impl.hpp File Reference + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+Namespaces | +Macros | +Typedefs | +Functions | +Variables
+
+
bmat8_impl.hpp File Reference
+
+
+ +

Go to the source code of this file.

+ + + + + + + + +

+Namespaces

 HPCombi
 
 HPCombi::detail
 
 std
 
+ + + +

+Macros

#define FF   0xff
 
+ + + +

+Typedefs

using HPCombi::epu64 = uint64_t __attribute__((__vector_size__(16), __may_alias__))
 
+ + + + + +

+Functions

void HPCombi::detail::row_space_update_bitset (epu8 block, epu8 &set0, epu8 &set1) noexcept
 
std::ostream & std::operator<< (std::ostream &os, HPCombi::BMat8 const &bm)
 
+ + + +

+Variables

constexpr std::array< epu8, 4 > HPCombi::masks
 
+

Macro Definition Documentation

+ +

◆ FF

+ +
+
+ + + + +
#define FF   0xff
+
+ +
+
+
+ + + + diff --git a/docs/bmat8__impl_8hpp_source.html b/docs/bmat8__impl_8hpp_source.html new file mode 100644 index 00000000..eff98d28 --- /dev/null +++ b/docs/bmat8__impl_8hpp_source.html @@ -0,0 +1,644 @@ + + + + + + + +HPCombi: /home/florent/src/HPCombi/include/hpcombi/bmat8_impl.hpp Source File + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
bmat8_impl.hpp
+
+
+Go to the documentation of this file.
1 // Copyright (C) 2018 Finn Smith <fls3@st-andrews.ac.uk> //
+
3 // Copyright (C) 2018 James Mitchell <jdm3@st-andrews.ac.uk> //
+
4 // Copyright (C) 2018 Florent Hivert <Florent.Hivert@lri.fr>, //
+
5 // //
+
6 // Distributed under the terms of the GNU General Public License (GPL) //
+
7 // //
+
8 // This code is distributed in the hope that it will be useful, //
+
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of //
+
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU //
+
11 // General Public License for more details. //
+
12 // //
+
13 // The full text of the GPL is available at: //
+
14 // //
+
15 // http://www.gnu.org/licenses/ //
+
17 
+
18 // This file contains an implementation of fast boolean matrices up to
+
19 // dimension 8 x 8.
+
20 
+
21 // NOLINT(build/header_guard)
+
22 
+
23 namespace HPCombi {
+
24 static_assert(std::is_trivial<BMat8>(), "BMat8 is not a trivial class!");
+
25 
+
26 static const constexpr std::array<uint64_t, 8> ROW_MASK = {
+
27  {0xff00000000000000, 0xff000000000000, 0xff0000000000, 0xff00000000,
+
28  0xff000000, 0xff0000, 0xff00, 0xff}};
+
29 
+
30 static const constexpr std::array<uint64_t, 8> COL_MASK = {
+
31  0x8080808080808080, 0x4040404040404040, 0x2020202020202020,
+
32  0x1010101010101010, 0x808080808080808, 0x404040404040404,
+
33  0x202020202020202, 0x101010101010101};
+
34 
+
35 static const constexpr std::array<uint64_t, 64> BIT_MASK = {{0x8000000000000000,
+
36  0x4000000000000000,
+
37  0x2000000000000000,
+
38  0x1000000000000000,
+
39  0x800000000000000,
+
40  0x400000000000000,
+
41  0x200000000000000,
+
42  0x100000000000000,
+
43  0x80000000000000,
+
44  0x40000000000000,
+
45  0x20000000000000,
+
46  0x10000000000000,
+
47  0x8000000000000,
+
48  0x4000000000000,
+
49  0x2000000000000,
+
50  0x1000000000000,
+
51  0x800000000000,
+
52  0x400000000000,
+
53  0x200000000000,
+
54  0x100000000000,
+
55  0x80000000000,
+
56  0x40000000000,
+
57  0x20000000000,
+
58  0x10000000000,
+
59  0x8000000000,
+
60  0x4000000000,
+
61  0x2000000000,
+
62  0x1000000000,
+
63  0x800000000,
+
64  0x400000000,
+
65  0x200000000,
+
66  0x100000000,
+
67  0x80000000,
+
68  0x40000000,
+
69  0x20000000,
+
70  0x10000000,
+
71  0x8000000,
+
72  0x4000000,
+
73  0x2000000,
+
74  0x1000000,
+
75  0x800000,
+
76  0x400000,
+
77  0x200000,
+
78  0x100000,
+
79  0x80000,
+
80  0x40000,
+
81  0x20000,
+
82  0x10000,
+
83  0x8000,
+
84  0x4000,
+
85  0x2000,
+
86  0x1000,
+
87  0x800,
+
88  0x400,
+
89  0x200,
+
90  0x100,
+
91  0x80,
+
92  0x40,
+
93  0x20,
+
94  0x10,
+
95  0x8,
+
96  0x4,
+
97  0x2,
+
98  0x1}};
+
99 
+
100 inline bool BMat8::operator()(size_t i, size_t j) const noexcept {
+
101  HPCOMBI_ASSERT(i < 8);
+
102  HPCOMBI_ASSERT(j < 8);
+
103  return (_data << (8 * i + j)) >> 63;
+
104 }
+
105 
+
106 inline void BMat8::set(size_t i, size_t j, bool val) noexcept {
+
107  HPCOMBI_ASSERT(i < 8);
+
108  HPCOMBI_ASSERT(j < 8);
+
109  _data ^= (-val ^ _data) & BIT_MASK[8 * i + j];
+
110 }
+
111 
+
112 inline BMat8::BMat8(std::vector<std::vector<bool>> const &mat) {
+
113  HPCOMBI_ASSERT(mat.size() <= 8);
+
114  HPCOMBI_ASSERT(0 < mat.size());
+
115  _data = 0;
+
116  uint64_t pow = 1;
+
117  pow = pow << 63;
+
118  for (auto const &row : mat) {
+
119  HPCOMBI_ASSERT(row.size() == mat.size());
+
120  for (auto entry : row) {
+
121  if (entry) {
+
122  _data ^= pow;
+
123  }
+
124  pow = pow >> 1;
+
125  }
+
126  pow = pow >> (8 - mat.size());
+
127  }
+
128 }
+
129 
+ +
131  static std::random_device _rd;
+
132  static std::mt19937 _gen(_rd());
+
133  static std::uniform_int_distribution<uint64_t> _dist(0, 0xffffffffffffffff);
+
134 
+
135  return BMat8(_dist(_gen));
+
136 }
+
137 
+
138 inline BMat8 BMat8::random(size_t const dim) {
+
139  HPCOMBI_ASSERT(0 < dim && dim <= 8);
+
140  BMat8 bm = BMat8::random();
+
141  for (size_t i = dim; i < 8; ++i) {
+
142  bm._data &= ~ROW_MASK[i];
+
143  bm._data &= ~COL_MASK[i];
+
144  }
+
145  return bm;
+
146 }
+
147 
+
148 inline BMat8 BMat8::transpose() const noexcept {
+
149  uint64_t x = _data;
+
150  uint64_t y = (x ^ (x >> 7)) & 0xAA00AA00AA00AA;
+
151  x = x ^ y ^ (y << 7);
+
152  y = (x ^ (x >> 14)) & 0xCCCC0000CCCC;
+
153  x = x ^ y ^ (y << 14);
+
154  y = (x ^ (x >> 28)) & 0xF0F0F0F0;
+
155  x = x ^ y ^ (y << 28);
+
156  return BMat8(x);
+
157 }
+
158 
+
159 inline BMat8 BMat8::transpose_mask() const noexcept {
+
160  epu8 x = simde_mm_set_epi64x(_data, _data << 1);
+
161  uint64_t res = simde_mm_movemask_epi8(x);
+
162  x = x << Epu8(2);
+
163  res = res << 16 | simde_mm_movemask_epi8(x);
+
164  x = x << Epu8(2);
+
165  res = res << 16 | simde_mm_movemask_epi8(x);
+
166  x = x << Epu8(2);
+
167  res = res << 16 | simde_mm_movemask_epi8(x);
+
168  return BMat8(res);
+
169 }
+
170 
+
171 inline BMat8 BMat8::transpose_maskd() const noexcept {
+
172  uint64_t res =
+
173  simde_mm_movemask_epi8(simde_mm_set_epi64x(_data, _data << 1));
+
174  res = res << 16 |
+
175  simde_mm_movemask_epi8(simde_mm_set_epi64x(_data << 2, _data << 3));
+
176  res = res << 16 |
+
177  simde_mm_movemask_epi8(simde_mm_set_epi64x(_data << 4, _data << 5));
+
178  res = res << 16 |
+
179  simde_mm_movemask_epi8(simde_mm_set_epi64x(_data << 6, _data << 7));
+
180  return BMat8(res);
+
181 }
+
182 
+
183 using epu64 = uint64_t __attribute__((__vector_size__(16), __may_alias__));
+
184 
+
185 inline void BMat8::transpose2(BMat8 &a, BMat8 &b) noexcept {
+
186  epu64 x = simde_mm_set_epi64x(a._data, b._data);
+
187  epu64 y = (x ^ (x >> 7)) & (epu64{0xAA00AA00AA00AA, 0xAA00AA00AA00AA});
+
188  x = x ^ y ^ (y << 7);
+
189  y = (x ^ (x >> 14)) & (epu64{0xCCCC0000CCCC, 0xCCCC0000CCCC});
+
190  x = x ^ y ^ (y << 14);
+
191  y = (x ^ (x >> 28)) & (epu64{0xF0F0F0F0, 0xF0F0F0F0});
+
192  x = x ^ y ^ (y << 28);
+
193  a._data = simde_mm_extract_epi64(x, 1);
+
194  b._data = simde_mm_extract_epi64(x, 0);
+
195 }
+
196 
+
197 static constexpr epu8 rotlow{7, 0, 1, 2, 3, 4, 5, 6};
+
198 static constexpr epu8 rothigh{0, 1, 2, 3, 4, 5, 6, 7,
+
199  15, 8, 9, 10, 11, 12, 13, 14};
+
200 static constexpr epu8 rotboth{7, 0, 1, 2, 3, 4, 5, 6,
+
201  15, 8, 9, 10, 11, 12, 13, 14};
+
202 static constexpr epu8 rot2{6, 7, 0, 1, 2, 3, 4, 5,
+
203  14, 15, 8, 9, 10, 11, 12, 13};
+
204 
+
205 inline BMat8 BMat8::mult_transpose(BMat8 const &that) const noexcept {
+
206  epu8 x = simde_mm_set_epi64x(_data, _data);
+
207  epu8 y = simde_mm_shuffle_epi8(simde_mm_set_epi64x(that._data, that._data),
+
208  rothigh);
+
209  epu8 data{};
+
210  epu8 diag{0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80,
+
211  0x80, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40};
+
212  for (int i = 0; i < 4; ++i) {
+
213  data |= ((x & y) != epu8{}) & diag;
+
214  y = simde_mm_shuffle_epi8(y, rot2);
+
215  diag = simde_mm_shuffle_epi8(diag, rot2);
+
216  }
+
217  return BMat8(simde_mm_extract_epi64(data, 0) |
+
218  simde_mm_extract_epi64(data, 1));
+
219 }
+
220 
+
221 inline epu8 BMat8::row_space_basis_internal() const noexcept {
+
222  epu8 res = remove_dups(revsorted8(simde_mm_set_epi64x(0, _data)));
+
223  epu8 rescy = res;
+
224  // We now compute the union of all the included different rows
+
225  epu8 orincl{};
+
226  for (int i = 0; i < 7; i++) {
+
227  rescy = permuted(rescy, rotlow);
+
228  orincl |= ((rescy | res) == res) & rescy;
+
229  }
+
230  res = (res != orincl) & res;
+
231  return res;
+
232 }
+
233 
+
234 inline BMat8 BMat8::row_space_basis() const noexcept {
+
235  return BMat8(
+
236  simde_mm_extract_epi64(sorted8(row_space_basis_internal()), 0));
+
237 }
+
238 
+
239 #if defined(FF)
+
240 #error FF is defined !
+
241 #endif // FF
+
242 #define FF 0xff
+
243 
+
244 constexpr std::array<epu8, 4> masks{{
+
245  // clang-format off
+
246  {FF, 0,FF, 0,FF, 0,FF, 0,FF, 0,FF, 0,FF, 0,FF, 0}, // NOLINT()
+
247  {FF,FF, 1, 1,FF,FF, 1, 1,FF,FF, 1, 1,FF,FF, 1, 1}, // NOLINT()
+
248  {FF,FF,FF,FF, 2, 2, 2, 2,FF,FF,FF,FF, 2, 2, 2, 2}, // NOLINT()
+
249  {FF,FF,FF,FF,FF,FF,FF,FF, 3, 3, 3, 3, 3, 3, 3, 3} // NOLINT()
+
250  }};
+
251 #undef FF
+
252 
+
253 static const epu8 shiftres{1, 2, 4, 8, 0x10, 0x20, 0x40, 0x80};
+
254 
+
255 namespace detail {
+
256 
+
257 inline void row_space_update_bitset(epu8 block, epu8 &set0, epu8 &set1)
+
258 noexcept {
+
259  static const epu8 bound08 = simde_mm_slli_epi32(
+
260  static_cast<simde__m128i>(Epu8.id()), 3); // shift for *8
+
261  static const epu8 bound18 = bound08 + Epu8(0x80);
+
262  for (size_t slice8 = 0; slice8 < 16; slice8++) {
+
263  epu8 bm5 = Epu8(0xf8) & block; /* 11111000 */
+
264  epu8 shft = simde_mm_shuffle_epi8(shiftres, block - bm5);
+
265  set0 |= (bm5 == bound08) & shft;
+
266  set1 |= (bm5 == bound18) & shft;
+
267  block = simde_mm_shuffle_epi8(block, Epu8.right_cycle());
+
268  }
+
269 }
+
270 } // namespace detail
+
271 
+
272 inline void BMat8::row_space_bitset(epu8 &res0, epu8 &res1) const noexcept {
+
273  epu8 in = simde_mm_set_epi64x(0, _data);
+
274  epu8 block0{}, block1{};
+
275  for (epu8 m : masks) {
+
276  block0 |= static_cast<epu8>(simde_mm_shuffle_epi8(in, m));
+
277  block1 |= static_cast<epu8>(simde_mm_shuffle_epi8(in, m | Epu8(4)));
+
278  }
+
279  res0 = epu8{};
+
280  res1 = epu8{};
+
281  for (size_t r = 0; r < 16; r++) {
+
282  detail::row_space_update_bitset(block0 | block1, res0, res1);
+
283  block1 = simde_mm_shuffle_epi8(block1, Epu8.right_cycle());
+
284  }
+
285 }
+
286 
+
287 inline uint64_t BMat8::row_space_size_bitset() const noexcept {
+
288  epu8 res0{}, res1{};
+
289  row_space_bitset(res0, res1);
+
290  return (__builtin_popcountll(simde_mm_extract_epi64(res0, 0)) +
+
291  __builtin_popcountll(simde_mm_extract_epi64(res1, 0)) +
+
292  __builtin_popcountll(simde_mm_extract_epi64(res0, 1)) +
+
293  __builtin_popcountll(simde_mm_extract_epi64(res1, 1)));
+
294 }
+
295 
+
296 inline uint64_t BMat8::row_space_size_incl1() const noexcept {
+
297  epu8 in = simde_mm_set_epi64x(_data, _data);
+
298  epu8 block = Epu8.id();
+
299  uint64_t res = 0;
+
300  for (size_t r = 0; r < 16; r++) {
+
301  epu8 orincl{};
+
302  for (int i = 0; i < 8; i++) {
+
303  orincl |= ((in | block) == block) & in;
+
304  in = permuted(in, rotboth);
+
305  }
+
306  res += __builtin_popcountll(simde_mm_movemask_epi8(block == orincl));
+
307  block += Epu8(16);
+
308  }
+
309  return res;
+
310 }
+
311 
+
312 inline uint64_t BMat8::row_space_size_incl() const noexcept {
+
313  epu8 in = simde_mm_set_epi64x(_data, _data);
+
314  epu8 block = Epu8.id();
+
315  uint64_t res = 0;
+
316  for (size_t r = 0; r < 16; r++) {
+
317  epu8 orincl = ((in | block) == block) & in;
+
318  for (int i = 0; i < 7; i++) { // Only rotating
+
319  in = permuted(in, rotboth);
+
320  orincl |= ((in | block) == block) & in;
+
321  }
+
322  res += __builtin_popcountll(simde_mm_movemask_epi8(block == orincl));
+
323  block += Epu8(16);
+
324  }
+
325  return res;
+
326 }
+
327 
+
328 inline bool BMat8::row_space_included_bitset(BMat8 other) const noexcept {
+
329  epu8 this0, this1, other0, other1;
+
330  this->row_space_bitset(this0, this1);
+
331  other.row_space_bitset(other0, other1);
+
332  // Double inclusion of bitsets
+
333  return equal(this0 | other0, other0) && equal(this1 | other1, other1);
+
334 }
+
335 
+
336 inline bool BMat8::row_space_included(BMat8 other) const noexcept {
+
337  epu8 in = simde_mm_set_epi64x(0, other._data);
+
338  epu8 block = simde_mm_set_epi64x(0, _data);
+
339  epu8 orincl = ((in | block) == block) & in;
+
340  for (int i = 0; i < 7; i++) { // Only rotating
+
341  in = permuted(in, rotlow);
+
342  orincl |= ((in | block) == block) & in;
+
343  }
+
344  return equal(block, orincl);
+
345 }
+
346 
+
347 inline epu8 BMat8::row_space_mask(epu8 block) const noexcept {
+
348  epu8 in = simde_mm_set_epi64x(_data, _data);
+
349  epu8 orincl = ((in | block) == block) & in;
+
350  for (int i = 0; i < 7; i++) { // Only rotating
+
351  in = permuted(in, rotboth);
+
352  orincl |= ((in | block) == block) & in;
+
353  }
+
354  return block == orincl;
+
355 }
+
356 
+
357 inline std::pair<bool, bool> BMat8::row_space_included2(BMat8 a0, BMat8 b0,
+
358  BMat8 a1, BMat8 b1) {
+
359  epu8 in = simde_mm_set_epi64x(b1._data, b0._data);
+
360  epu8 block = simde_mm_set_epi64x(a1._data, a0._data);
+
361  epu8 orincl = ((in | block) == block) & in;
+
362  for (int i = 0; i < 7; i++) { // Only rotating
+
363  in = permuted(in, rotboth);
+
364  orincl |= ((in | block) == block) & in;
+
365  }
+
366  epu8 res = (block == orincl);
+
367  return std::make_pair(simde_mm_extract_epi64(res, 0) == -1,
+
368  simde_mm_extract_epi64(res, 1) == -1);
+
369 }
+
370 
+
371 inline std::bitset<256> BMat8::row_space_bitset_ref() const {
+
372  std::bitset<256> lookup;
+
373  std::vector<uint8_t> row_vec = row_space_basis().rows();
+
374  auto last = std::remove(row_vec.begin(), row_vec.end(), 0);
+
375  row_vec.erase(last, row_vec.end());
+
376  for (uint8_t x : row_vec) {
+
377  lookup.set(x);
+
378  }
+
379  lookup.set(0);
+
380  std::vector<uint8_t> row_space(row_vec.begin(), row_vec.end());
+
381  for (size_t i = 0; i < row_space.size(); ++i) {
+
382  for (uint8_t row : row_vec) {
+
383  uint8_t x = row_space[i] | row;
+
384  if (!lookup[x]) {
+
385  row_space.push_back(x);
+
386  lookup.set(x);
+
387  }
+
388  }
+
389  }
+
390  return lookup;
+
391 }
+
392 
+
393 inline bool BMat8::row_space_included_ref(BMat8 other) const noexcept {
+
394  std::bitset<256> thisspace = row_space_bitset_ref();
+
395  std::bitset<256> otherspace = other.row_space_bitset_ref();
+
396  return (thisspace | otherspace) == otherspace;
+
397 }
+
398 
+
399 inline uint64_t BMat8::row_space_size_ref() const {
+
400  return row_space_bitset_ref().count();
+
401 }
+
402 
+
403 inline std::vector<uint8_t> BMat8::rows() const {
+
404  std::vector<uint8_t> rows;
+
405  for (size_t i = 0; i < 8; ++i) {
+
406  uint8_t row = static_cast<uint8_t>(_data << (8 * i) >> 56);
+
407  rows.push_back(row);
+
408  }
+
409  return rows;
+
410 }
+
411 
+
412 inline size_t BMat8::nr_rows() const noexcept {
+
413  epu8 x = simde_mm_set_epi64x(_data, 0);
+
414  return __builtin_popcountll(simde_mm_movemask_epi8(x != epu8{}));
+
415 }
+
416 
+
417 static constexpr epu8 rev8{7, 6, 5, 4, 3, 2, 1, 0,
+
418  8, 9, 10, 11, 12, 13, 14, 15};
+
419 
+
420 inline BMat8 BMat8::row_permuted(Perm16 p) const noexcept {
+
421  epu8 x = simde_mm_set_epi64x(0, _data);
+
422  x = permuted(x, rev8);
+
423  x = permuted(x, p);
+
424  x = permuted(x, rev8);
+
425  return BMat8(simde_mm_extract_epi64(x, 0));
+
426 }
+
427 
+
428 inline BMat8 BMat8::col_permuted(Perm16 p) const noexcept {
+
429  return transpose().row_permuted(p).transpose();
+
430 }
+
431 
+ +
433  return one().row_permuted(p);
+
434 }
+
435 
+ +
437  return one().row_permuted(p).transpose();
+
438 }
+
439 
+ +
441  HPCOMBI_ASSERT(bm.row_space_basis() == bm);
+
442  std::vector<uint8_t> rows = this->rows();
+
443  BMat8 product = *this * bm;
+
444  std::vector<uint8_t> prod_rows = product.rows();
+
445 
+
446  HPCOMBI_ASSERT(product.row_space_basis() == bm);
+
447 
+
448  std::vector<uint8_t> perm(8);
+
449  for (size_t i = 0; i < nr_rows(); ++i) {
+
450  uint8_t row = rows[i];
+
451  perm[i] =
+
452  std::distance(prod_rows.begin(),
+
453  std::find(prod_rows.begin(), prod_rows.end(), row));
+
454  }
+
455 
+
456 #ifndef __clang__
+
457 #pragma GCC diagnostic push
+
458 #pragma GCC diagnostic ignored "-Wstringop-overflow"
+
459 #endif
+
460  std::iota(perm.begin() + nr_rows(), perm.end(), nr_rows());
+
461 #ifndef __clang__
+
462 #pragma GCC diagnostic pop
+
463 #endif
+
464 
+
465  Perm16 res = Perm16::one();
+
466  for (size_t i = 0; i < 8; i++)
+
467  res[i] = perm[i];
+
468  return res;
+
469 }
+
470 
+
471 inline Perm16 BMat8::right_perm_action_on_basis(BMat8 other) const noexcept {
+
472  epu8 x = permuted(simde_mm_set_epi64x(_data, 0), Epu8.rev());
+
473  epu8 y = permuted(simde_mm_set_epi64x((*this * other)._data, 0),
+
474  Epu8.rev());
+
475  // Vector ternary operator is not supported by clang.
+
476  // return (x != (epu8 {})) ? permutation_of(y, x) : Epu8.id();
+
477  return simde_mm_blendv_epi8(Epu8.id(), permutation_of(y, x), x != epu8{});
+
478 }
+
479 
+
480 // Not noexcept because std::ostream::operator<< isn't
+
481 inline std::ostream &BMat8::write(std::ostream &os) const {
+
482  uint64_t x = _data;
+
483  uint64_t pow = 1;
+
484  pow = pow << 63;
+
485  for (size_t i = 0; i < 8; ++i) {
+
486  for (size_t j = 0; j < 8; ++j) {
+
487  if (pow & x) {
+
488  os << "1";
+
489  } else {
+
490  os << "0";
+
491  }
+
492  x = x << 1;
+
493  }
+
494  os << "\n";
+
495  }
+
496  return os;
+
497 }
+
498 
+
499 } // namespace HPCombi
+
500 
+
501 namespace std {
+
502 
+
503 // Not noexcept because BMat8::write isn't
+
504 inline std::ostream &operator<<(std::ostream &os, HPCombi::BMat8 const &bm) {
+
505  return bm.write(os);
+
506 }
+
507 
+
508 } // namespace std
+
#define FF
Definition: bmat8_impl.hpp:242
+
Class for fast boolean matrices of dimension up to 8 x 8.
Definition: bmat8.hpp:48
+
uint64_t row_space_size_incl() const noexcept
Returns the cardinality of the row space of this.
Definition: bmat8_impl.hpp:312
+
BMat8 row_space_basis() const noexcept
Returns a canonical basis of the row space of this.
Definition: bmat8_impl.hpp:234
+
static std::pair< bool, bool > row_space_included2(BMat8 a1, BMat8 b1, BMat8 a2, BMat8 b2)
Returns inclusion of row spaces.
Definition: bmat8_impl.hpp:357
+
static void transpose2(BMat8 &, BMat8 &) noexcept
Transpose two matrices at once.
Definition: bmat8_impl.hpp:185
+
uint64_t row_space_size_bitset() const noexcept
Returns the cardinality of the row space of this.
Definition: bmat8_impl.hpp:287
+
static BMat8 row_permutation_matrix(Perm16 p) noexcept
Returns the matrix associated to the permutation p by rows.
Definition: bmat8_impl.hpp:432
+
BMat8 mult_transpose(BMat8 const &that) const noexcept
Returns the matrix product of this and the transpose of that.
Definition: bmat8_impl.hpp:205
+
BMat8 transpose_maskd() const noexcept
Returns the transpose of this.
Definition: bmat8_impl.hpp:171
+
bool row_space_included_bitset(BMat8 other) const noexcept
Returns whether the row space of this is included in other's.
Definition: bmat8_impl.hpp:328
+
BMat8 transpose() const noexcept
Returns the transpose of this.
Definition: bmat8_impl.hpp:148
+
static BMat8 col_permutation_matrix(Perm16 p) noexcept
Returns the matrix associated to the permutation p by columns.
Definition: bmat8_impl.hpp:436
+
epu8 row_space_mask(epu8 vects) const noexcept
Returns a mask for which vectors of a 16 rows epu8 are in the row space of this.
Definition: bmat8_impl.hpp:347
+
BMat8 row_permuted(Perm16 p) const noexcept
Returns the matrix whose rows have been permuted according to p.
Definition: bmat8_impl.hpp:420
+
BMat8() noexcept=default
A default constructor.
+
bool row_space_included(BMat8 other) const noexcept
Returns whether the row space of this is included in other's.
Definition: bmat8_impl.hpp:336
+
std::ostream & write(std::ostream &os) const
Write this on os.
Definition: bmat8_impl.hpp:481
+
void row_space_bitset(epu8 &res1, epu8 &res2) const noexcept
Returns the the row space of this as 256 bits.
Definition: bmat8_impl.hpp:272
+
Perm16 right_perm_action_on_basis(BMat8) const noexcept
Give the permutation whose right multiplication change *this to other.
Definition: bmat8_impl.hpp:471
+
std::bitset< 256 > row_space_bitset_ref() const
Returns the the row space of this.
Definition: bmat8_impl.hpp:371
+
BMat8 col_permuted(Perm16 p) const noexcept
Returns the matrix whose columns have been permuted according to p.
Definition: bmat8_impl.hpp:428
+
uint64_t row_space_size_ref() const
Returns the cardinality of the row space of this.
Definition: bmat8_impl.hpp:399
+
BMat8 transpose_mask() const noexcept
Returns the transpose of this.
Definition: bmat8_impl.hpp:159
+
std::vector< uint8_t > rows() const
Returns a std::vector for rows of this.
Definition: bmat8_impl.hpp:403
+
size_t nr_rows() const noexcept
Returns the number of non-zero rows of this.
Definition: bmat8_impl.hpp:412
+
void set(size_t i, size_t j, bool val) noexcept
Sets the (i, j)th position to val.
Definition: bmat8_impl.hpp:106
+
static BMat8 random()
Returns a random BMat8.
Definition: bmat8_impl.hpp:130
+
bool operator()(size_t i, size_t j) const noexcept
Returns the entry in the (i, j)th position.
Definition: bmat8_impl.hpp:100
+
uint64_t row_space_size_incl1() const noexcept
Returns the cardinality of the row space of this.
Definition: bmat8_impl.hpp:296
+
bool row_space_included_ref(BMat8 other) const noexcept
Returns whether the row space of this is included in other's.
Definition: bmat8_impl.hpp:393
+
Perm16 right_perm_action_on_basis_ref(BMat8) const
Give the permutation whose right multiplication change *this to other.
Definition: bmat8_impl.hpp:440
+
#define HPCOMBI_ASSERT(x)
Definition: debug.hpp:23
+
const Transf16 a1
Definition: image.cpp:48
+
std::array< std::tuple< uint16_t, uint16_t, std::array< uint16_t, gens.size()> >, 65536 > res
Definition: image.cpp:62
+
void row_space_update_bitset(epu8 block, epu8 &set0, epu8 &set1) noexcept
Definition: bmat8_impl.hpp:257
+
Definition: bmat8.hpp:37
+
epu8 permuted(epu8 a, epu8 b) noexcept
Permuting a HPCombi::epu8.
Definition: epu8.hpp:68
+
epu8 remove_dups(epu8 a, uint8_t repl=0) noexcept
Remove duplicates in a sorted HPCombi::epu8.
Definition: epu8_impl.hpp:256
+
epu8 revsorted8(epu8 a) noexcept
Return a HPCombi::epu8 with the two half reverse sorted.
Definition: epu8_impl.hpp:208
+
epu8 permutation_of(epu8 a, epu8 b) noexcept
Find if a vector is a permutation of one other.
Definition: epu8_impl.hpp:299
+
bool equal(epu8 a, epu8 b) noexcept
Equality of HPCombi::epu8.
Definition: epu8.hpp:59
+
epu8 sorted8(epu8 a) noexcept
Return a HPCombi::epu8 with the two half sorted.
Definition: epu8_impl.hpp:202
+
uint64_t __attribute__((__vector_size__(16), __may_alias__)) epu64
Definition: bmat8_impl.hpp:183
+
constexpr TPUBuild< epu8 > Epu8
Factory object acting as a class constructor for type HPCombi::epu8.
Definition: epu8.hpp:49
+
uint8_t __attribute__((vector_size(16))) epu8
SIMD vector of 16 unsigned bytes.
Definition: epu8.hpp:41
+
constexpr std::array< epu8, 4 > masks
Definition: bmat8_impl.hpp:244
+
const T pow(const T x)
A generic compile time exponentiation function.
Definition: power.hpp:79
+
Definition: bmat8.hpp:360
+
std::ostream & operator<<(std::ostream &os, HPCombi::BMat8 const &bm)
Definition: bmat8_impl.hpp:504
+
Permutations of .
Definition: perm16.hpp:204
+
static constexpr Perm16 one()
The identity partial permutation.
Definition: perm16.hpp:219
+
+ + + + diff --git a/docs/classEqEpu8-members.html b/docs/classEqEpu8-members.html new file mode 100644 index 00000000..4605af21 --- /dev/null +++ b/docs/classEqEpu8-members.html @@ -0,0 +1,88 @@ + + + + + + + +HPCombi: Member List + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+
EqEpu8 Member List
+
+
+ +

This is the complete list of members for EqEpu8, including all inherited members.

+ + + + +
begin()EqEpu8inline
end()EqEpu8inline
EqEpu8(epu8 x, uint64_t sz=16)EqEpu8inline
+ + + + diff --git a/docs/classEqEpu8.html b/docs/classEqEpu8.html new file mode 100644 index 00000000..8ab2984d --- /dev/null +++ b/docs/classEqEpu8.html @@ -0,0 +1,187 @@ + + + + + + + +HPCombi: EqEpu8 Class Reference + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+Classes | +Public Member Functions | +List of all members
+
+
EqEpu8 Class Reference
+
+
+ + + + + + + + +

+Public Member Functions

 EqEpu8 (epu8 x, uint64_t sz=16)
 
EqEpu8Iterator begin ()
 
EqEpu8Iterator end ()
 
+

Constructor & Destructor Documentation

+ +

◆ EqEpu8()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
EqEpu8::EqEpu8 (epu8 x,
uint64_t sz = 16 
)
+
+inline
+
+ +
+
+

Member Function Documentation

+ +

◆ begin()

+ +
+
+ + + + + +
+ + + + + + + +
EqEpu8Iterator EqEpu8::begin ()
+
+inline
+
+ +
+
+ +

◆ end()

+ +
+
+ + + + + +
+ + + + + + + +
EqEpu8Iterator EqEpu8::end ()
+
+inline
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/classHPCombi_1_1BMat8-members.html b/docs/classHPCombi_1_1BMat8-members.html new file mode 100644 index 00000000..d5e846d1 --- /dev/null +++ b/docs/classHPCombi_1_1BMat8-members.html @@ -0,0 +1,137 @@ + + + + + + + +HPCombi: Member List + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
HPCombi::BMat8 Member List
+
+
+ +

This is the complete list of members for HPCombi::BMat8, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
BMat8() noexcept=defaultHPCombi::BMat8
BMat8(uint64_t mat) noexceptHPCombi::BMat8inlineexplicit
BMat8(std::vector< std::vector< bool >> const &mat)HPCombi::BMat8inlineexplicit
BMat8(BMat8 const &) noexcept=defaultHPCombi::BMat8
BMat8(BMat8 &&) noexcept=defaultHPCombi::BMat8
col_permutation_matrix(Perm16 p) noexceptHPCombi::BMat8inlinestatic
col_permuted(Perm16 p) const noexceptHPCombi::BMat8inline
col_space_basis() const noexceptHPCombi::BMat8inline
mult_transpose(BMat8 const &that) const noexceptHPCombi::BMat8inline
nr_rows() const noexceptHPCombi::BMat8inline
one(size_t dim=8) noexceptHPCombi::BMat8inlinestatic
operator!=(BMat8 const &that) const noexceptHPCombi::BMat8inline
operator()(size_t i, size_t j) const noexceptHPCombi::BMat8inline
operator*(BMat8 const &that) const noexceptHPCombi::BMat8inline
operator<(BMat8 const &that) const noexceptHPCombi::BMat8inline
operator=(BMat8 const &) noexcept=defaultHPCombi::BMat8
operator=(BMat8 &&) noexcept=defaultHPCombi::BMat8
operator==(BMat8 const &that) const noexceptHPCombi::BMat8inline
operator>(BMat8 const &that) const noexceptHPCombi::BMat8inline
random()HPCombi::BMat8inlinestatic
random(size_t dim)HPCombi::BMat8inlinestatic
right_perm_action_on_basis(BMat8) const noexceptHPCombi::BMat8inline
right_perm_action_on_basis_ref(BMat8) constHPCombi::BMat8inline
row_permutation_matrix(Perm16 p) noexceptHPCombi::BMat8inlinestatic
row_permuted(Perm16 p) const noexceptHPCombi::BMat8inline
row_space_basis() const noexceptHPCombi::BMat8inline
row_space_bitset(epu8 &res1, epu8 &res2) const noexceptHPCombi::BMat8inline
row_space_bitset_ref() constHPCombi::BMat8inline
row_space_included(BMat8 other) const noexceptHPCombi::BMat8inline
row_space_included2(BMat8 a1, BMat8 b1, BMat8 a2, BMat8 b2)HPCombi::BMat8inlinestatic
row_space_included_bitset(BMat8 other) const noexceptHPCombi::BMat8inline
row_space_included_ref(BMat8 other) const noexceptHPCombi::BMat8inline
row_space_mask(epu8 vects) const noexceptHPCombi::BMat8inline
row_space_size() const noexceptHPCombi::BMat8inline
row_space_size_bitset() const noexceptHPCombi::BMat8inline
row_space_size_incl() const noexceptHPCombi::BMat8inline
row_space_size_incl1() const noexceptHPCombi::BMat8inline
row_space_size_ref() constHPCombi::BMat8inline
rows() constHPCombi::BMat8inline
set(size_t i, size_t j, bool val) noexceptHPCombi::BMat8inline
swap(BMat8 &that) noexceptHPCombi::BMat8inline
to_int() const noexceptHPCombi::BMat8inline
transpose() const noexceptHPCombi::BMat8inline
transpose2(BMat8 &, BMat8 &) noexceptHPCombi::BMat8inlinestatic
transpose_mask() const noexceptHPCombi::BMat8inline
transpose_maskd() const noexceptHPCombi::BMat8inline
write(std::ostream &os) constHPCombi::BMat8inline
~BMat8()=defaultHPCombi::BMat8
+ + + + diff --git a/docs/classHPCombi_1_1BMat8.html b/docs/classHPCombi_1_1BMat8.html new file mode 100644 index 00000000..7a265d32 --- /dev/null +++ b/docs/classHPCombi_1_1BMat8.html @@ -0,0 +1,1711 @@ + + + + + + + +HPCombi: HPCombi::BMat8 Class Reference + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+Public Member Functions | +Static Public Member Functions | +List of all members
+
+
HPCombi::BMat8 Class Reference
+
+
+ +

Class for fast boolean matrices of dimension up to 8 x 8. + More...

+ +

#include <bmat8.hpp>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 BMat8 () noexcept=default
 A default constructor. More...
 
 BMat8 (uint64_t mat) noexcept
 A constructor. More...
 
 BMat8 (std::vector< std::vector< bool >> const &mat)
 A constructor. More...
 
 BMat8 (BMat8 const &) noexcept=default
 A constructor. More...
 
 BMat8 (BMat8 &&) noexcept=default
 A constructor. More...
 
BMat8operator= (BMat8 const &) noexcept=default
 A constructor. More...
 
BMat8operator= (BMat8 &&) noexcept=default
 A constructor. More...
 
 ~BMat8 ()=default
 A default destructor. More...
 
bool operator== (BMat8 const &that) const noexcept
 Returns true if this equals that. More...
 
bool operator!= (BMat8 const &that) const noexcept
 Returns true if this does not equal that. More...
 
bool operator< (BMat8 const &that) const noexcept
 Returns true if this is less than that. More...
 
bool operator> (BMat8 const &that) const noexcept
 Returns true if this is greater than that. More...
 
bool operator() (size_t i, size_t j) const noexcept
 Returns the entry in the (i, j)th position. More...
 
void set (size_t i, size_t j, bool val) noexcept
 Sets the (i, j)th position to val. More...
 
uint64_t to_int () const noexcept
 Returns the integer representation of this. More...
 
BMat8 transpose () const noexcept
 Returns the transpose of this. More...
 
BMat8 transpose_mask () const noexcept
 Returns the transpose of this. More...
 
BMat8 transpose_maskd () const noexcept
 Returns the transpose of this. More...
 
BMat8 mult_transpose (BMat8 const &that) const noexcept
 Returns the matrix product of this and the transpose of that. More...
 
BMat8 operator* (BMat8 const &that) const noexcept
 Returns the matrix product of this and that. More...
 
BMat8 row_space_basis () const noexcept
 Returns a canonical basis of the row space of this. More...
 
BMat8 col_space_basis () const noexcept
 Returns a canonical basis of the col space of this. More...
 
size_t nr_rows () const noexcept
 Returns the number of non-zero rows of this. More...
 
std::vector< uint8_t > rows () const
 Returns a std::vector for rows of this. More...
 
uint64_t row_space_size_ref () const
 Returns the cardinality of the row space of this. More...
 
std::bitset< 256 > row_space_bitset_ref () const
 Returns the the row space of this. More...
 
void row_space_bitset (epu8 &res1, epu8 &res2) const noexcept
 Returns the the row space of this as 256 bits. More...
 
uint64_t row_space_size_bitset () const noexcept
 Returns the cardinality of the row space of this. More...
 
uint64_t row_space_size_incl () const noexcept
 Returns the cardinality of the row space of this. More...
 
uint64_t row_space_size_incl1 () const noexcept
 Returns the cardinality of the row space of this. More...
 
uint64_t row_space_size () const noexcept
 Returns the cardinality of the row space of this. More...
 
bool row_space_included_ref (BMat8 other) const noexcept
 Returns whether the row space of this is included in other's. More...
 
bool row_space_included_bitset (BMat8 other) const noexcept
 Returns whether the row space of this is included in other's. More...
 
epu8 row_space_mask (epu8 vects) const noexcept
 Returns a mask for which vectors of a 16 rows epu8 are in the row space of this. More...
 
bool row_space_included (BMat8 other) const noexcept
 Returns whether the row space of this is included in other's. More...
 
BMat8 row_permuted (Perm16 p) const noexcept
 Returns the matrix whose rows have been permuted according to p. More...
 
BMat8 col_permuted (Perm16 p) const noexcept
 Returns the matrix whose columns have been permuted according to p. More...
 
Perm16 right_perm_action_on_basis (BMat8) const noexcept
 Give the permutation whose right multiplication change *this to other. More...
 
Perm16 right_perm_action_on_basis_ref (BMat8) const
 Give the permutation whose right multiplication change *this to other. More...
 
void swap (BMat8 &that) noexcept
 
std::ostream & write (std::ostream &os) const
 Write this on os. More...
 
+ + + + + + + + + + + + + + + + + + + + + + +

+Static Public Member Functions

static void transpose2 (BMat8 &, BMat8 &) noexcept
 Transpose two matrices at once. More...
 
static std::pair< bool, bool > row_space_included2 (BMat8 a1, BMat8 b1, BMat8 a2, BMat8 b2)
 Returns inclusion of row spaces. More...
 
static BMat8 row_permutation_matrix (Perm16 p) noexcept
 Returns the matrix associated to the permutation p by rows. More...
 
static BMat8 col_permutation_matrix (Perm16 p) noexcept
 Returns the matrix associated to the permutation p by columns. More...
 
static BMat8 one (size_t dim=8) noexcept
 Returns the identity BMat8. More...
 
static BMat8 random ()
 Returns a random BMat8. More...
 
static BMat8 random (size_t dim)
 Returns a random square BMat8 up to dimension dim. More...
 
+

Detailed Description

+

Class for fast boolean matrices of dimension up to 8 x 8.

+

The methods for these small matrices over the boolean semiring are more optimised than the generic methods for boolean matrices. Note that all BMat8 are represented internally as an 8 x 8 matrix; any entries not defined by the user are taken to be 0. This does not affect the results of any calculations.

+

BMat8 is a trivial class.

+

Constructor & Destructor Documentation

+ +

◆ BMat8() [1/5]

+ +
+
+ + + + + +
+ + + + + + + +
HPCombi::BMat8::BMat8 ()
+
+defaultnoexcept
+
+ +

A default constructor.

+

This constructor gives no guarantees on what the matrix will contain.

+ +
+
+ +

◆ BMat8() [2/5]

+ +
+
+ + + + + +
+ + + + + + + + +
HPCombi::BMat8::BMat8 (uint64_t mat)
+
+inlineexplicitnoexcept
+
+ +

A constructor.

+

This constructor initializes a BMat8 to have rows equal to the 8 chunks, of 8 bits each, of the binary representation of mat.

+ +
+
+ +

◆ BMat8() [3/5]

+ +
+
+ + + + + +
+ + + + + + + + +
HPCombi::BMat8::BMat8 (std::vector< std::vector< bool >> const & mat)
+
+inlineexplicit
+
+ +

A constructor.

+

This constructor initializes a matrix where the rows of the matrix are the vectors in mat.

+ +
+
+ +

◆ BMat8() [4/5]

+ +
+
+ + + + + +
+ + + + + + + + +
HPCombi::BMat8::BMat8 (BMat8 const & )
+
+defaultnoexcept
+
+ +

A constructor.

+

This is the copy constructor.

+ +
+
+ +

◆ BMat8() [5/5]

+ +
+
+ + + + + +
+ + + + + + + + +
HPCombi::BMat8::BMat8 (BMat8 && )
+
+defaultnoexcept
+
+ +

A constructor.

+

This is the move constructor.

+ +
+
+ +

◆ ~BMat8()

+ +
+
+ + + + + +
+ + + + + + + +
HPCombi::BMat8::~BMat8 ()
+
+default
+
+ +

A default destructor.

+ +
+
+

Member Function Documentation

+ +

◆ col_permutation_matrix()

+ +
+
+ + + + + +
+ + + + + + + + +
BMat8 HPCombi::BMat8::col_permutation_matrix (Perm16 p)
+
+inlinestaticnoexcept
+
+ +

Returns the matrix associated to the permutation p by columns.

+
Parameters
+ + +
p: a permutation fixing the entries 8..15 Note: no verification is performed on p
+
+
+ +
+
+ +

◆ col_permuted()

+ +
+
+ + + + + +
+ + + + + + + + +
BMat8 HPCombi::BMat8::col_permuted (Perm16 p) const
+
+inlinenoexcept
+
+ +

Returns the matrix whose columns have been permuted according to p.

+
Parameters
+ + +
p: a permutation fixing the entries 8..15 Note: no verification is performed on p
+
+
+ +
+
+ +

◆ col_space_basis()

+ +
+
+ + + + + +
+ + + + + + + +
BMat8 HPCombi::BMat8::col_space_basis () const
+
+inlinenoexcept
+
+ +

Returns a canonical basis of the col space of this.

+

Any two matrix with the same column row space are guaranteed to have the same column space basis. Uses row_space_basis and transpose.

+ +
+
+ +

◆ mult_transpose()

+ +
+
+ + + + + +
+ + + + + + + + +
BMat8 HPCombi::BMat8::mult_transpose (BMat8 const & that) const
+
+inlinenoexcept
+
+ +

Returns the matrix product of this and the transpose of that.

+

This method returns the standard matrix product (over the boolean semiring) of two BMat8 objects. This is faster than transposing that and calling the product of this with it. Implementation uses vector instructions.

+ +
+
+ +

◆ nr_rows()

+ +
+
+ + + + + +
+ + + + + + + +
size_t HPCombi::BMat8::nr_rows () const
+
+inlinenoexcept
+
+ +

Returns the number of non-zero rows of this.

+ +
+
+ +

◆ one()

+ +
+
+ + + + + +
+ + + + + + + + +
static BMat8 HPCombi::BMat8::one (size_t dim = 8)
+
+inlinestaticnoexcept
+
+ +

Returns the identity BMat8.

+

This method returns the 8 x 8 BMat8 with 1s on the main diagonal.

+ +
+
+ +

◆ operator!=()

+ +
+
+ + + + + +
+ + + + + + + + +
bool HPCombi::BMat8::operator!= (BMat8 const & that) const
+
+inlinenoexcept
+
+ +

Returns true if this does not equal that.

+

This method checks the mathematical inequality of two BMat8 objects.

+ +
+
+ +

◆ operator()()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool HPCombi::BMat8::operator() (size_t i,
size_t j 
) const
+
+inlinenoexcept
+
+ +

Returns the entry in the (i, j)th position.

+

This method returns the entry in the (i, j)th position. Note that since all matrices are internally represented as 8 x 8, it is possible to access entries that you might not believe exist.

+ +
+
+ +

◆ operator*()

+ +
+
+ + + + + +
+ + + + + + + + +
BMat8 HPCombi::BMat8::operator* (BMat8 const & that) const
+
+inlinenoexcept
+
+ +

Returns the matrix product of this and that.

+

This method returns the standard matrix product (over the boolean semiring) of two BMat8 objects. This is a fast implementation using transposition and vector instructions.

+ +
+
+ +

◆ operator<()

+ +
+
+ + + + + +
+ + + + + + + + +
bool HPCombi::BMat8::operator< (BMat8 const & that) const
+
+inlinenoexcept
+
+ +

Returns true if this is less than that.

+

This method checks whether a BMat8 objects is less than another. We order by the results of to_int() for each matrix.

+ +
+
+ +

◆ operator=() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + +
BMat8& HPCombi::BMat8::operator= (BMat8 && )
+
+defaultnoexcept
+
+ +

A constructor.

+

This is the move assignment constructor.

+ +
+
+ +

◆ operator=() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + +
BMat8& HPCombi::BMat8::operator= (BMat8 const & )
+
+defaultnoexcept
+
+ +

A constructor.

+

This is the copy assignment constructor.

+ +
+
+ +

◆ operator==()

+ +
+
+ + + + + +
+ + + + + + + + +
bool HPCombi::BMat8::operator== (BMat8 const & that) const
+
+inlinenoexcept
+
+ +

Returns true if this equals that.

+

This method checks the mathematical equality of two BMat8 objects.

+ +
+
+ +

◆ operator>()

+ +
+
+ + + + + +
+ + + + + + + + +
bool HPCombi::BMat8::operator> (BMat8 const & that) const
+
+inlinenoexcept
+
+ +

Returns true if this is greater than that.

+

This method checks whether a BMat8 objects is greater than another. We order by the results of to_int() for each matrix.

+ +
+
+ +

◆ random() [1/2]

+ +
+
+ + + + + +
+ + + + + + + +
BMat8 HPCombi::BMat8::random ()
+
+inlinestatic
+
+ +

Returns a random BMat8.

+

This method returns a BMat8 chosen at random.

+ +
+
+ +

◆ random() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + +
BMat8 HPCombi::BMat8::random (size_t dim)
+
+inlinestatic
+
+ +

Returns a random square BMat8 up to dimension dim.

+

This method returns a BMat8 chosen at random, where only the top-left dim x dim entries may be non-zero.

+ +
+
+ +

◆ right_perm_action_on_basis()

+ +
+
+ + + + + +
+ + + + + + + + +
Perm16 HPCombi::BMat8::right_perm_action_on_basis (BMat8 other) const
+
+inlinenoexcept
+
+ +

Give the permutation whose right multiplication change *this to other.

+

*this is suppose to be a row_space matrix (ie. sorted decreasingly) Fast implementation doing a vector binary search.

+ +
+
+ +

◆ right_perm_action_on_basis_ref()

+ +
+
+ + + + + +
+ + + + + + + + +
Perm16 HPCombi::BMat8::right_perm_action_on_basis_ref (BMat8 bm) const
+
+inline
+
+ +

Give the permutation whose right multiplication change *this to other.

+

*this is suppose to be a row_space matrix (ie. sorted decreasingly) Reference implementation.

+ +
+
+ +

◆ row_permutation_matrix()

+ +
+
+ + + + + +
+ + + + + + + + +
BMat8 HPCombi::BMat8::row_permutation_matrix (Perm16 p)
+
+inlinestaticnoexcept
+
+ +

Returns the matrix associated to the permutation p by rows.

+
Parameters
+ + +
p: a permutation fixing the entries 8..15 Note: no verification is performed on p
+
+
+ +
+
+ +

◆ row_permuted()

+ +
+
+ + + + + +
+ + + + + + + + +
BMat8 HPCombi::BMat8::row_permuted (Perm16 p) const
+
+inlinenoexcept
+
+ +

Returns the matrix whose rows have been permuted according to p.

+
Parameters
+ + +
p: a permutation fixing the entries 8..15 Note: no verification is performed on p
+
+
+ +
+
+ +

◆ row_space_basis()

+ +
+
+ + + + + +
+ + + + + + + +
BMat8 HPCombi::BMat8::row_space_basis () const
+
+inlinenoexcept
+
+ +

Returns a canonical basis of the row space of this.

+

Any two matrix with the same row space are guaranteed to have the same row space basis. This is a fast implementation using vector instructions to compute in parallel the union of the other rows included in a given one.

+ +
+
+ +

◆ row_space_bitset()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void HPCombi::BMat8::row_space_bitset (epu8res1,
epu8res2 
) const
+
+inlinenoexcept
+
+ +

Returns the the row space of this as 256 bits.

+

The result is stored in two 128 bits registers.

+ +
+
+ +

◆ row_space_bitset_ref()

+ +
+
+ + + + + +
+ + + + + + + +
std::bitset< 256 > HPCombi::BMat8::row_space_bitset_ref () const
+
+inline
+
+ +

Returns the the row space of this.

+

The result is stored in a c++ bitset

+ +
+
+ +

◆ row_space_included()

+ +
+
+ + + + + +
+ + + + + + + + +
bool HPCombi::BMat8::row_space_included (BMat8 other) const
+
+inlinenoexcept
+
+ +

Returns whether the row space of this is included in other's.

+

Uses vector computation of the product of included rows

+ +
+
+ +

◆ row_space_included2()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
std::pair< bool, bool > HPCombi::BMat8::row_space_included2 (BMat8 a1,
BMat8 b1,
BMat8 a2,
BMat8 b2 
)
+
+inlinestatic
+
+ +

Returns inclusion of row spaces.

+

Compute at once if a1 is included in b1 and a2 is included in b2

+ +
+
+ +

◆ row_space_included_bitset()

+ +
+
+ + + + + +
+ + + + + + + + +
bool HPCombi::BMat8::row_space_included_bitset (BMat8 other) const
+
+inlinenoexcept
+
+ +

Returns whether the row space of this is included in other's.

+

Uses a 256 bitset internally

+ +
+
+ +

◆ row_space_included_ref()

+ +
+
+ + + + + +
+ + + + + + + + +
bool HPCombi::BMat8::row_space_included_ref (BMat8 other) const
+
+inlinenoexcept
+
+ +

Returns whether the row space of this is included in other's.

+

Uses a 256 bitset internally

+ +
+
+ +

◆ row_space_mask()

+ +
+
+ + + + + +
+ + + + + + + + +
epu8 HPCombi::BMat8::row_space_mask (epu8 vects) const
+
+inlinenoexcept
+
+ +

Returns a mask for which vectors of a 16 rows epu8 are in the row space of this.

+

Uses vector computation of the product of included rows

+ +
+
+ +

◆ row_space_size()

+ +
+
+ + + + + +
+ + + + + + + +
uint64_t HPCombi::BMat8::row_space_size () const
+
+inlinenoexcept
+
+ +

Returns the cardinality of the row space of this.

+

Alias to row_space_size_incl

+ +
+
+ +

◆ row_space_size_bitset()

+ +
+
+ + + + + +
+ + + + + + + +
uint64_t HPCombi::BMat8::row_space_size_bitset () const
+
+inlinenoexcept
+
+ +

Returns the cardinality of the row space of this.

+

It compute all the product using two 128 bits registers to store the set of elements of the row space.

+ +
+
+ +

◆ row_space_size_incl()

+ +
+
+ + + + + +
+ + + + + + + +
uint64_t HPCombi::BMat8::row_space_size_incl () const
+
+inlinenoexcept
+
+ +

Returns the cardinality of the row space of this.

+

Uses vector computation of the product of included rows in each 256 possible vectors. Fastest implementation saving a few instructions compared to row_space_size_incl1

+ +
+
+ +

◆ row_space_size_incl1()

+ +
+
+ + + + + +
+ + + + + + + +
uint64_t HPCombi::BMat8::row_space_size_incl1 () const
+
+inlinenoexcept
+
+ +

Returns the cardinality of the row space of this.

+

Uses vector computation of the product included row in each 256 possible vectors. More optimized in row_space_size_incl

+ +
+
+ +

◆ row_space_size_ref()

+ +
+
+ + + + + +
+ + + + + + + +
uint64_t HPCombi::BMat8::row_space_size_ref () const
+
+inline
+
+ +

Returns the cardinality of the row space of this.

+

Reference implementation computing all products

+ +
+
+ +

◆ rows()

+ +
+
+ + + + + +
+ + + + + + + +
std::vector< uint8_t > HPCombi::BMat8::rows () const
+
+inline
+
+ +

Returns a std::vector for rows of this.

+ +
+
+ +

◆ set()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
void HPCombi::BMat8::set (size_t i,
size_t j,
bool val 
)
+
+inlinenoexcept
+
+ +

Sets the (i, j)th position to val.

+

This method sets the (i, j)th entry of this to val. Uses the bit twiddle for setting bits found here.

+ +
+
+ +

◆ swap()

+ +
+
+ + + + + +
+ + + + + + + + +
void HPCombi::BMat8::swap (BMat8that)
+
+inlinenoexcept
+
+ +
+
+ +

◆ to_int()

+ +
+
+ + + + + +
+ + + + + + + +
uint64_t HPCombi::BMat8::to_int () const
+
+inlinenoexcept
+
+ +

Returns the integer representation of this.

+

Returns an unsigned integer obtained by interpreting an 8 x 8 BMat8 as a sequence of 64 bits (reading rows left to right, from top to bottom) and then this sequence as an unsigned int.

+ +
+
+ +

◆ transpose()

+ +
+
+ + + + + +
+ + + + + + + +
BMat8 HPCombi::BMat8::transpose () const
+
+inlinenoexcept
+
+ +

Returns the transpose of this.

+

Returns the standard matrix transpose of a BMat8. Uses the technique found in Knuth AoCP Vol. 4 Fasc. 1a, p. 15.

+ +
+
+ +

◆ transpose2()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void HPCombi::BMat8::transpose2 (BMat8a,
BMat8b 
)
+
+inlinestaticnoexcept
+
+ +

Transpose two matrices at once.

+

Compute in parallel the standard matrix transpose of two BMat8. Uses the technique found in Knuth AoCP Vol. 4 Fasc. 1a, p. 15.

+ +
+
+ +

◆ transpose_mask()

+ +
+
+ + + + + +
+ + + + + + + +
BMat8 HPCombi::BMat8::transpose_mask () const
+
+inlinenoexcept
+
+ +

Returns the transpose of this.

+

Returns the standard matrix transpose of a BMat8. Uses movemask instruction.

+ +
+
+ +

◆ transpose_maskd()

+ +
+
+ + + + + +
+ + + + + + + +
BMat8 HPCombi::BMat8::transpose_maskd () const
+
+inlinenoexcept
+
+ +

Returns the transpose of this.

+

Returns the standard matrix transpose of a BMat8. Uses movemask instruction.

+ +
+
+ +

◆ write()

+ +
+
+ + + + + +
+ + + + + + + + +
std::ostream & HPCombi::BMat8::write (std::ostream & os) const
+
+inline
+
+ +

Write this on os.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/docs/classcommon__eval16.html b/docs/classcommon__eval16.html new file mode 100644 index 00000000..743a0383 --- /dev/null +++ b/docs/classcommon__eval16.html @@ -0,0 +1,104 @@ + + + + + + + +HPCombi: common_eval16 Class Reference + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+
common_eval16 Class Reference
+
+
+ +

Evaluation of a HPCombi::epu8. + More...

+ +

#include <epu8.hpp>

+

Detailed Description

+

Evaluation of a HPCombi::epu8.

+
Parameters
+ + +
v: a HPCombi::epu8
+
+
+
Returns
the evaluation, that is the HPCombi::epu8 r such that r[i] is the number of occurrence of i in the input v
+
Example:
eval16(epu8 { 5, 5, 2, 5, 1, 6,12, 4, 0, 3, 2,11,12,13,14,15});
+
epu8 eval16(epu8 v) noexcept
Evaluation of a HPCombi::epu8.
Definition: epu8.hpp:404
+
uint8_t __attribute__((vector_size(16))) epu8
SIMD vector of 16 unsigned bytes.
Definition: epu8.hpp:41
+
Returns { 1, 1, 2, 1, 1, 3, 1, 0, 0, 0, 0, 1, 2, 1, 1, 1}
+
Warning
The entries larger than 15 are ignored
+

The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/classcommon__first__diff.html b/docs/classcommon__first__diff.html new file mode 100644 index 00000000..d180d41b --- /dev/null +++ b/docs/classcommon__first__diff.html @@ -0,0 +1,105 @@ + + + + + + + +HPCombi: common_first_diff Class Reference + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+
common_first_diff Class Reference
+
+
+ +

The first difference between two HPCombi::epu8. + More...

+ +

#include <epu8.hpp>

+

Detailed Description

+

The first difference between two HPCombi::epu8.

+
Parameters
+ + + +
a,b: two HPCombi::epu8
bound: a size_t
+
+
+
Returns
the smallest index \(i<bound\) such that a[i] and b[i] differ, 16 if there is no differences before bound.
+
Example:
epu8 a { 5, 5, 2, 5, 1, 6,12, 4, 0, 3, 2,11,12,13,14,15};
+
epu8 b { 5, 5, 2, 9, 1, 6,12, 4, 0, 4, 4, 4,12,13,14,15};
+
uint8_t __attribute__((vector_size(16))) epu8
SIMD vector of 16 unsigned bytes.
Definition: epu8.hpp:41
+
then first_diff(a, b) returns 3, first_diff(a, b, 3) returns 16, first_diff(a, b, 4) returns 3, first_diff(a, b, 7) returns 3.
+
Warning
bound is assumed to be smaller or equal than 16
+

The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/classcommon__horiz__max.html b/docs/classcommon__horiz__max.html new file mode 100644 index 00000000..a5a8ce68 --- /dev/null +++ b/docs/classcommon__horiz__max.html @@ -0,0 +1,97 @@ + + + + + + + +HPCombi: common_horiz_max Class Reference + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+
common_horiz_max Class Reference
+
+
+ +

Horizontal sum of a HPCombi::epu8. + More...

+ +

#include <epu8.hpp>

+

Detailed Description

+

Horizontal sum of a HPCombi::epu8.

+
Returns
the horizontal sum of the input
+
Example:
horiz_max(epu8 { 5, 5, 2, 5, 1, 6,12, 4, 0, 3, 2, 0,12, 0, 0, 0});
+
uint8_t horiz_max(epu8 v) noexcept
Horizontal sum of a HPCombi::epu8.
Definition: epu8.hpp:276
+
uint8_t __attribute__((vector_size(16))) epu8
SIMD vector of 16 unsigned bytes.
Definition: epu8.hpp:41
+
Returns 12
+

The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/classcommon__horiz__min.html b/docs/classcommon__horiz__min.html new file mode 100644 index 00000000..51589221 --- /dev/null +++ b/docs/classcommon__horiz__min.html @@ -0,0 +1,97 @@ + + + + + + + +HPCombi: common_horiz_min Class Reference + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+
common_horiz_min Class Reference
+
+
+ +

Horizontal sum of a HPCombi::epu8. + More...

+ +

#include <epu8.hpp>

+

Detailed Description

+

Horizontal sum of a HPCombi::epu8.

+
Returns
the horizontal sum of the input
+
Example:
horiz_min(epu8 { 5, 5, 2, 5, 1, 6,12, 4, 1, 3, 2, 2,12, 3, 4, 4});
+
uint8_t horiz_min(epu8 v) noexcept
Horizontal sum of a HPCombi::epu8.
Definition: epu8.hpp:339
+
uint8_t __attribute__((vector_size(16))) epu8
SIMD vector of 16 unsigned bytes.
Definition: epu8.hpp:41
+
Returns 1
+

The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/classcommon__horiz__sum.html b/docs/classcommon__horiz__sum.html new file mode 100644 index 00000000..aa5da0c4 --- /dev/null +++ b/docs/classcommon__horiz__sum.html @@ -0,0 +1,98 @@ + + + + + + + +HPCombi: common_horiz_sum Class Reference + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+
common_horiz_sum Class Reference
+
+
+ +

Horizontal sum of a HPCombi::epu8. + More...

+ +

#include <epu8.hpp>

+

Detailed Description

+

Horizontal sum of a HPCombi::epu8.

+
Returns
the horizontal sum of the input
+
Example:
horiz_sum(epu8 { 5, 5, 2, 5, 1, 6,12, 4, 0, 3, 2,11,12,13,14,15});
+
uint8_t horiz_sum(epu8 v) noexcept
Horizontal sum of a HPCombi::epu8.
Definition: epu8.hpp:213
+
uint8_t __attribute__((vector_size(16))) epu8
SIMD vector of 16 unsigned bytes.
Definition: epu8.hpp:41
+
Returns 110
+
Warning
The result is supposed to fit in a uint8_t
+

The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/classcommon__inverse.html b/docs/classcommon__inverse.html new file mode 100644 index 00000000..1acc124d --- /dev/null +++ b/docs/classcommon__inverse.html @@ -0,0 +1,97 @@ + + + + + + + +HPCombi: common_inverse Class Reference + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+
common_inverse Class Reference
+
+
+ +

The inverse permutation. + More...

+ +

#include <perm16.hpp>

+

Detailed Description

+

The inverse permutation.

+
Returns
the inverse of *this
+
Example:
Perm16 x = {0,3,2,4,1,5,6,7,8,9,10,11,12,13,14,15};
+
x.inverse()
+
Perm16 Perm16
Definition: perm16_impl.hpp:236
+
Returns
{0,4,2,1,3,5,6,7,8,9,10,11,12,13,14,15} 
+

The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/classcommon__inverse__pperm.html b/docs/classcommon__inverse__pperm.html new file mode 100644 index 00000000..d02fcaba --- /dev/null +++ b/docs/classcommon__inverse__pperm.html @@ -0,0 +1,98 @@ + + + + + + + +HPCombi: common_inverse_pperm Class Reference + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+
common_inverse_pperm Class Reference
+
+
+ +

The inverse of a partial permutation. + More...

+ +

#include <perm16.hpp>

+

Detailed Description

+

The inverse of a partial permutation.

+
Returns
the inverse of *this. The inverse of \(p\) is the unique partial permutation \(i\) such that \( p * i * p = p\) and \( i * p * i = i\)
+
Example:
Perm16 x = {0,3,2,4,0xFF,5,6,0xFF,8,9,11,0xFF,12,0xFF,0xFF,0xFF};
+
x.inverse()
+
Perm16 Perm16
Definition: perm16_impl.hpp:236
+
Returns
{0,0xFF,2,1,3,5,6,0xFF,8,9,0xFF,10,12,0xFF,0xFF,0xFF}
+* 
+

The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/classcommon__is__permutation.html b/docs/classcommon__is__permutation.html new file mode 100644 index 00000000..1f3fe298 --- /dev/null +++ b/docs/classcommon__is__permutation.html @@ -0,0 +1,97 @@ + + + + + + + +HPCombi: common_is_permutation Class Reference + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+
common_is_permutation Class Reference
+
+
+ +

#include <epu8.hpp>

+

Detailed Description

+
Returns
whether *this is a permutation.
+
Parameters
+ + + +
vthe vector to test
kthe size of *this (default 16)
+
+
+

If *this is a permutation of \(0\dots n-1\) for \(n<16\), it should be completed to a permutation of \(0\dots 15\) by adding fixed points. That is the values \(i\geq n\) should be mapped to themself.

Example:
The permutation \(\begin{matrix}0 1 2 3 4 5\\ 2 0 5 3 1 4 \end{matrix}\) is encoded by the array {2,0,5,3,1,4,6,7,8,9,10,11,12,13,14,15}
+

The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/classcommon__last__diff.html b/docs/classcommon__last__diff.html new file mode 100644 index 00000000..a005ad10 --- /dev/null +++ b/docs/classcommon__last__diff.html @@ -0,0 +1,105 @@ + + + + + + + +HPCombi: common_last_diff Class Reference + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+
common_last_diff Class Reference
+
+
+ +

The last difference between two HPCombi::epu8. + More...

+ +

#include <epu8.hpp>

+

Detailed Description

+

The last difference between two HPCombi::epu8.

+
Parameters
+ + + +
a,b: two HPCombi::epu8
bound: a size_t
+
+
+
Returns
the largest index \(i<bound\) such that a[i] and b[i] differ, 16 if there is no differences before bound.
+
Example:
epu8 a { 5, 5, 2, 5, 1, 6,12, 4, 0, 3, 2,11,12,13,14,15};
+
epu8 b { 5, 5, 2, 9, 1, 6,12, 4, 0, 4, 4, 4,12,13,14,15};
+
uint8_t __attribute__((vector_size(16))) epu8
SIMD vector of 16 unsigned bytes.
Definition: epu8.hpp:41
+
then last_diff(a, b) returns 11, last_diff(a, b, 3) returns 16, last_diff(a, b, 4) returns 3, last_diff(a, b, 7) returns 3.
+
Warning
bound is assumed to be smaller or equal than 16
+

The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/classcommon__left__weak__leq.html b/docs/classcommon__left__weak__leq.html new file mode 100644 index 00000000..9c94cc18 --- /dev/null +++ b/docs/classcommon__left__weak__leq.html @@ -0,0 +1,96 @@ + + + + + + + +HPCombi: common_left_weak_leq Class Reference + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+
common_left_weak_leq Class Reference
+
+
+ +

Compare two permutations for the left weak order. + More...

+ +

#include <perm16.hpp>

+

Detailed Description

+

Compare two permutations for the left weak order.

+
Example:
Perm16 x{2,0,3,1}, y{3,0,2,1};
+
x.left_weak_leq(y)
+
Perm16 Perm16
Definition: perm16_impl.hpp:236
+
Returns
true 
+

The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/classcommon__lehmer.html b/docs/classcommon__lehmer.html new file mode 100644 index 00000000..8c1ffde6 --- /dev/null +++ b/docs/classcommon__lehmer.html @@ -0,0 +1,97 @@ + + + + + + + +HPCombi: common_lehmer Class Reference + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+
common_lehmer Class Reference
+
+
+ +

The Lehmer code of a permutation. + More...

+ +

#include <perm16.hpp>

+

Detailed Description

+

The Lehmer code of a permutation.

+
Returns
the Lehmer code of *this
+
Example:
Perm16 x = {0,3,2,4,1,5,6,7,8,9,10,11,12,13,14,15};
+
x.lehmer()
+
Perm16 Perm16
Definition: perm16_impl.hpp:236
+
Returns
{0,2,1,1,0,0,0,0,0,0,0,0,0,0,0,0} 
+

The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/classcommon__length.html b/docs/classcommon__length.html new file mode 100644 index 00000000..c0ab939e --- /dev/null +++ b/docs/classcommon__length.html @@ -0,0 +1,97 @@ + + + + + + + +HPCombi: common_length Class Reference + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+
common_length Class Reference
+
+
+ +

The Coxeter length (ie: number of inversion) of a permutation. + More...

+ +

#include <perm16.hpp>

+

Detailed Description

+

The Coxeter length (ie: number of inversion) of a permutation.

+
Returns
the number of inversions of *this
+
Example:
Perm16 x = {0,3,2,4,1,5,6,7,8,9,10,11,12,13,14,15};
+
x.length()
+
Perm16 Perm16
Definition: perm16_impl.hpp:236
+
Returns
4 
+

The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/classcommon__merge.html b/docs/classcommon__merge.html new file mode 100644 index 00000000..59aaf117 --- /dev/null +++ b/docs/classcommon__merge.html @@ -0,0 +1,98 @@ + + + + + + + +HPCombi: common_merge Class Reference + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+
common_merge Class Reference
+
+
+ +

Merge two sorted epu8. + More...

+ +

#include <epu8.hpp>

+

Detailed Description

+

Merge two sorted epu8.

+
Parameters
+ + +
a,btwo HPCombi::epu8 after executing merge, a and are sorted a[15] <= b[0]
+
+
+

The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/classcommon__nb__cycles.html b/docs/classcommon__nb__cycles.html new file mode 100644 index 00000000..8232bb39 --- /dev/null +++ b/docs/classcommon__nb__cycles.html @@ -0,0 +1,97 @@ + + + + + + + +HPCombi: common_nb_cycles Class Reference + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+
common_nb_cycles Class Reference
+
+
+ +

The number of cycles of a permutation. + More...

+ +

#include <perm16.hpp>

+

Detailed Description

+

The number of cycles of a permutation.

+
Returns
the number of cycles of *this
+
Example:
Perm16 x {1,2,3,6,0,5,4,7,8,9,10,11,12,15,14,13}
+
x.nb_cycles()
+
Perm16 Perm16
Definition: perm16_impl.hpp:236
+
Returns
10 
+

The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/classcommon__nb__descent.html b/docs/classcommon__nb__descent.html new file mode 100644 index 00000000..211e989a --- /dev/null +++ b/docs/classcommon__nb__descent.html @@ -0,0 +1,97 @@ + + + + + + + +HPCombi: common_nb_descent Class Reference + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+
common_nb_descent Class Reference
+
+
+ +

The number of descent of a permutation. + More...

+ +

#include <perm16.hpp>

+

Detailed Description

+

The number of descent of a permutation.

+
Returns
the number of inversions of *this
+
Example:
Perm16 x {0,3,2,4,1,5,6,7,8,9,10,11,12,13,14,15};
+
x.length()
+
Perm16 Perm16
Definition: perm16_impl.hpp:236
+
Returns
2 
+

The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/classcommon__partial__max.html b/docs/classcommon__partial__max.html new file mode 100644 index 00000000..c38343a5 --- /dev/null +++ b/docs/classcommon__partial__max.html @@ -0,0 +1,97 @@ + + + + + + + +HPCombi: common_partial_max Class Reference + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+
common_partial_max Class Reference
+
+
+ +

Horizontal partial sum of a HPCombi::epu8. + More...

+ +

#include <epu8.hpp>

+

Detailed Description

+

Horizontal partial sum of a HPCombi::epu8.

+
Returns
the partials max of the input
+
Example:
partial_max(epu8 { 5, 5, 2, 5, 1, 6,12, 4, 0, 3, 2,11,12,13,14,15});
+
uint8_t __attribute__((vector_size(16))) epu8
SIMD vector of 16 unsigned bytes.
Definition: epu8.hpp:41
+
epu8 partial_max(epu8 v) noexcept
Horizontal partial sum of a HPCombi::epu8.
Definition: epu8.hpp:305
+
Returns { 5, 5, 5, 5, 5, 6,12,12,12,12,12,12,12,13,14,15}
+

The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/classcommon__partial__min.html b/docs/classcommon__partial__min.html new file mode 100644 index 00000000..f024a4ba --- /dev/null +++ b/docs/classcommon__partial__min.html @@ -0,0 +1,97 @@ + + + + + + + +HPCombi: common_partial_min Class Reference + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+
common_partial_min Class Reference
+
+
+ +

Horizontal partial sum of a HPCombi::epu8. + More...

+ +

#include <epu8.hpp>

+

Detailed Description

+

Horizontal partial sum of a HPCombi::epu8.

+
Returns
the partials min of the input
+
Example:
partial_min(epu8 { 5, 5, 2, 5, 1, 6,12, 4, 0, 3, 2,11,12,13,14,15});
+
epu8 partial_min(epu8 v) noexcept
Horizontal partial sum of a HPCombi::epu8.
Definition: epu8.hpp:368
+
uint8_t __attribute__((vector_size(16))) epu8
SIMD vector of 16 unsigned bytes.
Definition: epu8.hpp:41
+
Returns { 5, 5, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}
+

The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/classcommon__partial__sums.html b/docs/classcommon__partial__sums.html new file mode 100644 index 00000000..6f245eb9 --- /dev/null +++ b/docs/classcommon__partial__sums.html @@ -0,0 +1,97 @@ + + + + + + + +HPCombi: common_partial_sums Class Reference + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+
common_partial_sums Class Reference
+
+
+ +

Horizontal partial sum of a HPCombi::epu8. + More...

+ +

#include <epu8.hpp>

+

Detailed Description

+

Horizontal partial sum of a HPCombi::epu8.

+
Returns
the partials sums of the input
+
Example:
partial_sums(epu8 { 5, 5, 2, 5, 1, 6,12, 4, 0, 3, 2,11,12,13,14,15});
+
epu8 partial_sums(epu8 v) noexcept
Horizontal partial sum of a HPCombi::epu8.
Definition: epu8.hpp:242
+
uint8_t __attribute__((vector_size(16))) epu8
SIMD vector of 16 unsigned bytes.
Definition: epu8.hpp:41
+
Returns { 5,10,12,17,18,24,36,40,40,43,45,56,68,81,95,110}
+

The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/classcommon__permutation__of.html b/docs/classcommon__permutation__of.html new file mode 100644 index 00000000..70370332 --- /dev/null +++ b/docs/classcommon__permutation__of.html @@ -0,0 +1,99 @@ + + + + + + + +HPCombi: common_permutation_of Class Reference + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+
common_permutation_of Class Reference
+
+
+ +

Find if a vector is a permutation of one other. + More...

+ +

#include <epu8.hpp>

+

Detailed Description

+

Find if a vector is a permutation of one other.

+
Parameters
+ + +
a,btwo HPCombi::epu8
+
+
+
Returns
a HPCombi::epu8 For each \(0 \leq i < 16\), res[i] is the position in a of b[i] if b[i] appears exactly once in a, or undefined if not.
+

The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/classes.html b/docs/classes.html new file mode 100644 index 00000000..f653c3c3 --- /dev/null +++ b/docs/classes.html @@ -0,0 +1,115 @@ + + + + + + + +HPCombi: Class Index + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
Class Index
+
+
+
B | C | E | H | L | M | N | P | T | V
+
+
+
B
+
BMat8 (HPCombi)
+
+
C
+
common_eval16
common_first_diff
common_horiz_max
common_horiz_min
common_horiz_sum
common_inverse
common_inverse_pperm
common_is_permutation
common_last_diff
common_left_weak_leq
common_lehmer
common_length
common_merge
common_nb_cycles
common_nb_descent
common_partial_max
common_partial_min
common_partial_sums
common_permutation_of
+
+
E
+
EqEpu8
equal_to< HPCombi::epu8 > (std)
+
+
H
+
hash< HPCombi::BMat8 > (std)
hash< HPCombi::epu8 > (std)
hash< HPCombi::Perm16 > (std)
hash< HPCombi::PermGeneric< Size, Expo > > (std)
hash< HPCombi::PPerm16 > (std)
hash< HPCombi::PTransf16 > (std)
hash< HPCombi::Transf16 > (std)
hash< HPCombi::Vect16 > (std)
hash< HPCombi::VectGeneric< Size, Expo > > (std)
+
+
L
+
less< HPCombi::epu8 > (std)
+
+
M
+
Monoid (HPCombi::power_helper)
Monoid< Perm16 > (HPCombi::power_helper)
Monoid< std::string > (HPCombi::power_helper)
+
+
N
+
not_equal_to< HPCombi::epu8 > (std)
+
+
P
+
Perm16 (HPCombi)
PermGeneric (HPCombi)
PPerm16 (HPCombi)
PTransf16 (HPCombi)
+
+
T
+
Timer (libsemigroups)
TPUBuild (HPCombi)
Transf16 (HPCombi)
+
+
V
+
Vect16 (HPCombi)
VectGeneric (HPCombi)
+
+
+ + + + diff --git a/docs/classlibsemigroups_1_1Timer-members.html b/docs/classlibsemigroups_1_1Timer-members.html new file mode 100644 index 00000000..642db9b2 --- /dev/null +++ b/docs/classlibsemigroups_1_1Timer-members.html @@ -0,0 +1,95 @@ + + + + + + + +HPCombi: Member List + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
libsemigroups::Timer Member List
+
+
+ +

This is the complete list of members for libsemigroups::Timer, including all inherited members.

+ + + + + + + +
elapsed() constlibsemigroups::Timerinline
operator<<(std::ostream &os, Timer const &t)libsemigroups::Timerfriend
reset()libsemigroups::Timerinline
string(std::chrono::nanoseconds elapsed) constlibsemigroups::Timerinline
string() constlibsemigroups::Timerinline
Timer()libsemigroups::Timerinline
+ + + + diff --git a/docs/classlibsemigroups_1_1Timer.html b/docs/classlibsemigroups_1_1Timer.html new file mode 100644 index 00000000..82756fac --- /dev/null +++ b/docs/classlibsemigroups_1_1Timer.html @@ -0,0 +1,279 @@ + + + + + + + +HPCombi: libsemigroups::Timer Class Reference + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+Public Member Functions | +Friends | +List of all members
+
+
libsemigroups::Timer Class Reference
+
+
+ +

#include <timer.h>

+ + + + + + + + + + + + +

+Public Member Functions

 Timer ()
 
void reset ()
 
std::chrono::nanoseconds elapsed () const
 
std::string string (std::chrono::nanoseconds elapsed) const
 
std::string string () const
 
+ + + +

+Friends

std::ostream & operator<< (std::ostream &os, Timer const &t)
 
+

Constructor & Destructor Documentation

+ +

◆ Timer()

+ +
+
+ + + + + +
+ + + + + + + +
libsemigroups::Timer::Timer ()
+
+inline
+
+ +
+
+

Member Function Documentation

+ +

◆ elapsed()

+ +
+
+ + + + + +
+ + + + + + + +
std::chrono::nanoseconds libsemigroups::Timer::elapsed () const
+
+inline
+
+ +
+
+ +

◆ reset()

+ +
+
+ + + + + +
+ + + + + + + +
void libsemigroups::Timer::reset ()
+
+inline
+
+ +
+
+ +

◆ string() [1/2]

+ +
+
+ + + + + +
+ + + + + + + +
std::string libsemigroups::Timer::string () const
+
+inline
+
+ +
+
+ +

◆ string() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + +
std::string libsemigroups::Timer::string (std::chrono::nanoseconds elapsed) const
+
+inline
+
+ +
+
+

Friends And Related Function Documentation

+ +

◆ operator<<

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
std::ostream& operator<< (std::ostream & os,
Timer const & t 
)
+
+friend
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/closed.png b/docs/closed.png new file mode 100644 index 00000000..98cc2c90 Binary files /dev/null and b/docs/closed.png differ diff --git a/docs/debug_8hpp.html b/docs/debug_8hpp.html new file mode 100644 index 00000000..b64920b0 --- /dev/null +++ b/docs/debug_8hpp.html @@ -0,0 +1,115 @@ + + + + + + + +HPCombi: /home/florent/src/HPCombi/include/hpcombi/debug.hpp File Reference + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+Macros
+
+
debug.hpp File Reference
+
+
+ +

Go to the source code of this file.

+ + + + +

+Macros

#define HPCOMBI_ASSERT(x)
 
+

Macro Definition Documentation

+ +

◆ HPCOMBI_ASSERT

+ +
+
+ + + + + + + + +
#define HPCOMBI_ASSERT( x)
+
+ +
+
+
+ + + + diff --git a/docs/debug_8hpp_source.html b/docs/debug_8hpp_source.html new file mode 100644 index 00000000..e0731f72 --- /dev/null +++ b/docs/debug_8hpp_source.html @@ -0,0 +1,110 @@ + + + + + + + +HPCombi: /home/florent/src/HPCombi/include/hpcombi/debug.hpp Source File + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
debug.hpp
+
+
+Go to the documentation of this file.
1 // Copyright (C) 2023 James D. Mitchell <jdm3@st-andrews.ac.uk> //
+
3 // //
+
4 // Distributed under the terms of the GNU General Public License (GPL) //
+
5 // //
+
6 // This code is distributed in the hope that it will be useful, //
+
7 // but WITHOUT ANY WARRANTY; without even the implied warranty of //
+
8 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU //
+
9 // General Public License for more details. //
+
10 // //
+
11 // The full text of the GPL is available at: //
+
12 // //
+
13 // http://www.gnu.org/licenses/ //
+
15 
+
16 #ifndef HPCOMBI_DEBUG_HPP_
+
17 #define HPCOMBI_DEBUG_HPP_
+
18 
+
19 #ifdef HPCOMBI_DEBUG
+
20 #include <cassert>
+
21 #define HPCOMBI_ASSERT(x) assert(x)
+
22 #else
+
23 #define HPCOMBI_ASSERT(x)
+
24 #endif
+
25 
+
26 #endif // HPCOMBI_DEBUG_HPP_
+
+ + + + diff --git a/docs/dir_0a22e5c2a89343e7af7981e1b76abb37.html b/docs/dir_0a22e5c2a89343e7af7981e1b76abb37.html new file mode 100644 index 00000000..2b4da37b --- /dev/null +++ b/docs/dir_0a22e5c2a89343e7af7981e1b76abb37.html @@ -0,0 +1,121 @@ + + + + + + + +HPCombi: /home/florent/src/HPCombi/include/hpcombi Directory Reference + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
hpcombi Directory Reference
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Files

file  arch.hpp [code]
 
file  bmat8.hpp [code]
 
file  bmat8_impl.hpp [code]
 
file  builder.hpp [code]
 
file  debug.hpp [code]
 
file  epu8.hpp [code]
 
file  epu8_impl.hpp [code]
 
file  hpcombi.hpp [code]
 
file  perm16.hpp [code]
 
file  perm16_impl.hpp [code]
 
file  perm_generic.hpp [code]
 
file  perm_generic_impl.hpp [code]
 
file  power.hpp [code]
 Generic compile time power.
 
file  vect16.hpp [code]
 
file  vect_generic.hpp [code]
 
+
+ + + + diff --git a/docs/dir_d28a4824dc47e487b107a5db32ef43c4.html b/docs/dir_d28a4824dc47e487b107a5db32ef43c4.html new file mode 100644 index 00000000..e829d221 --- /dev/null +++ b/docs/dir_d28a4824dc47e487b107a5db32ef43c4.html @@ -0,0 +1,107 @@ + + + + + + + +HPCombi: /home/florent/src/HPCombi/examples Directory Reference + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
examples Directory Reference
+
+
+ + + + + + + + + + + + + + + + + + + +

+Files

file  CF.cpp
 
file  image.cpp
 
file  pattern.cpp
 
file  RD.cpp
 
file  Renner.cpp
 
file  stringmonoid.cpp
 Example of how to use HPCombi::pow with HPCombi::power_helper::Monoid.
 
file  timer.h [code]
 
file  Trans.cpp
 
+
+ + + + diff --git a/docs/dir_d44c64559bbebec7f509842c48db8b23.html b/docs/dir_d44c64559bbebec7f509842c48db8b23.html new file mode 100644 index 00000000..8629add1 --- /dev/null +++ b/docs/dir_d44c64559bbebec7f509842c48db8b23.html @@ -0,0 +1,92 @@ + + + + + + + +HPCombi: /home/florent/src/HPCombi/include Directory Reference + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
include Directory Reference
+
+
+ + + + +

+Directories

directory  hpcombi
 
+
+ + + + diff --git a/docs/doc.png b/docs/doc.png new file mode 100644 index 00000000..17edabff Binary files /dev/null and b/docs/doc.png differ diff --git a/docs/doxygen.css b/docs/doxygen.css new file mode 100644 index 00000000..ffbff022 --- /dev/null +++ b/docs/doxygen.css @@ -0,0 +1,1793 @@ +/* The standard CSS for doxygen 1.9.1 */ + +body, table, div, p, dl { + font: 400 14px/22px Roboto,sans-serif; +} + +p.reference, p.definition { + font: 400 14px/22px Roboto,sans-serif; +} + +/* @group Heading Levels */ + +h1.groupheader { + font-size: 150%; +} + +.title { + font: 400 14px/28px Roboto,sans-serif; + font-size: 150%; + font-weight: bold; + margin: 10px 2px; +} + +h2.groupheader { + border-bottom: 1px solid #879ECB; + color: #354C7B; + font-size: 150%; + font-weight: normal; + margin-top: 1.75em; + padding-top: 8px; + padding-bottom: 4px; + width: 100%; +} + +h3.groupheader { + font-size: 100%; +} + +h1, h2, h3, h4, h5, h6 { + -webkit-transition: text-shadow 0.5s linear; + -moz-transition: text-shadow 0.5s linear; + -ms-transition: text-shadow 0.5s linear; + -o-transition: text-shadow 0.5s linear; + transition: text-shadow 0.5s linear; + margin-right: 15px; +} + +h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { + text-shadow: 0 0 15px cyan; +} + +dt { + font-weight: bold; +} + +ul.multicol { + -moz-column-gap: 1em; + -webkit-column-gap: 1em; + column-gap: 1em; + -moz-column-count: 3; + -webkit-column-count: 3; + column-count: 3; +} + +p.startli, p.startdd { + margin-top: 2px; +} + +th p.starttd, th p.intertd, th p.endtd { + font-size: 100%; + font-weight: 700; +} + +p.starttd { + margin-top: 0px; +} + +p.endli { + margin-bottom: 0px; +} + +p.enddd { + margin-bottom: 4px; +} + +p.endtd { + margin-bottom: 2px; +} + +p.interli { +} + +p.interdd { +} + +p.intertd { +} + +/* @end */ + +caption { + font-weight: bold; +} + +span.legend { + font-size: 70%; + text-align: center; +} + +h3.version { + font-size: 90%; + text-align: center; +} + +div.navtab { + border-right: 1px solid #A3B4D7; + padding-right: 15px; + text-align: right; + line-height: 110%; +} + +div.navtab table { + border-spacing: 0; +} + +td.navtab { + padding-right: 6px; + padding-left: 6px; +} +td.navtabHL { + background-image: url('tab_a.png'); + background-repeat:repeat-x; + padding-right: 6px; + padding-left: 6px; +} + +td.navtabHL a, td.navtabHL a:visited { + color: #fff; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +} + +a.navtab { + font-weight: bold; +} + +div.qindex{ + text-align: center; + width: 100%; + line-height: 140%; + font-size: 130%; + color: #A0A0A0; +} + +dt.alphachar{ + font-size: 180%; + font-weight: bold; +} + +.alphachar a{ + color: black; +} + +.alphachar a:hover, .alphachar a:visited{ + text-decoration: none; +} + +.classindex dl { + padding: 25px; + column-count:1 +} + +.classindex dd { + display:inline-block; + margin-left: 50px; + width: 90%; + line-height: 1.15em; +} + +.classindex dl.odd { + background-color: #F8F9FC; +} + +@media(min-width: 1120px) { + .classindex dl { + column-count:2 + } +} + +@media(min-width: 1320px) { + .classindex dl { + column-count:3 + } +} + + +/* @group Link Styling */ + +a { + color: #3D578C; + font-weight: normal; + text-decoration: none; +} + +.contents a:visited { + color: #4665A2; +} + +a:hover { + text-decoration: underline; +} + +.contents a.qindexHL:visited { + color: #FFFFFF; +} + +a.el { + font-weight: bold; +} + +a.elRef { +} + +a.code, a.code:visited, a.line, a.line:visited { + color: #4665A2; +} + +a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited { + color: #4665A2; +} + +/* @end */ + +dl.el { + margin-left: -1cm; +} + +ul { + overflow: hidden; /*Fixed: list item bullets overlap floating elements*/ +} + +#side-nav ul { + overflow: visible; /* reset ul rule for scroll bar in GENERATE_TREEVIEW window */ +} + +#main-nav ul { + overflow: visible; /* reset ul rule for the navigation bar drop down lists */ +} + +.fragment { + text-align: left; + direction: ltr; + overflow-x: auto; /*Fixed: fragment lines overlap floating elements*/ + overflow-y: hidden; +} + +pre.fragment { + border: 1px solid #C4CFE5; + background-color: #FBFCFD; + padding: 4px 6px; + margin: 4px 8px 4px 2px; + overflow: auto; + word-wrap: break-word; + font-size: 9pt; + line-height: 125%; + font-family: monospace, fixed; + font-size: 105%; +} + +div.fragment { + padding: 0 0 1px 0; /*Fixed: last line underline overlap border*/ + margin: 4px 8px 4px 2px; + background-color: #FBFCFD; + border: 1px solid #C4CFE5; +} + +div.line { + font-family: monospace, fixed; + font-size: 13px; + min-height: 13px; + line-height: 1.0; + text-wrap: unrestricted; + white-space: -moz-pre-wrap; /* Moz */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + white-space: pre-wrap; /* CSS3 */ + word-wrap: break-word; /* IE 5.5+ */ + text-indent: -53px; + padding-left: 53px; + padding-bottom: 0px; + margin: 0px; + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +div.line:after { + content:"\000A"; + white-space: pre; +} + +div.line.glow { + background-color: cyan; + box-shadow: 0 0 10px cyan; +} + + +span.lineno { + padding-right: 4px; + text-align: right; + border-right: 2px solid #0F0; + background-color: #E8E8E8; + white-space: pre; +} +span.lineno a { + background-color: #D8D8D8; +} + +span.lineno a:hover { + background-color: #C8C8C8; +} + +.lineno { + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +div.ah, span.ah { + background-color: black; + font-weight: bold; + color: #FFFFFF; + margin-bottom: 3px; + margin-top: 3px; + padding: 0.2em; + border: solid thin #333; + border-radius: 0.5em; + -webkit-border-radius: .5em; + -moz-border-radius: .5em; + box-shadow: 2px 2px 3px #999; + -webkit-box-shadow: 2px 2px 3px #999; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444)); + background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000 110%); +} + +div.classindex ul { + list-style: none; + padding-left: 0; +} + +div.classindex span.ai { + display: inline-block; +} + +div.groupHeader { + margin-left: 16px; + margin-top: 12px; + font-weight: bold; +} + +div.groupText { + margin-left: 16px; + font-style: italic; +} + +body { + background-color: white; + color: black; + margin: 0; +} + +div.contents { + margin-top: 10px; + margin-left: 12px; + margin-right: 8px; +} + +td.indexkey { + background-color: #EBEFF6; + font-weight: bold; + border: 1px solid #C4CFE5; + margin: 2px 0px 2px 0; + padding: 2px 10px; + white-space: nowrap; + vertical-align: top; +} + +td.indexvalue { + background-color: #EBEFF6; + border: 1px solid #C4CFE5; + padding: 2px 10px; + margin: 2px 0px; +} + +tr.memlist { + background-color: #EEF1F7; +} + +p.formulaDsp { + text-align: center; +} + +img.formulaDsp { + +} + +img.formulaInl, img.inline { + vertical-align: middle; +} + +div.center { + text-align: center; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; +} + +div.center img { + border: 0px; +} + +address.footer { + text-align: right; + padding-right: 12px; +} + +img.footer { + border: 0px; + vertical-align: middle; +} + +/* @group Code Colorization */ + +span.keyword { + color: #008000 +} + +span.keywordtype { + color: #604020 +} + +span.keywordflow { + color: #e08000 +} + +span.comment { + color: #800000 +} + +span.preprocessor { + color: #806020 +} + +span.stringliteral { + color: #002080 +} + +span.charliteral { + color: #008080 +} + +span.vhdldigit { + color: #ff00ff +} + +span.vhdlchar { + color: #000000 +} + +span.vhdlkeyword { + color: #700070 +} + +span.vhdllogic { + color: #ff0000 +} + +blockquote { + background-color: #F7F8FB; + border-left: 2px solid #9CAFD4; + margin: 0 24px 0 4px; + padding: 0 12px 0 16px; +} + +blockquote.DocNodeRTL { + border-left: 0; + border-right: 2px solid #9CAFD4; + margin: 0 4px 0 24px; + padding: 0 16px 0 12px; +} + +/* @end */ + +/* +.search { + color: #003399; + font-weight: bold; +} + +form.search { + margin-bottom: 0px; + margin-top: 0px; +} + +input.search { + font-size: 75%; + color: #000080; + font-weight: normal; + background-color: #e8eef2; +} +*/ + +td.tiny { + font-size: 75%; +} + +.dirtab { + padding: 4px; + border-collapse: collapse; + border: 1px solid #A3B4D7; +} + +th.dirtab { + background: #EBEFF6; + font-weight: bold; +} + +hr { + height: 0px; + border: none; + border-top: 1px solid #4A6AAA; +} + +hr.footer { + height: 1px; +} + +/* @group Member Descriptions */ + +table.memberdecls { + border-spacing: 0px; + padding: 0px; +} + +.memberdecls td, .fieldtable tr { + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +.memberdecls td.glow, .fieldtable tr.glow { + background-color: cyan; + box-shadow: 0 0 15px cyan; +} + +.mdescLeft, .mdescRight, +.memItemLeft, .memItemRight, +.memTemplItemLeft, .memTemplItemRight, .memTemplParams { + background-color: #F9FAFC; + border: none; + margin: 4px; + padding: 1px 0 0 8px; +} + +.mdescLeft, .mdescRight { + padding: 0px 8px 4px 8px; + color: #555; +} + +.memSeparator { + border-bottom: 1px solid #DEE4F0; + line-height: 1px; + margin: 0px; + padding: 0px; +} + +.memItemLeft, .memTemplItemLeft { + white-space: nowrap; +} + +.memItemRight, .memTemplItemRight { + width: 100%; +} + +.memTemplParams { + color: #4665A2; + white-space: nowrap; + font-size: 80%; +} + +/* @end */ + +/* @group Member Details */ + +/* Styles for detailed member documentation */ + +.memtitle { + padding: 8px; + border-top: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + border-top-right-radius: 4px; + border-top-left-radius: 4px; + margin-bottom: -1px; + background-image: url('nav_f.png'); + background-repeat: repeat-x; + background-color: #E2E8F2; + line-height: 1.25; + font-weight: 300; + float:left; +} + +.permalink +{ + font-size: 65%; + display: inline-block; + vertical-align: middle; +} + +.memtemplate { + font-size: 80%; + color: #4665A2; + font-weight: normal; + margin-left: 9px; +} + +.memnav { + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; + margin: 2px; + margin-right: 15px; + padding: 2px; +} + +.mempage { + width: 100%; +} + +.memitem { + padding: 0; + margin-bottom: 10px; + margin-right: 5px; + -webkit-transition: box-shadow 0.5s linear; + -moz-transition: box-shadow 0.5s linear; + -ms-transition: box-shadow 0.5s linear; + -o-transition: box-shadow 0.5s linear; + transition: box-shadow 0.5s linear; + display: table !important; + width: 100%; +} + +.memitem.glow { + box-shadow: 0 0 15px cyan; +} + +.memname { + font-weight: 400; + margin-left: 6px; +} + +.memname td { + vertical-align: bottom; +} + +.memproto, dl.reflist dt { + border-top: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 0px 6px 0px; + color: #253555; + font-weight: bold; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + background-color: #DFE5F1; + /* opera specific markup */ + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + border-top-right-radius: 4px; + /* firefox specific markup */ + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + -moz-border-radius-topright: 4px; + /* webkit specific markup */ + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + -webkit-border-top-right-radius: 4px; + +} + +.overload { + font-family: "courier new",courier,monospace; + font-size: 65%; +} + +.memdoc, dl.reflist dd { + border-bottom: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 10px 2px 10px; + background-color: #FBFCFD; + border-top-width: 0; + background-image:url('nav_g.png'); + background-repeat:repeat-x; + background-color: #FFFFFF; + /* opera specific markup */ + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + /* firefox specific markup */ + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-bottomright: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + /* webkit specific markup */ + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +dl.reflist dt { + padding: 5px; +} + +dl.reflist dd { + margin: 0px 0px 10px 0px; + padding: 5px; +} + +.paramkey { + text-align: right; +} + +.paramtype { + white-space: nowrap; +} + +.paramname { + color: #602020; + white-space: nowrap; +} +.paramname em { + font-style: normal; +} +.paramname code { + line-height: 14px; +} + +.params, .retval, .exception, .tparams { + margin-left: 0px; + padding-left: 0px; +} + +.params .paramname, .retval .paramname, .tparams .paramname, .exception .paramname { + font-weight: bold; + vertical-align: top; +} + +.params .paramtype, .tparams .paramtype { + font-style: italic; + vertical-align: top; +} + +.params .paramdir, .tparams .paramdir { + font-family: "courier new",courier,monospace; + vertical-align: top; +} + +table.mlabels { + border-spacing: 0px; +} + +td.mlabels-left { + width: 100%; + padding: 0px; +} + +td.mlabels-right { + vertical-align: bottom; + padding: 0px; + white-space: nowrap; +} + +span.mlabels { + margin-left: 8px; +} + +span.mlabel { + background-color: #728DC1; + border-top:1px solid #5373B4; + border-left:1px solid #5373B4; + border-right:1px solid #C4CFE5; + border-bottom:1px solid #C4CFE5; + text-shadow: none; + color: white; + margin-right: 4px; + padding: 2px 3px; + border-radius: 3px; + font-size: 7pt; + white-space: nowrap; + vertical-align: middle; +} + + + +/* @end */ + +/* these are for tree view inside a (index) page */ + +div.directory { + margin: 10px 0px; + border-top: 1px solid #9CAFD4; + border-bottom: 1px solid #9CAFD4; + width: 100%; +} + +.directory table { + border-collapse:collapse; +} + +.directory td { + margin: 0px; + padding: 0px; + vertical-align: top; +} + +.directory td.entry { + white-space: nowrap; + padding-right: 6px; + padding-top: 3px; +} + +.directory td.entry a { + outline:none; +} + +.directory td.entry a img { + border: none; +} + +.directory td.desc { + width: 100%; + padding-left: 6px; + padding-right: 6px; + padding-top: 3px; + border-left: 1px solid rgba(0,0,0,0.05); +} + +.directory tr.even { + padding-left: 6px; + background-color: #F7F8FB; +} + +.directory img { + vertical-align: -30%; +} + +.directory .levels { + white-space: nowrap; + width: 100%; + text-align: right; + font-size: 9pt; +} + +.directory .levels span { + cursor: pointer; + padding-left: 2px; + padding-right: 2px; + color: #3D578C; +} + +.arrow { + color: #9CAFD4; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + cursor: pointer; + font-size: 80%; + display: inline-block; + width: 16px; + height: 22px; +} + +.icon { + font-family: Arial, Helvetica; + font-weight: bold; + font-size: 12px; + height: 14px; + width: 16px; + display: inline-block; + background-color: #728DC1; + color: white; + text-align: center; + border-radius: 4px; + margin-left: 2px; + margin-right: 2px; +} + +.icona { + width: 24px; + height: 22px; + display: inline-block; +} + +.iconfopen { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('folderopen.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.iconfclosed { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('folderclosed.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.icondoc { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('doc.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +table.directory { + font: 400 14px Roboto,sans-serif; +} + +/* @end */ + +div.dynheader { + margin-top: 8px; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +address { + font-style: normal; + color: #2A3D61; +} + +table.doxtable caption { + caption-side: top; +} + +table.doxtable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.doxtable td, table.doxtable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.doxtable th { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +table.fieldtable { + /*width: 100%;*/ + margin-bottom: 10px; + border: 1px solid #A8B8D9; + border-spacing: 0px; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); + box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); +} + +.fieldtable td, .fieldtable th { + padding: 3px 7px 2px; +} + +.fieldtable td.fieldtype, .fieldtable td.fieldname { + white-space: nowrap; + border-right: 1px solid #A8B8D9; + border-bottom: 1px solid #A8B8D9; + vertical-align: top; +} + +.fieldtable td.fieldname { + padding-top: 3px; +} + +.fieldtable td.fielddoc { + border-bottom: 1px solid #A8B8D9; + /*width: 100%;*/ +} + +.fieldtable td.fielddoc p:first-child { + margin-top: 0px; +} + +.fieldtable td.fielddoc p:last-child { + margin-bottom: 2px; +} + +.fieldtable tr:last-child td { + border-bottom: none; +} + +.fieldtable th { + background-image:url('nav_f.png'); + background-repeat:repeat-x; + background-color: #E2E8F2; + font-size: 90%; + color: #253555; + padding-bottom: 4px; + padding-top: 5px; + text-align:left; + font-weight: 400; + -moz-border-radius-topleft: 4px; + -moz-border-radius-topright: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom: 1px solid #A8B8D9; +} + + +.tabsearch { + top: 0px; + left: 10px; + height: 36px; + background-image: url('tab_b.png'); + z-index: 101; + overflow: hidden; + font-size: 13px; +} + +.navpath ul +{ + font-size: 11px; + background-image:url('tab_b.png'); + background-repeat:repeat-x; + background-position: 0 -5px; + height:30px; + line-height:30px; + color:#8AA0CC; + border:solid 1px #C2CDE4; + overflow:hidden; + margin:0px; + padding:0px; +} + +.navpath li +{ + list-style-type:none; + float:left; + padding-left:10px; + padding-right:15px; + background-image:url('bc_s.png'); + background-repeat:no-repeat; + background-position:right; + color:#364D7C; +} + +.navpath li.navelem a +{ + height:32px; + display:block; + text-decoration: none; + outline: none; + color: #283A5D; + font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + text-decoration: none; +} + +.navpath li.navelem a:hover +{ + color:#6884BD; +} + +.navpath li.footer +{ + list-style-type:none; + float:right; + padding-left:10px; + padding-right:15px; + background-image:none; + background-repeat:no-repeat; + background-position:right; + color:#364D7C; + font-size: 8pt; +} + + +div.summary +{ + float: right; + font-size: 8pt; + padding-right: 5px; + width: 50%; + text-align: right; +} + +div.summary a +{ + white-space: nowrap; +} + +table.classindex +{ + margin: 10px; + white-space: nowrap; + margin-left: 3%; + margin-right: 3%; + width: 94%; + border: 0; + border-spacing: 0; + padding: 0; +} + +div.ingroups +{ + font-size: 8pt; + width: 50%; + text-align: left; +} + +div.ingroups a +{ + white-space: nowrap; +} + +div.header +{ + background-image:url('nav_h.png'); + background-repeat:repeat-x; + background-color: #F9FAFC; + margin: 0px; + border-bottom: 1px solid #C4CFE5; +} + +div.headertitle +{ + padding: 5px 5px 5px 10px; +} + +.PageDocRTL-title div.headertitle { + text-align: right; + direction: rtl; +} + +dl { + padding: 0 0 0 0; +} + +/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug, dl.examples */ +dl.section { + margin-left: 0px; + padding-left: 0px; +} + +dl.section.DocNodeRTL { + margin-right: 0px; + padding-right: 0px; +} + +dl.note { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #D0C000; +} + +dl.note.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #D0C000; +} + +dl.warning, dl.attention { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #FF0000; +} + +dl.warning.DocNodeRTL, dl.attention.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #FF0000; +} + +dl.pre, dl.post, dl.invariant { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00D000; +} + +dl.pre.DocNodeRTL, dl.post.DocNodeRTL, dl.invariant.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #00D000; +} + +dl.deprecated { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #505050; +} + +dl.deprecated.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #505050; +} + +dl.todo { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00C0E0; +} + +dl.todo.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #00C0E0; +} + +dl.test { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #3030E0; +} + +dl.test.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #3030E0; +} + +dl.bug { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #C08050; +} + +dl.bug.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #C08050; +} + +dl.section dd { + margin-bottom: 6px; +} + + +#projectlogo +{ + text-align: center; + vertical-align: bottom; + border-collapse: separate; +} + +#projectlogo img +{ + border: 0px none; +} + +#projectalign +{ + vertical-align: middle; +} + +#projectname +{ + font: 300% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 2px 0px; +} + +#projectbrief +{ + font: 120% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#projectnumber +{ + font: 50% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#titlearea +{ + padding: 0px; + margin: 0px; + width: 100%; + border-bottom: 1px solid #5373B4; +} + +.image +{ + text-align: center; +} + +.dotgraph +{ + text-align: center; +} + +.mscgraph +{ + text-align: center; +} + +.plantumlgraph +{ + text-align: center; +} + +.diagraph +{ + text-align: center; +} + +.caption +{ + font-weight: bold; +} + +div.zoom +{ + border: 1px solid #90A5CE; +} + +dl.citelist { + margin-bottom:50px; +} + +dl.citelist dt { + color:#334975; + float:left; + font-weight:bold; + margin-right:10px; + padding:5px; + text-align:right; + width:52px; +} + +dl.citelist dd { + margin:2px 0 2px 72px; + padding:5px 0; +} + +div.toc { + padding: 14px 25px; + background-color: #F4F6FA; + border: 1px solid #D8DFEE; + border-radius: 7px 7px 7px 7px; + float: right; + height: auto; + margin: 0 8px 10px 10px; + width: 200px; +} + +.PageDocRTL-title div.toc { + float: left !important; + text-align: right; +} + +div.toc li { + background: url("bdwn.png") no-repeat scroll 0 5px transparent; + font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif; + margin-top: 5px; + padding-left: 10px; + padding-top: 2px; +} + +.PageDocRTL-title div.toc li { + background-position-x: right !important; + padding-left: 0 !important; + padding-right: 10px; +} + +div.toc h3 { + font: bold 12px/1.2 Arial,FreeSans,sans-serif; + color: #4665A2; + border-bottom: 0 none; + margin: 0; +} + +div.toc ul { + list-style: none outside none; + border: medium none; + padding: 0px; +} + +div.toc li.level1 { + margin-left: 0px; +} + +div.toc li.level2 { + margin-left: 15px; +} + +div.toc li.level3 { + margin-left: 30px; +} + +div.toc li.level4 { + margin-left: 45px; +} + +span.emoji { + /* font family used at the site: https://unicode.org/emoji/charts/full-emoji-list.html + * font-family: "Noto Color Emoji", "Apple Color Emoji", "Segoe UI Emoji", Times, Symbola, Aegyptus, Code2000, Code2001, Code2002, Musica, serif, LastResort; + */ +} + +.PageDocRTL-title div.toc li.level1 { + margin-left: 0 !important; + margin-right: 0; +} + +.PageDocRTL-title div.toc li.level2 { + margin-left: 0 !important; + margin-right: 15px; +} + +.PageDocRTL-title div.toc li.level3 { + margin-left: 0 !important; + margin-right: 30px; +} + +.PageDocRTL-title div.toc li.level4 { + margin-left: 0 !important; + margin-right: 45px; +} + +.inherit_header { + font-weight: bold; + color: gray; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.inherit_header td { + padding: 6px 0px 2px 5px; +} + +.inherit { + display: none; +} + +tr.heading h2 { + margin-top: 12px; + margin-bottom: 4px; +} + +/* tooltip related style info */ + +.ttc { + position: absolute; + display: none; +} + +#powerTip { + cursor: default; + white-space: nowrap; + background-color: white; + border: 1px solid gray; + border-radius: 4px 4px 4px 4px; + box-shadow: 1px 1px 7px gray; + display: none; + font-size: smaller; + max-width: 80%; + opacity: 0.9; + padding: 1ex 1em 1em; + position: absolute; + z-index: 2147483647; +} + +#powerTip div.ttdoc { + color: grey; + font-style: italic; +} + +#powerTip div.ttname a { + font-weight: bold; +} + +#powerTip div.ttname { + font-weight: bold; +} + +#powerTip div.ttdeci { + color: #006318; +} + +#powerTip div { + margin: 0px; + padding: 0px; + font: 12px/16px Roboto,sans-serif; +} + +#powerTip:before, #powerTip:after { + content: ""; + position: absolute; + margin: 0px; +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.s:after, #powerTip.s:before, +#powerTip.w:after, #powerTip.w:before, +#powerTip.e:after, #powerTip.e:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.nw:after, #powerTip.nw:before, +#powerTip.sw:after, #powerTip.sw:before { + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; +} + +#powerTip.n:after, #powerTip.s:after, +#powerTip.w:after, #powerTip.e:after, +#powerTip.nw:after, #powerTip.ne:after, +#powerTip.sw:after, #powerTip.se:after { + border-color: rgba(255, 255, 255, 0); +} + +#powerTip.n:before, #powerTip.s:before, +#powerTip.w:before, #powerTip.e:before, +#powerTip.nw:before, #powerTip.ne:before, +#powerTip.sw:before, #powerTip.se:before { + border-color: rgba(128, 128, 128, 0); +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.nw:after, #powerTip.nw:before { + top: 100%; +} + +#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after { + border-top-color: #FFFFFF; + border-width: 10px; + margin: 0px -10px; +} +#powerTip.n:before { + border-top-color: #808080; + border-width: 11px; + margin: 0px -11px; +} +#powerTip.n:after, #powerTip.n:before { + left: 50%; +} + +#powerTip.nw:after, #powerTip.nw:before { + right: 14px; +} + +#powerTip.ne:after, #powerTip.ne:before { + left: 14px; +} + +#powerTip.s:after, #powerTip.s:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.sw:after, #powerTip.sw:before { + bottom: 100%; +} + +#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after { + border-bottom-color: #FFFFFF; + border-width: 10px; + margin: 0px -10px; +} + +#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before { + border-bottom-color: #808080; + border-width: 11px; + margin: 0px -11px; +} + +#powerTip.s:after, #powerTip.s:before { + left: 50%; +} + +#powerTip.sw:after, #powerTip.sw:before { + right: 14px; +} + +#powerTip.se:after, #powerTip.se:before { + left: 14px; +} + +#powerTip.e:after, #powerTip.e:before { + left: 100%; +} +#powerTip.e:after { + border-left-color: #FFFFFF; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.e:before { + border-left-color: #808080; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +#powerTip.w:after, #powerTip.w:before { + right: 100%; +} +#powerTip.w:after { + border-right-color: #FFFFFF; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.w:before { + border-right-color: #808080; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +@media print +{ + #top { display: none; } + #side-nav { display: none; } + #nav-path { display: none; } + body { overflow:visible; } + h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } + .summary { display: none; } + .memitem { page-break-inside: avoid; } + #doc-content + { + margin-left:0 !important; + height:auto !important; + width:auto !important; + overflow:inherit; + display:inline; + } +} + +/* @group Markdown */ + +table.markdownTable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.markdownTable td, table.markdownTable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.markdownTable tr { +} + +th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +th.markdownTableHeadLeft, td.markdownTableBodyLeft { + text-align: left +} + +th.markdownTableHeadRight, td.markdownTableBodyRight { + text-align: right +} + +th.markdownTableHeadCenter, td.markdownTableBodyCenter { + text-align: center +} + +.DocNodeRTL { + text-align: right; + direction: rtl; +} + +.DocNodeLTR { + text-align: left; + direction: ltr; +} + +table.DocNodeRTL { + width: auto; + margin-right: 0; + margin-left: auto; +} + +table.DocNodeLTR { + width: auto; + margin-right: auto; + margin-left: 0; +} + +tt, code, kbd, samp +{ + display: inline-block; + direction:ltr; +} +/* @end */ + +u { + text-decoration: underline; +} + diff --git a/docs/doxygen.svg b/docs/doxygen.svg new file mode 100644 index 00000000..d42dad52 --- /dev/null +++ b/docs/doxygen.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/dynsections.js b/docs/dynsections.js new file mode 100644 index 00000000..3174bd7b --- /dev/null +++ b/docs/dynsections.js @@ -0,0 +1,121 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function toggleVisibility(linkObj) +{ + var base = $(linkObj).attr('id'); + var summary = $('#'+base+'-summary'); + var content = $('#'+base+'-content'); + var trigger = $('#'+base+'-trigger'); + var src=$(trigger).attr('src'); + if (content.is(':visible')===true) { + content.hide(); + summary.show(); + $(linkObj).addClass('closed').removeClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); + } else { + content.show(); + summary.hide(); + $(linkObj).removeClass('closed').addClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); + } + return false; +} + +function updateStripes() +{ + $('table.directory tr'). + removeClass('even').filter(':visible:even').addClass('even'); +} + +function toggleLevel(level) +{ + $('table.directory tr').each(function() { + var l = this.id.split('_').length-1; + var i = $('#img'+this.id.substring(3)); + var a = $('#arr'+this.id.substring(3)); + if (l + + + + + + +HPCombi: /home/florent/src/HPCombi/include/hpcombi/epu8.hpp File Reference + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
epu8.hpp File Reference
+
+
+
#include <array>
+#include <cstddef>
+#include <cstdint>
+#include <ostream>
+#include <string>
+#include "builder.hpp"
+#include "debug.hpp"
+#include "vect_generic.hpp"
+#include "simde/x86/sse4.1.h"
+#include "simde/x86/sse4.2.h"
+#include "epu8_impl.hpp"
+
+

Go to the source code of this file.

+ + + + + + +

+Namespaces

 HPCombi
 
 std
 
+ + + + +

+Typedefs

using HPCombi::epu8 = uint8_t __attribute__((vector_size(16)))
 SIMD vector of 16 unsigned bytes. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

constexpr uint8_t HPCombi::operator""_u8 (unsigned long long arg) noexcept
 Unsigned 8 bits int constant. More...
 
bool HPCombi::is_all_zero (epu8 a) noexcept
 Test whether all the entries of a HPCombi::epu8 are zero. More...
 
bool HPCombi::is_all_one (epu8 a) noexcept
 Test whether all the entries of a HPCombi::epu8 are one. More...
 
bool HPCombi::equal (epu8 a, epu8 b) noexcept
 Equality of HPCombi::epu8. More...
 
bool HPCombi::not_equal (epu8 a, epu8 b) noexcept
 Non equality of HPCombi::epu8. More...
 
epu8 HPCombi::permuted_ref (epu8 a, epu8 b) noexcept
 Permuting a HPCombi::epu8. More...
 
epu8 HPCombi::permuted (epu8 a, epu8 b) noexcept
 Permuting a HPCombi::epu8. More...
 
epu8 HPCombi::shifted_right (epu8 a) noexcept
 Left shifted of a HPCombi::epu8 inserting a 0. More...
 
epu8 HPCombi::shifted_left (epu8 a) noexcept
 Right shifted of a HPCombi::epu8 inserting a 0. More...
 
epu8 HPCombi::reverted (epu8 a) noexcept
 Reverting a HPCombi::epu8. More...
 
epu8 HPCombi::min (epu8 a, epu8 b) noexcept
 Vector min between two HPCombi::epu8 0. More...
 
epu8 HPCombi::max (epu8 a, epu8 b) noexcept
 Vector max between two HPCombi::epu8 0. More...
 
bool HPCombi::is_sorted (epu8 a) noexcept
 Testing if a HPCombi::epu8 is sorted. More...
 
epu8 HPCombi::sorted (epu8 a) noexcept
 Return a sorted HPCombi::epu8. More...
 
epu8 HPCombi::sorted8 (epu8 a) noexcept
 Return a HPCombi::epu8 with the two half sorted. More...
 
epu8 HPCombi::revsorted (epu8 a) noexcept
 Return a reverse sorted HPCombi::epu8. More...
 
epu8 HPCombi::revsorted8 (epu8 a) noexcept
 Return a HPCombi::epu8 with the two half reverse sorted. More...
 
epu8 HPCombi::sort_perm (epu8 &a) noexcept
 Sort this and return the sorting permutation. More...
 
epu8 HPCombi::sort8_perm (epu8 &a) noexcept
 Sort this and return the sorting permutation. More...
 
void HPCombi::merge (epu8 &a, epu8 &b) noexcept
 Merge two sorted epu8. More...
 
epu8 HPCombi::permutation_of_ref (epu8 a, epu8 b) noexcept
 Find if a vector is a permutation of one other. More...
 
epu8 HPCombi::permutation_of (epu8 a, epu8 b) noexcept
 Find if a vector is a permutation of one other. More...
 
epu8 HPCombi::random_epu8 (uint16_t bnd)
 A random HPCombi::epu8. More...
 
epu8 HPCombi::remove_dups (epu8 a, uint8_t repl=0) noexcept
 Remove duplicates in a sorted HPCombi::epu8. More...
 
uint8_t HPCombi::horiz_sum_ref (epu8) noexcept
 Horizontal sum of a HPCombi::epu8. More...
 
uint8_t HPCombi::horiz_sum_gen (epu8) noexcept
 Horizontal sum of a HPCombi::epu8. More...
 
uint8_t HPCombi::horiz_sum4 (epu8) noexcept
 Horizontal sum of a HPCombi::epu8. More...
 
uint8_t HPCombi::horiz_sum3 (epu8) noexcept
 Horizontal sum of a HPCombi::epu8. More...
 
uint8_t HPCombi::horiz_sum (epu8 v) noexcept
 Horizontal sum of a HPCombi::epu8. More...
 
epu8 HPCombi::partial_sums_ref (epu8) noexcept
 Horizontal partial sum of a HPCombi::epu8. More...
 
epu8 HPCombi::partial_sums_gen (epu8) noexcept
 Horizontal partial sum of a HPCombi::epu8. More...
 
epu8 HPCombi::partial_sums_round (epu8) noexcept
 Horizontal partial sum of a HPCombi::epu8. More...
 
epu8 HPCombi::partial_sums (epu8 v) noexcept
 Horizontal partial sum of a HPCombi::epu8. More...
 
uint8_t HPCombi::horiz_max_ref (epu8) noexcept
 Horizontal sum of a HPCombi::epu8. More...
 
uint8_t HPCombi::horiz_max_gen (epu8) noexcept
 Horizontal sum of a HPCombi::epu8. More...
 
uint8_t HPCombi::horiz_max4 (epu8) noexcept
 Horizontal sum of a HPCombi::epu8. More...
 
uint8_t HPCombi::horiz_max3 (epu8) noexcept
 Horizontal sum of a HPCombi::epu8. More...
 
uint8_t HPCombi::horiz_max (epu8 v) noexcept
 Horizontal sum of a HPCombi::epu8. More...
 
epu8 HPCombi::partial_max_ref (epu8) noexcept
 Horizontal partial sum of a HPCombi::epu8. More...
 
epu8 HPCombi::partial_max_gen (epu8) noexcept
 Horizontal partial sum of a HPCombi::epu8. More...
 
epu8 HPCombi::partial_max_round (epu8) noexcept
 Horizontal partial sum of a HPCombi::epu8. More...
 
epu8 HPCombi::partial_max (epu8 v) noexcept
 Horizontal partial sum of a HPCombi::epu8. More...
 
uint8_t HPCombi::horiz_min_ref (epu8) noexcept
 Horizontal sum of a HPCombi::epu8. More...
 
uint8_t HPCombi::horiz_min_gen (epu8) noexcept
 Horizontal sum of a HPCombi::epu8. More...
 
uint8_t HPCombi::horiz_min4 (epu8) noexcept
 Horizontal sum of a HPCombi::epu8. More...
 
uint8_t HPCombi::horiz_min3 (epu8) noexcept
 Horizontal sum of a HPCombi::epu8. More...
 
uint8_t HPCombi::horiz_min (epu8 v) noexcept
 Horizontal sum of a HPCombi::epu8. More...
 
epu8 HPCombi::partial_min_ref (epu8) noexcept
 Horizontal partial sum of a HPCombi::epu8. More...
 
epu8 HPCombi::partial_min_gen (epu8) noexcept
 Horizontal partial sum of a HPCombi::epu8. More...
 
epu8 HPCombi::partial_min_round (epu8) noexcept
 Horizontal partial sum of a HPCombi::epu8. More...
 
epu8 HPCombi::partial_min (epu8 v) noexcept
 Horizontal partial sum of a HPCombi::epu8. More...
 
epu8 HPCombi::eval16_ref (epu8 v) noexcept
 Evaluation of a HPCombi::epu8. More...
 
epu8 HPCombi::eval16_arr (epu8 v) noexcept
 Evaluation of a HPCombi::epu8. More...
 
epu8 HPCombi::eval16_cycle (epu8 v) noexcept
 Evaluation of a HPCombi::epu8. More...
 
epu8 HPCombi::eval16_popcount (epu8 v) noexcept
 Evaluation of a HPCombi::epu8. More...
 
epu8 HPCombi::eval16 (epu8 v) noexcept
 Evaluation of a HPCombi::epu8. More...
 
uint64_t HPCombi::first_diff_ref (epu8 a, epu8 b, size_t bound=16) noexcept
 The first difference between two HPCombi::epu8. More...
 
uint64_t HPCombi::first_diff_mask (epu8 a, epu8 b, size_t bound=16) noexcept
 The first difference between two HPCombi::epu8. More...
 
uint64_t HPCombi::first_diff (epu8 a, epu8 b, size_t bound=16) noexcept
 The first difference between two HPCombi::epu8. More...
 
uint64_t HPCombi::last_diff_ref (epu8 a, epu8 b, size_t bound=16) noexcept
 The last difference between two HPCombi::epu8. More...
 
uint64_t HPCombi::last_diff_mask (epu8 a, epu8 b, size_t bound=16) noexcept
 The last difference between two HPCombi::epu8. More...
 
uint64_t HPCombi::last_diff (epu8 a, epu8 b, size_t bound=16) noexcept
 The last difference between two HPCombi::epu8. More...
 
bool HPCombi::less (epu8 a, epu8 b) noexcept
 Lexicographic comparison between two HPCombi::epu8. More...
 
int8_t HPCombi::less_partial (epu8 a, epu8 b, int k) noexcept
 Partial lexicographic comparison between two HPCombi::epu8. More...
 
uint64_t HPCombi::first_zero (epu8 v, int bnd) noexcept
 return the index of the first zero entry or 16 if there are none Only index smaller than bound are taken into account. More...
 
uint64_t HPCombi::last_zero (epu8 v, int bnd) noexcept
 return the index of the last zero entry or 16 if there are none Only index smaller than bound are taken into account. More...
 
uint64_t HPCombi::first_non_zero (epu8 v, int bnd) noexcept
 return the index of the first non zero entry or 16 if there are none Only index smaller than bound are taken into account. More...
 
uint64_t HPCombi::last_non_zero (epu8 v, int bnd) noexcept
 return the index of the last non zero entry or 16 if there are none Only index smaller than bound are taken into account. More...
 
epu8 HPCombi::popcount16 (epu8 v) noexcept
 a vector popcount function More...
 
bool HPCombi::is_partial_transformation (epu8 v, const size_t k=16) noexcept
 Test for partial transformation. More...
 
bool HPCombi::is_transformation (epu8 v, const size_t k=16) noexcept
 Test for transformation. More...
 
bool HPCombi::is_partial_permutation (epu8 v, const size_t k=16) noexcept
 Test for partial permutations. More...
 
bool HPCombi::is_permutation_sort (epu8 v, const size_t k=16) noexcept
 
bool HPCombi::is_permutation_eval (epu8 v, const size_t k=16) noexcept
 
bool HPCombi::is_permutation (epu8 v, const size_t k=16) noexcept
 
std::ostream & std::operator<< (std::ostream &stream, HPCombi::epu8 const &a)
 
std::string std::to_string (HPCombi::epu8 const &a)
 
+ + + + + + + +

+Variables

constexpr TPUBuild< epu8 > HPCombi::Epu8 {}
 Factory object acting as a class constructor for type HPCombi::epu8. More...
 
constexpr uint64_t HPCombi::prime = 0x9e3779b97f4a7bb9
 A prime number good for hashing. More...
 
+
+ + + + diff --git a/docs/epu8_8hpp_source.html b/docs/epu8_8hpp_source.html new file mode 100644 index 00000000..d42ec102 --- /dev/null +++ b/docs/epu8_8hpp_source.html @@ -0,0 +1,354 @@ + + + + + + + +HPCombi: /home/florent/src/HPCombi/include/hpcombi/epu8.hpp Source File + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
epu8.hpp
+
+
+Go to the documentation of this file.
1 // Copyright (C) 2016-2023 Florent Hivert <Florent.Hivert@lri.fr>, //
+
3 // //
+
4 // Distributed under the terms of the GNU General Public License (GPL) //
+
5 // //
+
6 // This code is distributed in the hope that it will be useful, //
+
7 // but WITHOUT ANY WARRANTY; without even the implied warranty of //
+
8 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU //
+
9 // General Public License for more details. //
+
10 // //
+
11 // The full text of the GPL is available at: //
+
12 // //
+
13 // http://www.gnu.org/licenses/ //
+
15 
+
16 #ifndef HPCOMBI_EPU8_HPP_
+
17 #define HPCOMBI_EPU8_HPP_
+
18 
+
19 #include <array> // for array
+
20 #include <cstddef> // for size_t
+
21 #include <cstdint> // for uint8_t, uint64_t, int8_t
+
22 #include <ostream> // for ostream
+
23 #include <string> // for string
+
24 
+
25 #include "builder.hpp" // for TPUBuild
+
26 #include "debug.hpp" // for HPCOMBI_ASSERT
+
27 #include "vect_generic.hpp" // for VectGeneric
+
28 
+
29 #include "simde/x86/sse4.1.h" // for simde_mm_max_epu8, simde...
+
30 #include "simde/x86/sse4.2.h" // for ???
+
31 
+
32 namespace HPCombi {
+
33 
+
35 inline constexpr uint8_t
+
36 operator"" _u8(unsigned long long arg) noexcept { // NOLINT
+
37  return static_cast<uint8_t>(arg);
+
38 }
+
39 
+
41 using epu8 = uint8_t __attribute__((vector_size(16)));
+
42 
+
43 static_assert(alignof(epu8) == 16,
+
44  "epu8 type is not properly aligned by the compiler !");
+
45 
+
49 constexpr TPUBuild<epu8> Epu8{};
+
50 
+
52 inline bool is_all_zero(epu8 a) noexcept { return simde_mm_testz_si128(a, a); }
+
54 inline bool is_all_one(epu8 a) noexcept {
+
55  return simde_mm_testc_si128(a, Epu8(0xFF));
+
56 }
+
57 
+
59 inline bool equal(epu8 a, epu8 b) noexcept {
+
60  return is_all_zero(simde_mm_xor_si128(a, b));
+
61 }
+
63 inline bool not_equal(epu8 a, epu8 b) noexcept { return !equal(a, b); }
+
64 
+
66 inline epu8 permuted_ref(epu8 a, epu8 b) noexcept;
+
68 inline epu8 permuted(epu8 a, epu8 b) noexcept {
+
69  return simde_mm_shuffle_epi8(a, b);
+
70 }
+
74 inline epu8 shifted_right(epu8 a) noexcept {
+
75  return simde_mm_bslli_si128(a, 1);
+
76 }
+
80 inline epu8 shifted_left(epu8 a) noexcept { return simde_mm_bsrli_si128(a, 1); }
+
82 inline epu8 reverted(epu8 a) noexcept { return permuted(a, Epu8.rev()); }
+
83 
+
85 inline epu8 min(epu8 a, epu8 b) noexcept { return simde_mm_min_epu8(a, b); }
+
87 inline epu8 max(epu8 a, epu8 b) noexcept { return simde_mm_max_epu8(a, b); }
+
88 
+
90 inline bool is_sorted(epu8 a) noexcept;
+
96 inline epu8 sorted(epu8 a) noexcept;
+
101 inline epu8 sorted8(epu8 a) noexcept;
+
107 inline epu8 revsorted(epu8 a) noexcept;
+
112 inline epu8 revsorted8(epu8 a) noexcept;
+
113 
+
118 inline epu8 sort_perm(epu8 &a) noexcept;
+
123 inline epu8 sort8_perm(epu8 &a) noexcept;
+
124 
+
134 inline void merge(epu8 &a, epu8 &b) noexcept;
+
135 
+
144 #ifdef SIMDE_X86_SSE4_2_NATIVE
+
148 inline epu8 permutation_of_cmpestrm(epu8 a, epu8 b) noexcept;
+
149 #endif
+
153 inline epu8 permutation_of_ref(epu8 a, epu8 b) noexcept;
+
157 inline epu8 permutation_of(epu8 a, epu8 b) noexcept;
+
158 
+
160 constexpr uint64_t prime = 0x9e3779b97f4a7bb9;
+
161 
+
169 inline epu8 random_epu8(uint16_t bnd);
+
170 
+
178 inline epu8 remove_dups(epu8 a, uint8_t repl = 0) noexcept;
+
179 
+
195 inline uint8_t horiz_sum_ref(epu8) noexcept;
+
201 inline uint8_t horiz_sum_gen(epu8) noexcept;
+
206 inline uint8_t horiz_sum4(epu8) noexcept;
+
211 inline uint8_t horiz_sum3(epu8) noexcept;
+
213 inline uint8_t horiz_sum(epu8 v) noexcept { return horiz_sum3(v); }
+
214 
+
229 inline epu8 partial_sums_ref(epu8) noexcept;
+
235 inline epu8 partial_sums_gen(epu8) noexcept;
+
240 inline epu8 partial_sums_round(epu8) noexcept;
+
242 inline epu8 partial_sums(epu8 v) noexcept { return partial_sums_round(v); }
+
243 
+
258 inline uint8_t horiz_max_ref(epu8) noexcept;
+
264 inline uint8_t horiz_max_gen(epu8) noexcept;
+
269 inline uint8_t horiz_max4(epu8) noexcept;
+
274 inline uint8_t horiz_max3(epu8) noexcept;
+
276 inline uint8_t horiz_max(epu8 v) noexcept { return horiz_max4(v); }
+
277 
+
292 inline epu8 partial_max_ref(epu8) noexcept;
+
298 inline epu8 partial_max_gen(epu8) noexcept;
+
303 inline epu8 partial_max_round(epu8) noexcept;
+
305 inline epu8 partial_max(epu8 v) noexcept { return partial_max_round(v); }
+
306 
+
321 inline uint8_t horiz_min_ref(epu8) noexcept;
+
327 inline uint8_t horiz_min_gen(epu8) noexcept;
+
332 inline uint8_t horiz_min4(epu8) noexcept;
+
337 inline uint8_t horiz_min3(epu8) noexcept;
+
339 inline uint8_t horiz_min(epu8 v) noexcept { return horiz_min4(v); }
+
340 
+
355 inline epu8 partial_min_ref(epu8) noexcept;
+
361 inline epu8 partial_min_gen(epu8) noexcept;
+
366 inline epu8 partial_min_round(epu8) noexcept;
+
368 inline epu8 partial_min(epu8 v) noexcept { return partial_min_round(v); }
+
369 
+
387 inline epu8 eval16_ref(epu8 v) noexcept;
+
392 inline epu8 eval16_arr(epu8 v) noexcept;
+
397 inline epu8 eval16_cycle(epu8 v) noexcept;
+
402 inline epu8 eval16_popcount(epu8 v) noexcept;
+
404 inline epu8 eval16(epu8 v) noexcept { return eval16_cycle(v); }
+
405 
+
428 inline uint64_t first_diff_ref(epu8 a, epu8 b, size_t bound = 16) noexcept;
+
429 #ifdef SIMDE_X86_SSE4_2_NATIVE
+
434 inline uint64_t first_diff_cmpstr(epu8 a, epu8 b, size_t bound = 16) noexcept;
+
435 #endif
+
440 inline uint64_t first_diff_mask(epu8 a, epu8 b, size_t bound = 16) noexcept;
+
442 inline uint64_t first_diff(epu8 a, epu8 b, size_t bound = 16) noexcept {
+
443  return first_diff_mask(a, b, bound);
+
444 }
+
445 
+
468 inline uint64_t last_diff_ref(epu8 a, epu8 b, size_t bound = 16) noexcept;
+
469 #ifdef SIMDE_X86_SSE4_2_NATIVE
+
474 inline uint64_t last_diff_cmpstr(epu8 a, epu8 b, size_t bound = 16) noexcept;
+
475 #endif
+
480 inline uint64_t last_diff_mask(epu8 a, epu8 b, size_t bound = 16) noexcept;
+
482 inline uint64_t last_diff(epu8 a, epu8 b, size_t bound = 16) noexcept {
+
483  return last_diff_mask(a, b, bound);
+
484 }
+
485 
+
487 inline bool less(epu8 a, epu8 b) noexcept;
+
493 inline int8_t less_partial(epu8 a, epu8 b, int k) noexcept;
+
494 
+
498 inline uint64_t first_zero(epu8 v, int bnd) noexcept;
+
502 inline uint64_t last_zero(epu8 v, int bnd) noexcept;
+
506 inline uint64_t first_non_zero(epu8 v, int bnd) noexcept;
+
510 inline uint64_t last_non_zero(epu8 v, int bnd) noexcept;
+
511 
+
514 inline epu8 popcount16(epu8 v) noexcept;
+
515 
+
531 inline bool is_partial_transformation(epu8 v, const size_t k = 16) noexcept;
+
532 
+
548 inline bool is_transformation(epu8 v, const size_t k = 16) noexcept;
+
549 
+
566 inline bool is_partial_permutation(epu8 v, const size_t k = 16) noexcept;
+
567 
+
583 #ifdef SIMDE_X86_SSE4_2_NATIVE
+
587 inline bool is_permutation_cpmestri(epu8 v, const size_t k = 16) noexcept;
+
588 #endif
+
592 inline bool is_permutation_sort(epu8 v, const size_t k = 16) noexcept;
+
596 inline bool is_permutation_eval(epu8 v, const size_t k = 16) noexcept;
+
600 inline bool is_permutation(epu8 v, const size_t k = 16) noexcept;
+
601 
+
602 } // namespace HPCombi
+
603 
+
604 namespace std {
+
605 
+
606 inline std::ostream &operator<<(std::ostream &stream, HPCombi::epu8 const &a);
+
607 
+
608 inline std::string to_string(HPCombi::epu8 const &a);
+
609 
+
616 } // namespace std
+
617 
+
618 #include "epu8_impl.hpp"
+
619 
+
620 #endif // HPCOMBI_EPU8_HPP_
+ + + +
Definition: bmat8.hpp:37
+
uint8_t horiz_min4(epu8) noexcept
Horizontal sum of a HPCombi::epu8.
Definition: epu8_impl.hpp:414
+
epu8 max(epu8 a, epu8 b) noexcept
Vector max between two HPCombi::epu8 0.
Definition: epu8.hpp:87
+
uint64_t last_diff_ref(epu8 a, epu8 b, size_t bound=16) noexcept
The last difference between two HPCombi::epu8.
Definition: epu8_impl.hpp:88
+
uint64_t first_non_zero(epu8 v, int bnd) noexcept
return the index of the first non zero entry or 16 if there are none Only index smaller than bound ar...
Definition: epu8_impl.hpp:122
+
uint8_t horiz_min_ref(epu8) noexcept
Horizontal sum of a HPCombi::epu8.
Definition: epu8_impl.hpp:405
+
epu8 eval16_arr(epu8 v) noexcept
Evaluation of a HPCombi::epu8.
Definition: epu8_impl.hpp:448
+
epu8 permuted(epu8 a, epu8 b) noexcept
Permuting a HPCombi::epu8.
Definition: epu8.hpp:68
+
epu8 sort8_perm(epu8 &a) noexcept
Sort this and return the sorting permutation.
Definition: epu8_impl.hpp:215
+
epu8 shifted_right(epu8 a) noexcept
Left shifted of a HPCombi::epu8 inserting a 0.
Definition: epu8.hpp:74
+
uint64_t first_diff_ref(epu8 a, epu8 b, size_t bound=16) noexcept
The first difference between two HPCombi::epu8.
Definition: epu8_impl.hpp:73
+
uint64_t first_diff_mask(epu8 a, epu8 b, size_t bound=16) noexcept
The first difference between two HPCombi::epu8.
Definition: epu8_impl.hpp:84
+
epu8 partial_sums_ref(epu8) noexcept
Horizontal partial sum of a HPCombi::epu8.
Definition: epu8_impl.hpp:353
+
epu8 partial_sums(epu8 v) noexcept
Horizontal partial sum of a HPCombi::epu8.
Definition: epu8.hpp:242
+
uint8_t horiz_min(epu8 v) noexcept
Horizontal sum of a HPCombi::epu8.
Definition: epu8.hpp:339
+
epu8 remove_dups(epu8 a, uint8_t repl=0) noexcept
Remove duplicates in a sorted HPCombi::epu8.
Definition: epu8_impl.hpp:256
+
epu8 revsorted8(epu8 a) noexcept
Return a HPCombi::epu8 with the two half reverse sorted.
Definition: epu8_impl.hpp:208
+
epu8 permutation_of(epu8 a, epu8 b) noexcept
Find if a vector is a permutation of one other.
Definition: epu8_impl.hpp:299
+
bool is_permutation(epu8 v, const size_t k=16) noexcept
Definition: epu8_impl.hpp:526
+
int8_t less_partial(epu8 a, epu8 b, int k) noexcept
Partial lexicographic comparison between two HPCombi::epu8.
Definition: epu8_impl.hpp:109
+
uint8_t horiz_max4(epu8) noexcept
Horizontal sum of a HPCombi::epu8.
Definition: epu8_impl.hpp:379
+
uint64_t last_diff_mask(epu8 a, epu8 b, size_t bound=16) noexcept
The last difference between two HPCombi::epu8.
Definition: epu8_impl.hpp:101
+
uint8_t horiz_max3(epu8) noexcept
Horizontal sum of a HPCombi::epu8.
Definition: epu8_impl.hpp:380
+
bool is_all_one(epu8 a) noexcept
Test whether all the entries of a HPCombi::epu8 are one.
Definition: epu8.hpp:54
+
constexpr uint64_t prime
A prime number good for hashing.
Definition: epu8.hpp:160
+
uint8_t horiz_min_gen(epu8) noexcept
Horizontal sum of a HPCombi::epu8.
Definition: epu8_impl.hpp:411
+
bool is_partial_permutation(epu8 v, const size_t k=16) noexcept
Test for partial permutations.
Definition: epu8_impl.hpp:495
+
bool is_permutation_sort(epu8 v, const size_t k=16) noexcept
Definition: epu8_impl.hpp:517
+
uint64_t last_zero(epu8 v, int bnd) noexcept
return the index of the last zero entry or 16 if there are none Only index smaller than bound are tak...
Definition: epu8_impl.hpp:119
+
void merge(epu8 &a, epu8 &b) noexcept
Merge two sorted epu8.
Definition: epu8_impl.hpp:236
+
uint8_t horiz_sum4(epu8) noexcept
Horizontal sum of a HPCombi::epu8.
Definition: epu8_impl.hpp:344
+
epu8 popcount16(epu8 v) noexcept
a vector popcount function
Definition: epu8_impl.hpp:476
+
epu8 partial_sums_round(epu8) noexcept
Horizontal partial sum of a HPCombi::epu8.
Definition: epu8_impl.hpp:364
+
uint8_t horiz_sum3(epu8) noexcept
Horizontal sum of a HPCombi::epu8.
Definition: epu8_impl.hpp:345
+
uint8_t horiz_sum_ref(epu8) noexcept
Horizontal sum of a HPCombi::epu8.
Definition: epu8_impl.hpp:335
+
epu8 partial_sums_gen(epu8) noexcept
Horizontal partial sum of a HPCombi::epu8.
Definition: epu8_impl.hpp:360
+
bool equal(epu8 a, epu8 b) noexcept
Equality of HPCombi::epu8.
Definition: epu8.hpp:59
+
epu8 permutation_of_ref(epu8 a, epu8 b) noexcept
Find if a vector is a permutation of one other.
Definition: epu8_impl.hpp:290
+
epu8 min(epu8 a, epu8 b) noexcept
Vector min between two HPCombi::epu8 0.
Definition: epu8.hpp:85
+
epu8 partial_max_ref(epu8) noexcept
Horizontal partial sum of a HPCombi::epu8.
Definition: epu8_impl.hpp:388
+
epu8 sorted8(epu8 a) noexcept
Return a HPCombi::epu8 with the two half sorted.
Definition: epu8_impl.hpp:202
+
epu8 partial_max_round(epu8) noexcept
Horizontal partial sum of a HPCombi::epu8.
Definition: epu8_impl.hpp:399
+
epu8 eval16(epu8 v) noexcept
Evaluation of a HPCombi::epu8.
Definition: epu8.hpp:404
+
uint8_t horiz_sum(epu8 v) noexcept
Horizontal sum of a HPCombi::epu8.
Definition: epu8.hpp:213
+
uint8_t horiz_max(epu8 v) noexcept
Horizontal sum of a HPCombi::epu8.
Definition: epu8.hpp:276
+
epu8 reverted(epu8 a) noexcept
Reverting a HPCombi::epu8.
Definition: epu8.hpp:82
+
epu8 eval16_cycle(epu8 v) noexcept
Evaluation of a HPCombi::epu8.
Definition: epu8_impl.hpp:459
+
epu8 eval16_ref(epu8 v) noexcept
Evaluation of a HPCombi::epu8.
Definition: epu8_impl.hpp:440
+
epu8 partial_max_gen(epu8) noexcept
Horizontal partial sum of a HPCombi::epu8.
Definition: epu8_impl.hpp:395
+
bool less(epu8 a, epu8 b) noexcept
Lexicographic comparison between two HPCombi::epu8.
Definition: epu8_impl.hpp:105
+
uint8_t horiz_max_ref(epu8) noexcept
Horizontal sum of a HPCombi::epu8.
Definition: epu8_impl.hpp:370
+
epu8 sorted(epu8 a) noexcept
Return a sorted HPCombi::epu8.
Definition: epu8_impl.hpp:199
+
constexpr TPUBuild< epu8 > Epu8
Factory object acting as a class constructor for type HPCombi::epu8.
Definition: epu8.hpp:49
+
bool is_permutation_eval(epu8 v, const size_t k=16) noexcept
Definition: epu8_impl.hpp:521
+
uint64_t first_zero(epu8 v, int bnd) noexcept
return the index of the first zero entry or 16 if there are none Only index smaller than bound are ta...
Definition: epu8_impl.hpp:116
+
bool is_all_zero(epu8 a) noexcept
Test whether all the entries of a HPCombi::epu8 are zero.
Definition: epu8.hpp:52
+
epu8 random_epu8(uint16_t bnd)
A random HPCombi::epu8.
Definition: epu8_impl.hpp:244
+
epu8 partial_min(epu8 v) noexcept
Horizontal partial sum of a HPCombi::epu8.
Definition: epu8.hpp:368
+
epu8 revsorted(epu8 a) noexcept
Return a reverse sorted HPCombi::epu8.
Definition: epu8_impl.hpp:205
+
epu8 partial_min_round(epu8) noexcept
Horizontal partial sum of a HPCombi::epu8.
Definition: epu8_impl.hpp:434
+
bool is_sorted(epu8 a) noexcept
Testing if a HPCombi::epu8 is sorted.
Definition: epu8_impl.hpp:196
+
uint8_t __attribute__((vector_size(16))) epu8
SIMD vector of 16 unsigned bytes.
Definition: epu8.hpp:41
+
uint64_t last_non_zero(epu8 v, int bnd) noexcept
return the index of the last non zero entry or 16 if there are none Only index smaller than bound are...
Definition: epu8_impl.hpp:125
+
uint64_t last_diff(epu8 a, epu8 b, size_t bound=16) noexcept
The last difference between two HPCombi::epu8.
Definition: epu8.hpp:482
+
epu8 eval16_popcount(epu8 v) noexcept
Evaluation of a HPCombi::epu8.
Definition: epu8_impl.hpp:467
+
epu8 sort_perm(epu8 &a) noexcept
Sort this and return the sorting permutation.
Definition: epu8_impl.hpp:212
+
epu8 partial_min_gen(epu8) noexcept
Horizontal partial sum of a HPCombi::epu8.
Definition: epu8_impl.hpp:430
+
epu8 partial_min_ref(epu8) noexcept
Horizontal partial sum of a HPCombi::epu8.
Definition: epu8_impl.hpp:423
+
uint8_t horiz_max_gen(epu8) noexcept
Horizontal sum of a HPCombi::epu8.
Definition: epu8_impl.hpp:376
+
epu8 shifted_left(epu8 a) noexcept
Right shifted of a HPCombi::epu8 inserting a 0.
Definition: epu8.hpp:80
+
bool is_transformation(epu8 v, const size_t k=16) noexcept
Test for transformation.
Definition: epu8_impl.hpp:489
+
uint64_t first_diff(epu8 a, epu8 b, size_t bound=16) noexcept
The first difference between two HPCombi::epu8.
Definition: epu8.hpp:442
+
bool is_partial_transformation(epu8 v, const size_t k=16) noexcept
Test for partial transformation.
Definition: epu8_impl.hpp:481
+
epu8 permuted_ref(epu8 a, epu8 b) noexcept
Permuting a HPCombi::epu8.
Definition: epu8_impl.hpp:55
+
epu8 partial_max(epu8 v) noexcept
Horizontal partial sum of a HPCombi::epu8.
Definition: epu8.hpp:305
+
uint8_t horiz_sum_gen(epu8) noexcept
Horizontal sum of a HPCombi::epu8.
Definition: epu8_impl.hpp:341
+
uint8_t horiz_min3(epu8) noexcept
Horizontal sum of a HPCombi::epu8.
Definition: epu8_impl.hpp:415
+
bool not_equal(epu8 a, epu8 b) noexcept
Non equality of HPCombi::epu8.
Definition: epu8.hpp:63
+
Definition: bmat8.hpp:360
+
std::ostream & operator<<(std::ostream &stream, HPCombi::epu8 const &a)
Definition: epu8_impl.hpp:538
+
std::string to_string(HPCombi::epu8 const &a)
Definition: epu8_impl.hpp:546
+
Class for factory object associated to a SIMD packed unsigned integers.
Definition: builder.hpp:39
+ +
+ + + + diff --git a/docs/epu8__impl_8hpp.html b/docs/epu8__impl_8hpp.html new file mode 100644 index 00000000..5120adc4 --- /dev/null +++ b/docs/epu8__impl_8hpp.html @@ -0,0 +1,341 @@ + + + + + + + +HPCombi: /home/florent/src/HPCombi/include/hpcombi/epu8_impl.hpp File Reference + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
epu8_impl.hpp File Reference
+
+
+
#include <initializer_list>
+#include <iostream>
+#include <random>
+#include <sstream>
+#include "vect_generic.hpp"
+
+

Go to the source code of this file.

+ + + + + + + + + + +

+Classes

struct  std::equal_to< HPCombi::epu8 >
 
struct  std::not_equal_to< HPCombi::epu8 >
 
struct  std::hash< HPCombi::epu8 >
 
struct  std::less< HPCombi::epu8 >
 
+ + + + + +

+Namespaces

 HPCombi
 
 std
 
+ + + +

+Macros

#define FF   0xff
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

epu8 HPCombi::permuted_ref (epu8 a, epu8 b) noexcept
 Permuting a HPCombi::epu8. More...
 
uint64_t HPCombi::first_mask (epu8 msk, size_t bound)
 
uint64_t HPCombi::last_mask (epu8 msk, size_t bound)
 
uint64_t HPCombi::first_diff_ref (epu8 a, epu8 b, size_t bound=16) noexcept
 The first difference between two HPCombi::epu8. More...
 
uint64_t HPCombi::first_diff_mask (epu8 a, epu8 b, size_t bound=16) noexcept
 The first difference between two HPCombi::epu8. More...
 
uint64_t HPCombi::last_diff_ref (epu8 a, epu8 b, size_t bound=16) noexcept
 The last difference between two HPCombi::epu8. More...
 
uint64_t HPCombi::last_diff_mask (epu8 a, epu8 b, size_t bound=16) noexcept
 The last difference between two HPCombi::epu8. More...
 
bool HPCombi::less (epu8 a, epu8 b) noexcept
 Lexicographic comparison between two HPCombi::epu8. More...
 
int8_t HPCombi::less_partial (epu8 a, epu8 b, int k) noexcept
 Partial lexicographic comparison between two HPCombi::epu8. More...
 
uint64_t HPCombi::first_zero (epu8 v, int bnd) noexcept
 return the index of the first zero entry or 16 if there are none Only index smaller than bound are taken into account. More...
 
uint64_t HPCombi::last_zero (epu8 v, int bnd) noexcept
 return the index of the last zero entry or 16 if there are none Only index smaller than bound are taken into account. More...
 
uint64_t HPCombi::first_non_zero (epu8 v, int bnd) noexcept
 return the index of the first non zero entry or 16 if there are none Only index smaller than bound are taken into account. More...
 
uint64_t HPCombi::last_non_zero (epu8 v, int bnd) noexcept
 return the index of the last non zero entry or 16 if there are none Only index smaller than bound are taken into account. More...
 
template<bool Increasing = true, size_t sz>
epu8 HPCombi::network_sort (epu8 res, std::array< epu8, sz > rounds)
 Apply a sorting network. More...
 
template<bool Increasing = true, size_t sz>
epu8 HPCombi::network_sort_perm (epu8 &v, std::array< epu8, sz > rounds)
 Apply a sorting network in place and return the permutation. More...
 
bool HPCombi::is_sorted (epu8 a) noexcept
 Testing if a HPCombi::epu8 is sorted. More...
 
epu8 HPCombi::sorted (epu8 a) noexcept
 Return a sorted HPCombi::epu8. More...
 
epu8 HPCombi::sorted8 (epu8 a) noexcept
 Return a HPCombi::epu8 with the two half sorted. More...
 
epu8 HPCombi::revsorted (epu8 a) noexcept
 Return a reverse sorted HPCombi::epu8. More...
 
epu8 HPCombi::revsorted8 (epu8 a) noexcept
 Return a HPCombi::epu8 with the two half reverse sorted. More...
 
epu8 HPCombi::sort_perm (epu8 &a) noexcept
 Sort this and return the sorting permutation. More...
 
epu8 HPCombi::sort8_perm (epu8 &a) noexcept
 Sort this and return the sorting permutation. More...
 
void HPCombi::merge_rev (epu8 &a, epu8 &b) noexcept
 
void HPCombi::merge (epu8 &a, epu8 &b) noexcept
 Merge two sorted epu8. More...
 
epu8 HPCombi::random_epu8 (uint16_t bnd)
 A random HPCombi::epu8. More...
 
epu8 HPCombi::remove_dups (epu8 a, uint8_t repl=0) noexcept
 Remove duplicates in a sorted HPCombi::epu8. More...
 
epu8 HPCombi::permutation_of_ref (epu8 a, epu8 b) noexcept
 Find if a vector is a permutation of one other. More...
 
epu8 HPCombi::permutation_of (epu8 a, epu8 b) noexcept
 Find if a vector is a permutation of one other. More...
 
uint8_t HPCombi::horiz_sum_ref (epu8) noexcept
 Horizontal sum of a HPCombi::epu8. More...
 
uint8_t HPCombi::horiz_sum_gen (epu8) noexcept
 Horizontal sum of a HPCombi::epu8. More...
 
uint8_t HPCombi::horiz_sum4 (epu8) noexcept
 Horizontal sum of a HPCombi::epu8. More...
 
uint8_t HPCombi::horiz_sum3 (epu8) noexcept
 Horizontal sum of a HPCombi::epu8. More...
 
epu8 HPCombi::partial_sums_ref (epu8) noexcept
 Horizontal partial sum of a HPCombi::epu8. More...
 
epu8 HPCombi::partial_sums_gen (epu8) noexcept
 Horizontal partial sum of a HPCombi::epu8. More...
 
epu8 HPCombi::partial_sums_round (epu8) noexcept
 Horizontal partial sum of a HPCombi::epu8. More...
 
uint8_t HPCombi::horiz_max_ref (epu8) noexcept
 Horizontal sum of a HPCombi::epu8. More...
 
uint8_t HPCombi::horiz_max_gen (epu8) noexcept
 Horizontal sum of a HPCombi::epu8. More...
 
uint8_t HPCombi::horiz_max4 (epu8) noexcept
 Horizontal sum of a HPCombi::epu8. More...
 
uint8_t HPCombi::horiz_max3 (epu8) noexcept
 Horizontal sum of a HPCombi::epu8. More...
 
epu8 HPCombi::partial_max_ref (epu8) noexcept
 Horizontal partial sum of a HPCombi::epu8. More...
 
epu8 HPCombi::partial_max_gen (epu8) noexcept
 Horizontal partial sum of a HPCombi::epu8. More...
 
epu8 HPCombi::partial_max_round (epu8) noexcept
 Horizontal partial sum of a HPCombi::epu8. More...
 
uint8_t HPCombi::horiz_min_ref (epu8) noexcept
 Horizontal sum of a HPCombi::epu8. More...
 
uint8_t HPCombi::horiz_min_gen (epu8) noexcept
 Horizontal sum of a HPCombi::epu8. More...
 
uint8_t HPCombi::horiz_min4 (epu8) noexcept
 Horizontal sum of a HPCombi::epu8. More...
 
uint8_t HPCombi::horiz_min3 (epu8) noexcept
 Horizontal sum of a HPCombi::epu8. More...
 
epu8 HPCombi::partial_min_ref (epu8) noexcept
 Horizontal partial sum of a HPCombi::epu8. More...
 
epu8 HPCombi::partial_min_gen (epu8) noexcept
 Horizontal partial sum of a HPCombi::epu8. More...
 
epu8 HPCombi::partial_min_round (epu8) noexcept
 Horizontal partial sum of a HPCombi::epu8. More...
 
epu8 HPCombi::eval16_ref (epu8 v) noexcept
 Evaluation of a HPCombi::epu8. More...
 
epu8 HPCombi::eval16_arr (epu8 v) noexcept
 Evaluation of a HPCombi::epu8. More...
 
epu8 HPCombi::eval16_gen (epu8 v) noexcept
 
epu8 HPCombi::eval16_cycle (epu8 v) noexcept
 Evaluation of a HPCombi::epu8. More...
 
epu8 HPCombi::eval16_popcount (epu8 v) noexcept
 Evaluation of a HPCombi::epu8. More...
 
epu8 HPCombi::popcount16 (epu8 v) noexcept
 a vector popcount function More...
 
bool HPCombi::is_partial_transformation (epu8 v, const size_t k=16) noexcept
 Test for partial transformation. More...
 
bool HPCombi::is_transformation (epu8 v, const size_t k=16) noexcept
 Test for transformation. More...
 
bool HPCombi::is_partial_permutation (epu8 v, const size_t k=16) noexcept
 Test for partial permutations. More...
 
bool HPCombi::is_permutation_sort (epu8 v, const size_t k=16) noexcept
 
bool HPCombi::is_permutation_eval (epu8 v, const size_t k=16) noexcept
 
bool HPCombi::is_permutation (epu8 v, const size_t k=16) noexcept
 
std::ostream & std::operator<< (std::ostream &stream, HPCombi::epu8 const &a)
 
std::string std::to_string (HPCombi::epu8 const &a)
 
+ + + + + + + + + + + + + + + + +

+Variables

constexpr std::array< epu8, 9 > HPCombi::sorting_rounds
 A 16-way sorting network. More...
 
constexpr std::array< epu8, 6 > HPCombi::sorting_rounds8
 A duplicated 8-way sorting network. More...
 
constexpr std::array< epu8, 6 > HPCombi::merge_rounds
 
constexpr std::array< epu8, 3 > HPCombi::inverting_rounds
 
constexpr std::array< epu8, 4 > HPCombi::summing_rounds
 Permutation Round for partial and horizontal sums. More...
 
constexpr std::array< epu8, 4 > HPCombi::mining_rounds
 
+

Macro Definition Documentation

+ +

◆ FF

+ +
+
+ + + + +
#define FF   0xff
+
+ +
+
+
+ + + + diff --git a/docs/epu8__impl_8hpp_source.html b/docs/epu8__impl_8hpp_source.html new file mode 100644 index 00000000..7da416b5 --- /dev/null +++ b/docs/epu8__impl_8hpp_source.html @@ -0,0 +1,749 @@ + + + + + + + +HPCombi: /home/florent/src/HPCombi/include/hpcombi/epu8_impl.hpp Source File + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
epu8_impl.hpp
+
+
+Go to the documentation of this file.
1 // Copyright (C) 2016 Florent Hivert <Florent.Hivert@lri.fr>, //
+
3 // //
+
4 // Distributed under the terms of the GNU General Public License (GPL) //
+
5 // //
+
6 // This code is distributed in the hope that it will be useful, //
+
7 // but WITHOUT ANY WARRANTY; without even the implied warranty of //
+
8 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU //
+
9 // General Public License for more details. //
+
10 // //
+
11 // The full text of the GPL is available at: //
+
12 // //
+
13 // http://www.gnu.org/licenses/ //
+
15 
+
16 // NOLINT(build/header_guard)
+
17 
+
18 // This is the implementation part of epu8.hpp this should be seen as
+
19 // implementation details and should not be included directly.
+
20 
+
21 #include <initializer_list>
+
22 #include <iostream>
+
23 #include <random>
+
24 #include <sstream>
+
25 
+
26 #include "vect_generic.hpp"
+
27 
+
28 #ifdef SIMDE_X86_SSE4_2_NATIVE
+
29 // Comparison mode for _mm_cmpestri
+
30 #define FIRST_DIFF \
+
31  (SIMDE_SIDD_UBYTE_OPS | SIMDE_SIDD_CMP_EQUAL_EACH | \
+
32  SIMDE_SIDD_NEGATIVE_POLARITY)
+
33 #define LAST_DIFF \
+
34  (SIMDE_SIDD_UBYTE_OPS | SIMDE_SIDD_CMP_EQUAL_EACH | \
+
35  SIMDE_SIDD_NEGATIVE_POLARITY | SIMDE_SIDD_MOST_SIGNIFICANT)
+
36 #define FIRST_ZERO (SIMDE_SIDD_UBYTE_OPS | SIMDE_SIDD_CMP_EQUAL_ANY)
+
37 #define LAST_ZERO \
+
38  (SIMDE_SIDD_UBYTE_OPS | SIMDE_SIDD_CMP_EQUAL_ANY | \
+
39  SIMDE_SIDD_MOST_SIGNIFICANT)
+
40 #define FIRST_NON_ZERO \
+
41  (SIMDE_SIDD_UBYTE_OPS | SIMDE_SIDD_CMP_EQUAL_ANY | \
+
42  SIMDE_SIDD_MASKED_NEGATIVE_POLARITY)
+
43 #define LAST_NON_ZERO \
+
44  (SIMDE_SIDD_UBYTE_OPS | SIMDE_SIDD_CMP_EQUAL_ANY | \
+
45  SIMDE_SIDD_MASKED_NEGATIVE_POLARITY | SIMDE_SIDD_MOST_SIGNIFICANT)
+
46 #endif
+
47 
+
48 namespace HPCombi {
+
49 
+
51 // Implementation part for inline functions
+
53 
+
55 inline epu8 permuted_ref(epu8 a, epu8 b) noexcept {
+
56  epu8 res;
+
57  for (uint64_t i = 0; i < 16; i++)
+
58  res[i] = a[b[i] & 0xF];
+
59  return res;
+
60 }
+
61 
+
62 // Msk is supposed to be a boolean mask (i.e. each entry is either 0 or
+
63 // 255)
+
64 inline uint64_t first_mask(epu8 msk, size_t bound) {
+
65  uint64_t res = simde_mm_movemask_epi8(msk & (Epu8.id() < Epu8(bound)));
+
66  return res == 0 ? 16 : (__builtin_ffsll(res) - 1);
+
67 }
+
68 inline uint64_t last_mask(epu8 msk, size_t bound) {
+
69  auto res = simde_mm_movemask_epi8(msk & (Epu8.id() < Epu8(bound)));
+
70  return res == 0 ? 16 : (63 - __builtin_clzll(res));
+
71 }
+
72 
+
73 inline uint64_t first_diff_ref(epu8 a, epu8 b, size_t bound) noexcept {
+
74  for (size_t i = 0; i < bound; i++)
+
75  if (a[i] != b[i])
+
76  return i;
+
77  return 16;
+
78 }
+
79 #ifdef SIMDE_X86_SSE4_2_NATIVE
+
80 inline uint64_t first_diff_cmpstr(epu8 a, epu8 b, size_t bound) noexcept {
+
81  return unsigned(_mm_cmpestri(a, bound, b, bound, FIRST_DIFF));
+
82 }
+
83 #endif
+
84 inline uint64_t first_diff_mask(epu8 a, epu8 b, size_t bound) noexcept {
+
85  return first_mask(a != b, bound);
+
86 }
+
87 
+
88 inline uint64_t last_diff_ref(epu8 a, epu8 b, size_t bound) noexcept {
+
89  while (bound != 0) {
+
90  --bound;
+
91  if (a[bound] != b[bound])
+
92  return bound;
+
93  }
+
94  return 16;
+
95 }
+
96 #ifdef SIMDE_X86_SSE4_2_NATIVE
+
97 inline uint64_t last_diff_cmpstr(epu8 a, epu8 b, size_t bound) noexcept {
+
98  return unsigned(_mm_cmpestri(a, bound, b, bound, LAST_DIFF));
+
99 }
+
100 #endif
+
101 inline uint64_t last_diff_mask(epu8 a, epu8 b, size_t bound) noexcept {
+
102  return last_mask(a != b, bound);
+
103 }
+
104 
+
105 inline bool less(epu8 a, epu8 b) noexcept {
+
106  uint64_t diff = first_diff(a, b);
+
107  return (diff < 16) && (a[diff] < b[diff]);
+
108 }
+
109 inline int8_t less_partial(epu8 a, epu8 b, int k) noexcept {
+
110  uint64_t diff = first_diff(a, b, k);
+
111  return (diff == 16)
+
112  ? 0
+
113  : static_cast<int8_t>(a[diff]) - static_cast<int8_t>(b[diff]);
+
114 }
+
115 
+
116 inline uint64_t first_zero(epu8 v, int bnd) noexcept {
+
117  return first_mask(v == epu8{}, bnd);
+
118 }
+
119 inline uint64_t last_zero(epu8 v, int bnd) noexcept {
+
120  return last_mask(v == epu8{}, bnd);
+
121 }
+
122 inline uint64_t first_non_zero(epu8 v, int bnd) noexcept {
+
123  return first_mask(v != epu8{}, bnd);
+
124 }
+
125 inline uint64_t last_non_zero(epu8 v, int bnd) noexcept {
+
126  return last_mask(v != epu8{}, bnd);
+
127 }
+
128 
+
130 template <bool Increasing = true, size_t sz>
+
131 inline epu8 network_sort(epu8 res, std::array<epu8, sz> rounds) {
+
132  for (auto round : rounds) {
+
133  // This conditional should be optimized out by the compiler
+
134  epu8 mask = Increasing ? round < Epu8.id() : Epu8.id() < round;
+
135  epu8 b = permuted(res, round);
+
136  // res = mask ? min(res,b) : max(res,b); is not accepted by clang
+
137  res = simde_mm_blendv_epi8(min(res, b), max(res, b), mask);
+
138  }
+
139  return res;
+
140 }
+
141 
+
143 template <bool Increasing = true, size_t sz>
+
144 inline epu8 network_sort_perm(epu8 &v, std::array<epu8, sz> rounds) {
+
145  epu8 res = Epu8.id();
+
146  for (auto round : rounds) {
+
147  // This conditional should be optimized out by the compiler
+
148  epu8 mask = Increasing ? round < Epu8.id() : Epu8.id() < round;
+
149  epu8 b = permuted(v, round);
+
150  epu8 cmp = simde_mm_blendv_epi8(b < v, v < b, mask);
+
151  v = simde_mm_blendv_epi8(v, b, cmp);
+
152  res = simde_mm_blendv_epi8(res, permuted(res, round), cmp);
+
153  }
+
154  return res;
+
155 }
+
156 
+
163 constexpr std::array<epu8, 9> sorting_rounds
+
164  // 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
+
165  {{epu8{1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14},
+
166  epu8{2, 3, 0, 1, 6, 7, 4, 5, 10, 11, 8, 9, 14, 15, 12, 13},
+
167  epu8{4, 5, 6, 7, 0, 1, 2, 3, 12, 13, 14, 15, 8, 9, 10, 11},
+
168  epu8{8, 9, 10, 11, 12, 13, 14, 15, 0, 1, 2, 3, 4, 5, 6, 7},
+
169  epu8{0, 2, 1, 12, 8, 10, 9, 11, 4, 6, 5, 7, 3, 14, 13, 15},
+
170  epu8{0, 4, 8, 10, 1, 9, 12, 13, 2, 5, 3, 14, 6, 7, 11, 15},
+
171  epu8{0, 1, 4, 5, 2, 3, 8, 9, 6, 7, 12, 13, 10, 11, 14, 15},
+
172  epu8{0, 1, 2, 6, 4, 8, 3, 10, 5, 12, 7, 11, 9, 13, 14, 15},
+
173  epu8{0, 1, 2, 4, 3, 6, 5, 8, 7, 10, 9, 12, 11, 13, 14, 15}}};
+
174 
+
183 constexpr std::array<epu8, 6> sorting_rounds8
+
184  // clang-format off
+
185  // 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
+
186 {{
+
187  epu8 { 1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14},
+
188  epu8 { 2, 3, 0, 1, 6, 7, 4, 5, 10, 11, 8, 9, 14, 15, 12, 13},
+
189  epu8 { 0, 2, 1, 3, 4, 6, 5, 7, 8, 10, 9, 11, 12, 14, 13, 15},
+
190  epu8 { 4, 5, 6, 7, 0, 1, 2, 3, 12, 13, 14, 15, 8, 9, 10, 11},
+
191  epu8 { 0, 1, 4, 5, 2, 3, 6, 7, 8, 9, 12, 13, 10, 11, 14, 15},
+
192  epu8 { 0, 2, 1, 4, 3, 6, 5, 7, 8, 10, 9, 12, 11, 14, 13, 15}
+
193 }};
+
194 // clang-format on
+
195 
+
196 inline bool is_sorted(epu8 a) noexcept {
+
197  return simde_mm_movemask_epi8(shifted_right(a) > a) == 0;
+
198 }
+
199 inline epu8 sorted(epu8 a) noexcept {
+
200  return network_sort<true>(a, sorting_rounds);
+
201 }
+
202 inline epu8 sorted8(epu8 a) noexcept {
+
203  return network_sort<true>(a, sorting_rounds8);
+
204 }
+
205 inline epu8 revsorted(epu8 a) noexcept {
+
206  return network_sort<false>(a, sorting_rounds);
+
207 }
+
208 inline epu8 revsorted8(epu8 a) noexcept {
+
209  return network_sort<false>(a, sorting_rounds8);
+
210 }
+
211 
+
212 inline epu8 sort_perm(epu8 &a) noexcept {
+
213  return network_sort_perm<true>(a, sorting_rounds);
+
214 }
+
215 inline epu8 sort8_perm(epu8 &a) noexcept {
+
216  return network_sort_perm<true>(a, sorting_rounds8);
+
217 }
+
218 
+
219 constexpr std::array<epu8, 6> merge_rounds
+
220  // clang-format off
+
221  // 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
+
222 {{
+
223  epu8 { 8, 9, 10, 11, 12, 13, 14, 15, 0, 1, 2, 3, 4, 5, 6, 7},
+
224  epu8 { 4, 5, 6, 7, 0, 1, 2, 3, 12, 13, 14, 15, 8, 9, 10, 11},
+
225  epu8 { 2, 3, 0, 1, 6, 7, 4, 5, 10, 11, 8, 9, 14, 15, 12, 13},
+
226  epu8 { 1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14},
+
227 }};
+
228 // clang-format on
+
229 inline void merge_rev(epu8 &a, epu8 &b) noexcept {
+
230  epu8 mn = min(a, b);
+
231  b = max(a, b);
+
232  a = mn;
+
233  a = network_sort<true>(a, merge_rounds);
+
234  b = network_sort<true>(b, merge_rounds);
+
235 }
+
236 inline void merge(epu8 &a, epu8 &b) noexcept {
+
237  a = permuted(a, Epu8.rev());
+
238  merge_rev(a, b);
+
239 }
+
240 // TODO : AVX2 version.
+
241 // TODO : compute merge_rounds on the fly instead of loading those from
+
242 // memory
+
243 
+
244 inline epu8 random_epu8(uint16_t bnd) {
+
245  epu8 res;
+
246 
+
247  static std::random_device rd;
+
248  static std::default_random_engine e1(rd());
+
249  std::uniform_int_distribution<int> uniform_dist(0, bnd - 1);
+
250 
+
251  for (size_t i = 0; i < 16; i++)
+
252  res[i] = uniform_dist(e1);
+
253  return res;
+
254 }
+
255 
+
256 inline epu8 remove_dups(epu8 v, uint8_t repl) noexcept {
+
257  // Vector ternary operator is not supported by clang.
+
258  // return (v != shifted_right(v) ? v : Epu8(repl);
+
259  return simde_mm_blendv_epi8(Epu8(repl), v, v != shifted_right(v));
+
260 }
+
261 
+
262 // Gather at the front numbers with (3-i)-th bit not set.
+
263 constexpr std::array<epu8, 3> inverting_rounds{{
+
264  // clang-format off
+
265  // 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
+
266  epu8 { 0, 1, 2, 3, 8, 9, 10, 11, 4, 5, 6, 7, 12, 13, 14, 15},
+
267  epu8 { 0, 1, 4, 5, 8, 9, 12, 13, 2, 3, 6, 7, 10, 11, 14, 15},
+
268  epu8 { 0, 2, 4, 6, 8, 10, 12, 14, 1, 3, 5, 7, 9, 11, 13, 15}
+
269  // clang-format on
+
270 }};
+
271 
+
272 #ifdef SIMDE_X86_SSE4_2_NATIVE
+
273 #define FIND_IN_VECT \
+
274  (SIMDE_SIDD_UBYTE_OPS | SIMDE_SIDD_CMP_EQUAL_ANY | SIMDE_SIDD_UNIT_MASK | \
+
275  SIMDE_SIDD_NEGATIVE_POLARITY)
+
276 #define FIND_IN_VECT_COMPL \
+
277  (SIMDE_SIDD_UBYTE_OPS | SIMDE_SIDD_CMP_EQUAL_ANY | SIMDE_SIDD_UNIT_MASK)
+
278 
+
279 inline epu8 permutation_of_cmpestrm(epu8 a, epu8 b) noexcept {
+
280  epu8 res = -static_cast<epu8>(_mm_cmpestrm(a, 8, b, 16, FIND_IN_VECT));
+
281  for (epu8 round : inverting_rounds) {
+
282  a = permuted(a, round);
+
283  res <<= 1;
+
284  res -= static_cast<epu8>(_mm_cmpestrm(a, 8, b, 16, FIND_IN_VECT));
+
285  }
+
286  return res;
+
287 }
+
288 #endif
+
289 
+
290 inline epu8 permutation_of_ref(epu8 a, epu8 b) noexcept {
+
291  auto ar = as_array(a);
+
292  epu8 res{};
+
293  for (size_t i = 0; i < 16; i++) {
+
294  res[i] =
+
295  std::distance(ar.begin(), std::find(ar.begin(), ar.end(), b[i]));
+
296  }
+
297  return res;
+
298 }
+
299 inline epu8 permutation_of(epu8 a, epu8 b) noexcept {
+
300 #ifdef SIMDE_X86_SSE4_2_NATIVE
+
301  return permutation_of_cmpestrm(a, b);
+
302 #else
+
303  return permutation_of_ref(a, b);
+
304 #endif
+
305 }
+
306 
+
307 #if defined(FF)
+
308 #error FF is defined !
+
309 #endif /* FF */
+
310 #define FF 0xff
+
311 
+
313 constexpr std::array<epu8, 4> summing_rounds{{
+
314  // clang-format off
+
315  // 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
+
316  epu8 { FF, 0, FF, 2, FF, 4, FF, 6, FF, 8, FF, 10, FF, 12, FF, 14},
+
317  epu8 { FF, FF, 1, 1, FF, FF, 5, 5, FF, FF, 9, 9, FF, FF, 13, 13},
+
318  epu8 { FF, FF, FF, FF, 3, 3, 3, 3, FF, FF, FF, FF, 11, 11, 11, 11},
+
319  epu8 { FF, FF, FF, FF, FF, FF, FF, FF, 7, 7, 7, 7, 7, 7, 7, 7}
+
320  // clang-format on
+
321 }};
+
322 
+
323 constexpr std::array<epu8, 4> mining_rounds{{
+
324  // clang-format off
+
325  // 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
+
326  epu8 { 0, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14},
+
327  epu8 { 0, 1, 1, 1, 4, 5, 5, 5, 8, 9, 9, 9, 12, 13, 13, 13},
+
328  epu8 { 0, 1, 2, 3, 3, 3, 3, 3, 8, 9, 10, 11, 11, 11, 11, 11},
+
329  epu8 { 0, 1, 2, 3, 4, 5, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7}
+
330  // clang-format on
+
331 }};
+
332 
+
333 #undef FF
+
334 
+
335 inline uint8_t horiz_sum_ref(epu8 v) noexcept {
+
336  uint8_t res = 0;
+
337  for (size_t i = 0; i < 16; i++)
+
338  res += v[i];
+
339  return res;
+
340 }
+
341 inline uint8_t horiz_sum_gen(epu8 v) noexcept {
+
342  return as_VectGeneric(v).horiz_sum();
+
343 }
+
344 inline uint8_t horiz_sum4(epu8 v) noexcept { return partial_sums_round(v)[15]; }
+
345 inline uint8_t horiz_sum3(epu8 v) noexcept {
+
346  auto sr = summing_rounds;
+
347  v += permuted(v, sr[0]);
+
348  v += permuted(v, sr[1]);
+
349  v += permuted(v, sr[2]);
+
350  return v[7] + v[15];
+
351 }
+
352 
+
353 inline epu8 partial_sums_ref(epu8 v) noexcept {
+
354  epu8 res{};
+
355  res[0] = v[0];
+
356  for (size_t i = 1; i < 16; i++)
+
357  res[i] = res[i - 1] + v[i];
+
358  return res;
+
359 }
+
360 inline epu8 partial_sums_gen(epu8 v) noexcept {
+
361  as_VectGeneric(v).partial_sums_inplace();
+
362  return v;
+
363 }
+
364 inline epu8 partial_sums_round(epu8 v) noexcept {
+
365  for (epu8 round : summing_rounds)
+
366  v += permuted(v, round);
+
367  return v;
+
368 }
+
369 
+
370 inline uint8_t horiz_max_ref(epu8 v) noexcept {
+
371  uint8_t res = 0;
+
372  for (size_t i = 0; i < 16; i++)
+
373  res = std::max(res, v[i]);
+
374  return res;
+
375 }
+
376 inline uint8_t horiz_max_gen(epu8 v) noexcept {
+
377  return as_VectGeneric(v).horiz_max();
+
378 }
+
379 inline uint8_t horiz_max4(epu8 v) noexcept { return partial_max_round(v)[15]; }
+
380 inline uint8_t horiz_max3(epu8 v) noexcept {
+
381  auto sr = summing_rounds;
+
382  v = max(v, permuted(v, sr[0]));
+
383  v = max(v, permuted(v, sr[1]));
+
384  v = max(v, permuted(v, sr[2]));
+
385  return std::max(v[7], v[15]);
+
386 }
+
387 
+
388 inline epu8 partial_max_ref(epu8 v) noexcept {
+
389  epu8 res;
+
390  res[0] = v[0];
+
391  for (size_t i = 1; i < 16; i++)
+
392  res[i] = std::max(res[i - 1], v[i]);
+
393  return res;
+
394 }
+
395 inline epu8 partial_max_gen(epu8 v) noexcept {
+
396  as_VectGeneric(v).partial_max_inplace();
+
397  return v;
+
398 }
+
399 inline epu8 partial_max_round(epu8 v) noexcept {
+
400  for (epu8 round : summing_rounds)
+
401  v = max(v, permuted(v, round));
+
402  return v;
+
403 }
+
404 
+
405 inline uint8_t horiz_min_ref(epu8 v) noexcept {
+
406  uint8_t res = 255;
+
407  for (size_t i = 0; i < 16; i++)
+
408  res = std::min(res, v[i]);
+
409  return res;
+
410 }
+
411 inline uint8_t horiz_min_gen(epu8 v) noexcept {
+
412  return as_VectGeneric(v).horiz_min();
+
413 }
+
414 inline uint8_t horiz_min4(epu8 v) noexcept { return partial_min_round(v)[15]; }
+
415 inline uint8_t horiz_min3(epu8 v) noexcept {
+
416  auto sr = mining_rounds;
+
417  v = min(v, permuted(v, sr[0]));
+
418  v = min(v, permuted(v, sr[1]));
+
419  v = min(v, permuted(v, sr[2]));
+
420  return std::min(v[7], v[15]);
+
421 }
+
422 
+
423 inline epu8 partial_min_ref(epu8 v) noexcept {
+
424  epu8 res;
+
425  res[0] = v[0];
+
426  for (size_t i = 1; i < 16; i++)
+
427  res[i] = std::min(res[i - 1], v[i]);
+
428  return res;
+
429 }
+
430 inline epu8 partial_min_gen(epu8 v) noexcept {
+
431  as_VectGeneric(v).partial_min_inplace();
+
432  return v;
+
433 }
+
434 inline epu8 partial_min_round(epu8 v) noexcept {
+
435  for (epu8 round : mining_rounds)
+
436  v = min(v, permuted(v, round));
+
437  return v;
+
438 }
+
439 
+
440 inline epu8 eval16_ref(epu8 v) noexcept {
+
441  epu8 res{};
+
442  for (size_t i = 0; i < 16; i++)
+
443  if (v[i] < 16)
+
444  res[v[i]]++;
+
445  return res;
+
446 }
+
447 
+
448 inline epu8 eval16_arr(epu8 v8) noexcept {
+
449  decltype(Epu8)::array res{};
+
450  auto v = as_array(v8);
+
451  for (size_t i = 0; i < 16; i++)
+
452  if (v[i] < 16)
+
453  res[v[i]]++;
+
454  return Epu8(res);
+
455 }
+
456 inline epu8 eval16_gen(epu8 v) noexcept {
+
457  return Epu8(as_VectGeneric(v).eval().v);
+
458 }
+
459 inline epu8 eval16_cycle(epu8 v) noexcept {
+
460  epu8 res = -(Epu8.id() == v);
+
461  for (int i = 1; i < 16; i++) {
+
462  v = permuted(v, Epu8.left_cycle());
+
463  res -= (Epu8.id() == v);
+
464  }
+
465  return res;
+
466 }
+
467 inline epu8 eval16_popcount(epu8 v) noexcept {
+
468  epu8 res{};
+
469  for (size_t i = 0; i < 16; i++) {
+
470  res[i] =
+
471  __builtin_popcountl(simde_mm_movemask_epi8(v == Epu8(uint8_t(i))));
+
472  }
+
473  return res;
+
474 }
+
475 
+
476 inline epu8 popcount16(epu8 v) noexcept {
+
477  return (permuted(Epu8.popcount(), v & Epu8(0x0f)) +
+
478  permuted(Epu8.popcount(), v >> 4));
+
479 }
+
480 
+
481 inline bool is_partial_transformation(epu8 v, const size_t k) noexcept {
+
482  uint64_t diff = last_diff(v, Epu8.id(), 16);
+
483  // (forall x in v, x + 1 <= 16) and
+
484  // (v = Perm16::one() or last diff index < 16)
+
485  return (simde_mm_movemask_epi8(v + Epu8(1) <= Epu8(0x10)) == 0xffff) &&
+
486  (diff == 16 || diff < k);
+
487 }
+
488 
+
489 inline bool is_transformation(epu8 v, const size_t k) noexcept {
+
490  uint64_t diff = last_diff(v, Epu8.id(), 16);
+
491  return (simde_mm_movemask_epi8(v < Epu8(0x10)) == 0xffff) &&
+
492  (diff == 16 || diff < k);
+
493 }
+
494 
+
495 inline bool is_partial_permutation(epu8 v, const size_t k) noexcept {
+
496  uint64_t diff = last_diff(v, Epu8.id(), 16);
+
497  // (forall x in v, x <= 15) and
+
498  // (forall x < 15, multiplicity x v <= 1
+
499  // (v = Perm16::one() or last diff index < 16)
+
500  return (simde_mm_movemask_epi8(v + Epu8(1) <= Epu8(0x10)) == 0xffff) &&
+
501  (simde_mm_movemask_epi8(eval16(v) <= Epu8(1)) == 0xffff) &&
+
502  (diff == 16 || diff < k);
+
503 }
+
504 
+
505 #ifdef SIMDE_X86_SSE4_2_NATIVE
+
506 inline bool is_permutation_cmpestri(epu8 v, const size_t k) noexcept {
+
507  uint64_t diff = last_diff(v, Epu8.id(), 16);
+
508  // (forall x in v, x in Perm16::one()) and
+
509  // (forall x in Perm16::one(), x in v) and
+
510  // (v = Perm16::one() or last diff index < 16)
+
511  return _mm_cmpestri(Epu8.id(), 16, v, 16, FIRST_NON_ZERO) == 16 &&
+
512  _mm_cmpestri(v, 16, Epu8.id(), 16, FIRST_NON_ZERO) == 16 &&
+
513  (diff == 16 || diff < k);
+
514 }
+
515 #endif
+
516 
+
517 inline bool is_permutation_sort(epu8 v, const size_t k) noexcept {
+
518  uint64_t diff = last_diff(v, Epu8.id(), 16);
+
519  return equal(sorted(v), Epu8.id()) && (diff == 16 || diff < k);
+
520 }
+
521 inline bool is_permutation_eval(epu8 v, const size_t k) noexcept {
+
522  uint64_t diff = last_diff(v, Epu8.id(), 16);
+
523  return equal(eval16(v), Epu8({}, 1)) && (diff == 16 || diff < k);
+
524 }
+
525 
+
526 inline bool is_permutation(epu8 v, const size_t k) noexcept {
+
527 #ifdef SIMDE_X86_SSE4_2_NATIVE
+
528  return is_permutation_cmpestri(v, k);
+
529 #else
+
530  return is_permutation_sort(v, k);
+
531 #endif
+
532 }
+
533 
+
534 } // namespace HPCombi
+
535 
+
536 namespace std {
+
537 
+
538 inline std::ostream &operator<<(std::ostream &stream, HPCombi::epu8 const &a) {
+
539  stream << "{" << std::setw(2) << unsigned(a[0]);
+
540  for (unsigned i = 1; i < 16; ++i)
+
541  stream << "," << std::setw(2) << unsigned(a[i]);
+
542  stream << "}";
+
543  return stream;
+
544 }
+
545 
+
546 inline std::string to_string(HPCombi::epu8 const &a) {
+
547  std::ostringstream ss;
+
548  ss << a;
+
549  return ss.str();
+
550 }
+
551 
+
552 template <> struct equal_to<HPCombi::epu8> {
+
553  bool operator()(const HPCombi::epu8 &lhs,
+
554  const HPCombi::epu8 &rhs) const noexcept {
+
555  return HPCombi::equal(lhs, rhs);
+
556  }
+
557 };
+
558 
+
559 template <> struct not_equal_to<HPCombi::epu8> {
+
560  bool operator()(const HPCombi::epu8 &lhs,
+
561  const HPCombi::epu8 &rhs) const noexcept {
+
562  return HPCombi::not_equal(lhs, rhs);
+
563  }
+
564 };
+
565 
+
566 template <> struct hash<HPCombi::epu8> {
+
567  inline size_t operator()(HPCombi::epu8 a) const noexcept {
+
568  unsigned __int128 v0 = simde_mm_extract_epi64(a, 0);
+
569  unsigned __int128 v1 = simde_mm_extract_epi64(a, 1);
+
570  return ((v1 * HPCombi::prime + v0) * HPCombi::prime) >> 64;
+
571 
+
572  /* The following is extremely slow on Renner benchmark
+
573  uint64_t v0 = simde_mm_extract_epi64(ar.v, 0);
+
574  uint64_t v1 = simde_mm_extract_epi64(ar.v, 1);
+
575  size_t seed = v0 + 0x9e3779b9;
+
576  seed ^= v1 + 0x9e3779b9 + (seed<<6) + (seed>>2);
+
577  return seed;
+
578  */
+
579  }
+
580 };
+
581 
+
582 template <> struct less<HPCombi::epu8> {
+
583  // WARNING: due to endianness this is not lexicographic comparison,
+
584  // but we don't care when using in std::set.
+
585  // 10% faster than calling the lexicographic comparison operator !
+
586  inline size_t operator()(const HPCombi::epu8 &v1,
+
587  const HPCombi::epu8 &v2) const noexcept {
+
588  simde__m128 v1v = simde__m128(v1), v2v = simde__m128(v2);
+
589  return v1v[0] == v2v[0] ? v1v[1] < v2v[1] : v1v[0] < v2v[0];
+
590  }
+
591 };
+
592 
+
593 } // namespace std
+
#define FF
Definition: epu8_impl.hpp:310
+
std::array< std::tuple< uint16_t, uint16_t, std::array< uint16_t, gens.size()> >, 65536 > res
Definition: image.cpp:62
+
Definition: bmat8.hpp:37
+
uint8_t horiz_min4(epu8) noexcept
Horizontal sum of a HPCombi::epu8.
Definition: epu8_impl.hpp:414
+
epu8 max(epu8 a, epu8 b) noexcept
Vector max between two HPCombi::epu8 0.
Definition: epu8.hpp:87
+
uint64_t last_diff_ref(epu8 a, epu8 b, size_t bound=16) noexcept
The last difference between two HPCombi::epu8.
Definition: epu8_impl.hpp:88
+
uint64_t first_non_zero(epu8 v, int bnd) noexcept
return the index of the first non zero entry or 16 if there are none Only index smaller than bound ar...
Definition: epu8_impl.hpp:122
+
uint8_t horiz_min_ref(epu8) noexcept
Horizontal sum of a HPCombi::epu8.
Definition: epu8_impl.hpp:405
+
epu8 eval16_arr(epu8 v) noexcept
Evaluation of a HPCombi::epu8.
Definition: epu8_impl.hpp:448
+
epu8 permuted(epu8 a, epu8 b) noexcept
Permuting a HPCombi::epu8.
Definition: epu8.hpp:68
+
epu8 sort8_perm(epu8 &a) noexcept
Sort this and return the sorting permutation.
Definition: epu8_impl.hpp:215
+
epu8 shifted_right(epu8 a) noexcept
Left shifted of a HPCombi::epu8 inserting a 0.
Definition: epu8.hpp:74
+
uint64_t first_diff_ref(epu8 a, epu8 b, size_t bound=16) noexcept
The first difference between two HPCombi::epu8.
Definition: epu8_impl.hpp:73
+
uint64_t first_diff_mask(epu8 a, epu8 b, size_t bound=16) noexcept
The first difference between two HPCombi::epu8.
Definition: epu8_impl.hpp:84
+
epu8 partial_sums_ref(epu8) noexcept
Horizontal partial sum of a HPCombi::epu8.
Definition: epu8_impl.hpp:353
+
epu8 eval16_gen(epu8 v) noexcept
Definition: epu8_impl.hpp:456
+
epu8 network_sort(epu8 res, std::array< epu8, sz > rounds)
Apply a sorting network.
Definition: epu8_impl.hpp:131
+
epu8 remove_dups(epu8 a, uint8_t repl=0) noexcept
Remove duplicates in a sorted HPCombi::epu8.
Definition: epu8_impl.hpp:256
+
epu8 revsorted8(epu8 a) noexcept
Return a HPCombi::epu8 with the two half reverse sorted.
Definition: epu8_impl.hpp:208
+
epu8 permutation_of(epu8 a, epu8 b) noexcept
Find if a vector is a permutation of one other.
Definition: epu8_impl.hpp:299
+
TPUBuild< TPU >::array & as_array(TPU &v) noexcept
Cast a TPU to a c++ std::array.
Definition: builder.hpp:135
+
bool is_permutation(epu8 v, const size_t k=16) noexcept
Definition: epu8_impl.hpp:526
+
void merge_rev(epu8 &a, epu8 &b) noexcept
Definition: epu8_impl.hpp:229
+
constexpr std::array< epu8, 4 > summing_rounds
Permutation Round for partial and horizontal sums.
Definition: epu8_impl.hpp:313
+
int8_t less_partial(epu8 a, epu8 b, int k) noexcept
Partial lexicographic comparison between two HPCombi::epu8.
Definition: epu8_impl.hpp:109
+
uint8_t horiz_max4(epu8) noexcept
Horizontal sum of a HPCombi::epu8.
Definition: epu8_impl.hpp:379
+
uint64_t last_diff_mask(epu8 a, epu8 b, size_t bound=16) noexcept
The last difference between two HPCombi::epu8.
Definition: epu8_impl.hpp:101
+
uint8_t horiz_max3(epu8) noexcept
Horizontal sum of a HPCombi::epu8.
Definition: epu8_impl.hpp:380
+
constexpr uint64_t prime
A prime number good for hashing.
Definition: epu8.hpp:160
+
uint8_t horiz_min_gen(epu8) noexcept
Horizontal sum of a HPCombi::epu8.
Definition: epu8_impl.hpp:411
+
bool is_partial_permutation(epu8 v, const size_t k=16) noexcept
Test for partial permutations.
Definition: epu8_impl.hpp:495
+
bool is_permutation_sort(epu8 v, const size_t k=16) noexcept
Definition: epu8_impl.hpp:517
+
uint64_t last_zero(epu8 v, int bnd) noexcept
return the index of the last zero entry or 16 if there are none Only index smaller than bound are tak...
Definition: epu8_impl.hpp:119
+
VectGeneric< TPUBuild< TPU >::size > & as_VectGeneric(TPU &v)
Cast a HPCombi::epu8 to a c++ HPCombi::VectGeneric.
Definition: builder.hpp:152
+
void merge(epu8 &a, epu8 &b) noexcept
Merge two sorted epu8.
Definition: epu8_impl.hpp:236
+
uint8_t horiz_sum4(epu8) noexcept
Horizontal sum of a HPCombi::epu8.
Definition: epu8_impl.hpp:344
+
epu8 popcount16(epu8 v) noexcept
a vector popcount function
Definition: epu8_impl.hpp:476
+
epu8 partial_sums_round(epu8) noexcept
Horizontal partial sum of a HPCombi::epu8.
Definition: epu8_impl.hpp:364
+
uint8_t horiz_sum3(epu8) noexcept
Horizontal sum of a HPCombi::epu8.
Definition: epu8_impl.hpp:345
+
uint8_t horiz_sum_ref(epu8) noexcept
Horizontal sum of a HPCombi::epu8.
Definition: epu8_impl.hpp:335
+
epu8 partial_sums_gen(epu8) noexcept
Horizontal partial sum of a HPCombi::epu8.
Definition: epu8_impl.hpp:360
+
bool equal(epu8 a, epu8 b) noexcept
Equality of HPCombi::epu8.
Definition: epu8.hpp:59
+
epu8 permutation_of_ref(epu8 a, epu8 b) noexcept
Find if a vector is a permutation of one other.
Definition: epu8_impl.hpp:290
+
epu8 min(epu8 a, epu8 b) noexcept
Vector min between two HPCombi::epu8 0.
Definition: epu8.hpp:85
+
uint64_t first_mask(epu8 msk, size_t bound)
Definition: epu8_impl.hpp:64
+
epu8 partial_max_ref(epu8) noexcept
Horizontal partial sum of a HPCombi::epu8.
Definition: epu8_impl.hpp:388
+
epu8 sorted8(epu8 a) noexcept
Return a HPCombi::epu8 with the two half sorted.
Definition: epu8_impl.hpp:202
+
epu8 partial_max_round(epu8) noexcept
Horizontal partial sum of a HPCombi::epu8.
Definition: epu8_impl.hpp:399
+
epu8 eval16(epu8 v) noexcept
Evaluation of a HPCombi::epu8.
Definition: epu8.hpp:404
+
epu8 network_sort_perm(epu8 &v, std::array< epu8, sz > rounds)
Apply a sorting network in place and return the permutation.
Definition: epu8_impl.hpp:144
+
constexpr std::array< epu8, 6 > sorting_rounds8
A duplicated 8-way sorting network.
Definition: epu8_impl.hpp:186
+
epu8 eval16_cycle(epu8 v) noexcept
Evaluation of a HPCombi::epu8.
Definition: epu8_impl.hpp:459
+
constexpr std::array< epu8, 9 > sorting_rounds
A 16-way sorting network.
Definition: epu8_impl.hpp:165
+
epu8 eval16_ref(epu8 v) noexcept
Evaluation of a HPCombi::epu8.
Definition: epu8_impl.hpp:440
+
epu8 partial_max_gen(epu8) noexcept
Horizontal partial sum of a HPCombi::epu8.
Definition: epu8_impl.hpp:395
+
bool less(epu8 a, epu8 b) noexcept
Lexicographic comparison between two HPCombi::epu8.
Definition: epu8_impl.hpp:105
+
uint8_t horiz_max_ref(epu8) noexcept
Horizontal sum of a HPCombi::epu8.
Definition: epu8_impl.hpp:370
+
epu8 sorted(epu8 a) noexcept
Return a sorted HPCombi::epu8.
Definition: epu8_impl.hpp:199
+
uint64_t last_mask(epu8 msk, size_t bound)
Definition: epu8_impl.hpp:68
+
constexpr std::array< epu8, 4 > mining_rounds
Definition: epu8_impl.hpp:323
+
constexpr TPUBuild< epu8 > Epu8
Factory object acting as a class constructor for type HPCombi::epu8.
Definition: epu8.hpp:49
+
bool is_permutation_eval(epu8 v, const size_t k=16) noexcept
Definition: epu8_impl.hpp:521
+
uint64_t first_zero(epu8 v, int bnd) noexcept
return the index of the first zero entry or 16 if there are none Only index smaller than bound are ta...
Definition: epu8_impl.hpp:116
+
epu8 random_epu8(uint16_t bnd)
A random HPCombi::epu8.
Definition: epu8_impl.hpp:244
+
epu8 revsorted(epu8 a) noexcept
Return a reverse sorted HPCombi::epu8.
Definition: epu8_impl.hpp:205
+
epu8 partial_min_round(epu8) noexcept
Horizontal partial sum of a HPCombi::epu8.
Definition: epu8_impl.hpp:434
+
bool is_sorted(epu8 a) noexcept
Testing if a HPCombi::epu8 is sorted.
Definition: epu8_impl.hpp:196
+
uint8_t __attribute__((vector_size(16))) epu8
SIMD vector of 16 unsigned bytes.
Definition: epu8.hpp:41
+
constexpr std::array< epu8, 3 > inverting_rounds
Definition: epu8_impl.hpp:263
+
uint64_t last_non_zero(epu8 v, int bnd) noexcept
return the index of the last non zero entry or 16 if there are none Only index smaller than bound are...
Definition: epu8_impl.hpp:125
+
uint64_t last_diff(epu8 a, epu8 b, size_t bound=16) noexcept
The last difference between two HPCombi::epu8.
Definition: epu8.hpp:482
+
epu8 eval16_popcount(epu8 v) noexcept
Evaluation of a HPCombi::epu8.
Definition: epu8_impl.hpp:467
+
epu8 sort_perm(epu8 &a) noexcept
Sort this and return the sorting permutation.
Definition: epu8_impl.hpp:212
+
epu8 partial_min_gen(epu8) noexcept
Horizontal partial sum of a HPCombi::epu8.
Definition: epu8_impl.hpp:430
+
epu8 partial_min_ref(epu8) noexcept
Horizontal partial sum of a HPCombi::epu8.
Definition: epu8_impl.hpp:423
+
uint8_t horiz_max_gen(epu8) noexcept
Horizontal sum of a HPCombi::epu8.
Definition: epu8_impl.hpp:376
+
bool is_transformation(epu8 v, const size_t k=16) noexcept
Test for transformation.
Definition: epu8_impl.hpp:489
+
uint64_t first_diff(epu8 a, epu8 b, size_t bound=16) noexcept
The first difference between two HPCombi::epu8.
Definition: epu8.hpp:442
+
bool is_partial_transformation(epu8 v, const size_t k=16) noexcept
Test for partial transformation.
Definition: epu8_impl.hpp:481
+
epu8 permuted_ref(epu8 a, epu8 b) noexcept
Permuting a HPCombi::epu8.
Definition: epu8_impl.hpp:55
+
constexpr std::array< epu8, 6 > merge_rounds
Definition: epu8_impl.hpp:222
+
uint8_t horiz_sum_gen(epu8) noexcept
Horizontal sum of a HPCombi::epu8.
Definition: epu8_impl.hpp:341
+
uint8_t horiz_min3(epu8) noexcept
Horizontal sum of a HPCombi::epu8.
Definition: epu8_impl.hpp:415
+
bool not_equal(epu8 a, epu8 b) noexcept
Non equality of HPCombi::epu8.
Definition: epu8.hpp:63
+
Definition: bmat8.hpp:360
+
std::ostream & operator<<(std::ostream &os, HPCombi::BMat8 const &bm)
Definition: bmat8_impl.hpp:504
+
std::string to_string(HPCombi::epu8 const &a)
Definition: epu8_impl.hpp:546
+
bool operator()(const HPCombi::epu8 &lhs, const HPCombi::epu8 &rhs) const noexcept
Definition: epu8_impl.hpp:553
+
size_t operator()(HPCombi::epu8 a) const noexcept
Definition: epu8_impl.hpp:567
+
size_t operator()(const HPCombi::epu8 &v1, const HPCombi::epu8 &v2) const noexcept
Definition: epu8_impl.hpp:586
+
bool operator()(const HPCombi::epu8 &lhs, const HPCombi::epu8 &rhs) const noexcept
Definition: epu8_impl.hpp:560
+ +
+ + + + diff --git a/docs/examples.html b/docs/examples.html new file mode 100644 index 00000000..7efb1053 --- /dev/null +++ b/docs/examples.html @@ -0,0 +1,86 @@ + + + + + + + +HPCombi: Examples + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
Examples
+
+
+
Here is a list of all examples:
+
+ + + + diff --git a/docs/files.html b/docs/files.html new file mode 100644 index 00000000..cdc9bc57 --- /dev/null +++ b/docs/files.html @@ -0,0 +1,112 @@ + + + + + + + +HPCombi: File List + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
File List
+
+
+
Here is a list of all files with brief descriptions:
+
+ + + + diff --git a/docs/folderclosed.png b/docs/folderclosed.png new file mode 100644 index 00000000..bb8ab35e Binary files /dev/null and b/docs/folderclosed.png differ diff --git a/docs/folderopen.png b/docs/folderopen.png new file mode 100644 index 00000000..d6c7f676 Binary files /dev/null and b/docs/folderopen.png differ diff --git a/docs/functions.html b/docs/functions.html new file mode 100644 index 00000000..ba058ba7 --- /dev/null +++ b/docs/functions.html @@ -0,0 +1,91 @@ + + + + + + + +HPCombi: Class Members + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- a -

+
+ + + + diff --git a/docs/functions_b.html b/docs/functions_b.html new file mode 100644 index 00000000..61bf509e --- /dev/null +++ b/docs/functions_b.html @@ -0,0 +1,90 @@ + + + + + + + +HPCombi: Class Members + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- b -

+
+ + + + diff --git a/docs/functions_c.html b/docs/functions_c.html new file mode 100644 index 00000000..1e379460 --- /dev/null +++ b/docs/functions_c.html @@ -0,0 +1,104 @@ + + + + + + + +HPCombi: Class Members + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- c -

+
+ + + + diff --git a/docs/functions_d.html b/docs/functions_d.html new file mode 100644 index 00000000..aee6a8e7 --- /dev/null +++ b/docs/functions_d.html @@ -0,0 +1,88 @@ + + + + + + + +HPCombi: Class Members + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- d -

+
+ + + + diff --git a/docs/functions_e.html b/docs/functions_e.html new file mode 100644 index 00000000..e15fa8e4 --- /dev/null +++ b/docs/functions_e.html @@ -0,0 +1,103 @@ + + + + + + + +HPCombi: Class Members + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- e -

+
+ + + + diff --git a/docs/functions_f.html b/docs/functions_f.html new file mode 100644 index 00000000..33b6762a --- /dev/null +++ b/docs/functions_f.html @@ -0,0 +1,100 @@ + + + + + + + +HPCombi: Class Members + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- f -

+
+ + + + diff --git a/docs/functions_func.html b/docs/functions_func.html new file mode 100644 index 00000000..ea7dd96e --- /dev/null +++ b/docs/functions_func.html @@ -0,0 +1,85 @@ + + + + + + + +HPCombi: Class Members - Functions + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- a -

+
+ + + + diff --git a/docs/functions_func_b.html b/docs/functions_func_b.html new file mode 100644 index 00000000..abe15a53 --- /dev/null +++ b/docs/functions_func_b.html @@ -0,0 +1,90 @@ + + + + + + + +HPCombi: Class Members - Functions + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- b -

+
+ + + + diff --git a/docs/functions_func_c.html b/docs/functions_func_c.html new file mode 100644 index 00000000..dfed2c98 --- /dev/null +++ b/docs/functions_func_c.html @@ -0,0 +1,100 @@ + + + + + + + +HPCombi: Class Members - Functions + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- c -

+
+ + + + diff --git a/docs/functions_func_d.html b/docs/functions_func_d.html new file mode 100644 index 00000000..1c004089 --- /dev/null +++ b/docs/functions_func_d.html @@ -0,0 +1,88 @@ + + + + + + + +HPCombi: Class Members - Functions + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- d -

+
+ + + + diff --git a/docs/functions_func_e.html b/docs/functions_func_e.html new file mode 100644 index 00000000..b1a3c4c7 --- /dev/null +++ b/docs/functions_func_e.html @@ -0,0 +1,103 @@ + + + + + + + +HPCombi: Class Members - Functions + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- e -

+
+ + + + diff --git a/docs/functions_func_f.html b/docs/functions_func_f.html new file mode 100644 index 00000000..97e4792b --- /dev/null +++ b/docs/functions_func_f.html @@ -0,0 +1,100 @@ + + + + + + + +HPCombi: Class Members - Functions + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- f -

+
+ + + + diff --git a/docs/functions_func_h.html b/docs/functions_func_h.html new file mode 100644 index 00000000..dcded6f9 --- /dev/null +++ b/docs/functions_func_h.html @@ -0,0 +1,91 @@ + + + + + + + +HPCombi: Class Members - Functions + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- h -

+
+ + + + diff --git a/docs/functions_func_i.html b/docs/functions_func_i.html new file mode 100644 index 00000000..4d9f9733 --- /dev/null +++ b/docs/functions_func_i.html @@ -0,0 +1,127 @@ + + + + + + + +HPCombi: Class Members - Functions + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- i -

+
+ + + + diff --git a/docs/functions_func_l.html b/docs/functions_func_l.html new file mode 100644 index 00000000..f663b3a8 --- /dev/null +++ b/docs/functions_func_l.html @@ -0,0 +1,144 @@ + + + + + + + +HPCombi: Class Members - Functions + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- l -

+
+ + + + diff --git a/docs/functions_func_m.html b/docs/functions_func_m.html new file mode 100644 index 00000000..bd3b6d39 --- /dev/null +++ b/docs/functions_func_m.html @@ -0,0 +1,88 @@ + + + + + + + +HPCombi: Class Members - Functions + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- m -

+
+ + + + diff --git a/docs/functions_func_n.html b/docs/functions_func_n.html new file mode 100644 index 00000000..c2a0f155 --- /dev/null +++ b/docs/functions_func_n.html @@ -0,0 +1,105 @@ + + + + + + + +HPCombi: Class Members - Functions + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- n -

+
+ + + + diff --git a/docs/functions_func_o.html b/docs/functions_func_o.html new file mode 100644 index 00000000..039a47f5 --- /dev/null +++ b/docs/functions_func_o.html @@ -0,0 +1,151 @@ + + + + + + + +HPCombi: Class Members - Functions + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- o -

+
+ + + + diff --git a/docs/functions_func_p.html b/docs/functions_func_p.html new file mode 100644 index 00000000..3935eb3e --- /dev/null +++ b/docs/functions_func_p.html @@ -0,0 +1,119 @@ + + + + + + + +HPCombi: Class Members - Functions + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- p -

+
+ + + + diff --git a/docs/functions_func_r.html b/docs/functions_func_r.html new file mode 100644 index 00000000..826b879e --- /dev/null +++ b/docs/functions_func_r.html @@ -0,0 +1,167 @@ + + + + + + + +HPCombi: Class Members - Functions + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- r -

+
+ + + + diff --git a/docs/functions_func_s.html b/docs/functions_func_s.html new file mode 100644 index 00000000..8a422884 --- /dev/null +++ b/docs/functions_func_s.html @@ -0,0 +1,109 @@ + + + + + + + +HPCombi: Class Members - Functions + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- s -

+
+ + + + diff --git a/docs/functions_func_t.html b/docs/functions_func_t.html new file mode 100644 index 00000000..9a37b95c --- /dev/null +++ b/docs/functions_func_t.html @@ -0,0 +1,103 @@ + + + + + + + +HPCombi: Class Members - Functions + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- t -

+
+ + + + diff --git a/docs/functions_func_u.html b/docs/functions_func_u.html new file mode 100644 index 00000000..e87e58e8 --- /dev/null +++ b/docs/functions_func_u.html @@ -0,0 +1,85 @@ + + + + + + + +HPCombi: Class Members - Functions + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- u -

+
+ + + + diff --git a/docs/functions_func_v.html b/docs/functions_func_v.html new file mode 100644 index 00000000..dbb17d51 --- /dev/null +++ b/docs/functions_func_v.html @@ -0,0 +1,94 @@ + + + + + + + +HPCombi: Class Members - Functions + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- v -

+
+ + + + diff --git a/docs/functions_func_w.html b/docs/functions_func_w.html new file mode 100644 index 00000000..2bb0efc8 --- /dev/null +++ b/docs/functions_func_w.html @@ -0,0 +1,85 @@ + + + + + + + +HPCombi: Class Members - Functions + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- w -

+
+ + + + diff --git a/docs/functions_func_~.html b/docs/functions_func_~.html new file mode 100644 index 00000000..be44e639 --- /dev/null +++ b/docs/functions_func_~.html @@ -0,0 +1,85 @@ + + + + + + + +HPCombi: Class Members - Functions + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- ~ -

+
+ + + + diff --git a/docs/functions_h.html b/docs/functions_h.html new file mode 100644 index 00000000..b5366198 --- /dev/null +++ b/docs/functions_h.html @@ -0,0 +1,91 @@ + + + + + + + +HPCombi: Class Members + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- h -

+
+ + + + diff --git a/docs/functions_i.html b/docs/functions_i.html new file mode 100644 index 00000000..2b4f9bb1 --- /dev/null +++ b/docs/functions_i.html @@ -0,0 +1,131 @@ + + + + + + + +HPCombi: Class Members + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- i -

+
+ + + + diff --git a/docs/functions_l.html b/docs/functions_l.html new file mode 100644 index 00000000..7a35d48a --- /dev/null +++ b/docs/functions_l.html @@ -0,0 +1,144 @@ + + + + + + + +HPCombi: Class Members + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- l -

+
+ + + + diff --git a/docs/functions_m.html b/docs/functions_m.html new file mode 100644 index 00000000..d9444725 --- /dev/null +++ b/docs/functions_m.html @@ -0,0 +1,88 @@ + + + + + + + +HPCombi: Class Members + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- m -

+
+ + + + diff --git a/docs/functions_n.html b/docs/functions_n.html new file mode 100644 index 00000000..2d0104b8 --- /dev/null +++ b/docs/functions_n.html @@ -0,0 +1,105 @@ + + + + + + + +HPCombi: Class Members + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- n -

+
+ + + + diff --git a/docs/functions_o.html b/docs/functions_o.html new file mode 100644 index 00000000..624be8c7 --- /dev/null +++ b/docs/functions_o.html @@ -0,0 +1,154 @@ + + + + + + + +HPCombi: Class Members + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- o -

+
+ + + + diff --git a/docs/functions_p.html b/docs/functions_p.html new file mode 100644 index 00000000..c10a4f3c --- /dev/null +++ b/docs/functions_p.html @@ -0,0 +1,119 @@ + + + + + + + +HPCombi: Class Members + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- p -

+
+ + + + diff --git a/docs/functions_r.html b/docs/functions_r.html new file mode 100644 index 00000000..e5df11e6 --- /dev/null +++ b/docs/functions_r.html @@ -0,0 +1,167 @@ + + + + + + + +HPCombi: Class Members + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- r -

+
+ + + + diff --git a/docs/functions_rela.html b/docs/functions_rela.html new file mode 100644 index 00000000..07eacf66 --- /dev/null +++ b/docs/functions_rela.html @@ -0,0 +1,83 @@ + + + + + + + +HPCombi: Class Members - Related Functions + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ + + + diff --git a/docs/functions_s.html b/docs/functions_s.html new file mode 100644 index 00000000..e8dbc653 --- /dev/null +++ b/docs/functions_s.html @@ -0,0 +1,113 @@ + + + + + + + +HPCombi: Class Members + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- s -

+
+ + + + diff --git a/docs/functions_t.html b/docs/functions_t.html new file mode 100644 index 00000000..91a070af --- /dev/null +++ b/docs/functions_t.html @@ -0,0 +1,106 @@ + + + + + + + +HPCombi: Class Members + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- t -

+
+ + + + diff --git a/docs/functions_type.html b/docs/functions_type.html new file mode 100644 index 00000000..8f7d26d3 --- /dev/null +++ b/docs/functions_type.html @@ -0,0 +1,105 @@ + + + + + + + +HPCombi: Class Members - Typedefs + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ + + + diff --git a/docs/functions_u.html b/docs/functions_u.html new file mode 100644 index 00000000..d8675f59 --- /dev/null +++ b/docs/functions_u.html @@ -0,0 +1,85 @@ + + + + + + + +HPCombi: Class Members + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- u -

+
+ + + + diff --git a/docs/functions_v.html b/docs/functions_v.html new file mode 100644 index 00000000..7605c374 --- /dev/null +++ b/docs/functions_v.html @@ -0,0 +1,106 @@ + + + + + + + +HPCombi: Class Members + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- v -

+
+ + + + diff --git a/docs/functions_vars.html b/docs/functions_vars.html new file mode 100644 index 00000000..8ddb60a4 --- /dev/null +++ b/docs/functions_vars.html @@ -0,0 +1,90 @@ + + + + + + + +HPCombi: Class Members - Variables + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ + + + diff --git a/docs/functions_w.html b/docs/functions_w.html new file mode 100644 index 00000000..8cabf77b --- /dev/null +++ b/docs/functions_w.html @@ -0,0 +1,85 @@ + + + + + + + +HPCombi: Class Members + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- w -

+
+ + + + diff --git a/docs/functions_~.html b/docs/functions_~.html new file mode 100644 index 00000000..df3d7e96 --- /dev/null +++ b/docs/functions_~.html @@ -0,0 +1,85 @@ + + + + + + + +HPCombi: Class Members + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- ~ -

+
+ + + + diff --git a/docs/globals.html b/docs/globals.html new file mode 100644 index 00000000..3e939a56 --- /dev/null +++ b/docs/globals.html @@ -0,0 +1,298 @@ + + + + + + + +HPCombi: File Members + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all file members with links to the files they belong to:
+ +

- a -

+ + +

- c -

+ + +

- e -

+ + +

- f -

+ + +

- g -

+ + +

- h -

+ + +

- i -

+ + +

- m -

+ + +

- n -

+ + +

- o -

+ + +

- p -

+ + +

- r -

+ + +

- s -

+ + +

- t -

+
+ + + + diff --git a/docs/globals_defs.html b/docs/globals_defs.html new file mode 100644 index 00000000..ec29faec --- /dev/null +++ b/docs/globals_defs.html @@ -0,0 +1,87 @@ + + + + + + + +HPCombi: File Members + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ + + + diff --git a/docs/globals_func.html b/docs/globals_func.html new file mode 100644 index 00000000..198e886d --- /dev/null +++ b/docs/globals_func.html @@ -0,0 +1,129 @@ + + + + + + + +HPCombi: File Members + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ + + + diff --git a/docs/globals_vars.html b/docs/globals_vars.html new file mode 100644 index 00000000..cd1727bc --- /dev/null +++ b/docs/globals_vars.html @@ -0,0 +1,228 @@ + + + + + + + +HPCombi: File Members + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- a -

+ + +

- c -

+ + +

- e -

+ + +

- f -

+ + +

- g -

+ + +

- i -

+ + +

- n -

+ + +

- p -

+ + +

- r -

+ + +

- s -

+
+ + + + diff --git a/docs/hierarchy.html b/docs/hierarchy.html new file mode 100644 index 00000000..2aca0531 --- /dev/null +++ b/docs/hierarchy.html @@ -0,0 +1,132 @@ + + + + + + + +HPCombi: Class Hierarchy + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
Class Hierarchy
+
+
+
This inheritance list is sorted roughly, but not completely, alphabetically:
+
[detail level 1234]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 CHPCombi::BMat8Class for fast boolean matrices of dimension up to 8 x 8
 Ccommon_eval16Evaluation of a HPCombi::epu8
 Ccommon_first_diffThe first difference between two HPCombi::epu8
 Ccommon_horiz_maxHorizontal sum of a HPCombi::epu8
 Ccommon_horiz_minHorizontal sum of a HPCombi::epu8
 Ccommon_horiz_sumHorizontal sum of a HPCombi::epu8
 Ccommon_inverseThe inverse permutation
 Ccommon_inverse_ppermThe inverse of a partial permutation
 Ccommon_is_permutation
 Ccommon_last_diffThe last difference between two HPCombi::epu8
 Ccommon_left_weak_leqCompare two permutations for the left weak order
 Ccommon_lehmerThe Lehmer code of a permutation
 Ccommon_lengthThe Coxeter length (ie: number of inversion) of a permutation
 Ccommon_mergeMerge two sorted epu8
 Ccommon_nb_cyclesThe number of cycles of a permutation
 Ccommon_nb_descentThe number of descent of a permutation
 Ccommon_partial_maxHorizontal partial sum of a HPCombi::epu8
 Ccommon_partial_minHorizontal partial sum of a HPCombi::epu8
 Ccommon_partial_sumsHorizontal partial sum of a HPCombi::epu8
 Ccommon_permutation_ofFind if a vector is a permutation of one other
 CEqEpu8
 Cstd::equal_to< HPCombi::epu8 >
 Cstd::hash< HPCombi::BMat8 >
 Cstd::hash< HPCombi::epu8 >
 Cstd::hash< HPCombi::Perm16 >
 Cstd::hash< HPCombi::PermGeneric< Size, Expo > >
 Cstd::hash< HPCombi::PPerm16 >
 Cstd::hash< HPCombi::PTransf16 >
 Cstd::hash< HPCombi::Transf16 >
 Cstd::hash< HPCombi::Vect16 >
 Cstd::hash< HPCombi::VectGeneric< Size, Expo > >
 Cstd::less< HPCombi::epu8 >
 CHPCombi::power_helper::Monoid< T >Algebraic monoid structure used by default for type T by the pow function and prod function
 CHPCombi::power_helper::Monoid< Perm16 >
 CHPCombi::power_helper::Monoid< std::string >
 Cstd::not_equal_to< HPCombi::epu8 >
 Clibsemigroups::Timer
 CHPCombi::TPUBuild< TPU >Class for factory object associated to a SIMD packed unsigned integers
 CHPCombi::Vect16
 CHPCombi::PTransf16Partial transformation of \(\{0\dots 15\}\)
 CHPCombi::PPerm16Partial permutation of \(\{0, \dots, 15\}\)
 CHPCombi::Transf16Full transformation of \(\{0\dots 15\}\)
 CHPCombi::Perm16Permutations of \(\{0\dots 15\}\)
 CHPCombi::VectGeneric< Size, Expo >A generic class for combinatorial integer vectors
 CHPCombi::VectGeneric< Size, uint8_t >
 CHPCombi::PermGeneric< Size, Expo >
+
+
+ + + + diff --git a/docs/hpcombi_8hpp.html b/docs/hpcombi_8hpp.html new file mode 100644 index 00000000..715c229a --- /dev/null +++ b/docs/hpcombi_8hpp.html @@ -0,0 +1,96 @@ + + + + + + + +HPCombi: /home/florent/src/HPCombi/include/hpcombi/hpcombi.hpp File Reference + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
hpcombi.hpp File Reference
+
+
+
#include "bmat8.hpp"
+#include "debug.hpp"
+#include "epu8.hpp"
+#include "perm16.hpp"
+#include "perm_generic.hpp"
+#include "power.hpp"
+#include "vect16.hpp"
+#include "vect_generic.hpp"
+
+

Go to the source code of this file.

+
+ + + + diff --git a/docs/hpcombi_8hpp_source.html b/docs/hpcombi_8hpp_source.html new file mode 100644 index 00000000..c3fe05fe --- /dev/null +++ b/docs/hpcombi_8hpp_source.html @@ -0,0 +1,120 @@ + + + + + + + +HPCombi: /home/florent/src/HPCombi/include/hpcombi/hpcombi.hpp Source File + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
hpcombi.hpp
+
+
+Go to the documentation of this file.
1 // Copyright (C) 2016 Florent Hivert <Florent.Hivert@lri.fr>, //
+
3 // //
+
4 // Distributed under the terms of the GNU General Public License (GPL) //
+
5 // //
+
6 // This code is distributed in the hope that it will be useful, //
+
7 // but WITHOUT ANY WARRANTY; without even the implied warranty of //
+
8 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU //
+
9 // General Public License for more details. //
+
10 // //
+
11 // The full text of the GPL is available at: //
+
12 // //
+
13 // http://www.gnu.org/licenses/ //
+
15 
+
16 #ifndef HPCOMBI_HPCOMBI_HPP_
+
17 #define HPCOMBI_HPCOMBI_HPP_
+
18 
+
19 #include "bmat8.hpp"
+
20 #include "debug.hpp"
+
21 #include "epu8.hpp"
+
22 #include "perm16.hpp"
+
23 #include "perm_generic.hpp"
+
24 #include "power.hpp"
+
25 #include "vect16.hpp"
+
26 #include "vect_generic.hpp"
+
27 
+
28 #endif // HPCOMBI_HPCOMBI_HPP_
+ + + + + +
Generic compile time power.
+ + +
+ + + + diff --git a/docs/image_8cpp.html b/docs/image_8cpp.html new file mode 100644 index 00000000..7526dd4c --- /dev/null +++ b/docs/image_8cpp.html @@ -0,0 +1,322 @@ + + + + + + + +HPCombi: /home/florent/src/HPCombi/examples/image.cpp File Reference + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
image.cpp File Reference
+
+
+
#include <array>
+#include <cassert>
+#include <cstdint>
+#include <functional>
+#include <iomanip>
+#include <iostream>
+#include <string>
+#include <tuple>
+#include <utility>
+#include <vector>
+#include "hpcombi/perm16.hpp"
+#include "timer.h"
+
+ + + + + + +

+Functions

template<typename T >
std::ostream & operator<< (std::ostream &out, const std::vector< T > &v)
 
int main ()
 
+ + + + + + + + + + + + + + + + + + + + + +

+Variables

const Transf16 a1 {1, 7, 2, 6, 0, 4, 1, 5}
 
const Transf16 a2 {2, 4, 6, 1, 4, 5, 2, 7}
 
const Transf16 a3 {3, 0, 7, 2, 4, 6, 2, 4}
 
const Transf16 a4 {3, 2, 3, 4, 5, 3, 0, 1}
 
const Transf16 a5 {4, 3, 7, 7, 4, 5, 0, 4}
 
const Transf16 a6 {5, 6, 3, 0, 3, 0, 5, 1}
 
const Transf16 a7 {6, 0, 1, 1, 1, 6, 3, 4}
 
const Transf16 a8 {7, 7, 4, 0, 6, 4, 1, 7}
 
const array< Transf16, 8 > gens {{a1, a2, a3, a4, a5, a6, a7, a8}}
 
std::array< std::tuple< uint16_t, uint16_t, std::array< uint16_t, gens.size()> >, 65536 > res
 
+

Function Documentation

+ +

◆ main()

+ +
+
+ + + + + + + +
int main ()
+
+ +
+
+ +

◆ operator<<()

+ +
+
+
+template<typename T >
+ + + + + + + + + + + + + + + + + + +
std::ostream& operator<< (std::ostream & out,
const std::vector< T > & v 
)
+
+ +
+
+

Variable Documentation

+ +

◆ a1

+ +
+
+ + + + +
const Transf16 a1 {1, 7, 2, 6, 0, 4, 1, 5}
+
+ +
+
+ +

◆ a2

+ +
+
+ + + + +
const Transf16 a2 {2, 4, 6, 1, 4, 5, 2, 7}
+
+ +
+
+ +

◆ a3

+ +
+
+ + + + +
const Transf16 a3 {3, 0, 7, 2, 4, 6, 2, 4}
+
+ +
+
+ +

◆ a4

+ +
+
+ + + + +
const Transf16 a4 {3, 2, 3, 4, 5, 3, 0, 1}
+
+ +
+
+ +

◆ a5

+ +
+
+ + + + +
const Transf16 a5 {4, 3, 7, 7, 4, 5, 0, 4}
+
+ +
+
+ +

◆ a6

+ +
+
+ + + + +
const Transf16 a6 {5, 6, 3, 0, 3, 0, 5, 1}
+
+ +
+
+ +

◆ a7

+ +
+
+ + + + +
const Transf16 a7 {6, 0, 1, 1, 1, 6, 3, 4}
+
+ +
+
+ +

◆ a8

+ +
+
+ + + + +
const Transf16 a8 {7, 7, 4, 0, 6, 4, 1, 7}
+
+ +
+
+ +

◆ gens

+ +
+
+ + + + +
const array<Transf16, 8> gens {{a1, a2, a3, a4, a5, a6, a7, a8}}
+
+ +
+
+ +

◆ res

+ +
+
+ + + + +
std::array<std::tuple<uint16_t, uint16_t, std::array<uint16_t, gens.size()> >, 65536> res
+
+ +
+
+
+ + + + diff --git a/docs/index.html b/docs/index.html new file mode 100644 index 00000000..ec5cb753 --- /dev/null +++ b/docs/index.html @@ -0,0 +1,115 @@ + + + + + + + +HPCombi: HPCombi + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v1.0.0
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+ +
+
+

High Performance Combinatorics in C++ using vector instructions v1.0.0

+

HPCombi is a C++17 header-only library using the SSE and AVX instruction sets, and some equivalents, for very fast manipulation of combinatorial objects such as transformations, permutations, and boolean matrices of small size. The goal of this project is to implement various new algorithms and benchmark them on various compiler and architectures.

+

HPCombi was initially designed using the SSE and AVX instruction sets, and did not work on machines without these instructions (such as ARM). From v1.0.0 HPCombi supports processors with other instruction sets also, via [SIMD Everywhere][]. It might be the case that the greatest performance gains are achieved on processors supporting the SSE and AVX instruction sets, but the HPCombi benchmarks indicate that there are also still significant gains on other processors too.

+

+Authors

+ +

+Documentation

+

The Doxygen auto generated API

+

+Contributors

+ +

+Documentation

+
    +
  • The Doxygen auto generated API
  • +
+

+Thanks

+
    +
  • The development of HPCombi was partly funded by the OpenDreamKit Horizon 2020 European Research Infrastructure project (#676541), which the authors acknowledge with thanks.
  • +
  • Thanks also to the SIMD everywhere and catch2 authors and contributors for their excellent libraries!
  • +
+
+
+ + + + diff --git a/docs/jquery.js b/docs/jquery.js new file mode 100644 index 00000000..103c32d7 --- /dev/null +++ b/docs/jquery.js @@ -0,0 +1,35 @@ +/*! jQuery v3.4.1 | (c) JS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],E=C.document,r=Object.getPrototypeOf,s=t.slice,g=t.concat,u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.4.1",k=function(e,t){return new k.fn.init(e,t)},p=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;function d(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp($),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+$),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ne=function(e,t,n){var r="0x"+t-65536;return r!=r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(m.childNodes),m.childNodes),t[m.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&((e?e.ownerDocument||e:m)!==C&&T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!A[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&U.test(t)){(s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=k),o=(l=h(t)).length;while(o--)l[o]="#"+s+" "+xe(l[o]);c=l.join(","),f=ee.test(t)&&ye(e.parentNode)||e}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){A(t,!0)}finally{s===k&&e.removeAttribute("id")}}}return g(t.replace(B,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[k]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:m;return r!==C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),m!==C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=k,!C.getElementsByName||!C.getElementsByName(k).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+k+"-]").length||v.push("~="),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+k+"+*").length||v.push(".#.+[+~]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",$)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e===C||e.ownerDocument===m&&y(m,e)?-1:t===C||t.ownerDocument===m&&y(m,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===C?-1:t===C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]===m?-1:s[r]===m?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if((e.ownerDocument||e)!==C&&T(e),d.matchesSelector&&E&&!A[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){A(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=p[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&p(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?k.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?k.grep(e,function(e){return e===n!==r}):"string"!=typeof n?k.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(k.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:L.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof k?t[0]:t,k.merge(this,k.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),D.test(r[1])&&k.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(k):k.makeArray(e,this)}).prototype=k.fn,q=k(E);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}k.fn.extend({has:function(e){var t=k(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?k.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;nx",y.noCloneChecked=!!me.cloneNode(!0).lastChild.defaultValue;var Te=/^key/,Ce=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ee=/^([^.]*)(?:\.(.+)|)/;function ke(){return!0}function Se(){return!1}function Ne(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function Ae(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Ae(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Se;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return k().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=k.guid++)),e.each(function(){k.event.add(this,t,i,r,n)})}function De(e,i,o){o?(Q.set(e,i,!1),k.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Q.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(k.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Q.set(this,i,r),t=o(this,i),this[i](),r!==(n=Q.get(this,i))||t?Q.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n.value}else r.length&&(Q.set(this,i,{value:k.event.trigger(k.extend(r[0],k.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Q.get(e,i)&&k.event.add(e,i,ke)}k.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.get(t);if(v){n.handler&&(n=(o=n).handler,i=o.selector),i&&k.find.matchesSelector(ie,i),n.guid||(n.guid=k.guid++),(u=v.events)||(u=v.events={}),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof k&&k.event.triggered!==e.type?k.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(R)||[""]).length;while(l--)d=g=(s=Ee.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=k.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=k.event.special[d]||{},c=k.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&k.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),k.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.hasData(e)&&Q.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(R)||[""]).length;while(l--)if(d=g=(s=Ee.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=k.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||k.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)k.event.remove(e,d+t[l],n,r,!0);k.isEmptyObject(u)&&Q.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=k.event.fix(e),u=new Array(arguments.length),l=(Q.get(this,"events")||{})[s.type]||[],c=k.event.special[s.type]||{};for(u[0]=s,t=1;t\x20\t\r\n\f]*)[^>]*)\/>/gi,qe=/\s*$/g;function Oe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&k(e).children("tbody")[0]||e}function Pe(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Re(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Me(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(Q.hasData(e)&&(o=Q.access(e),a=Q.set(t,o),l=o.events))for(i in delete a.handle,a.events={},l)for(n=0,r=l[i].length;n")},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=oe(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||k.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Vt,Gt=[],Yt=/(=)\?(?=&|$)|\?\?/;k.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Gt.pop()||k.expando+"_"+kt++;return this[e]=!0,e}}),k.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Yt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Yt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Yt,"$1"+r):!1!==e.jsonp&&(e.url+=(St.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||k.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?k(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Gt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Vt=E.implementation.createHTMLDocument("").body).innerHTML="
",2===Vt.childNodes.length),k.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=D.exec(e))?[t.createElement(i[1])]:(i=we([e],t,o),o&&o.length&&k(o).remove(),k.merge([],i.childNodes)));var r,i,o},k.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(k.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},k.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){k.fn[t]=function(e){return this.on(t,e)}}),k.expr.pseudos.animated=function(t){return k.grep(k.timers,function(e){return t===e.elem}).length},k.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=k.css(e,"position"),c=k(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=k.css(e,"top"),u=k.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,k.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},k.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){k.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===k.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===k.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=k(e).offset()).top+=k.css(e,"borderTopWidth",!0),i.left+=k.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-k.css(r,"marginTop",!0),left:t.left-i.left-k.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===k.css(e,"position"))e=e.offsetParent;return e||ie})}}),k.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;k.fn[t]=function(e){return _(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),k.each(["top","left"],function(e,n){k.cssHooks[n]=ze(y.pixelPosition,function(e,t){if(t)return t=_e(e,n),$e.test(t)?k(e).position()[n]+"px":t})}),k.each({Height:"height",Width:"width"},function(a,s){k.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){k.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return _(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?k.css(e,t,i):k.style(e,t,n,i)},s,n?e:void 0,n)}})}),k.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){k.fn[n]=function(e,t){return 0a;a++)for(i in o[a])n=o[a][i],o[a].hasOwnProperty(i)&&void 0!==n&&(e[i]=t.isPlainObject(n)?t.isPlainObject(e[i])?t.widget.extend({},e[i],n):t.widget.extend({},n):n);return e},t.widget.bridge=function(e,i){var n=i.prototype.widgetFullName||e;t.fn[e]=function(o){var a="string"==typeof o,r=s.call(arguments,1),h=this;return a?this.length||"instance"!==o?this.each(function(){var i,s=t.data(this,n);return"instance"===o?(h=s,!1):s?t.isFunction(s[o])&&"_"!==o.charAt(0)?(i=s[o].apply(s,r),i!==s&&void 0!==i?(h=i&&i.jquery?h.pushStack(i.get()):i,!1):void 0):t.error("no such method '"+o+"' for "+e+" widget instance"):t.error("cannot call methods on "+e+" prior to initialization; "+"attempted to call method '"+o+"'")}):h=void 0:(r.length&&(o=t.widget.extend.apply(null,[o].concat(r))),this.each(function(){var e=t.data(this,n);e?(e.option(o||{}),e._init&&e._init()):t.data(this,n,new i(o,this))})),h}},t.Widget=function(){},t.Widget._childConstructors=[],t.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"
",options:{classes:{},disabled:!1,create:null},_createWidget:function(e,s){s=t(s||this.defaultElement||this)[0],this.element=t(s),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=t(),this.hoverable=t(),this.focusable=t(),this.classesElementLookup={},s!==this&&(t.data(s,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===s&&this.destroy()}}),this.document=t(s.style?s.ownerDocument:s.document||s),this.window=t(this.document[0].defaultView||this.document[0].parentWindow)),this.options=t.widget.extend({},this.options,this._getCreateOptions(),e),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:t.noop,_create:t.noop,_init:t.noop,destroy:function(){var e=this;this._destroy(),t.each(this.classesElementLookup,function(t,i){e._removeClass(i,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:t.noop,widget:function(){return this.element},option:function(e,i){var s,n,o,a=e;if(0===arguments.length)return t.widget.extend({},this.options);if("string"==typeof e)if(a={},s=e.split("."),e=s.shift(),s.length){for(n=a[e]=t.widget.extend({},this.options[e]),o=0;s.length-1>o;o++)n[s[o]]=n[s[o]]||{},n=n[s[o]];if(e=s.pop(),1===arguments.length)return void 0===n[e]?null:n[e];n[e]=i}else{if(1===arguments.length)return void 0===this.options[e]?null:this.options[e];a[e]=i}return this._setOptions(a),this},_setOptions:function(t){var e;for(e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return"classes"===t&&this._setOptionClasses(e),this.options[t]=e,"disabled"===t&&this._setOptionDisabled(e),this},_setOptionClasses:function(e){var i,s,n;for(i in e)n=this.classesElementLookup[i],e[i]!==this.options.classes[i]&&n&&n.length&&(s=t(n.get()),this._removeClass(n,i),s.addClass(this._classes({element:s,keys:i,classes:e,add:!0})))},_setOptionDisabled:function(t){this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!!t),t&&(this._removeClass(this.hoverable,null,"ui-state-hover"),this._removeClass(this.focusable,null,"ui-state-focus"))},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_classes:function(e){function i(i,o){var a,r;for(r=0;i.length>r;r++)a=n.classesElementLookup[i[r]]||t(),a=e.add?t(t.unique(a.get().concat(e.element.get()))):t(a.not(e.element).get()),n.classesElementLookup[i[r]]=a,s.push(i[r]),o&&e.classes[i[r]]&&s.push(e.classes[i[r]])}var s=[],n=this;return e=t.extend({element:this.element,classes:this.options.classes||{}},e),this._on(e.element,{remove:"_untrackClassesElement"}),e.keys&&i(e.keys.match(/\S+/g)||[],!0),e.extra&&i(e.extra.match(/\S+/g)||[]),s.join(" ")},_untrackClassesElement:function(e){var i=this;t.each(i.classesElementLookup,function(s,n){-1!==t.inArray(e.target,n)&&(i.classesElementLookup[s]=t(n.not(e.target).get()))})},_removeClass:function(t,e,i){return this._toggleClass(t,e,i,!1)},_addClass:function(t,e,i){return this._toggleClass(t,e,i,!0)},_toggleClass:function(t,e,i,s){s="boolean"==typeof s?s:i;var n="string"==typeof t||null===t,o={extra:n?e:i,keys:n?t:e,element:n?this.element:t,add:s};return o.element.toggleClass(this._classes(o),s),this},_on:function(e,i,s){var n,o=this;"boolean"!=typeof e&&(s=i,i=e,e=!1),s?(i=n=t(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),t.each(s,function(s,a){function r(){return e||o.options.disabled!==!0&&!t(this).hasClass("ui-state-disabled")?("string"==typeof a?o[a]:a).apply(o,arguments):void 0}"string"!=typeof a&&(r.guid=a.guid=a.guid||r.guid||t.guid++);var h=s.match(/^([\w:-]*)\s*(.*)$/),l=h[1]+o.eventNamespace,c=h[2];c?n.on(l,c,r):i.on(l,r)})},_off:function(e,i){i=(i||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.off(i).off(i),this.bindings=t(this.bindings.not(e).get()),this.focusable=t(this.focusable.not(e).get()),this.hoverable=t(this.hoverable.not(e).get())},_delay:function(t,e){function i(){return("string"==typeof t?s[t]:t).apply(s,arguments)}var s=this;return setTimeout(i,e||0)},_hoverable:function(e){this.hoverable=this.hoverable.add(e),this._on(e,{mouseenter:function(e){this._addClass(t(e.currentTarget),null,"ui-state-hover")},mouseleave:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-hover")}})},_focusable:function(e){this.focusable=this.focusable.add(e),this._on(e,{focusin:function(e){this._addClass(t(e.currentTarget),null,"ui-state-focus")},focusout:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-focus")}})},_trigger:function(e,i,s){var n,o,a=this.options[e];if(s=s||{},i=t.Event(i),i.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase(),i.target=this.element[0],o=i.originalEvent)for(n in o)n in i||(i[n]=o[n]);return this.element.trigger(i,s),!(t.isFunction(a)&&a.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},t.each({show:"fadeIn",hide:"fadeOut"},function(e,i){t.Widget.prototype["_"+e]=function(s,n,o){"string"==typeof n&&(n={effect:n});var a,r=n?n===!0||"number"==typeof n?i:n.effect||i:e;n=n||{},"number"==typeof n&&(n={duration:n}),a=!t.isEmptyObject(n),n.complete=o,n.delay&&s.delay(n.delay),a&&t.effects&&t.effects.effect[r]?s[e](n):r!==e&&s[r]?s[r](n.duration,n.easing,o):s.queue(function(i){t(this)[e](),o&&o.call(s[0]),i()})}}),t.widget,function(){function e(t,e,i){return[parseFloat(t[0])*(u.test(t[0])?e/100:1),parseFloat(t[1])*(u.test(t[1])?i/100:1)]}function i(e,i){return parseInt(t.css(e,i),10)||0}function s(e){var i=e[0];return 9===i.nodeType?{width:e.width(),height:e.height(),offset:{top:0,left:0}}:t.isWindow(i)?{width:e.width(),height:e.height(),offset:{top:e.scrollTop(),left:e.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:e.outerWidth(),height:e.outerHeight(),offset:e.offset()}}var n,o=Math.max,a=Math.abs,r=/left|center|right/,h=/top|center|bottom/,l=/[\+\-]\d+(\.[\d]+)?%?/,c=/^\w+/,u=/%$/,d=t.fn.position;t.position={scrollbarWidth:function(){if(void 0!==n)return n;var e,i,s=t("
"),o=s.children()[0];return t("body").append(s),e=o.offsetWidth,s.css("overflow","scroll"),i=o.offsetWidth,e===i&&(i=s[0].clientWidth),s.remove(),n=e-i},getScrollInfo:function(e){var i=e.isWindow||e.isDocument?"":e.element.css("overflow-x"),s=e.isWindow||e.isDocument?"":e.element.css("overflow-y"),n="scroll"===i||"auto"===i&&e.widthi?"left":e>0?"right":"center",vertical:0>r?"top":s>0?"bottom":"middle"};l>p&&p>a(e+i)&&(u.horizontal="center"),c>f&&f>a(s+r)&&(u.vertical="middle"),u.important=o(a(e),a(i))>o(a(s),a(r))?"horizontal":"vertical",n.using.call(this,t,u)}),h.offset(t.extend(D,{using:r}))})},t.ui.position={fit:{left:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=t.left-e.collisionPosition.marginLeft,h=n-r,l=r+e.collisionWidth-a-n;e.collisionWidth>a?h>0&&0>=l?(i=t.left+h+e.collisionWidth-a-n,t.left+=h-i):t.left=l>0&&0>=h?n:h>l?n+a-e.collisionWidth:n:h>0?t.left+=h:l>0?t.left-=l:t.left=o(t.left-r,t.left)},top:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollTop:s.offset.top,a=e.within.height,r=t.top-e.collisionPosition.marginTop,h=n-r,l=r+e.collisionHeight-a-n;e.collisionHeight>a?h>0&&0>=l?(i=t.top+h+e.collisionHeight-a-n,t.top+=h-i):t.top=l>0&&0>=h?n:h>l?n+a-e.collisionHeight:n:h>0?t.top+=h:l>0?t.top-=l:t.top=o(t.top-r,t.top)}},flip:{left:function(t,e){var i,s,n=e.within,o=n.offset.left+n.scrollLeft,r=n.width,h=n.isWindow?n.scrollLeft:n.offset.left,l=t.left-e.collisionPosition.marginLeft,c=l-h,u=l+e.collisionWidth-r-h,d="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,p="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,f=-2*e.offset[0];0>c?(i=t.left+d+p+f+e.collisionWidth-r-o,(0>i||a(c)>i)&&(t.left+=d+p+f)):u>0&&(s=t.left-e.collisionPosition.marginLeft+d+p+f-h,(s>0||u>a(s))&&(t.left+=d+p+f))},top:function(t,e){var i,s,n=e.within,o=n.offset.top+n.scrollTop,r=n.height,h=n.isWindow?n.scrollTop:n.offset.top,l=t.top-e.collisionPosition.marginTop,c=l-h,u=l+e.collisionHeight-r-h,d="top"===e.my[1],p=d?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,f="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,m=-2*e.offset[1];0>c?(s=t.top+p+f+m+e.collisionHeight-r-o,(0>s||a(c)>s)&&(t.top+=p+f+m)):u>0&&(i=t.top-e.collisionPosition.marginTop+p+f+m-h,(i>0||u>a(i))&&(t.top+=p+f+m))}},flipfit:{left:function(){t.ui.position.flip.left.apply(this,arguments),t.ui.position.fit.left.apply(this,arguments)},top:function(){t.ui.position.flip.top.apply(this,arguments),t.ui.position.fit.top.apply(this,arguments)}}}}(),t.ui.position,t.extend(t.expr[":"],{data:t.expr.createPseudo?t.expr.createPseudo(function(e){return function(i){return!!t.data(i,e)}}):function(e,i,s){return!!t.data(e,s[3])}}),t.fn.extend({disableSelection:function(){var t="onselectstart"in document.createElement("div")?"selectstart":"mousedown";return function(){return this.on(t+".ui-disableSelection",function(t){t.preventDefault()})}}(),enableSelection:function(){return this.off(".ui-disableSelection")}}),t.ui.focusable=function(i,s){var n,o,a,r,h,l=i.nodeName.toLowerCase();return"area"===l?(n=i.parentNode,o=n.name,i.href&&o&&"map"===n.nodeName.toLowerCase()?(a=t("img[usemap='#"+o+"']"),a.length>0&&a.is(":visible")):!1):(/^(input|select|textarea|button|object)$/.test(l)?(r=!i.disabled,r&&(h=t(i).closest("fieldset")[0],h&&(r=!h.disabled))):r="a"===l?i.href||s:s,r&&t(i).is(":visible")&&e(t(i)))},t.extend(t.expr[":"],{focusable:function(e){return t.ui.focusable(e,null!=t.attr(e,"tabindex"))}}),t.ui.focusable,t.fn.form=function(){return"string"==typeof this[0].form?this.closest("form"):t(this[0].form)},t.ui.formResetMixin={_formResetHandler:function(){var e=t(this);setTimeout(function(){var i=e.data("ui-form-reset-instances");t.each(i,function(){this.refresh()})})},_bindFormResetHandler:function(){if(this.form=this.element.form(),this.form.length){var t=this.form.data("ui-form-reset-instances")||[];t.length||this.form.on("reset.ui-form-reset",this._formResetHandler),t.push(this),this.form.data("ui-form-reset-instances",t)}},_unbindFormResetHandler:function(){if(this.form.length){var e=this.form.data("ui-form-reset-instances");e.splice(t.inArray(this,e),1),e.length?this.form.data("ui-form-reset-instances",e):this.form.removeData("ui-form-reset-instances").off("reset.ui-form-reset")}}},"1.7"===t.fn.jquery.substring(0,3)&&(t.each(["Width","Height"],function(e,i){function s(e,i,s,o){return t.each(n,function(){i-=parseFloat(t.css(e,"padding"+this))||0,s&&(i-=parseFloat(t.css(e,"border"+this+"Width"))||0),o&&(i-=parseFloat(t.css(e,"margin"+this))||0)}),i}var n="Width"===i?["Left","Right"]:["Top","Bottom"],o=i.toLowerCase(),a={innerWidth:t.fn.innerWidth,innerHeight:t.fn.innerHeight,outerWidth:t.fn.outerWidth,outerHeight:t.fn.outerHeight};t.fn["inner"+i]=function(e){return void 0===e?a["inner"+i].call(this):this.each(function(){t(this).css(o,s(this,e)+"px")})},t.fn["outer"+i]=function(e,n){return"number"!=typeof e?a["outer"+i].call(this,e):this.each(function(){t(this).css(o,s(this,e,!0,n)+"px")})}}),t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.ui.keyCode={BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38},t.ui.escapeSelector=function(){var t=/([!"#$%&'()*+,./:;<=>?@[\]^`{|}~])/g;return function(e){return e.replace(t,"\\$1")}}(),t.fn.labels=function(){var e,i,s,n,o;return this[0].labels&&this[0].labels.length?this.pushStack(this[0].labels):(n=this.eq(0).parents("label"),s=this.attr("id"),s&&(e=this.eq(0).parents().last(),o=e.add(e.length?e.siblings():this.siblings()),i="label[for='"+t.ui.escapeSelector(s)+"']",n=n.add(o.find(i).addBack(i))),this.pushStack(n))},t.fn.scrollParent=function(e){var i=this.css("position"),s="absolute"===i,n=e?/(auto|scroll|hidden)/:/(auto|scroll)/,o=this.parents().filter(function(){var e=t(this);return s&&"static"===e.css("position")?!1:n.test(e.css("overflow")+e.css("overflow-y")+e.css("overflow-x"))}).eq(0);return"fixed"!==i&&o.length?o:t(this[0].ownerDocument||document)},t.extend(t.expr[":"],{tabbable:function(e){var i=t.attr(e,"tabindex"),s=null!=i;return(!s||i>=0)&&t.ui.focusable(e,s)}}),t.fn.extend({uniqueId:function(){var t=0;return function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++t)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&t(this).removeAttr("id")})}}),t.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase());var n=!1;t(document).on("mouseup",function(){n=!1}),t.widget("ui.mouse",{version:"1.12.1",options:{cancel:"input, textarea, button, select, option",distance:1,delay:0},_mouseInit:function(){var e=this;this.element.on("mousedown."+this.widgetName,function(t){return e._mouseDown(t)}).on("click."+this.widgetName,function(i){return!0===t.data(i.target,e.widgetName+".preventClickEvent")?(t.removeData(i.target,e.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):void 0}),this.started=!1},_mouseDestroy:function(){this.element.off("."+this.widgetName),this._mouseMoveDelegate&&this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(e){if(!n){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(e),this._mouseDownEvent=e;var i=this,s=1===e.which,o="string"==typeof this.options.cancel&&e.target.nodeName?t(e.target).closest(this.options.cancel).length:!1;return s&&!o&&this._mouseCapture(e)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){i.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(e)!==!1,!this._mouseStarted)?(e.preventDefault(),!0):(!0===t.data(e.target,this.widgetName+".preventClickEvent")&&t.removeData(e.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(t){return i._mouseMove(t)},this._mouseUpDelegate=function(t){return i._mouseUp(t)},this.document.on("mousemove."+this.widgetName,this._mouseMoveDelegate).on("mouseup."+this.widgetName,this._mouseUpDelegate),e.preventDefault(),n=!0,!0)):!0}},_mouseMove:function(e){if(this._mouseMoved){if(t.ui.ie&&(!document.documentMode||9>document.documentMode)&&!e.button)return this._mouseUp(e);if(!e.which)if(e.originalEvent.altKey||e.originalEvent.ctrlKey||e.originalEvent.metaKey||e.originalEvent.shiftKey)this.ignoreMissingWhich=!0;else if(!this.ignoreMissingWhich)return this._mouseUp(e)}return(e.which||e.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(e),e.preventDefault()):(this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,e)!==!1,this._mouseStarted?this._mouseDrag(e):this._mouseUp(e)),!this._mouseStarted)},_mouseUp:function(e){this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,e.target===this._mouseDownEvent.target&&t.data(e.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(e)),this._mouseDelayTimer&&(clearTimeout(this._mouseDelayTimer),delete this._mouseDelayTimer),this.ignoreMissingWhich=!1,n=!1,e.preventDefault()},_mouseDistanceMet:function(t){return Math.max(Math.abs(this._mouseDownEvent.pageX-t.pageX),Math.abs(this._mouseDownEvent.pageY-t.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),t.ui.plugin={add:function(e,i,s){var n,o=t.ui[e].prototype;for(n in s)o.plugins[n]=o.plugins[n]||[],o.plugins[n].push([i,s[n]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;o.length>n;n++)t.options[o[n][0]]&&o[n][1].apply(t.element,i)}},t.widget("ui.resizable",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,classes:{"ui-resizable-se":"ui-icon ui-icon-gripsmall-diagonal-se"},containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_num:function(t){return parseFloat(t)||0},_isNumber:function(t){return!isNaN(parseFloat(t))},_hasScroll:function(e,i){if("hidden"===t(e).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",n=!1;return e[s]>0?!0:(e[s]=1,n=e[s]>0,e[s]=0,n)},_create:function(){var e,i=this.options,s=this;this._addClass("ui-resizable"),t.extend(this,{_aspectRatio:!!i.aspectRatio,aspectRatio:i.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:i.helper||i.ghost||i.animate?i.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)&&(this.element.wrap(t("
").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,e={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(e),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(e),this._proportionallyResize()),this._setupHandles(),i.autoHide&&t(this.element).on("mouseenter",function(){i.disabled||(s._removeClass("ui-resizable-autohide"),s._handles.show())}).on("mouseleave",function(){i.disabled||s.resizing||(s._addClass("ui-resizable-autohide"),s._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy();var e,i=function(e){t(e).removeData("resizable").removeData("ui-resizable").off(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),i(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;default:}},_setupHandles:function(){var e,i,s,n,o,a=this.options,r=this;if(this.handles=a.handles||(t(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=t(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),s=this.handles.split(","),this.handles={},i=0;s.length>i;i++)e=t.trim(s[i]),n="ui-resizable-"+e,o=t("
"),this._addClass(o,"ui-resizable-handle "+n),o.css({zIndex:a.zIndex}),this.handles[e]=".ui-resizable-"+e,this.element.append(o);this._renderAxis=function(e){var i,s,n,o;e=e||this.element;for(i in this.handles)this.handles[i].constructor===String?this.handles[i]=this.element.children(this.handles[i]).first().show():(this.handles[i].jquery||this.handles[i].nodeType)&&(this.handles[i]=t(this.handles[i]),this._on(this.handles[i],{mousedown:r._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(s=t(this.handles[i],this.element),o=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),e.css(n,o),this._proportionallyResize()),this._handles=this._handles.add(this.handles[i])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){r.resizing||(this.className&&(o=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),r.axis=o&&o[1]?o[1]:"se")}),a.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._handles.remove()},_mouseCapture:function(e){var i,s,n=!1;for(i in this.handles)s=t(this.handles[i])[0],(s===e.target||t.contains(s,e.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(e){var i,s,n,o=this.options,a=this.element;return this.resizing=!0,this._renderProxy(),i=this._num(this.helper.css("left")),s=this._num(this.helper.css("top")),o.containment&&(i+=t(o.containment).scrollLeft()||0,s+=t(o.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:i,top:s},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:a.width(),height:a.height()},this.originalSize=this._helper?{width:a.outerWidth(),height:a.outerHeight()}:{width:a.width(),height:a.height()},this.sizeDiff={width:a.outerWidth()-a.width(),height:a.outerHeight()-a.height()},this.originalPosition={left:i,top:s},this.originalMousePosition={left:e.pageX,top:e.pageY},this.aspectRatio="number"==typeof o.aspectRatio?o.aspectRatio:this.originalSize.width/this.originalSize.height||1,n=t(".ui-resizable-"+this.axis).css("cursor"),t("body").css("cursor","auto"===n?this.axis+"-resize":n),this._addClass("ui-resizable-resizing"),this._propagate("start",e),!0},_mouseDrag:function(e){var i,s,n=this.originalMousePosition,o=this.axis,a=e.pageX-n.left||0,r=e.pageY-n.top||0,h=this._change[o];return this._updatePrevProperties(),h?(i=h.apply(this,[e,a,r]),this._updateVirtualBoundaries(e.shiftKey),(this._aspectRatio||e.shiftKey)&&(i=this._updateRatio(i,e)),i=this._respectSize(i,e),this._updateCache(i),this._propagate("resize",e),s=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),t.isEmptyObject(s)||(this._updatePrevProperties(),this._trigger("resize",e,this.ui()),this._applyChanges()),!1):!1},_mouseStop:function(e){this.resizing=!1;var i,s,n,o,a,r,h,l=this.options,c=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&this._hasScroll(i[0],"left")?0:c.sizeDiff.height,o=s?0:c.sizeDiff.width,a={width:c.helper.width()-o,height:c.helper.height()-n},r=parseFloat(c.element.css("left"))+(c.position.left-c.originalPosition.left)||null,h=parseFloat(c.element.css("top"))+(c.position.top-c.originalPosition.top)||null,l.animate||this.element.css(t.extend(a,{top:h,left:r})),c.helper.height(c.size.height),c.helper.width(c.size.width),this._helper&&!l.animate&&this._proportionallyResize()),t("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",e),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s,n,o,a=this.options;o={minWidth:this._isNumber(a.minWidth)?a.minWidth:0,maxWidth:this._isNumber(a.maxWidth)?a.maxWidth:1/0,minHeight:this._isNumber(a.minHeight)?a.minHeight:0,maxHeight:this._isNumber(a.maxHeight)?a.maxHeight:1/0},(this._aspectRatio||t)&&(e=o.minHeight*this.aspectRatio,s=o.minWidth/this.aspectRatio,i=o.maxHeight*this.aspectRatio,n=o.maxWidth/this.aspectRatio,e>o.minWidth&&(o.minWidth=e),s>o.minHeight&&(o.minHeight=s),o.maxWidth>i&&(o.maxWidth=i),o.maxHeight>n&&(o.maxHeight=n)),this._vBoundaries=o},_updateCache:function(t){this.offset=this.helper.offset(),this._isNumber(t.left)&&(this.position.left=t.left),this._isNumber(t.top)&&(this.position.top=t.top),this._isNumber(t.height)&&(this.size.height=t.height),this._isNumber(t.width)&&(this.size.width=t.width)},_updateRatio:function(t){var e=this.position,i=this.size,s=this.axis;return this._isNumber(t.height)?t.width=t.height*this.aspectRatio:this._isNumber(t.width)&&(t.height=t.width/this.aspectRatio),"sw"===s&&(t.left=e.left+(i.width-t.width),t.top=null),"nw"===s&&(t.top=e.top+(i.height-t.height),t.left=e.left+(i.width-t.width)),t},_respectSize:function(t){var e=this._vBoundaries,i=this.axis,s=this._isNumber(t.width)&&e.maxWidth&&e.maxWidtht.width,a=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,r=this.originalPosition.left+this.originalSize.width,h=this.originalPosition.top+this.originalSize.height,l=/sw|nw|w/.test(i),c=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),a&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=r-e.minWidth),s&&l&&(t.left=r-e.maxWidth),a&&c&&(t.top=h-e.minHeight),n&&c&&(t.top=h-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];4>e;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;this._proportionallyResizeElements.length>e;e++)t=this._proportionallyResizeElements[e],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(t)),t.css({height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var e=this.element,i=this.options;this.elementOffset=e.offset(),this._helper?(this.helper=this.helper||t("
"),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++i.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element +},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize,s=this.originalPosition;return{left:s.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize,n=this.originalPosition;return{top:n.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},sw:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[e,i,s]))},ne:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},nw:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[e,i,s]))}},_propagate:function(e,i){t.ui.plugin.call(this,e,[i,this.ui()]),"resize"!==e&&this._trigger(e,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),t.ui.plugin.add("resizable","animate",{stop:function(e){var i=t(this).resizable("instance"),s=i.options,n=i._proportionallyResizeElements,o=n.length&&/textarea/i.test(n[0].nodeName),a=o&&i._hasScroll(n[0],"left")?0:i.sizeDiff.height,r=o?0:i.sizeDiff.width,h={width:i.size.width-r,height:i.size.height-a},l=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,c=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(t.extend(h,c&&l?{top:c,left:l}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};n&&n.length&&t(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",e)}})}}),t.ui.plugin.add("resizable","containment",{start:function(){var e,i,s,n,o,a,r,h=t(this).resizable("instance"),l=h.options,c=h.element,u=l.containment,d=u instanceof t?u.get(0):/parent/.test(u)?c.parent().get(0):u;d&&(h.containerElement=t(d),/document/.test(u)||u===document?(h.containerOffset={left:0,top:0},h.containerPosition={left:0,top:0},h.parentData={element:t(document),left:0,top:0,width:t(document).width(),height:t(document).height()||document.body.parentNode.scrollHeight}):(e=t(d),i=[],t(["Top","Right","Left","Bottom"]).each(function(t,s){i[t]=h._num(e.css("padding"+s))}),h.containerOffset=e.offset(),h.containerPosition=e.position(),h.containerSize={height:e.innerHeight()-i[3],width:e.innerWidth()-i[1]},s=h.containerOffset,n=h.containerSize.height,o=h.containerSize.width,a=h._hasScroll(d,"left")?d.scrollWidth:o,r=h._hasScroll(d)?d.scrollHeight:n,h.parentData={element:d,left:s.left,top:s.top,width:a,height:r}))},resize:function(e){var i,s,n,o,a=t(this).resizable("instance"),r=a.options,h=a.containerOffset,l=a.position,c=a._aspectRatio||e.shiftKey,u={top:0,left:0},d=a.containerElement,p=!0;d[0]!==document&&/static/.test(d.css("position"))&&(u=h),l.left<(a._helper?h.left:0)&&(a.size.width=a.size.width+(a._helper?a.position.left-h.left:a.position.left-u.left),c&&(a.size.height=a.size.width/a.aspectRatio,p=!1),a.position.left=r.helper?h.left:0),l.top<(a._helper?h.top:0)&&(a.size.height=a.size.height+(a._helper?a.position.top-h.top:a.position.top),c&&(a.size.width=a.size.height*a.aspectRatio,p=!1),a.position.top=a._helper?h.top:0),n=a.containerElement.get(0)===a.element.parent().get(0),o=/relative|absolute/.test(a.containerElement.css("position")),n&&o?(a.offset.left=a.parentData.left+a.position.left,a.offset.top=a.parentData.top+a.position.top):(a.offset.left=a.element.offset().left,a.offset.top=a.element.offset().top),i=Math.abs(a.sizeDiff.width+(a._helper?a.offset.left-u.left:a.offset.left-h.left)),s=Math.abs(a.sizeDiff.height+(a._helper?a.offset.top-u.top:a.offset.top-h.top)),i+a.size.width>=a.parentData.width&&(a.size.width=a.parentData.width-i,c&&(a.size.height=a.size.width/a.aspectRatio,p=!1)),s+a.size.height>=a.parentData.height&&(a.size.height=a.parentData.height-s,c&&(a.size.width=a.size.height*a.aspectRatio,p=!1)),p||(a.position.left=a.prevPosition.left,a.position.top=a.prevPosition.top,a.size.width=a.prevSize.width,a.size.height=a.prevSize.height)},stop:function(){var e=t(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.containerPosition,o=e.containerElement,a=t(e.helper),r=a.offset(),h=a.outerWidth()-e.sizeDiff.width,l=a.outerHeight()-e.sizeDiff.height;e._helper&&!i.animate&&/relative/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l}),e._helper&&!i.animate&&/static/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l})}}),t.ui.plugin.add("resizable","alsoResize",{start:function(){var e=t(this).resizable("instance"),i=e.options;t(i.alsoResize).each(function(){var e=t(this);e.data("ui-resizable-alsoresize",{width:parseFloat(e.width()),height:parseFloat(e.height()),left:parseFloat(e.css("left")),top:parseFloat(e.css("top"))})})},resize:function(e,i){var s=t(this).resizable("instance"),n=s.options,o=s.originalSize,a=s.originalPosition,r={height:s.size.height-o.height||0,width:s.size.width-o.width||0,top:s.position.top-a.top||0,left:s.position.left-a.left||0};t(n.alsoResize).each(function(){var e=t(this),s=t(this).data("ui-resizable-alsoresize"),n={},o=e.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];t.each(o,function(t,e){var i=(s[e]||0)+(r[e]||0);i&&i>=0&&(n[e]=i||null)}),e.css(n)})},stop:function(){t(this).removeData("ui-resizable-alsoresize")}}),t.ui.plugin.add("resizable","ghost",{start:function(){var e=t(this).resizable("instance"),i=e.size;e.ghost=e.originalElement.clone(),e.ghost.css({opacity:.25,display:"block",position:"relative",height:i.height,width:i.width,margin:0,left:0,top:0}),e._addClass(e.ghost,"ui-resizable-ghost"),t.uiBackCompat!==!1&&"string"==typeof e.options.ghost&&e.ghost.addClass(this.options.ghost),e.ghost.appendTo(e.helper)},resize:function(){var e=t(this).resizable("instance");e.ghost&&e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})},stop:function(){var e=t(this).resizable("instance");e.ghost&&e.helper&&e.helper.get(0).removeChild(e.ghost.get(0))}}),t.ui.plugin.add("resizable","grid",{resize:function(){var e,i=t(this).resizable("instance"),s=i.options,n=i.size,o=i.originalSize,a=i.originalPosition,r=i.axis,h="number"==typeof s.grid?[s.grid,s.grid]:s.grid,l=h[0]||1,c=h[1]||1,u=Math.round((n.width-o.width)/l)*l,d=Math.round((n.height-o.height)/c)*c,p=o.width+u,f=o.height+d,m=s.maxWidth&&p>s.maxWidth,g=s.maxHeight&&f>s.maxHeight,_=s.minWidth&&s.minWidth>p,v=s.minHeight&&s.minHeight>f;s.grid=h,_&&(p+=l),v&&(f+=c),m&&(p-=l),g&&(f-=c),/^(se|s|e)$/.test(r)?(i.size.width=p,i.size.height=f):/^(ne)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.top=a.top-d):/^(sw)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.left=a.left-u):((0>=f-c||0>=p-l)&&(e=i._getPaddingPlusBorderDimensions(this)),f-c>0?(i.size.height=f,i.position.top=a.top-d):(f=c-e.height,i.size.height=f,i.position.top=a.top+o.height-f),p-l>0?(i.size.width=p,i.position.left=a.left-u):(p=l-e.width,i.size.width=p,i.position.left=a.left+o.width-p))}}),t.ui.resizable});/** + * Copyright (c) 2007 Ariel Flesler - aflesler ○ gmail • com | https://github.com/flesler + * Licensed under MIT + * @author Ariel Flesler + * @version 2.1.2 + */ +;(function(f){"use strict";"function"===typeof define&&define.amd?define(["jquery"],f):"undefined"!==typeof module&&module.exports?module.exports=f(require("jquery")):f(jQuery)})(function($){"use strict";function n(a){return!a.nodeName||-1!==$.inArray(a.nodeName.toLowerCase(),["iframe","#document","html","body"])}function h(a){return $.isFunction(a)||$.isPlainObject(a)?a:{top:a,left:a}}var p=$.scrollTo=function(a,d,b){return $(window).scrollTo(a,d,b)};p.defaults={axis:"xy",duration:0,limit:!0};$.fn.scrollTo=function(a,d,b){"object"=== typeof d&&(b=d,d=0);"function"===typeof b&&(b={onAfter:b});"max"===a&&(a=9E9);b=$.extend({},p.defaults,b);d=d||b.duration;var u=b.queue&&1=f[g]?0:Math.min(f[g],n));!a&&1-1){targetElements.on(evt+EVENT_NAMESPACE,function elementToggle(event){$.powerTip.toggle(this,event)})}else{targetElements.on(evt+EVENT_NAMESPACE,function elementOpen(event){$.powerTip.show(this,event)})}});$.each(options.closeEvents,function(idx,evt){if($.inArray(evt,options.openEvents)<0){targetElements.on(evt+EVENT_NAMESPACE,function elementClose(event){$.powerTip.hide(this,!isMouseEvent(event))})}});targetElements.on("keydown"+EVENT_NAMESPACE,function elementKeyDown(event){if(event.keyCode===27){$.powerTip.hide(this,true)}})}return targetElements};$.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",popupClass:null,intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false,openEvents:["mouseenter","focus"],closeEvents:["mouseleave","blur"]};$.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se","n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};$.powerTip={show:function apiShowTip(element,event){if(isMouseEvent(event)){trackMouse(event);session.previousX=event.pageX;session.previousY=event.pageY;$(element).data(DATA_DISPLAYCONTROLLER).show()}else{$(element).first().data(DATA_DISPLAYCONTROLLER).show(true,true)}return element},reposition:function apiResetPosition(element){$(element).first().data(DATA_DISPLAYCONTROLLER).resetPosition();return element},hide:function apiCloseTip(element,immediate){var displayController;immediate=element?immediate:true;if(element){displayController=$(element).first().data(DATA_DISPLAYCONTROLLER)}else if(session.activeHover){displayController=session.activeHover.data(DATA_DISPLAYCONTROLLER)}if(displayController){displayController.hide(immediate)}return element},toggle:function apiToggle(element,event){if(session.activeHover&&session.activeHover.is(element)){$.powerTip.hide(element,!isMouseEvent(event))}else{$.powerTip.show(element,event)}return element}};$.powerTip.showTip=$.powerTip.show;$.powerTip.closeTip=$.powerTip.hide;function CSSCoordinates(){var me=this;me.top="auto";me.left="auto";me.right="auto";me.bottom="auto";me.set=function(property,value){if($.isNumeric(value)){me[property]=Math.round(value)}}}function DisplayController(element,options,tipController){var hoverTimer=null,myCloseDelay=null;function openTooltip(immediate,forceOpen){cancelTimer();if(!element.data(DATA_HASACTIVEHOVER)){if(!immediate){session.tipOpenImminent=true;hoverTimer=setTimeout(function intentDelay(){hoverTimer=null;checkForIntent()},options.intentPollInterval)}else{if(forceOpen){element.data(DATA_FORCEDOPEN,true)}closeAnyDelayed();tipController.showTip(element)}}else{cancelClose()}}function closeTooltip(disableDelay){if(myCloseDelay){myCloseDelay=session.closeDelayTimeout=clearTimeout(myCloseDelay);session.delayInProgress=false}cancelTimer();session.tipOpenImminent=false;if(element.data(DATA_HASACTIVEHOVER)){element.data(DATA_FORCEDOPEN,false);if(!disableDelay){session.delayInProgress=true;session.closeDelayTimeout=setTimeout(function closeDelay(){session.closeDelayTimeout=null;tipController.hideTip(element);session.delayInProgress=false;myCloseDelay=null},options.closeDelay);myCloseDelay=session.closeDelayTimeout}else{tipController.hideTip(element)}}}function checkForIntent(){var xDifference=Math.abs(session.previousX-session.currentX),yDifference=Math.abs(session.previousY-session.currentY),totalDifference=xDifference+yDifference;if(totalDifference",{id:options.popupId});if($body.length===0){$body=$("body")}$body.append(tipElement);session.tooltips=session.tooltips?session.tooltips.add(tipElement):tipElement}if(options.followMouse){if(!tipElement.data(DATA_HASMOUSEMOVE)){$document.on("mousemove"+EVENT_NAMESPACE,positionTipOnCursor);$window.on("scroll"+EVENT_NAMESPACE,positionTipOnCursor);tipElement.data(DATA_HASMOUSEMOVE,true)}}function beginShowTip(element){element.data(DATA_HASACTIVEHOVER,true);tipElement.queue(function queueTipInit(next){showTip(element);next()})}function showTip(element){var tipContent;if(!element.data(DATA_HASACTIVEHOVER)){return}if(session.isTipOpen){if(!session.isClosing){hideTip(session.activeHover)}tipElement.delay(100).queue(function queueTipAgain(next){showTip(element);next()});return}element.trigger("powerTipPreRender");tipContent=getTooltipContent(element);if(tipContent){tipElement.empty().append(tipContent)}else{return}element.trigger("powerTipRender");session.activeHover=element;session.isTipOpen=true;tipElement.data(DATA_MOUSEONTOTIP,options.mouseOnToPopup);tipElement.addClass(options.popupClass);if(!options.followMouse||element.data(DATA_FORCEDOPEN)){positionTipOnElement(element);session.isFixedTipOpen=true}else{positionTipOnCursor()}if(!element.data(DATA_FORCEDOPEN)&&!options.followMouse){$document.on("click"+EVENT_NAMESPACE,function documentClick(event){var target=event.target;if(target!==element[0]){if(options.mouseOnToPopup){if(target!==tipElement[0]&&!$.contains(tipElement[0],target)){$.powerTip.hide()}}else{$.powerTip.hide()}}})}if(options.mouseOnToPopup&&!options.manual){tipElement.on("mouseenter"+EVENT_NAMESPACE,function tipMouseEnter(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).cancel()}});tipElement.on("mouseleave"+EVENT_NAMESPACE,function tipMouseLeave(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).hide()}})}tipElement.fadeIn(options.fadeInTime,function fadeInCallback(){if(!session.desyncTimeout){session.desyncTimeout=setInterval(closeDesyncedTip,500)}element.trigger("powerTipOpen")})}function hideTip(element){session.isClosing=true;session.isTipOpen=false;session.desyncTimeout=clearInterval(session.desyncTimeout);element.data(DATA_HASACTIVEHOVER,false);element.data(DATA_FORCEDOPEN,false);$document.off("click"+EVENT_NAMESPACE);tipElement.off(EVENT_NAMESPACE);tipElement.fadeOut(options.fadeOutTime,function fadeOutCallback(){var coords=new CSSCoordinates;session.activeHover=null;session.isClosing=false;session.isFixedTipOpen=false;tipElement.removeClass();coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);tipElement.css(coords);element.trigger("powerTipClose")})}function positionTipOnCursor(){var tipWidth,tipHeight,coords,collisions,collisionCount;if(!session.isFixedTipOpen&&(session.isTipOpen||session.tipOpenImminent&&tipElement.data(DATA_HASMOUSEMOVE))){tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=new CSSCoordinates;coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);collisions=getViewportCollisions(coords,tipWidth,tipHeight);if(collisions!==Collision.none){collisionCount=countFlags(collisions);if(collisionCount===1){if(collisions===Collision.right){coords.set("left",session.scrollLeft+session.windowWidth-tipWidth)}else if(collisions===Collision.bottom){coords.set("top",session.scrollTop+session.windowHeight-tipHeight)}}else{coords.set("left",session.currentX-tipWidth-options.offset);coords.set("top",session.currentY-tipHeight-options.offset)}}tipElement.css(coords)}}function positionTipOnElement(element){var priorityList,finalPlacement;if(options.smartPlacement||options.followMouse&&element.data(DATA_FORCEDOPEN)){priorityList=$.fn.powerTip.smartPlacementLists[options.placement];$.each(priorityList,function(idx,pos){var collisions=getViewportCollisions(placeTooltip(element,pos),tipElement.outerWidth(),tipElement.outerHeight());finalPlacement=pos;return collisions!==Collision.none})}else{placeTooltip(element,options.placement);finalPlacement=options.placement}tipElement.removeClass("w nw sw e ne se n s w se-alt sw-alt ne-alt nw-alt");tipElement.addClass(finalPlacement)}function placeTooltip(element,placement){var iterationCount=0,tipWidth,tipHeight,coords=new CSSCoordinates;coords.set("top",0);coords.set("left",0);tipElement.css(coords);do{tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=placementCalculator.compute(element,placement,tipWidth,tipHeight,options.offset);tipElement.css(coords)}while(++iterationCount<=5&&(tipWidth!==tipElement.outerWidth()||tipHeight!==tipElement.outerHeight()));return coords}function closeDesyncedTip(){var isDesynced=false,hasDesyncableCloseEvent=$.grep(["mouseleave","mouseout","blur","focusout"],function(eventType){return $.inArray(eventType,options.closeEvents)!==-1}).length>0;if(session.isTipOpen&&!session.isClosing&&!session.delayInProgress&&hasDesyncableCloseEvent){if(session.activeHover.data(DATA_HASACTIVEHOVER)===false||session.activeHover.is(":disabled")){isDesynced=true}else if(!isMouseOver(session.activeHover)&&!session.activeHover.is(":focus")&&!session.activeHover.data(DATA_FORCEDOPEN)){if(tipElement.data(DATA_MOUSEONTOTIP)){if(!isMouseOver(tipElement)){isDesynced=true}}else{isDesynced=true}}if(isDesynced){hideTip(session.activeHover)}}}this.showTip=beginShowTip;this.hideTip=hideTip;this.resetPosition=positionTipOnElement}function isSvgElement(element){return Boolean(window.SVGElement&&element[0]instanceof SVGElement)}function isMouseEvent(event){return Boolean(event&&$.inArray(event.type,MOUSE_EVENTS)>-1&&typeof event.pageX==="number")}function initTracking(){if(!session.mouseTrackingActive){session.mouseTrackingActive=true;getViewportDimensions();$(getViewportDimensions);$document.on("mousemove"+EVENT_NAMESPACE,trackMouse);$window.on("resize"+EVENT_NAMESPACE,trackResize);$window.on("scroll"+EVENT_NAMESPACE,trackScroll)}}function getViewportDimensions(){session.scrollLeft=$window.scrollLeft();session.scrollTop=$window.scrollTop();session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackResize(){session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackScroll(){var x=$window.scrollLeft(),y=$window.scrollTop();if(x!==session.scrollLeft){session.currentX+=x-session.scrollLeft;session.scrollLeft=x}if(y!==session.scrollTop){session.currentY+=y-session.scrollTop;session.scrollTop=y}}function trackMouse(event){session.currentX=event.pageX;session.currentY=event.pageY}function isMouseOver(element){var elementPosition=element.offset(),elementBox=element[0].getBoundingClientRect(),elementWidth=elementBox.right-elementBox.left,elementHeight=elementBox.bottom-elementBox.top;return session.currentX>=elementPosition.left&&session.currentX<=elementPosition.left+elementWidth&&session.currentY>=elementPosition.top&&session.currentY<=elementPosition.top+elementHeight}function getTooltipContent(element){var tipText=element.data(DATA_POWERTIP),tipObject=element.data(DATA_POWERTIPJQ),tipTarget=element.data(DATA_POWERTIPTARGET),targetElement,content;if(tipText){if($.isFunction(tipText)){tipText=tipText.call(element[0])}content=tipText}else if(tipObject){if($.isFunction(tipObject)){tipObject=tipObject.call(element[0])}if(tipObject.length>0){content=tipObject.clone(true,true)}}else if(tipTarget){targetElement=$("#"+tipTarget);if(targetElement.length>0){content=targetElement.html()}}return content}function getViewportCollisions(coords,elementWidth,elementHeight){var viewportTop=session.scrollTop,viewportLeft=session.scrollLeft,viewportBottom=viewportTop+session.windowHeight,viewportRight=viewportLeft+session.windowWidth,collisions=Collision.none;if(coords.topviewportBottom||Math.abs(coords.bottom-session.windowHeight)>viewportBottom){collisions|=Collision.bottom}if(coords.leftviewportRight){collisions|=Collision.left}if(coords.left+elementWidth>viewportRight||coords.right1)){a.preventDefault();var c=a.originalEvent.changedTouches[0],d=document.createEvent("MouseEvents");d.initMouseEvent(b,!0,!0,window,1,c.screenX,c.screenY,c.clientX,c.clientY,!1,!1,!1,!1,0,null),a.target.dispatchEvent(d)}}if(a.support.touch="ontouchend"in document,a.support.touch){var e,b=a.ui.mouse.prototype,c=b._mouseInit,d=b._mouseDestroy;b._touchStart=function(a){var b=this;!e&&b._mouseCapture(a.originalEvent.changedTouches[0])&&(e=!0,b._touchMoved=!1,f(a,"mouseover"),f(a,"mousemove"),f(a,"mousedown"))},b._touchMove=function(a){e&&(this._touchMoved=!0,f(a,"mousemove"))},b._touchEnd=function(a){e&&(f(a,"mouseup"),f(a,"mouseout"),this._touchMoved||f(a,"click"),e=!1)},b._mouseInit=function(){var b=this;b.element.bind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),c.call(b)},b._mouseDestroy=function(){var b=this;b.element.unbind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),d.call(b)}}}(jQuery);/*! SmartMenus jQuery Plugin - v1.1.0 - September 17, 2017 + * http://www.smartmenus.org/ + * Copyright Vasil Dinkov, Vadikom Web Ltd. http://vadikom.com; Licensed MIT */(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof module&&"object"==typeof module.exports?module.exports=t(require("jquery")):t(jQuery)})(function($){function initMouseDetection(t){var e=".smartmenus_mouse";if(mouseDetectionEnabled||t)mouseDetectionEnabled&&t&&($(document).off(e),mouseDetectionEnabled=!1);else{var i=!0,s=null,o={mousemove:function(t){var e={x:t.pageX,y:t.pageY,timeStamp:(new Date).getTime()};if(s){var o=Math.abs(s.x-e.x),a=Math.abs(s.y-e.y);if((o>0||a>0)&&2>=o&&2>=a&&300>=e.timeStamp-s.timeStamp&&(mouse=!0,i)){var n=$(t.target).closest("a");n.is("a")&&$.each(menuTrees,function(){return $.contains(this.$root[0],n[0])?(this.itemEnter({currentTarget:n[0]}),!1):void 0}),i=!1}}s=e}};o[touchEvents?"touchstart":"pointerover pointermove pointerout MSPointerOver MSPointerMove MSPointerOut"]=function(t){isTouchEvent(t.originalEvent)&&(mouse=!1)},$(document).on(getEventsNS(o,e)),mouseDetectionEnabled=!0}}function isTouchEvent(t){return!/^(4|mouse)$/.test(t.pointerType)}function getEventsNS(t,e){e||(e="");var i={};for(var s in t)i[s.split(" ").join(e+" ")+e]=t[s];return i}var menuTrees=[],mouse=!1,touchEvents="ontouchstart"in window,mouseDetectionEnabled=!1,requestAnimationFrame=window.requestAnimationFrame||function(t){return setTimeout(t,1e3/60)},cancelAnimationFrame=window.cancelAnimationFrame||function(t){clearTimeout(t)},canAnimate=!!$.fn.animate;return $.SmartMenus=function(t,e){this.$root=$(t),this.opts=e,this.rootId="",this.accessIdPrefix="",this.$subArrow=null,this.activatedItems=[],this.visibleSubMenus=[],this.showTimeout=0,this.hideTimeout=0,this.scrollTimeout=0,this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.idInc=0,this.$firstLink=null,this.$firstSub=null,this.disabled=!1,this.$disableOverlay=null,this.$touchScrollingSub=null,this.cssTransforms3d="perspective"in t.style||"webkitPerspective"in t.style,this.wasCollapsible=!1,this.init()},$.extend($.SmartMenus,{hideAll:function(){$.each(menuTrees,function(){this.menuHideAll()})},destroy:function(){for(;menuTrees.length;)menuTrees[0].destroy();initMouseDetection(!0)},prototype:{init:function(t){var e=this;if(!t){menuTrees.push(this),this.rootId=((new Date).getTime()+Math.random()+"").replace(/\D/g,""),this.accessIdPrefix="sm-"+this.rootId+"-",this.$root.hasClass("sm-rtl")&&(this.opts.rightToLeftSubMenus=!0);var i=".smartmenus";this.$root.data("smartmenus",this).attr("data-smartmenus-id",this.rootId).dataSM("level",1).on(getEventsNS({"mouseover focusin":$.proxy(this.rootOver,this),"mouseout focusout":$.proxy(this.rootOut,this),keydown:$.proxy(this.rootKeyDown,this)},i)).on(getEventsNS({mouseenter:$.proxy(this.itemEnter,this),mouseleave:$.proxy(this.itemLeave,this),mousedown:$.proxy(this.itemDown,this),focus:$.proxy(this.itemFocus,this),blur:$.proxy(this.itemBlur,this),click:$.proxy(this.itemClick,this)},i),"a"),i+=this.rootId,this.opts.hideOnClick&&$(document).on(getEventsNS({touchstart:$.proxy(this.docTouchStart,this),touchmove:$.proxy(this.docTouchMove,this),touchend:$.proxy(this.docTouchEnd,this),click:$.proxy(this.docClick,this)},i)),$(window).on(getEventsNS({"resize orientationchange":$.proxy(this.winResize,this)},i)),this.opts.subIndicators&&(this.$subArrow=$("").addClass("sub-arrow"),this.opts.subIndicatorsText&&this.$subArrow.html(this.opts.subIndicatorsText)),initMouseDetection()}if(this.$firstSub=this.$root.find("ul").each(function(){e.menuInit($(this))}).eq(0),this.$firstLink=this.$root.find("a").eq(0),this.opts.markCurrentItem){var s=/(index|default)\.[^#\?\/]*/i,o=/#.*/,a=window.location.href.replace(s,""),n=a.replace(o,"");this.$root.find("a").each(function(){var t=this.href.replace(s,""),i=$(this);(t==a||t==n)&&(i.addClass("current"),e.opts.markCurrentTree&&i.parentsUntil("[data-smartmenus-id]","ul").each(function(){$(this).dataSM("parent-a").addClass("current")}))})}this.wasCollapsible=this.isCollapsible()},destroy:function(t){if(!t){var e=".smartmenus";this.$root.removeData("smartmenus").removeAttr("data-smartmenus-id").removeDataSM("level").off(e),e+=this.rootId,$(document).off(e),$(window).off(e),this.opts.subIndicators&&(this.$subArrow=null)}this.menuHideAll();var i=this;this.$root.find("ul").each(function(){var t=$(this);t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.dataSM("shown-before")&&((i.opts.subMenusMinWidth||i.opts.subMenusMaxWidth)&&t.css({width:"",minWidth:"",maxWidth:""}).removeClass("sm-nowrap"),t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.css({zIndex:"",top:"",left:"",marginLeft:"",marginTop:"",display:""})),0==(t.attr("id")||"").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeDataSM("in-mega").removeDataSM("shown-before").removeDataSM("scroll-arrows").removeDataSM("parent-a").removeDataSM("level").removeDataSM("beforefirstshowfired").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeAttr("aria-expanded"),this.$root.find("a.has-submenu").each(function(){var t=$(this);0==t.attr("id").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeClass("has-submenu").removeDataSM("sub").removeAttr("aria-haspopup").removeAttr("aria-controls").removeAttr("aria-expanded").closest("li").removeDataSM("sub"),this.opts.subIndicators&&this.$root.find("span.sub-arrow").remove(),this.opts.markCurrentItem&&this.$root.find("a.current").removeClass("current"),t||(this.$root=null,this.$firstLink=null,this.$firstSub=null,this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),menuTrees.splice($.inArray(this,menuTrees),1))},disable:function(t){if(!this.disabled){if(this.menuHideAll(),!t&&!this.opts.isPopup&&this.$root.is(":visible")){var e=this.$root.offset();this.$disableOverlay=$('
').css({position:"absolute",top:e.top,left:e.left,width:this.$root.outerWidth(),height:this.$root.outerHeight(),zIndex:this.getStartZIndex(!0),opacity:0}).appendTo(document.body)}this.disabled=!0}},docClick:function(t){return this.$touchScrollingSub?(this.$touchScrollingSub=null,void 0):((this.visibleSubMenus.length&&!$.contains(this.$root[0],t.target)||$(t.target).closest("a").length)&&this.menuHideAll(),void 0)},docTouchEnd:function(){if(this.lastTouch){if(!(!this.visibleSubMenus.length||void 0!==this.lastTouch.x2&&this.lastTouch.x1!=this.lastTouch.x2||void 0!==this.lastTouch.y2&&this.lastTouch.y1!=this.lastTouch.y2||this.lastTouch.target&&$.contains(this.$root[0],this.lastTouch.target))){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var t=this;this.hideTimeout=setTimeout(function(){t.menuHideAll()},350)}this.lastTouch=null}},docTouchMove:function(t){if(this.lastTouch){var e=t.originalEvent.touches[0];this.lastTouch.x2=e.pageX,this.lastTouch.y2=e.pageY}},docTouchStart:function(t){var e=t.originalEvent.touches[0];this.lastTouch={x1:e.pageX,y1:e.pageY,target:e.target}},enable:function(){this.disabled&&(this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),this.disabled=!1)},getClosestMenu:function(t){for(var e=$(t).closest("ul");e.dataSM("in-mega");)e=e.parent().closest("ul");return e[0]||null},getHeight:function(t){return this.getOffset(t,!0)},getOffset:function(t,e){var i;"none"==t.css("display")&&(i={position:t[0].style.position,visibility:t[0].style.visibility},t.css({position:"absolute",visibility:"hidden"}).show());var s=t[0].getBoundingClientRect&&t[0].getBoundingClientRect(),o=s&&(e?s.height||s.bottom-s.top:s.width||s.right-s.left);return o||0===o||(o=e?t[0].offsetHeight:t[0].offsetWidth),i&&t.hide().css(i),o},getStartZIndex:function(t){var e=parseInt(this[t?"$root":"$firstSub"].css("z-index"));return!t&&isNaN(e)&&(e=parseInt(this.$root.css("z-index"))),isNaN(e)?1:e},getTouchPoint:function(t){return t.touches&&t.touches[0]||t.changedTouches&&t.changedTouches[0]||t},getViewport:function(t){var e=t?"Height":"Width",i=document.documentElement["client"+e],s=window["inner"+e];return s&&(i=Math.min(i,s)),i},getViewportHeight:function(){return this.getViewport(!0)},getViewportWidth:function(){return this.getViewport()},getWidth:function(t){return this.getOffset(t)},handleEvents:function(){return!this.disabled&&this.isCSSOn()},handleItemEvents:function(t){return this.handleEvents()&&!this.isLinkInMegaMenu(t)},isCollapsible:function(){return"static"==this.$firstSub.css("position")},isCSSOn:function(){return"inline"!=this.$firstLink.css("display")},isFixed:function(){var t="fixed"==this.$root.css("position");return t||this.$root.parentsUntil("body").each(function(){return"fixed"==$(this).css("position")?(t=!0,!1):void 0}),t},isLinkInMegaMenu:function(t){return $(this.getClosestMenu(t[0])).hasClass("mega-menu")},isTouchMode:function(){return!mouse||this.opts.noMouseOver||this.isCollapsible()},itemActivate:function(t,e){var i=t.closest("ul"),s=i.dataSM("level");if(s>1&&(!this.activatedItems[s-2]||this.activatedItems[s-2][0]!=i.dataSM("parent-a")[0])){var o=this;$(i.parentsUntil("[data-smartmenus-id]","ul").get().reverse()).add(i).each(function(){o.itemActivate($(this).dataSM("parent-a"))})}if((!this.isCollapsible()||e)&&this.menuHideSubMenus(this.activatedItems[s-1]&&this.activatedItems[s-1][0]==t[0]?s:s-1),this.activatedItems[s-1]=t,this.$root.triggerHandler("activate.smapi",t[0])!==!1){var a=t.dataSM("sub");a&&(this.isTouchMode()||!this.opts.showOnClick||this.clickActivated)&&this.menuShow(a)}},itemBlur:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&this.$root.triggerHandler("blur.smapi",e[0])},itemClick:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(this.$touchScrollingSub&&this.$touchScrollingSub[0]==e.closest("ul")[0])return this.$touchScrollingSub=null,t.stopPropagation(),!1;if(this.$root.triggerHandler("click.smapi",e[0])===!1)return!1;var i=$(t.target).is(".sub-arrow"),s=e.dataSM("sub"),o=s?2==s.dataSM("level"):!1,a=this.isCollapsible(),n=/toggle$/.test(this.opts.collapsibleBehavior),r=/link$/.test(this.opts.collapsibleBehavior),h=/^accordion/.test(this.opts.collapsibleBehavior);if(s&&!s.is(":visible")){if((!r||!a||i)&&(this.opts.showOnClick&&o&&(this.clickActivated=!0),this.itemActivate(e,h),s.is(":visible")))return this.focusActivated=!0,!1}else if(a&&(n||i))return this.itemActivate(e,h),this.menuHide(s),n&&(this.focusActivated=!1),!1;return this.opts.showOnClick&&o||e.hasClass("disabled")||this.$root.triggerHandler("select.smapi",e[0])===!1?!1:void 0}},itemDown:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&e.dataSM("mousedown",!0)},itemEnter:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(!this.isTouchMode()){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);var i=this;this.showTimeout=setTimeout(function(){i.itemActivate(e)},this.opts.showOnClick&&1==e.closest("ul").dataSM("level")?1:this.opts.showTimeout)}this.$root.triggerHandler("mouseenter.smapi",e[0])}},itemFocus:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(!this.focusActivated||this.isTouchMode()&&e.dataSM("mousedown")||this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0]==e[0]||this.itemActivate(e,!0),this.$root.triggerHandler("focus.smapi",e[0]))},itemLeave:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(this.isTouchMode()||(e[0].blur(),this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0)),e.removeDataSM("mousedown"),this.$root.triggerHandler("mouseleave.smapi",e[0]))},menuHide:function(t){if(this.$root.triggerHandler("beforehide.smapi",t[0])!==!1&&(canAnimate&&t.stop(!0,!0),"none"!=t.css("display"))){var e=function(){t.css("z-index","")};this.isCollapsible()?canAnimate&&this.opts.collapsibleHideFunction?this.opts.collapsibleHideFunction.call(this,t,e):t.hide(this.opts.collapsibleHideDuration,e):canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,t,e):t.hide(this.opts.hideDuration,e),t.dataSM("scroll")&&(this.menuScrollStop(t),t.css({"touch-action":"","-ms-touch-action":"","-webkit-transform":"",transform:""}).off(".smartmenus_scroll").removeDataSM("scroll").dataSM("scroll-arrows").hide()),t.dataSM("parent-a").removeClass("highlighted").attr("aria-expanded","false"),t.attr({"aria-expanded":"false","aria-hidden":"true"});var i=t.dataSM("level");this.activatedItems.splice(i-1,1),this.visibleSubMenus.splice($.inArray(t,this.visibleSubMenus),1),this.$root.triggerHandler("hide.smapi",t[0])}},menuHideAll:function(){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);for(var t=this.opts.isPopup?1:0,e=this.visibleSubMenus.length-1;e>=t;e--)this.menuHide(this.visibleSubMenus[e]);this.opts.isPopup&&(canAnimate&&this.$root.stop(!0,!0),this.$root.is(":visible")&&(canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,this.$root):this.$root.hide(this.opts.hideDuration))),this.activatedItems=[],this.visibleSubMenus=[],this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.$root.triggerHandler("hideAll.smapi")},menuHideSubMenus:function(t){for(var e=this.activatedItems.length-1;e>=t;e--){var i=this.activatedItems[e].dataSM("sub");i&&this.menuHide(i)}},menuInit:function(t){if(!t.dataSM("in-mega")){t.hasClass("mega-menu")&&t.find("ul").dataSM("in-mega",!0);for(var e=2,i=t[0];(i=i.parentNode.parentNode)!=this.$root[0];)e++;var s=t.prevAll("a").eq(-1);s.length||(s=t.prevAll().find("a").eq(-1)),s.addClass("has-submenu").dataSM("sub",t),t.dataSM("parent-a",s).dataSM("level",e).parent().dataSM("sub",t);var o=s.attr("id")||this.accessIdPrefix+ ++this.idInc,a=t.attr("id")||this.accessIdPrefix+ ++this.idInc;s.attr({id:o,"aria-haspopup":"true","aria-controls":a,"aria-expanded":"false"}),t.attr({id:a,role:"group","aria-hidden":"true","aria-labelledby":o,"aria-expanded":"false"}),this.opts.subIndicators&&s[this.opts.subIndicatorsPos](this.$subArrow.clone())}},menuPosition:function(t){var e,i,s=t.dataSM("parent-a"),o=s.closest("li"),a=o.parent(),n=t.dataSM("level"),r=this.getWidth(t),h=this.getHeight(t),u=s.offset(),l=u.left,c=u.top,d=this.getWidth(s),m=this.getHeight(s),p=$(window),f=p.scrollLeft(),v=p.scrollTop(),b=this.getViewportWidth(),S=this.getViewportHeight(),g=a.parent().is("[data-sm-horizontal-sub]")||2==n&&!a.hasClass("sm-vertical"),M=this.opts.rightToLeftSubMenus&&!o.is("[data-sm-reverse]")||!this.opts.rightToLeftSubMenus&&o.is("[data-sm-reverse]"),w=2==n?this.opts.mainMenuSubOffsetX:this.opts.subMenusSubOffsetX,T=2==n?this.opts.mainMenuSubOffsetY:this.opts.subMenusSubOffsetY;if(g?(e=M?d-r-w:w,i=this.opts.bottomToTopSubMenus?-h-T:m+T):(e=M?w-r:d-w,i=this.opts.bottomToTopSubMenus?m-T-h:T),this.opts.keepInViewport){var y=l+e,I=c+i;if(M&&f>y?e=g?f-y+e:d-w:!M&&y+r>f+b&&(e=g?f+b-r-y+e:w-r),g||(S>h&&I+h>v+S?i+=v+S-h-I:(h>=S||v>I)&&(i+=v-I)),g&&(I+h>v+S+.49||v>I)||!g&&h>S+.49){var x=this;t.dataSM("scroll-arrows")||t.dataSM("scroll-arrows",$([$('')[0],$('')[0]]).on({mouseenter:function(){t.dataSM("scroll").up=$(this).hasClass("scroll-up"),x.menuScroll(t)},mouseleave:function(e){x.menuScrollStop(t),x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(t){t.preventDefault()}}).insertAfter(t));var A=".smartmenus_scroll";if(t.dataSM("scroll",{y:this.cssTransforms3d?0:i-m,step:1,itemH:m,subH:h,arrowDownH:this.getHeight(t.dataSM("scroll-arrows").eq(1))}).on(getEventsNS({mouseover:function(e){x.menuScrollOver(t,e)},mouseout:function(e){x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(e){x.menuScrollMousewheel(t,e)}},A)).dataSM("scroll-arrows").css({top:"auto",left:"0",marginLeft:e+(parseInt(t.css("border-left-width"))||0),width:r-(parseInt(t.css("border-left-width"))||0)-(parseInt(t.css("border-right-width"))||0),zIndex:t.css("z-index")}).eq(g&&this.opts.bottomToTopSubMenus?0:1).show(),this.isFixed()){var C={};C[touchEvents?"touchstart touchmove touchend":"pointerdown pointermove pointerup MSPointerDown MSPointerMove MSPointerUp"]=function(e){x.menuScrollTouch(t,e)},t.css({"touch-action":"none","-ms-touch-action":"none"}).on(getEventsNS(C,A))}}}t.css({top:"auto",left:"0",marginLeft:e,marginTop:i-m})},menuScroll:function(t,e,i){var s,o=t.dataSM("scroll"),a=t.dataSM("scroll-arrows"),n=o.up?o.upEnd:o.downEnd;if(!e&&o.momentum){if(o.momentum*=.92,s=o.momentum,.5>s)return this.menuScrollStop(t),void 0}else s=i||(e||!this.opts.scrollAccelerate?this.opts.scrollStep:Math.floor(o.step));var r=t.dataSM("level");if(this.activatedItems[r-1]&&this.activatedItems[r-1].dataSM("sub")&&this.activatedItems[r-1].dataSM("sub").is(":visible")&&this.menuHideSubMenus(r-1),o.y=o.up&&o.y>=n||!o.up&&n>=o.y?o.y:Math.abs(n-o.y)>s?o.y+(o.up?s:-s):n,t.css(this.cssTransforms3d?{"-webkit-transform":"translate3d(0, "+o.y+"px, 0)",transform:"translate3d(0, "+o.y+"px, 0)"}:{marginTop:o.y}),mouse&&(o.up&&o.y>o.downEnd||!o.up&&o.y0;t.dataSM("scroll-arrows").eq(i?0:1).is(":visible")&&(t.dataSM("scroll").up=i,this.menuScroll(t,!0))}e.preventDefault()},menuScrollOut:function(t,e){mouse&&(/^scroll-(up|down)/.test((e.relatedTarget||"").className)||(t[0]==e.relatedTarget||$.contains(t[0],e.relatedTarget))&&this.getClosestMenu(e.relatedTarget)==t[0]||t.dataSM("scroll-arrows").css("visibility","hidden"))},menuScrollOver:function(t,e){if(mouse&&!/^scroll-(up|down)/.test(e.target.className)&&this.getClosestMenu(e.target)==t[0]){this.menuScrollRefreshData(t);var i=t.dataSM("scroll"),s=$(window).scrollTop()-t.dataSM("parent-a").offset().top-i.itemH;t.dataSM("scroll-arrows").eq(0).css("margin-top",s).end().eq(1).css("margin-top",s+this.getViewportHeight()-i.arrowDownH).end().css("visibility","visible")}},menuScrollRefreshData:function(t){var e=t.dataSM("scroll"),i=$(window).scrollTop()-t.dataSM("parent-a").offset().top-e.itemH;this.cssTransforms3d&&(i=-(parseFloat(t.css("margin-top"))-i)),$.extend(e,{upEnd:i,downEnd:i+this.getViewportHeight()-e.subH})},menuScrollStop:function(t){return this.scrollTimeout?(cancelAnimationFrame(this.scrollTimeout),this.scrollTimeout=0,t.dataSM("scroll").step=1,!0):void 0},menuScrollTouch:function(t,e){if(e=e.originalEvent,isTouchEvent(e)){var i=this.getTouchPoint(e);if(this.getClosestMenu(i.target)==t[0]){var s=t.dataSM("scroll");if(/(start|down)$/i.test(e.type))this.menuScrollStop(t)?(e.preventDefault(),this.$touchScrollingSub=t):this.$touchScrollingSub=null,this.menuScrollRefreshData(t),$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp});else if(/move$/i.test(e.type)){var o=void 0!==s.touchY?s.touchY:s.touchStartY;if(void 0!==o&&o!=i.pageY){this.$touchScrollingSub=t;var a=i.pageY>o;void 0!==s.up&&s.up!=a&&$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp}),$.extend(s,{up:a,touchY:i.pageY}),this.menuScroll(t,!0,Math.abs(i.pageY-o))}e.preventDefault()}else void 0!==s.touchY&&((s.momentum=15*Math.pow(Math.abs(i.pageY-s.touchStartY)/(e.timeStamp-s.touchStartTime),2))&&(this.menuScrollStop(t),this.menuScroll(t),e.preventDefault()),delete s.touchY)}}},menuShow:function(t){if((t.dataSM("beforefirstshowfired")||(t.dataSM("beforefirstshowfired",!0),this.$root.triggerHandler("beforefirstshow.smapi",t[0])!==!1))&&this.$root.triggerHandler("beforeshow.smapi",t[0])!==!1&&(t.dataSM("shown-before",!0),canAnimate&&t.stop(!0,!0),!t.is(":visible"))){var e=t.dataSM("parent-a"),i=this.isCollapsible();if((this.opts.keepHighlighted||i)&&e.addClass("highlighted"),i)t.removeClass("sm-nowrap").css({zIndex:"",width:"auto",minWidth:"",maxWidth:"",top:"",left:"",marginLeft:"",marginTop:""});else{if(t.css("z-index",this.zIndexInc=(this.zIndexInc||this.getStartZIndex())+1),(this.opts.subMenusMinWidth||this.opts.subMenusMaxWidth)&&(t.css({width:"auto",minWidth:"",maxWidth:""}).addClass("sm-nowrap"),this.opts.subMenusMinWidth&&t.css("min-width",this.opts.subMenusMinWidth),this.opts.subMenusMaxWidth)){var s=this.getWidth(t);t.css("max-width",this.opts.subMenusMaxWidth),s>this.getWidth(t)&&t.removeClass("sm-nowrap").css("width",this.opts.subMenusMaxWidth)}this.menuPosition(t)}var o=function(){t.css("overflow","")};i?canAnimate&&this.opts.collapsibleShowFunction?this.opts.collapsibleShowFunction.call(this,t,o):t.show(this.opts.collapsibleShowDuration,o):canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,t,o):t.show(this.opts.showDuration,o),e.attr("aria-expanded","true"),t.attr({"aria-expanded":"true","aria-hidden":"false"}),this.visibleSubMenus.push(t),this.$root.triggerHandler("show.smapi",t[0])}},popupHide:function(t){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},t?1:this.opts.hideTimeout)},popupShow:function(t,e){if(!this.opts.isPopup)return alert('SmartMenus jQuery Error:\n\nIf you want to show this menu via the "popupShow" method, set the isPopup:true option.'),void 0;if(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),this.$root.dataSM("shown-before",!0),canAnimate&&this.$root.stop(!0,!0),!this.$root.is(":visible")){this.$root.css({left:t,top:e});var i=this,s=function(){i.$root.css("overflow","")};canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,this.$root,s):this.$root.show(this.opts.showDuration,s),this.visibleSubMenus[0]=this.$root}},refresh:function(){this.destroy(!0),this.init(!0)},rootKeyDown:function(t){if(this.handleEvents())switch(t.keyCode){case 27:var e=this.activatedItems[0];if(e){this.menuHideAll(),e[0].focus();var i=e.dataSM("sub");i&&this.menuHide(i)}break;case 32:var s=$(t.target);if(s.is("a")&&this.handleItemEvents(s)){var i=s.dataSM("sub");i&&!i.is(":visible")&&(this.itemClick({currentTarget:t.target}),t.preventDefault())}}},rootOut:function(t){if(this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),!this.opts.showOnClick||!this.opts.hideOnClick)){var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},this.opts.hideTimeout)}},rootOver:function(t){this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0)},winResize:function(t){if(this.handleEvents()){if(!("onorientationchange"in window)||"orientationchange"==t.type){var e=this.isCollapsible();this.wasCollapsible&&e||(this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0].blur(),this.menuHideAll()),this.wasCollapsible=e}}else if(this.$disableOverlay){var i=this.$root.offset();this.$disableOverlay.css({top:i.top,left:i.left,width:this.$root.outerWidth(),height:this.$root.outerHeight()})}}}}),$.fn.dataSM=function(t,e){return e?this.data(t+"_smartmenus",e):this.data(t+"_smartmenus")},$.fn.removeDataSM=function(t){return this.removeData(t+"_smartmenus")},$.fn.smartmenus=function(options){if("string"==typeof options){var args=arguments,method=options;return Array.prototype.shift.call(args),this.each(function(){var t=$(this).data("smartmenus");t&&t[method]&&t[method].apply(t,args)})}return this.each(function(){var dataOpts=$(this).data("sm-options")||null;if(dataOpts)try{dataOpts=eval("("+dataOpts+")")}catch(e){dataOpts=null,alert('ERROR\n\nSmartMenus jQuery init:\nInvalid "data-sm-options" attribute value syntax.')}new $.SmartMenus(this,$.extend({},$.fn.smartmenus.defaults,options,dataOpts))})},$.fn.smartmenus.defaults={isPopup:!1,mainMenuSubOffsetX:0,mainMenuSubOffsetY:0,subMenusSubOffsetX:0,subMenusSubOffsetY:0,subMenusMinWidth:"10em",subMenusMaxWidth:"20em",subIndicators:!0,subIndicatorsPos:"append",subIndicatorsText:"",scrollStep:30,scrollAccelerate:!0,showTimeout:250,hideTimeout:500,showDuration:0,showFunction:null,hideDuration:0,hideFunction:function(t,e){t.fadeOut(200,e)},collapsibleShowDuration:0,collapsibleShowFunction:function(t,e){t.slideDown(200,e)},collapsibleHideDuration:0,collapsibleHideFunction:function(t,e){t.slideUp(200,e)},showOnClick:!1,hideOnClick:!0,noMouseOver:!1,keepInViewport:!0,keepHighlighted:!0,markCurrentItem:!1,markCurrentTree:!0,rightToLeftSubMenus:!1,bottomToTopSubMenus:!1,collapsibleBehavior:"default"},$}); \ No newline at end of file diff --git a/docs/menu.js b/docs/menu.js new file mode 100644 index 00000000..2fe2214f --- /dev/null +++ b/docs/menu.js @@ -0,0 +1,51 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function initMenu(relPath,searchEnabled,serverSide,searchPage,search) { + function makeTree(data,relPath) { + var result=''; + if ('children' in data) { + result+=''; + } + return result; + } + + $('#main-nav').append(makeTree(menudata,relPath)); + $('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu'); + if (searchEnabled) { + if (serverSide) { + $('#main-menu').append('
  • '); + } else { + $('#main-menu').append('
  • '); + } + } + $('#main-menu').smartmenus(); +} +/* @license-end */ diff --git a/docs/menudata.js b/docs/menudata.js new file mode 100644 index 00000000..0f91d7c3 --- /dev/null +++ b/docs/menudata.js @@ -0,0 +1,141 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file +*/ +var menudata={children:[ +{text:"Main Page",url:"index.html"}, +{text:"Namespaces",url:"namespaces.html",children:[ +{text:"Namespace List",url:"namespaces.html"}, +{text:"Namespace Members",url:"namespacemembers.html",children:[ +{text:"All",url:"namespacemembers.html",children:[ +{text:"a",url:"namespacemembers.html#index_a"}, +{text:"e",url:"namespacemembers.html#index_e"}, +{text:"f",url:"namespacemembers.html#index_f"}, +{text:"h",url:"namespacemembers.html#index_h"}, +{text:"i",url:"namespacemembers.html#index_i"}, +{text:"l",url:"namespacemembers.html#index_l"}, +{text:"m",url:"namespacemembers.html#index_m"}, +{text:"n",url:"namespacemembers.html#index_n"}, +{text:"o",url:"namespacemembers.html#index_o"}, +{text:"p",url:"namespacemembers.html#index_p"}, +{text:"r",url:"namespacemembers.html#index_r"}, +{text:"s",url:"namespacemembers.html#index_s"}, +{text:"t",url:"namespacemembers.html#index_t"}]}, +{text:"Functions",url:"namespacemembers_func.html",children:[ +{text:"a",url:"namespacemembers_func.html#index_a"}, +{text:"e",url:"namespacemembers_func.html#index_e"}, +{text:"f",url:"namespacemembers_func.html#index_f"}, +{text:"h",url:"namespacemembers_func.html#index_h"}, +{text:"i",url:"namespacemembers_func.html#index_i"}, +{text:"l",url:"namespacemembers_func.html#index_l"}, +{text:"m",url:"namespacemembers_func.html#index_m"}, +{text:"n",url:"namespacemembers_func.html#index_n"}, +{text:"o",url:"namespacemembers_func.html#index_o"}, +{text:"p",url:"namespacemembers_func.html#index_p"}, +{text:"r",url:"namespacemembers_func.html#index_r"}, +{text:"s",url:"namespacemembers_func.html#index_s"}, +{text:"t",url:"namespacemembers_func.html#index_t"}]}, +{text:"Variables",url:"namespacemembers_vars.html"}, +{text:"Typedefs",url:"namespacemembers_type.html"}]}]}, +{text:"Classes",url:"annotated.html",children:[ +{text:"Class List",url:"annotated.html"}, +{text:"Class Index",url:"classes.html"}, +{text:"Class Hierarchy",url:"hierarchy.html"}, +{text:"Class Members",url:"functions.html",children:[ +{text:"All",url:"functions.html",children:[ +{text:"a",url:"functions.html#index_a"}, +{text:"b",url:"functions_b.html#index_b"}, +{text:"c",url:"functions_c.html#index_c"}, +{text:"d",url:"functions_d.html#index_d"}, +{text:"e",url:"functions_e.html#index_e"}, +{text:"f",url:"functions_f.html#index_f"}, +{text:"h",url:"functions_h.html#index_h"}, +{text:"i",url:"functions_i.html#index_i"}, +{text:"l",url:"functions_l.html#index_l"}, +{text:"m",url:"functions_m.html#index_m"}, +{text:"n",url:"functions_n.html#index_n"}, +{text:"o",url:"functions_o.html#index_o"}, +{text:"p",url:"functions_p.html#index_p"}, +{text:"r",url:"functions_r.html#index_r"}, +{text:"s",url:"functions_s.html#index_s"}, +{text:"t",url:"functions_t.html#index_t"}, +{text:"u",url:"functions_u.html#index_u"}, +{text:"v",url:"functions_v.html#index_v"}, +{text:"w",url:"functions_w.html#index_w"}, +{text:"~",url:"functions_~.html#index__7E"}]}, +{text:"Functions",url:"functions_func.html",children:[ +{text:"a",url:"functions_func.html#index_a"}, +{text:"b",url:"functions_func_b.html#index_b"}, +{text:"c",url:"functions_func_c.html#index_c"}, +{text:"d",url:"functions_func_d.html#index_d"}, +{text:"e",url:"functions_func_e.html#index_e"}, +{text:"f",url:"functions_func_f.html#index_f"}, +{text:"h",url:"functions_func_h.html#index_h"}, +{text:"i",url:"functions_func_i.html#index_i"}, +{text:"l",url:"functions_func_l.html#index_l"}, +{text:"m",url:"functions_func_m.html#index_m"}, +{text:"n",url:"functions_func_n.html#index_n"}, +{text:"o",url:"functions_func_o.html#index_o"}, +{text:"p",url:"functions_func_p.html#index_p"}, +{text:"r",url:"functions_func_r.html#index_r"}, +{text:"s",url:"functions_func_s.html#index_s"}, +{text:"t",url:"functions_func_t.html#index_t"}, +{text:"u",url:"functions_func_u.html#index_u"}, +{text:"v",url:"functions_func_v.html#index_v"}, +{text:"w",url:"functions_func_w.html#index_w"}, +{text:"~",url:"functions_func_~.html#index__7E"}]}, +{text:"Variables",url:"functions_vars.html"}, +{text:"Typedefs",url:"functions_type.html"}, +{text:"Related Functions",url:"functions_rela.html"}]}]}, +{text:"Files",url:"files.html",children:[ +{text:"File List",url:"files.html"}, +{text:"File Members",url:"globals.html",children:[ +{text:"All",url:"globals.html",children:[ +{text:"a",url:"globals.html#index_a"}, +{text:"c",url:"globals.html#index_c"}, +{text:"e",url:"globals.html#index_e"}, +{text:"f",url:"globals.html#index_f"}, +{text:"g",url:"globals.html#index_g"}, +{text:"h",url:"globals.html#index_h"}, +{text:"i",url:"globals.html#index_i"}, +{text:"m",url:"globals.html#index_m"}, +{text:"n",url:"globals.html#index_n"}, +{text:"o",url:"globals.html#index_o"}, +{text:"p",url:"globals.html#index_p"}, +{text:"r",url:"globals.html#index_r"}, +{text:"s",url:"globals.html#index_s"}, +{text:"t",url:"globals.html#index_t"}]}, +{text:"Functions",url:"globals_func.html"}, +{text:"Variables",url:"globals_vars.html",children:[ +{text:"a",url:"globals_vars.html#index_a"}, +{text:"c",url:"globals_vars.html#index_c"}, +{text:"e",url:"globals_vars.html#index_e"}, +{text:"f",url:"globals_vars.html#index_f"}, +{text:"g",url:"globals_vars.html#index_g"}, +{text:"i",url:"globals_vars.html#index_i"}, +{text:"n",url:"globals_vars.html#index_n"}, +{text:"p",url:"globals_vars.html#index_p"}, +{text:"r",url:"globals_vars.html#index_r"}, +{text:"s",url:"globals_vars.html#index_s"}]}, +{text:"Macros",url:"globals_defs.html"}]}]}, +{text:"Examples",url:"examples.html"}]} diff --git a/docs/namespaceHPCombi.html b/docs/namespaceHPCombi.html new file mode 100644 index 00000000..9f789294 --- /dev/null +++ b/docs/namespaceHPCombi.html @@ -0,0 +1,3932 @@ + + + + + + + +HPCombi: HPCombi Namespace Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    HPCombi +
    +
    High Performance Combinatorics in C++ using vector instructions v1.0.0
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + +
    +
    + +
    +
    HPCombi Namespace Reference
    +
    +
    + + + + + + +

    +Namespaces

     detail
     
     power_helper
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Classes

    class  BMat8
     Class for fast boolean matrices of dimension up to 8 x 8. More...
     
    struct  TPUBuild
     Class for factory object associated to a SIMD packed unsigned integers. More...
     
    struct  PTransf16
     Partial transformation of \(\{0\dots 15\}\). More...
     
    struct  Transf16
     Full transformation of \(\{0\dots 15\}\). More...
     
    struct  PPerm16
     Partial permutation of \(\{0, \dots, 15\}\). More...
     
    struct  Perm16
     Permutations of \(\{0\dots 15\}\). More...
     
    struct  PermGeneric
     
    struct  Vect16
     
    struct  VectGeneric
     A generic class for combinatorial integer vectors. More...
     
    + + + + + + +

    +Typedefs

    using epu64 = uint64_t __attribute__((__vector_size__(16), __may_alias__))
     
    using epu8 = uint8_t __attribute__((vector_size(16)))
     SIMD vector of 16 unsigned bytes. More...
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

    template<class TPU >
    TPUBuild< TPU >::array & as_array (TPU &v) noexcept
     Cast a TPU to a c++ std::array. More...
     
    template<class TPU >
    const TPUBuild< TPU >::array & as_array (const TPU &v) noexcept
     Cast a constant TPU to a constant c++ std::array. More...
     
    template<class TPU >
    VectGeneric< TPUBuild< TPU >::size > & as_VectGeneric (TPU &v)
     Cast a HPCombi::epu8 to a c++ HPCombi::VectGeneric. More...
     
    template<class TPU >
    const VectGeneric< TPUBuild< TPU >::size > & as_VectGeneric (const TPU &v)
     Cast a HPCombi::epu8 to a c++ HPCombi::VectGeneric. More...
     
    constexpr uint8_t operator""_u8 (unsigned long long arg) noexcept
     Unsigned 8 bits int constant. More...
     
    bool is_all_zero (epu8 a) noexcept
     Test whether all the entries of a HPCombi::epu8 are zero. More...
     
    bool is_all_one (epu8 a) noexcept
     Test whether all the entries of a HPCombi::epu8 are one. More...
     
    bool equal (epu8 a, epu8 b) noexcept
     Equality of HPCombi::epu8. More...
     
    bool not_equal (epu8 a, epu8 b) noexcept
     Non equality of HPCombi::epu8. More...
     
    epu8 permuted_ref (epu8 a, epu8 b) noexcept
     Permuting a HPCombi::epu8. More...
     
    epu8 permuted (epu8 a, epu8 b) noexcept
     Permuting a HPCombi::epu8. More...
     
    epu8 shifted_right (epu8 a) noexcept
     Left shifted of a HPCombi::epu8 inserting a 0. More...
     
    epu8 shifted_left (epu8 a) noexcept
     Right shifted of a HPCombi::epu8 inserting a 0. More...
     
    epu8 reverted (epu8 a) noexcept
     Reverting a HPCombi::epu8. More...
     
    epu8 min (epu8 a, epu8 b) noexcept
     Vector min between two HPCombi::epu8 0. More...
     
    epu8 max (epu8 a, epu8 b) noexcept
     Vector max between two HPCombi::epu8 0. More...
     
    bool is_sorted (epu8 a) noexcept
     Testing if a HPCombi::epu8 is sorted. More...
     
    epu8 sorted (epu8 a) noexcept
     Return a sorted HPCombi::epu8. More...
     
    epu8 sorted8 (epu8 a) noexcept
     Return a HPCombi::epu8 with the two half sorted. More...
     
    epu8 revsorted (epu8 a) noexcept
     Return a reverse sorted HPCombi::epu8. More...
     
    epu8 revsorted8 (epu8 a) noexcept
     Return a HPCombi::epu8 with the two half reverse sorted. More...
     
    epu8 sort_perm (epu8 &a) noexcept
     Sort this and return the sorting permutation. More...
     
    epu8 sort8_perm (epu8 &a) noexcept
     Sort this and return the sorting permutation. More...
     
    void merge (epu8 &a, epu8 &b) noexcept
     Merge two sorted epu8. More...
     
    epu8 permutation_of_ref (epu8 a, epu8 b) noexcept
     Find if a vector is a permutation of one other. More...
     
    epu8 permutation_of (epu8 a, epu8 b) noexcept
     Find if a vector is a permutation of one other. More...
     
    epu8 random_epu8 (uint16_t bnd)
     A random HPCombi::epu8. More...
     
    epu8 remove_dups (epu8 a, uint8_t repl=0) noexcept
     Remove duplicates in a sorted HPCombi::epu8. More...
     
    uint8_t horiz_sum_ref (epu8) noexcept
     Horizontal sum of a HPCombi::epu8. More...
     
    uint8_t horiz_sum_gen (epu8) noexcept
     Horizontal sum of a HPCombi::epu8. More...
     
    uint8_t horiz_sum4 (epu8) noexcept
     Horizontal sum of a HPCombi::epu8. More...
     
    uint8_t horiz_sum3 (epu8) noexcept
     Horizontal sum of a HPCombi::epu8. More...
     
    uint8_t horiz_sum (epu8 v) noexcept
     Horizontal sum of a HPCombi::epu8. More...
     
    epu8 partial_sums_ref (epu8) noexcept
     Horizontal partial sum of a HPCombi::epu8. More...
     
    epu8 partial_sums_gen (epu8) noexcept
     Horizontal partial sum of a HPCombi::epu8. More...
     
    epu8 partial_sums_round (epu8) noexcept
     Horizontal partial sum of a HPCombi::epu8. More...
     
    epu8 partial_sums (epu8 v) noexcept
     Horizontal partial sum of a HPCombi::epu8. More...
     
    uint8_t horiz_max_ref (epu8) noexcept
     Horizontal sum of a HPCombi::epu8. More...
     
    uint8_t horiz_max_gen (epu8) noexcept
     Horizontal sum of a HPCombi::epu8. More...
     
    uint8_t horiz_max4 (epu8) noexcept
     Horizontal sum of a HPCombi::epu8. More...
     
    uint8_t horiz_max3 (epu8) noexcept
     Horizontal sum of a HPCombi::epu8. More...
     
    uint8_t horiz_max (epu8 v) noexcept
     Horizontal sum of a HPCombi::epu8. More...
     
    epu8 partial_max_ref (epu8) noexcept
     Horizontal partial sum of a HPCombi::epu8. More...
     
    epu8 partial_max_gen (epu8) noexcept
     Horizontal partial sum of a HPCombi::epu8. More...
     
    epu8 partial_max_round (epu8) noexcept
     Horizontal partial sum of a HPCombi::epu8. More...
     
    epu8 partial_max (epu8 v) noexcept
     Horizontal partial sum of a HPCombi::epu8. More...
     
    uint8_t horiz_min_ref (epu8) noexcept
     Horizontal sum of a HPCombi::epu8. More...
     
    uint8_t horiz_min_gen (epu8) noexcept
     Horizontal sum of a HPCombi::epu8. More...
     
    uint8_t horiz_min4 (epu8) noexcept
     Horizontal sum of a HPCombi::epu8. More...
     
    uint8_t horiz_min3 (epu8) noexcept
     Horizontal sum of a HPCombi::epu8. More...
     
    uint8_t horiz_min (epu8 v) noexcept
     Horizontal sum of a HPCombi::epu8. More...
     
    epu8 partial_min_ref (epu8) noexcept
     Horizontal partial sum of a HPCombi::epu8. More...
     
    epu8 partial_min_gen (epu8) noexcept
     Horizontal partial sum of a HPCombi::epu8. More...
     
    epu8 partial_min_round (epu8) noexcept
     Horizontal partial sum of a HPCombi::epu8. More...
     
    epu8 partial_min (epu8 v) noexcept
     Horizontal partial sum of a HPCombi::epu8. More...
     
    epu8 eval16_ref (epu8 v) noexcept
     Evaluation of a HPCombi::epu8. More...
     
    epu8 eval16_arr (epu8 v) noexcept
     Evaluation of a HPCombi::epu8. More...
     
    epu8 eval16_cycle (epu8 v) noexcept
     Evaluation of a HPCombi::epu8. More...
     
    epu8 eval16_popcount (epu8 v) noexcept
     Evaluation of a HPCombi::epu8. More...
     
    epu8 eval16 (epu8 v) noexcept
     Evaluation of a HPCombi::epu8. More...
     
    uint64_t first_diff_ref (epu8 a, epu8 b, size_t bound=16) noexcept
     The first difference between two HPCombi::epu8. More...
     
    uint64_t first_diff_mask (epu8 a, epu8 b, size_t bound=16) noexcept
     The first difference between two HPCombi::epu8. More...
     
    uint64_t first_diff (epu8 a, epu8 b, size_t bound=16) noexcept
     The first difference between two HPCombi::epu8. More...
     
    uint64_t last_diff_ref (epu8 a, epu8 b, size_t bound=16) noexcept
     The last difference between two HPCombi::epu8. More...
     
    uint64_t last_diff_mask (epu8 a, epu8 b, size_t bound=16) noexcept
     The last difference between two HPCombi::epu8. More...
     
    uint64_t last_diff (epu8 a, epu8 b, size_t bound=16) noexcept
     The last difference between two HPCombi::epu8. More...
     
    bool less (epu8 a, epu8 b) noexcept
     Lexicographic comparison between two HPCombi::epu8. More...
     
    int8_t less_partial (epu8 a, epu8 b, int k) noexcept
     Partial lexicographic comparison between two HPCombi::epu8. More...
     
    uint64_t first_zero (epu8 v, int bnd) noexcept
     return the index of the first zero entry or 16 if there are none Only index smaller than bound are taken into account. More...
     
    uint64_t last_zero (epu8 v, int bnd) noexcept
     return the index of the last zero entry or 16 if there are none Only index smaller than bound are taken into account. More...
     
    uint64_t first_non_zero (epu8 v, int bnd) noexcept
     return the index of the first non zero entry or 16 if there are none Only index smaller than bound are taken into account. More...
     
    uint64_t last_non_zero (epu8 v, int bnd) noexcept
     return the index of the last non zero entry or 16 if there are none Only index smaller than bound are taken into account. More...
     
    epu8 popcount16 (epu8 v) noexcept
     a vector popcount function More...
     
    bool is_partial_transformation (epu8 v, const size_t k=16) noexcept
     Test for partial transformation. More...
     
    bool is_transformation (epu8 v, const size_t k=16) noexcept
     Test for transformation. More...
     
    bool is_partial_permutation (epu8 v, const size_t k=16) noexcept
     Test for partial permutations. More...
     
    bool is_permutation_sort (epu8 v, const size_t k=16) noexcept
     
    bool is_permutation_eval (epu8 v, const size_t k=16) noexcept
     
    bool is_permutation (epu8 v, const size_t k=16) noexcept
     
    uint64_t first_mask (epu8 msk, size_t bound)
     
    uint64_t last_mask (epu8 msk, size_t bound)
     
    template<bool Increasing = true, size_t sz>
    epu8 network_sort (epu8 res, std::array< epu8, sz > rounds)
     Apply a sorting network. More...
     
    template<bool Increasing = true, size_t sz>
    epu8 network_sort_perm (epu8 &v, std::array< epu8, sz > rounds)
     Apply a sorting network in place and return the permutation. More...
     
    void merge_rev (epu8 &a, epu8 &b) noexcept
     
    epu8 eval16_gen (epu8 v) noexcept
     
    template<typename T , typename M = power_helper::Monoid<T>>
    const T square (const T x)
     A generic compile time squaring function. More...
     
    template<unsigned exp, typename T , typename M = power_helper::Monoid<T>>
    const T pow (const T x)
     A generic compile time exponentiation function. More...
     
    template<size_t Size, typename Expo = uint8_t>
    std::array< Expo, Size > sorted_vect (std::array< Expo, Size > v)
     
    + + + + + + + + + + + + + + + + + + + + + + + + +

    +Variables

    constexpr std::array< epu8, 4 > masks
     
    constexpr TPUBuild< epu8Epu8 {}
     Factory object acting as a class constructor for type HPCombi::epu8. More...
     
    constexpr uint64_t prime = 0x9e3779b97f4a7bb9
     A prime number good for hashing. More...
     
    constexpr std::array< epu8, 9 > sorting_rounds
     A 16-way sorting network. More...
     
    constexpr std::array< epu8, 6 > sorting_rounds8
     A duplicated 8-way sorting network. More...
     
    constexpr std::array< epu8, 6 > merge_rounds
     
    constexpr std::array< epu8, 3 > inverting_rounds
     
    constexpr std::array< epu8, 4 > summing_rounds
     Permutation Round for partial and horizontal sums. More...
     
    constexpr std::array< epu8, 4 > mining_rounds
     
    +

    Typedef Documentation

    + +

    ◆ epu64

    + +
    +
    + + + + +
    using HPCombi::epu64 = typedef uint64_t __attribute__((__vector_size__(16), __may_alias__))
    +
    + +
    +
    + +

    ◆ epu8

    + +
    +
    + + + + +
    using HPCombi::epu8 = typedef uint8_t __attribute__((vector_size(16)))
    +
    + +

    SIMD vector of 16 unsigned bytes.

    + +
    +
    +

    Function Documentation

    + +

    ◆ as_array() [1/2]

    + +
    +
    +
    +template<class TPU >
    + + + + + +
    + + + + + + + + +
    const TPUBuild<TPU>::array& HPCombi::as_array (const TPU & v)
    +
    +inlinenoexcept
    +
    + +

    Cast a constant TPU to a constant c++ std::array.

    +

    This is usually faster for algorithm using a lot of indexed access.

    + +
    +
    + +

    ◆ as_array() [2/2]

    + +
    +
    +
    +template<class TPU >
    + + + + + +
    + + + + + + + + +
    TPUBuild<TPU>::array& HPCombi::as_array (TPU & v)
    +
    +inlinenoexcept
    +
    + +

    Cast a TPU to a c++ std::array.

    +

    This is usually faster for algorithm using a lot of indexed access.

    + +
    +
    + +

    ◆ as_VectGeneric() [1/2]

    + +
    +
    +
    +template<class TPU >
    + + + + + +
    + + + + + + + + +
    const VectGeneric<TPUBuild<TPU>::size>& HPCombi::as_VectGeneric (const TPU & v)
    +
    +inline
    +
    + +

    Cast a HPCombi::epu8 to a c++ HPCombi::VectGeneric.

    +

    This is usually faster for algorithm using a lot of indexed access.

    + +
    +
    + +

    ◆ as_VectGeneric() [2/2]

    + +
    +
    +
    +template<class TPU >
    + + + + + +
    + + + + + + + + +
    VectGeneric<TPUBuild<TPU>::size>& HPCombi::as_VectGeneric (TPU & v)
    +
    +inline
    +
    + +

    Cast a HPCombi::epu8 to a c++ HPCombi::VectGeneric.

    +

    This is usually faster for algorithm using a lot of indexed access.

    + +
    +
    + +

    ◆ equal()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    bool HPCombi::equal (epu8 a,
    epu8 b 
    )
    +
    +inlinenoexcept
    +
    + +

    Equality of HPCombi::epu8.

    + +
    +
    + +

    ◆ eval16()

    + +
    +
    + + + + + +
    + + + + + + + + +
    epu8 HPCombi::eval16 (epu8 v)
    +
    +inlinenoexcept
    +
    + +

    Evaluation of a HPCombi::epu8.

    +
    Parameters
    + + +
    v: a HPCombi::epu8
    +
    +
    +
    Returns
    the evaluation, that is the HPCombi::epu8 r such that r[i] is the number of occurrence of i in the input v
    +
    Example:
    eval16(epu8 { 5, 5, 2, 5, 1, 6,12, 4, 0, 3, 2,11,12,13,14,15});
    +
    epu8 eval16(epu8 v) noexcept
    Evaluation of a HPCombi::epu8.
    Definition: epu8.hpp:404
    +
    uint8_t __attribute__((vector_size(16))) epu8
    SIMD vector of 16 unsigned bytes.
    Definition: epu8.hpp:41
    +
    Returns { 1, 1, 2, 1, 1, 3, 1, 0, 0, 0, 0, 1, 2, 1, 1, 1}
    +
    Warning
    The entries larger than 15 are ignored
    + +
    +
    + +

    ◆ eval16_arr()

    + +
    +
    + + + + + +
    + + + + + + + + +
    epu8 HPCombi::eval16_arr (epu8 v)
    +
    +inlinenoexcept
    +
    + +

    Evaluation of a HPCombi::epu8.

    +
    Parameters
    + + +
    v: a HPCombi::epu8
    +
    +
    +
    Returns
    the evaluation, that is the HPCombi::epu8 r such that r[i] is the number of occurrence of i in the input v
    +
    Example:
    eval16(epu8 { 5, 5, 2, 5, 1, 6,12, 4, 0, 3, 2,11,12,13,14,15});
    +
    Returns { 1, 1, 2, 1, 1, 3, 1, 0, 0, 0, 0, 1, 2, 1, 1, 1}
    +
    Warning
    The entries larger than 15 are ignored
    +
    Algorithm:
    Reference \(O(n)\) algorithm using loop and cast to array
    + +
    +
    + +

    ◆ eval16_cycle()

    + +
    +
    + + + + + +
    + + + + + + + + +
    epu8 HPCombi::eval16_cycle (epu8 v)
    +
    +inlinenoexcept
    +
    + +

    Evaluation of a HPCombi::epu8.

    +
    Parameters
    + + +
    v: a HPCombi::epu8
    +
    +
    +
    Returns
    the evaluation, that is the HPCombi::epu8 r such that r[i] is the number of occurrence of i in the input v
    +
    Example:
    eval16(epu8 { 5, 5, 2, 5, 1, 6,12, 4, 0, 3, 2,11,12,13,14,15});
    +
    Returns { 1, 1, 2, 1, 1, 3, 1, 0, 0, 0, 0, 1, 2, 1, 1, 1}
    +
    Warning
    The entries larger than 15 are ignored
    +
    Algorithm:
    Vector \(O(n)\) using cyclic shifting
    + +
    +
    + +

    ◆ eval16_gen()

    + +
    +
    + + + + + +
    + + + + + + + + +
    epu8 HPCombi::eval16_gen (epu8 v)
    +
    +inlinenoexcept
    +
    + +
    +
    + +

    ◆ eval16_popcount()

    + +
    +
    + + + + + +
    + + + + + + + + +
    epu8 HPCombi::eval16_popcount (epu8 v)
    +
    +inlinenoexcept
    +
    + +

    Evaluation of a HPCombi::epu8.

    +
    Parameters
    + + +
    v: a HPCombi::epu8
    +
    +
    +
    Returns
    the evaluation, that is the HPCombi::epu8 r such that r[i] is the number of occurrence of i in the input v
    +
    Example:
    eval16(epu8 { 5, 5, 2, 5, 1, 6,12, 4, 0, 3, 2,11,12,13,14,15});
    +
    Returns { 1, 1, 2, 1, 1, 3, 1, 0, 0, 0, 0, 1, 2, 1, 1, 1}
    +
    Warning
    The entries larger than 15 are ignored
    +
    Algorithm:
    Vector \(O(n)\) using popcount
    + +
    +
    + +

    ◆ eval16_ref()

    + +
    +
    + + + + + +
    + + + + + + + + +
    epu8 HPCombi::eval16_ref (epu8 v)
    +
    +inlinenoexcept
    +
    + +

    Evaluation of a HPCombi::epu8.

    +
    Parameters
    + + +
    v: a HPCombi::epu8
    +
    +
    +
    Returns
    the evaluation, that is the HPCombi::epu8 r such that r[i] is the number of occurrence of i in the input v
    +
    Example:
    eval16(epu8 { 5, 5, 2, 5, 1, 6,12, 4, 0, 3, 2,11,12,13,14,15});
    +
    Returns { 1, 1, 2, 1, 1, 3, 1, 0, 0, 0, 0, 1, 2, 1, 1, 1}
    +
    Warning
    The entries larger than 15 are ignored
    +
    Algorithm:
    Reference \(O(n)\) algorithm using loop and indexed access
    + +
    +
    + +

    ◆ first_diff()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    uint64_t HPCombi::first_diff (epu8 a,
    epu8 b,
    size_t bound = 16 
    )
    +
    +inlinenoexcept
    +
    + +

    The first difference between two HPCombi::epu8.

    +
    Parameters
    + + + +
    a,b: two HPCombi::epu8
    bound: a size_t
    +
    +
    +
    Returns
    the smallest index \(i<bound\) such that a[i] and b[i] differ, 16 if there is no differences before bound.
    +
    Example:
    epu8 a { 5, 5, 2, 5, 1, 6,12, 4, 0, 3, 2,11,12,13,14,15};
    +
    epu8 b { 5, 5, 2, 9, 1, 6,12, 4, 0, 4, 4, 4,12,13,14,15};
    +
    then first_diff(a, b) returns 3, first_diff(a, b, 3) returns 16, first_diff(a, b, 4) returns 3, first_diff(a, b, 7) returns 3.
    +
    Warning
    bound is assumed to be smaller or equal than 16
    + +
    +
    + +

    ◆ first_diff_mask()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    uint64_t HPCombi::first_diff_mask (epu8 a,
    epu8 b,
    size_t bound = 16 
    )
    +
    +inlinenoexcept
    +
    + +

    The first difference between two HPCombi::epu8.

    +
    Parameters
    + + + +
    a,b: two HPCombi::epu8
    bound: a size_t
    +
    +
    +
    Returns
    the smallest index \(i<bound\) such that a[i] and b[i] differ, 16 if there is no differences before bound.
    +
    Example:
    epu8 a { 5, 5, 2, 5, 1, 6,12, 4, 0, 3, 2,11,12,13,14,15};
    +
    epu8 b { 5, 5, 2, 9, 1, 6,12, 4, 0, 4, 4, 4,12,13,14,15};
    +
    then first_diff(a, b) returns 3, first_diff(a, b, 3) returns 16, first_diff(a, b, 4) returns 3, first_diff(a, b, 7) returns 3.
    +
    Warning
    bound is assumed to be smaller or equal than 16
    +
    Algorithm:
    Using vector comparison and mask
    + +
    +
    + +

    ◆ first_diff_ref()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    uint64_t HPCombi::first_diff_ref (epu8 a,
    epu8 b,
    size_t bound = 16 
    )
    +
    +inlinenoexcept
    +
    + +

    The first difference between two HPCombi::epu8.

    +
    Parameters
    + + + +
    a,b: two HPCombi::epu8
    bound: a size_t
    +
    +
    +
    Returns
    the smallest index \(i<bound\) such that a[i] and b[i] differ, 16 if there is no differences before bound.
    +
    Example:
    epu8 a { 5, 5, 2, 5, 1, 6,12, 4, 0, 3, 2,11,12,13,14,15};
    +
    epu8 b { 5, 5, 2, 9, 1, 6,12, 4, 0, 4, 4, 4,12,13,14,15};
    +
    then first_diff(a, b) returns 3, first_diff(a, b, 3) returns 16, first_diff(a, b, 4) returns 3, first_diff(a, b, 7) returns 3.
    +
    Warning
    bound is assumed to be smaller or equal than 16
    +
    Algorithm:
    Reference \(O(n)\) algorithm using loop and indexed access
    + +
    +
    + +

    ◆ first_mask()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    uint64_t HPCombi::first_mask (epu8 msk,
    size_t bound 
    )
    +
    +inline
    +
    + +
    +
    + +

    ◆ first_non_zero()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    uint64_t HPCombi::first_non_zero (epu8 v,
    int bnd 
    )
    +
    +inlinenoexcept
    +
    + +

    return the index of the first non zero entry or 16 if there are none Only index smaller than bound are taken into account.

    + +
    +
    + +

    ◆ first_zero()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    uint64_t HPCombi::first_zero (epu8 v,
    int bnd 
    )
    +
    +inlinenoexcept
    +
    + +

    return the index of the first zero entry or 16 if there are none Only index smaller than bound are taken into account.

    + +
    +
    + +

    ◆ horiz_max()

    + +
    +
    + + + + + +
    + + + + + + + + +
    uint8_t HPCombi::horiz_max (epu8 v)
    +
    +inlinenoexcept
    +
    + +

    Horizontal sum of a HPCombi::epu8.

    +
    Returns
    the horizontal sum of the input
    +
    Example:
    horiz_max(epu8 { 5, 5, 2, 5, 1, 6,12, 4, 0, 3, 2, 0,12, 0, 0, 0});
    +
    uint8_t horiz_max(epu8 v) noexcept
    Horizontal sum of a HPCombi::epu8.
    Definition: epu8.hpp:276
    +
    Returns 12
    + +
    +
    + +

    ◆ horiz_max3()

    + +
    +
    + + + + + +
    + + + + + + + + +
    uint8_t HPCombi::horiz_max3 (epu8 v)
    +
    +inlinenoexcept
    +
    + +

    Horizontal sum of a HPCombi::epu8.

    +
    Returns
    the horizontal sum of the input
    +
    Example:
    horiz_max(epu8 { 5, 5, 2, 5, 1, 6,12, 4, 0, 3, 2, 0,12, 0, 0, 0});
    +
    Returns 12
    +
    Algorithm:
    3-stages parallel algorithm + indexed access
    + +
    +
    + +

    ◆ horiz_max4()

    + +
    +
    + + + + + +
    + + + + + + + + +
    uint8_t HPCombi::horiz_max4 (epu8 v)
    +
    +inlinenoexcept
    +
    + +

    Horizontal sum of a HPCombi::epu8.

    +
    Returns
    the horizontal sum of the input
    +
    Example:
    horiz_max(epu8 { 5, 5, 2, 5, 1, 6,12, 4, 0, 3, 2, 0,12, 0, 0, 0});
    +
    Returns 12
    +
    Algorithm:
    4-stages parallel algorithm
    + +
    +
    + +

    ◆ horiz_max_gen()

    + +
    +
    + + + + + +
    + + + + + + + + +
    uint8_t HPCombi::horiz_max_gen (epu8 v)
    +
    +inlinenoexcept
    +
    + +

    Horizontal sum of a HPCombi::epu8.

    +
    Returns
    the horizontal sum of the input
    +
    Example:
    horiz_max(epu8 { 5, 5, 2, 5, 1, 6,12, 4, 0, 3, 2, 0,12, 0, 0, 0});
    +
    Returns 12
    +
    Algorithm:
    Reference \(O(n)\) algorithm using loop and indexed access through HPCombi::VectGeneric
    + +
    +
    + +

    ◆ horiz_max_ref()

    + +
    +
    + + + + + +
    + + + + + + + + +
    uint8_t HPCombi::horiz_max_ref (epu8 v)
    +
    +inlinenoexcept
    +
    + +

    Horizontal sum of a HPCombi::epu8.

    +
    Returns
    the horizontal sum of the input
    +
    Example:
    horiz_max(epu8 { 5, 5, 2, 5, 1, 6,12, 4, 0, 3, 2, 0,12, 0, 0, 0});
    +
    Returns 12
    +
    Algorithm:
    Reference \(O(n)\) algorithm using loop and indexed access
    + +
    +
    + +

    ◆ horiz_min()

    + +
    +
    + + + + + +
    + + + + + + + + +
    uint8_t HPCombi::horiz_min (epu8 v)
    +
    +inlinenoexcept
    +
    + +

    Horizontal sum of a HPCombi::epu8.

    +
    Returns
    the horizontal sum of the input
    +
    Example:
    horiz_min(epu8 { 5, 5, 2, 5, 1, 6,12, 4, 1, 3, 2, 2,12, 3, 4, 4});
    +
    uint8_t horiz_min(epu8 v) noexcept
    Horizontal sum of a HPCombi::epu8.
    Definition: epu8.hpp:339
    +
    Returns 1
    + +
    +
    + +

    ◆ horiz_min3()

    + +
    +
    + + + + + +
    + + + + + + + + +
    uint8_t HPCombi::horiz_min3 (epu8 v)
    +
    +inlinenoexcept
    +
    + +

    Horizontal sum of a HPCombi::epu8.

    +
    Returns
    the horizontal sum of the input
    +
    Example:
    horiz_min(epu8 { 5, 5, 2, 5, 1, 6,12, 4, 1, 3, 2, 2,12, 3, 4, 4});
    +
    Returns 1
    +
    Algorithm:
    3-stages parallel algorithm + indexed access
    + +
    +
    + +

    ◆ horiz_min4()

    + +
    +
    + + + + + +
    + + + + + + + + +
    uint8_t HPCombi::horiz_min4 (epu8 v)
    +
    +inlinenoexcept
    +
    + +

    Horizontal sum of a HPCombi::epu8.

    +
    Returns
    the horizontal sum of the input
    +
    Example:
    horiz_min(epu8 { 5, 5, 2, 5, 1, 6,12, 4, 1, 3, 2, 2,12, 3, 4, 4});
    +
    Returns 1
    +
    Algorithm:
    4-stages parallel algorithm
    + +
    +
    + +

    ◆ horiz_min_gen()

    + +
    +
    + + + + + +
    + + + + + + + + +
    uint8_t HPCombi::horiz_min_gen (epu8 v)
    +
    +inlinenoexcept
    +
    + +

    Horizontal sum of a HPCombi::epu8.

    +
    Returns
    the horizontal sum of the input
    +
    Example:
    horiz_min(epu8 { 5, 5, 2, 5, 1, 6,12, 4, 1, 3, 2, 2,12, 3, 4, 4});
    +
    Returns 1
    +
    Algorithm:
    Reference \(O(n)\) algorithm using loop and indexed access through HPCombi::VectGeneric
    + +
    +
    + +

    ◆ horiz_min_ref()

    + +
    +
    + + + + + +
    + + + + + + + + +
    uint8_t HPCombi::horiz_min_ref (epu8 v)
    +
    +inlinenoexcept
    +
    + +

    Horizontal sum of a HPCombi::epu8.

    +
    Returns
    the horizontal sum of the input
    +
    Example:
    horiz_min(epu8 { 5, 5, 2, 5, 1, 6,12, 4, 1, 3, 2, 2,12, 3, 4, 4});
    +
    Returns 1
    +
    Algorithm:
    Reference \(O(n)\) algorithm using loop and indexed access
    + +
    +
    + +

    ◆ horiz_sum()

    + +
    +
    + + + + + +
    + + + + + + + + +
    uint8_t HPCombi::horiz_sum (epu8 v)
    +
    +inlinenoexcept
    +
    + +

    Horizontal sum of a HPCombi::epu8.

    +
    Returns
    the horizontal sum of the input
    +
    Example:
    horiz_sum(epu8 { 5, 5, 2, 5, 1, 6,12, 4, 0, 3, 2,11,12,13,14,15});
    +
    uint8_t horiz_sum(epu8 v) noexcept
    Horizontal sum of a HPCombi::epu8.
    Definition: epu8.hpp:213
    +
    Returns 110
    +
    Warning
    The result is supposed to fit in a uint8_t
    + +
    +
    + +

    ◆ horiz_sum3()

    + +
    +
    + + + + + +
    + + + + + + + + +
    uint8_t HPCombi::horiz_sum3 (epu8 v)
    +
    +inlinenoexcept
    +
    + +

    Horizontal sum of a HPCombi::epu8.

    +
    Returns
    the horizontal sum of the input
    +
    Example:
    horiz_sum(epu8 { 5, 5, 2, 5, 1, 6,12, 4, 0, 3, 2,11,12,13,14,15});
    +
    Returns 110
    +
    Warning
    The result is supposed to fit in a uint8_t
    +
    Algorithm:
    3-stages parallel algorithm + indexed access
    + +
    +
    + +

    ◆ horiz_sum4()

    + +
    +
    + + + + + +
    + + + + + + + + +
    uint8_t HPCombi::horiz_sum4 (epu8 v)
    +
    +inlinenoexcept
    +
    + +

    Horizontal sum of a HPCombi::epu8.

    +
    Returns
    the horizontal sum of the input
    +
    Example:
    horiz_sum(epu8 { 5, 5, 2, 5, 1, 6,12, 4, 0, 3, 2,11,12,13,14,15});
    +
    Returns 110
    +
    Warning
    The result is supposed to fit in a uint8_t
    +
    Algorithm:
    4-stages parallel algorithm
    + +
    +
    + +

    ◆ horiz_sum_gen()

    + +
    +
    + + + + + +
    + + + + + + + + +
    uint8_t HPCombi::horiz_sum_gen (epu8 v)
    +
    +inlinenoexcept
    +
    + +

    Horizontal sum of a HPCombi::epu8.

    +
    Returns
    the horizontal sum of the input
    +
    Example:
    horiz_sum(epu8 { 5, 5, 2, 5, 1, 6,12, 4, 0, 3, 2,11,12,13,14,15});
    +
    Returns 110
    +
    Warning
    The result is supposed to fit in a uint8_t
    +
    Algorithm:
    Reference \(O(n)\) algorithm using loop and indexed access through HPCombi::VectGeneric
    + +
    +
    + +

    ◆ horiz_sum_ref()

    + +
    +
    + + + + + +
    + + + + + + + + +
    uint8_t HPCombi::horiz_sum_ref (epu8 v)
    +
    +inlinenoexcept
    +
    + +

    Horizontal sum of a HPCombi::epu8.

    +
    Returns
    the horizontal sum of the input
    +
    Example:
    horiz_sum(epu8 { 5, 5, 2, 5, 1, 6,12, 4, 0, 3, 2,11,12,13,14,15});
    +
    Returns 110
    +
    Warning
    The result is supposed to fit in a uint8_t
    +
    Algorithm:
    Reference \(O(n)\) algorithm using loop and indexed access
    + +
    +
    + +

    ◆ is_all_one()

    + +
    +
    + + + + + +
    + + + + + + + + +
    bool HPCombi::is_all_one (epu8 a)
    +
    +inlinenoexcept
    +
    + +

    Test whether all the entries of a HPCombi::epu8 are one.

    + +
    +
    + +

    ◆ is_all_zero()

    + +
    +
    + + + + + +
    + + + + + + + + +
    bool HPCombi::is_all_zero (epu8 a)
    +
    +inlinenoexcept
    +
    + +

    Test whether all the entries of a HPCombi::epu8 are zero.

    + +
    +
    + +

    ◆ is_partial_permutation()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    bool HPCombi::is_partial_permutation (epu8 v,
    const size_t k = 16 
    )
    +
    +inlinenoexcept
    +
    + +

    Test for partial permutations.

    +
    Returns
    whether *this is a partial permutation.
    +
    Parameters
    + + + +
    vthe vector to test
    kthe size of *this (default 16)
    +
    +
    +

    Points where the function is undefined are mapped to 0xff. If *this is a partial permutation of \(0\dots n-1\) for \(n<16\), it should be completed to a partial permutation of \(0\dots 15\) by adding fixed points. That is the values \(i\geq n\) should be mapped to themself.

    Example:
    The permutation \(\begin{matrix}0 1 2 3 4 5\\ 2 0 5 . . 4 \end{matrix}\) is encoded by the array {2,0,5,0xFF,0xFF,4,6,7,8,9,10,11,12,13,14,15}
    + +
    +
    + +

    ◆ is_partial_transformation()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    bool HPCombi::is_partial_transformation (epu8 v,
    const size_t k = 16 
    )
    +
    +inlinenoexcept
    +
    + +

    Test for partial transformation.

    +
    Returns
    whether v is a partial transformation.
    +
    Parameters
    + + + +
    vthe vector to test
    kthe size of *this (default 16)
    +
    +
    +

    Points where the function is undefined are mapped to 0xff. If *this is a transformation of \(0\dots n-1\) for \(n<16\), it should be completed to a transformation of \(0\dots 15\) by adding fixed points. That is the values \(i\geq n\) should be mapped to themself.

    Example:
    The partial transformation \(\begin{matrix}0 1 2 3 4 5\\ 2 0 5 . . 4 \end{matrix}\) is encoded by the array {2,0,5,0xff,0xff,4,6,7,8,9,10,11,12,13,14,15}
    + +
    +
    + +

    ◆ is_permutation()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    bool HPCombi::is_permutation (epu8 v,
    const size_t k = 16 
    )
    +
    +inlinenoexcept
    +
    + +

    +
    Returns
    whether *this is a permutation.
    +
    Parameters
    + + + +
    vthe vector to test
    kthe size of *this (default 16)
    +
    +
    +

    If *this is a permutation of \(0\dots n-1\) for \(n<16\), it should be completed to a permutation of \(0\dots 15\) by adding fixed points. That is the values \(i\geq n\) should be mapped to themself.

    Example:
    The permutation \(\begin{matrix}0 1 2 3 4 5\\ 2 0 5 3 1 4 \end{matrix}\) is encoded by the array {2,0,5,3,1,4,6,7,8,9,10,11,12,13,14,15}
    +
    Algorithm: architecture dependent
    + +
    +
    + +

    ◆ is_permutation_eval()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    bool HPCombi::is_permutation_eval (epu8 v,
    const size_t k = 16 
    )
    +
    +inlinenoexcept
    +
    + +

    +
    Returns
    whether *this is a permutation.
    +
    Parameters
    + + + +
    vthe vector to test
    kthe size of *this (default 16)
    +
    +
    +

    If *this is a permutation of \(0\dots n-1\) for \(n<16\), it should be completed to a permutation of \(0\dots 15\) by adding fixed points. That is the values \(i\geq n\) should be mapped to themself.

    Example:
    The permutation \(\begin{matrix}0 1 2 3 4 5\\ 2 0 5 3 1 4 \end{matrix}\) is encoded by the array {2,0,5,3,1,4,6,7,8,9,10,11,12,13,14,15}
    +
    Algorithm: uses evaluation
    + +
    +
    + +

    ◆ is_permutation_sort()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    bool HPCombi::is_permutation_sort (epu8 v,
    const size_t k = 16 
    )
    +
    +inlinenoexcept
    +
    + +

    +
    Returns
    whether *this is a permutation.
    +
    Parameters
    + + + +
    vthe vector to test
    kthe size of *this (default 16)
    +
    +
    +

    If *this is a permutation of \(0\dots n-1\) for \(n<16\), it should be completed to a permutation of \(0\dots 15\) by adding fixed points. That is the values \(i\geq n\) should be mapped to themself.

    Example:
    The permutation \(\begin{matrix}0 1 2 3 4 5\\ 2 0 5 3 1 4 \end{matrix}\) is encoded by the array {2,0,5,3,1,4,6,7,8,9,10,11,12,13,14,15}
    +
    Algorithm: sort the vector and compare to identity
    + +
    +
    + +

    ◆ is_sorted()

    + +
    +
    + + + + + +
    + + + + + + + + +
    bool HPCombi::is_sorted (epu8 a)
    +
    +inlinenoexcept
    +
    + +

    Testing if a HPCombi::epu8 is sorted.

    + +
    +
    + +

    ◆ is_transformation()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    bool HPCombi::is_transformation (epu8 v,
    const size_t k = 16 
    )
    +
    +inlinenoexcept
    +
    + +

    Test for transformation.

    +
    Returns
    whether *this is a transformation.
    +
    Parameters
    + + + +
    vthe vector to test
    kthe size of *this (default 16)
    +
    +
    +

    If *this is a transformation of \(0\dots n-1\) for \(n<16\), it should be completed to a transformation of \(0\dots 15\) by adding fixed points. That is the values \(i\geq n\) should be mapped to themself.

    Example:
    The transformation \(\begin{matrix}0 1 2 3 4 5\\ 2 0 5 2 1 4 \end{matrix}\) is encoded by the array {2,0,5,2,1,4,6,7,8,9,10,11,12,13,14,15}
    + +
    +
    + +

    ◆ last_diff()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    uint64_t HPCombi::last_diff (epu8 a,
    epu8 b,
    size_t bound = 16 
    )
    +
    +inlinenoexcept
    +
    + +

    The last difference between two HPCombi::epu8.

    +
    Parameters
    + + + +
    a,b: two HPCombi::epu8
    bound: a size_t
    +
    +
    +
    Returns
    the largest index \(i<bound\) such that a[i] and b[i] differ, 16 if there is no differences before bound.
    +
    Example:
    epu8 a { 5, 5, 2, 5, 1, 6,12, 4, 0, 3, 2,11,12,13,14,15};
    +
    epu8 b { 5, 5, 2, 9, 1, 6,12, 4, 0, 4, 4, 4,12,13,14,15};
    +
    then last_diff(a, b) returns 11, last_diff(a, b, 3) returns 16, last_diff(a, b, 4) returns 3, last_diff(a, b, 7) returns 3.
    +
    Warning
    bound is assumed to be smaller or equal than 16
    + +
    +
    + +

    ◆ last_diff_mask()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    uint64_t HPCombi::last_diff_mask (epu8 a,
    epu8 b,
    size_t bound = 16 
    )
    +
    +inlinenoexcept
    +
    + +

    The last difference between two HPCombi::epu8.

    +
    Parameters
    + + + +
    a,b: two HPCombi::epu8
    bound: a size_t
    +
    +
    +
    Returns
    the largest index \(i<bound\) such that a[i] and b[i] differ, 16 if there is no differences before bound.
    +
    Example:
    epu8 a { 5, 5, 2, 5, 1, 6,12, 4, 0, 3, 2,11,12,13,14,15};
    +
    epu8 b { 5, 5, 2, 9, 1, 6,12, 4, 0, 4, 4, 4,12,13,14,15};
    +
    then last_diff(a, b) returns 11, last_diff(a, b, 3) returns 16, last_diff(a, b, 4) returns 3, last_diff(a, b, 7) returns 3.
    +
    Warning
    bound is assumed to be smaller or equal than 16
    +
    Algorithm:
    Using vector comparison and mask
    + +
    +
    + +

    ◆ last_diff_ref()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    uint64_t HPCombi::last_diff_ref (epu8 a,
    epu8 b,
    size_t bound = 16 
    )
    +
    +inlinenoexcept
    +
    + +

    The last difference between two HPCombi::epu8.

    +
    Parameters
    + + + +
    a,b: two HPCombi::epu8
    bound: a size_t
    +
    +
    +
    Returns
    the largest index \(i<bound\) such that a[i] and b[i] differ, 16 if there is no differences before bound.
    +
    Example:
    epu8 a { 5, 5, 2, 5, 1, 6,12, 4, 0, 3, 2,11,12,13,14,15};
    +
    epu8 b { 5, 5, 2, 9, 1, 6,12, 4, 0, 4, 4, 4,12,13,14,15};
    +
    then last_diff(a, b) returns 11, last_diff(a, b, 3) returns 16, last_diff(a, b, 4) returns 3, last_diff(a, b, 7) returns 3.
    +
    Warning
    bound is assumed to be smaller or equal than 16
    +
    Algorithm:
    Reference \(O(n)\) algorithm using loop and indexed access
    + +
    +
    + +

    ◆ last_mask()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    uint64_t HPCombi::last_mask (epu8 msk,
    size_t bound 
    )
    +
    +inline
    +
    + +
    +
    + +

    ◆ last_non_zero()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    uint64_t HPCombi::last_non_zero (epu8 v,
    int bnd 
    )
    +
    +inlinenoexcept
    +
    + +

    return the index of the last non zero entry or 16 if there are none Only index smaller than bound are taken into account.

    + +
    +
    + +

    ◆ last_zero()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    uint64_t HPCombi::last_zero (epu8 v,
    int bnd 
    )
    +
    +inlinenoexcept
    +
    + +

    return the index of the last zero entry or 16 if there are none Only index smaller than bound are taken into account.

    + +
    +
    + +

    ◆ less()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    bool HPCombi::less (epu8 a,
    epu8 b 
    )
    +
    +inlinenoexcept
    +
    + +

    Lexicographic comparison between two HPCombi::epu8.

    + +
    +
    + +

    ◆ less_partial()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    int8_t HPCombi::less_partial (epu8 a,
    epu8 b,
    int k 
    )
    +
    +inlinenoexcept
    +
    + +

    Partial lexicographic comparison between two HPCombi::epu8.

    +
    Parameters
    + + + +
    a,b: the vectors to compare
    k: the bound for the lexicographic comparison
    +
    +
    +
    Returns
    a positive, negative or zero int8_t depending on the result
    + +
    +
    + +

    ◆ max()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    epu8 HPCombi::max (epu8 a,
    epu8 b 
    )
    +
    +inlinenoexcept
    +
    + +

    Vector max between two HPCombi::epu8 0.

    + +
    +
    + +

    ◆ merge()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    void HPCombi::merge (epu8a,
    epu8b 
    )
    +
    +inlinenoexcept
    +
    + +

    Merge two sorted epu8.

    +
    Parameters
    + + +
    a,btwo HPCombi::epu8 after executing merge, a and are sorted a[15] <= b[0]
    +
    +
    +
    Algorithm: bitonic merge sorting network
    + +
    +
    + +

    ◆ merge_rev()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    void HPCombi::merge_rev (epu8a,
    epu8b 
    )
    +
    +inlinenoexcept
    +
    + +
    +
    + +

    ◆ min()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    epu8 HPCombi::min (epu8 a,
    epu8 b 
    )
    +
    +inlinenoexcept
    +
    + +

    Vector min between two HPCombi::epu8 0.

    + +
    +
    + +

    ◆ network_sort()

    + +
    +
    +
    +template<bool Increasing = true, size_t sz>
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    epu8 HPCombi::network_sort (epu8 res,
    std::array< epu8, sz > rounds 
    )
    +
    +inline
    +
    + +

    Apply a sorting network.

    + +
    +
    + +

    ◆ network_sort_perm()

    + +
    +
    +
    +template<bool Increasing = true, size_t sz>
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    epu8 HPCombi::network_sort_perm (epu8v,
    std::array< epu8, sz > rounds 
    )
    +
    +inline
    +
    + +

    Apply a sorting network in place and return the permutation.

    + +
    +
    + +

    ◆ not_equal()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    bool HPCombi::not_equal (epu8 a,
    epu8 b 
    )
    +
    +inlinenoexcept
    +
    + +

    Non equality of HPCombi::epu8.

    + +
    +
    + +

    ◆ operator""_u8()

    + +
    +
    + + + + + +
    + + + + + + + + +
    constexpr uint8_t HPCombi::operator""_u8 (unsigned long long arg)
    +
    +inlineconstexprnoexcept
    +
    + +

    Unsigned 8 bits int constant.

    + +
    +
    + +

    ◆ partial_max()

    + +
    +
    + + + + + +
    + + + + + + + + +
    epu8 HPCombi::partial_max (epu8 v)
    +
    +inlinenoexcept
    +
    + +

    Horizontal partial sum of a HPCombi::epu8.

    +
    Returns
    the partials max of the input
    +
    Example:
    partial_max(epu8 { 5, 5, 2, 5, 1, 6,12, 4, 0, 3, 2,11,12,13,14,15});
    +
    epu8 partial_max(epu8 v) noexcept
    Horizontal partial sum of a HPCombi::epu8.
    Definition: epu8.hpp:305
    +
    Returns { 5, 5, 5, 5, 5, 6,12,12,12,12,12,12,12,13,14,15}
    + +
    +
    + +

    ◆ partial_max_gen()

    + +
    +
    + + + + + +
    + + + + + + + + +
    epu8 HPCombi::partial_max_gen (epu8 v)
    +
    +inlinenoexcept
    +
    + +

    Horizontal partial sum of a HPCombi::epu8.

    +
    Returns
    the partials max of the input
    +
    Example:
    partial_max(epu8 { 5, 5, 2, 5, 1, 6,12, 4, 0, 3, 2,11,12,13,14,15});
    +
    Returns { 5, 5, 5, 5, 5, 6,12,12,12,12,12,12,12,13,14,15}
    +
    Algorithm:
    Reference \(O(n)\) algorithm using loop and indexed access through HPCombi::VectGeneric
    + +
    +
    + +

    ◆ partial_max_ref()

    + +
    +
    + + + + + +
    + + + + + + + + +
    epu8 HPCombi::partial_max_ref (epu8 v)
    +
    +inlinenoexcept
    +
    + +

    Horizontal partial sum of a HPCombi::epu8.

    +
    Returns
    the partials max of the input
    +
    Example:
    partial_max(epu8 { 5, 5, 2, 5, 1, 6,12, 4, 0, 3, 2,11,12,13,14,15});
    +
    Returns { 5, 5, 5, 5, 5, 6,12,12,12,12,12,12,12,13,14,15}
    +
    Algorithm:
    Reference \(O(n)\) algorithm using loop and indexed access
    + +
    +
    + +

    ◆ partial_max_round()

    + +
    +
    + + + + + +
    + + + + + + + + +
    epu8 HPCombi::partial_max_round (epu8 v)
    +
    +inlinenoexcept
    +
    + +

    Horizontal partial sum of a HPCombi::epu8.

    +
    Returns
    the partials max of the input
    +
    Example:
    partial_max(epu8 { 5, 5, 2, 5, 1, 6,12, 4, 0, 3, 2,11,12,13,14,15});
    +
    Returns { 5, 5, 5, 5, 5, 6,12,12,12,12,12,12,12,13,14,15}
    +
    Algorithm:
    4-stages parallel algorithm
    + +
    +
    + +

    ◆ partial_min()

    + +
    +
    + + + + + +
    + + + + + + + + +
    epu8 HPCombi::partial_min (epu8 v)
    +
    +inlinenoexcept
    +
    + +

    Horizontal partial sum of a HPCombi::epu8.

    +
    Returns
    the partials min of the input
    +
    Example:
    partial_min(epu8 { 5, 5, 2, 5, 1, 6,12, 4, 0, 3, 2,11,12,13,14,15});
    +
    epu8 partial_min(epu8 v) noexcept
    Horizontal partial sum of a HPCombi::epu8.
    Definition: epu8.hpp:368
    +
    Returns { 5, 5, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}
    + +
    +
    + +

    ◆ partial_min_gen()

    + +
    +
    + + + + + +
    + + + + + + + + +
    epu8 HPCombi::partial_min_gen (epu8 v)
    +
    +inlinenoexcept
    +
    + +

    Horizontal partial sum of a HPCombi::epu8.

    +
    Returns
    the partials min of the input
    +
    Example:
    partial_min(epu8 { 5, 5, 2, 5, 1, 6,12, 4, 0, 3, 2,11,12,13,14,15});
    +
    Returns { 5, 5, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}
    +
    Algorithm:
    Reference \(O(n)\) algorithm using loop and indexed access through HPCombi::VectGeneric
    + +
    +
    + +

    ◆ partial_min_ref()

    + +
    +
    + + + + + +
    + + + + + + + + +
    epu8 HPCombi::partial_min_ref (epu8 v)
    +
    +inlinenoexcept
    +
    + +

    Horizontal partial sum of a HPCombi::epu8.

    +
    Returns
    the partials min of the input
    +
    Example:
    partial_min(epu8 { 5, 5, 2, 5, 1, 6,12, 4, 0, 3, 2,11,12,13,14,15});
    +
    Returns { 5, 5, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}
    +
    Algorithm:
    Reference \(O(n)\) algorithm using loop and indexed access
    + +
    +
    + +

    ◆ partial_min_round()

    + +
    +
    + + + + + +
    + + + + + + + + +
    epu8 HPCombi::partial_min_round (epu8 v)
    +
    +inlinenoexcept
    +
    + +

    Horizontal partial sum of a HPCombi::epu8.

    +
    Returns
    the partials min of the input
    +
    Example:
    partial_min(epu8 { 5, 5, 2, 5, 1, 6,12, 4, 0, 3, 2,11,12,13,14,15});
    +
    Returns { 5, 5, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}
    +
    Algorithm:
    4-stages parallel algorithm
    + +
    +
    + +

    ◆ partial_sums()

    + +
    +
    + + + + + +
    + + + + + + + + +
    epu8 HPCombi::partial_sums (epu8 v)
    +
    +inlinenoexcept
    +
    + +

    Horizontal partial sum of a HPCombi::epu8.

    +
    Returns
    the partials sums of the input
    +
    Example:
    partial_sums(epu8 { 5, 5, 2, 5, 1, 6,12, 4, 0, 3, 2,11,12,13,14,15});
    +
    epu8 partial_sums(epu8 v) noexcept
    Horizontal partial sum of a HPCombi::epu8.
    Definition: epu8.hpp:242
    +
    Returns { 5,10,12,17,18,24,36,40,40,43,45,56,68,81,95,110}
    + +
    +
    + +

    ◆ partial_sums_gen()

    + +
    +
    + + + + + +
    + + + + + + + + +
    epu8 HPCombi::partial_sums_gen (epu8 v)
    +
    +inlinenoexcept
    +
    + +

    Horizontal partial sum of a HPCombi::epu8.

    +
    Returns
    the partials sums of the input
    +
    Example:
    partial_sums(epu8 { 5, 5, 2, 5, 1, 6,12, 4, 0, 3, 2,11,12,13,14,15});
    +
    Returns { 5,10,12,17,18,24,36,40,40,43,45,56,68,81,95,110}
    +
    Algorithm:
    Reference \(O(n)\) algorithm using loop and indexed access through HPCombi::VectGeneric
    + +
    +
    + +

    ◆ partial_sums_ref()

    + +
    +
    + + + + + +
    + + + + + + + + +
    epu8 HPCombi::partial_sums_ref (epu8 v)
    +
    +inlinenoexcept
    +
    + +

    Horizontal partial sum of a HPCombi::epu8.

    +
    Returns
    the partials sums of the input
    +
    Example:
    partial_sums(epu8 { 5, 5, 2, 5, 1, 6,12, 4, 0, 3, 2,11,12,13,14,15});
    +
    Returns { 5,10,12,17,18,24,36,40,40,43,45,56,68,81,95,110}
    +
    Algorithm:
    Reference \(O(n)\) algorithm using loop and indexed access
    + +
    +
    + +

    ◆ partial_sums_round()

    + +
    +
    + + + + + +
    + + + + + + + + +
    epu8 HPCombi::partial_sums_round (epu8 v)
    +
    +inlinenoexcept
    +
    + +

    Horizontal partial sum of a HPCombi::epu8.

    +
    Returns
    the partials sums of the input
    +
    Example:
    partial_sums(epu8 { 5, 5, 2, 5, 1, 6,12, 4, 0, 3, 2,11,12,13,14,15});
    +
    Returns { 5,10,12,17,18,24,36,40,40,43,45,56,68,81,95,110}
    +
    Algorithm:
    4-stages parallel algorithm
    + +
    +
    + +

    ◆ permutation_of()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    epu8 HPCombi::permutation_of (epu8 a,
    epu8 b 
    )
    +
    +inlinenoexcept
    +
    + +

    Find if a vector is a permutation of one other.

    +
    Parameters
    + + +
    a,btwo HPCombi::epu8
    +
    +
    +
    Returns
    a HPCombi::epu8 For each \(0 \leq i < 16\), res[i] is the position in a of b[i] if b[i] appears exactly once in a, or undefined if not.
    +
    Algorithm: architecture dependent
    + +
    +
    + +

    ◆ permutation_of_ref()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    epu8 HPCombi::permutation_of_ref (epu8 a,
    epu8 b 
    )
    +
    +inlinenoexcept
    +
    + +

    Find if a vector is a permutation of one other.

    +
    Parameters
    + + +
    a,btwo HPCombi::epu8
    +
    +
    +
    Returns
    a HPCombi::epu8 For each \(0 \leq i < 16\), res[i] is the position in a of b[i] if b[i] appears exactly once in a, or undefined if not.
    +
    Algorithm: reference implementation
    + +
    +
    + +

    ◆ permuted()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    epu8 HPCombi::permuted (epu8 a,
    epu8 b 
    )
    +
    +inlinenoexcept
    +
    + +

    Permuting a HPCombi::epu8.

    + +
    +
    + +

    ◆ permuted_ref()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    epu8 HPCombi::permuted_ref (epu8 a,
    epu8 b 
    )
    +
    +inlinenoexcept
    +
    + +

    Permuting a HPCombi::epu8.

    + +
    +
    + +

    ◆ popcount16()

    + +
    +
    + + + + + +
    + + + + + + + + +
    epu8 HPCombi::popcount16 (epu8 v)
    +
    +inlinenoexcept
    +
    + +

    a vector popcount function

    + +
    +
    + +

    ◆ pow()

    + +
    +
    +
    +template<unsigned exp, typename T , typename M = power_helper::Monoid<T>>
    + + + + + + + + +
    const T HPCombi::pow (const T x)
    +
    + +

    A generic compile time exponentiation function.

    +
    Template Parameters
    + + +
    expthe power
    +
    +
    +
    Parameters
    + + +
    xthe number to exponentiate
    +
    +
    +
    Returns
    x to the power exp
    +

    Raise x to the exponent exp where exp is known at compile time. We use the classical recursive binary algorithm, but the recursion is unfolded and optimized at compile time giving an assembly code which is just a sequence of multiplication.

    +

    To use for a specific type the user should pass a Monoid structure (see below) as third parameter to the template. Alternatively a default monoid structure can be defined for a given type by specializing the template struct HPCombi::power_helper::Monoid

    + +
    +
    + +

    ◆ random_epu8()

    + +
    +
    + + + + + +
    + + + + + + + + +
    epu8 HPCombi::random_epu8 (uint16_t bnd)
    +
    +inline
    +
    + +

    A random HPCombi::epu8.

    +
    Parameters
    + + +
    bnd: the upper bound for the value of the entries. bnd must verify \( 0 < bnd \leq 256 \). This is not checked.
    +
    +
    +
    Returns
    a random HPCombi::epu8 with value in the interval \([0, 1, 2, ..., bnd-1]\).
    + +
    +
    + +

    ◆ remove_dups()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    epu8 HPCombi::remove_dups (epu8 a,
    uint8_t repl = 0 
    )
    +
    +inlinenoexcept
    +
    + +

    Remove duplicates in a sorted HPCombi::epu8.

    +
    Parameters
    + + + +
    asupposed to be sorted
    replthe value replacing the duplicate entries (default to 0)
    +
    +
    +
    Returns
    the vector a where repeated occurrences of entries are replaced by repl
    + +
    +
    + +

    ◆ reverted()

    + +
    +
    + + + + + +
    + + + + + + + + +
    epu8 HPCombi::reverted (epu8 a)
    +
    +inlinenoexcept
    +
    + +

    Reverting a HPCombi::epu8.

    + +
    +
    + +

    ◆ revsorted()

    + +
    +
    + + + + + +
    + + + + + + + + +
    epu8 HPCombi::revsorted (epu8 a)
    +
    +inlinenoexcept
    +
    + +

    Return a reverse sorted HPCombi::epu8.

    +
    Algorithm:
    Uses the 9 stages sorting network sorting_rounds
    + +
    +
    + +

    ◆ revsorted8()

    + +
    +
    + + + + + +
    + + + + + + + + +
    epu8 HPCombi::revsorted8 (epu8 a)
    +
    +inlinenoexcept
    +
    + +

    Return a HPCombi::epu8 with the two half reverse sorted.

    +
    Algorithm: Uses a 6 stages sorting network #sorting_rounds8
    + +
    +
    + +

    ◆ shifted_left()

    + +
    +
    + + + + + +
    + + + + + + + + +
    epu8 HPCombi::shifted_left (epu8 a)
    +
    +inlinenoexcept
    +
    + +

    Right shifted of a HPCombi::epu8 inserting a 0.

    +
    Warning
    we use the convention that the 0 entry is on the left !
    + +
    +
    + +

    ◆ shifted_right()

    + +
    +
    + + + + + +
    + + + + + + + + +
    epu8 HPCombi::shifted_right (epu8 a)
    +
    +inlinenoexcept
    +
    + +

    Left shifted of a HPCombi::epu8 inserting a 0.

    +
    Warning
    we use the convention that the 0 entry is on the left !
    + +
    +
    + +

    ◆ sort8_perm()

    + +
    +
    + + + + + +
    + + + + + + + + +
    epu8 HPCombi::sort8_perm (epu8a)
    +
    +inlinenoexcept
    +
    + +

    Sort this and return the sorting permutation.

    +
    Algorithm: Uses a 6 stages sorting network #sorting_rounds8
    + +
    +
    + +

    ◆ sort_perm()

    + +
    +
    + + + + + +
    + + + + + + + + +
    epu8 HPCombi::sort_perm (epu8a)
    +
    +inlinenoexcept
    +
    + +

    Sort this and return the sorting permutation.

    +
    Algorithm: Uses a 9 stages sorting network #sorting_rounds8
    + +
    +
    + +

    ◆ sorted()

    + +
    +
    + + + + + +
    + + + + + + + + +
    epu8 HPCombi::sorted (epu8 a)
    +
    +inlinenoexcept
    +
    + +

    Return a sorted HPCombi::epu8.

    +
    Algorithm:
    Uses the 9 stages sorting network sorting_rounds
    + +
    +
    + +

    ◆ sorted8()

    + +
    +
    + + + + + +
    + + + + + + + + +
    epu8 HPCombi::sorted8 (epu8 a)
    +
    +inlinenoexcept
    +
    + +

    Return a HPCombi::epu8 with the two half sorted.

    +
    Algorithm: Uses a 6 stages sorting network #sorting_rounds8
    + +
    +
    + +

    ◆ sorted_vect()

    + +
    +
    +
    +template<size_t Size, typename Expo = uint8_t>
    + + + + + + + + +
    std::array<Expo, Size> HPCombi::sorted_vect (std::array< Expo, Size > v)
    +
    + +
    +
    + +

    ◆ square()

    + +
    +
    +
    +template<typename T , typename M = power_helper::Monoid<T>>
    + + + + + + + + +
    const T HPCombi::square (const T x)
    +
    + +

    A generic compile time squaring function.

    +
    Parameters
    + + +
    xthe number to square
    +
    +
    +
    Returns
    x squared
    +

    To use for a specific type the user should pass a monoid structure as second parameter to the template. Alternatively a default monoid structure can be defined for a given type by specializing the template struct HPCombi::power_helper::Monoid

    + +
    +
    +

    Variable Documentation

    + +

    ◆ Epu8

    + +
    +
    + + + + + +
    + + + + +
    constexpr TPUBuild<epu8> HPCombi::Epu8 {}
    +
    +constexpr
    +
    + +

    Factory object acting as a class constructor for type HPCombi::epu8.

    +

    see HPCombi::TPUBuild for usage and capability

    + +
    +
    + +

    ◆ inverting_rounds

    + +
    +
    + + + + + +
    + + + + +
    constexpr std::array<epu8, 3> HPCombi::inverting_rounds
    +
    +constexpr
    +
    +Initial value:
    {{
    +
    +
    +
    epu8 { 0, 1, 2, 3, 8, 9, 10, 11, 4, 5, 6, 7, 12, 13, 14, 15},
    +
    epu8 { 0, 1, 4, 5, 8, 9, 12, 13, 2, 3, 6, 7, 10, 11, 14, 15},
    +
    epu8 { 0, 2, 4, 6, 8, 10, 12, 14, 1, 3, 5, 7, 9, 11, 13, 15}
    +
    +
    }}
    +
    +
    +
    + +

    ◆ masks

    + +
    +
    + + + + + +
    + + + + +
    constexpr std::array<epu8, 4> HPCombi::masks
    +
    +constexpr
    +
    +Initial value:
    {{
    +
    +
    {FF, 0,FF, 0,FF, 0,FF, 0,FF, 0,FF, 0,FF, 0,FF, 0},
    +
    {FF,FF, 1, 1,FF,FF, 1, 1,FF,FF, 1, 1,FF,FF, 1, 1},
    +
    {FF,FF,FF,FF, 2, 2, 2, 2,FF,FF,FF,FF, 2, 2, 2, 2},
    +
    {FF,FF,FF,FF,FF,FF,FF,FF, 3, 3, 3, 3, 3, 3, 3, 3}
    +
    }}
    +
    #define FF
    Definition: bmat8_impl.hpp:242
    +
    +
    +
    + +

    ◆ merge_rounds

    + +
    +
    + + + + + +
    + + + + +
    constexpr std::array<epu8, 6> HPCombi::merge_rounds
    +
    +constexpr
    +
    +Initial value:
    {{
    +
    epu8 { 8, 9, 10, 11, 12, 13, 14, 15, 0, 1, 2, 3, 4, 5, 6, 7},
    +
    epu8 { 4, 5, 6, 7, 0, 1, 2, 3, 12, 13, 14, 15, 8, 9, 10, 11},
    +
    epu8 { 2, 3, 0, 1, 6, 7, 4, 5, 10, 11, 8, 9, 14, 15, 12, 13},
    +
    epu8 { 1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14},
    +
    }}
    +
    +
    +
    + +

    ◆ mining_rounds

    + +
    +
    + + + + + +
    + + + + +
    constexpr std::array<epu8, 4> HPCombi::mining_rounds
    +
    +constexpr
    +
    +Initial value:
    {{
    +
    +
    +
    epu8 { 0, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14},
    +
    epu8 { 0, 1, 1, 1, 4, 5, 5, 5, 8, 9, 9, 9, 12, 13, 13, 13},
    +
    epu8 { 0, 1, 2, 3, 3, 3, 3, 3, 8, 9, 10, 11, 11, 11, 11, 11},
    +
    epu8 { 0, 1, 2, 3, 4, 5, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7}
    +
    +
    }}
    +
    +
    +
    + +

    ◆ prime

    + +
    +
    + + + + + +
    + + + + +
    constexpr uint64_t HPCombi::prime = 0x9e3779b97f4a7bb9
    +
    +constexpr
    +
    + +

    A prime number good for hashing.

    + +
    +
    + +

    ◆ sorting_rounds

    + +
    +
    + + + + + +
    + + + + +
    constexpr std::array<epu8, 9> HPCombi::sorting_rounds
    +
    +constexpr
    +
    +Initial value:
    {{epu8{1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14},
    +
    epu8{2, 3, 0, 1, 6, 7, 4, 5, 10, 11, 8, 9, 14, 15, 12, 13},
    +
    epu8{4, 5, 6, 7, 0, 1, 2, 3, 12, 13, 14, 15, 8, 9, 10, 11},
    +
    epu8{8, 9, 10, 11, 12, 13, 14, 15, 0, 1, 2, 3, 4, 5, 6, 7},
    +
    epu8{0, 2, 1, 12, 8, 10, 9, 11, 4, 6, 5, 7, 3, 14, 13, 15},
    +
    epu8{0, 4, 8, 10, 1, 9, 12, 13, 2, 5, 3, 14, 6, 7, 11, 15},
    +
    epu8{0, 1, 4, 5, 2, 3, 8, 9, 6, 7, 12, 13, 10, 11, 14, 15},
    +
    epu8{0, 1, 2, 6, 4, 8, 3, 10, 5, 12, 7, 11, 9, 13, 14, 15},
    +
    epu8{0, 1, 2, 4, 3, 6, 5, 8, 7, 10, 9, 12, 11, 13, 14, 15}}}
    +
    +

    A 16-way sorting network.

    +

    Sorting network from Knuth [AoCP3] Fig. 51 p 229. used by the sorted function

    +

    [AoCP3]: "D. Knuth, The art of computer programming vol. 3"

    + +
    +
    + +

    ◆ sorting_rounds8

    + +
    +
    + + + + + +
    + + + + +
    constexpr std::array<epu8, 6> HPCombi::sorting_rounds8
    +
    +constexpr
    +
    +Initial value:
    {{
    +
    epu8 { 1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14},
    +
    epu8 { 2, 3, 0, 1, 6, 7, 4, 5, 10, 11, 8, 9, 14, 15, 12, 13},
    +
    epu8 { 0, 2, 1, 3, 4, 6, 5, 7, 8, 10, 9, 11, 12, 14, 13, 15},
    +
    epu8 { 4, 5, 6, 7, 0, 1, 2, 3, 12, 13, 14, 15, 8, 9, 10, 11},
    +
    epu8 { 0, 1, 4, 5, 2, 3, 6, 7, 8, 9, 12, 13, 10, 11, 14, 15},
    +
    epu8 { 0, 2, 1, 4, 3, 6, 5, 7, 8, 10, 9, 12, 11, 14, 13, 15}
    +
    }}
    +
    +

    A duplicated 8-way sorting network.

    +

    Batcher odd-Even mergesort sorting network used by the sorted function

    + +
    +
    + +

    ◆ summing_rounds

    + +
    +
    + + + + + +
    + + + + +
    constexpr std::array<epu8, 4> HPCombi::summing_rounds
    +
    +constexpr
    +
    +Initial value:
    {{
    +
    +
    +
    epu8 { FF, 0, FF, 2, FF, 4, FF, 6, FF, 8, FF, 10, FF, 12, FF, 14},
    +
    epu8 { FF, FF, 1, 1, FF, FF, 5, 5, FF, FF, 9, 9, FF, FF, 13, 13},
    +
    epu8 { FF, FF, FF, FF, 3, 3, 3, 3, FF, FF, FF, FF, 11, 11, 11, 11},
    +
    epu8 { FF, FF, FF, FF, FF, FF, FF, FF, 7, 7, 7, 7, 7, 7, 7, 7}
    +
    +
    }}
    +
    #define FF
    Definition: epu8_impl.hpp:310
    +
    +

    Permutation Round for partial and horizontal sums.

    + +
    +
    +
    + + + + diff --git a/docs/namespaceHPCombi_1_1detail.html b/docs/namespaceHPCombi_1_1detail.html new file mode 100644 index 00000000..a7c908b8 --- /dev/null +++ b/docs/namespaceHPCombi_1_1detail.html @@ -0,0 +1,137 @@ + + + + + + + +HPCombi: HPCombi::detail Namespace Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    HPCombi +
    +
    High Performance Combinatorics in C++ using vector instructions v1.0.0
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    HPCombi::detail Namespace Reference
    +
    +
    + + + + +

    +Functions

    void row_space_update_bitset (epu8 block, epu8 &set0, epu8 &set1) noexcept
     
    +

    Function Documentation

    + +

    ◆ row_space_update_bitset()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void HPCombi::detail::row_space_update_bitset (epu8 block,
    epu8set0,
    epu8set1 
    )
    +
    +inlinenoexcept
    +
    + +
    +
    +
    + + + + diff --git a/docs/namespaceHPCombi_1_1power__helper.html b/docs/namespaceHPCombi_1_1power__helper.html new file mode 100644 index 00000000..6bba225b --- /dev/null +++ b/docs/namespaceHPCombi_1_1power__helper.html @@ -0,0 +1,120 @@ + + + + + + + +HPCombi: HPCombi::power_helper Namespace Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    HPCombi +
    +
    High Performance Combinatorics in C++ using vector instructions v1.0.0
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    HPCombi::power_helper Namespace Reference
    +
    +
    + + + + + + + + + +

    +Classes

    struct  Monoid< Perm16 >
     
    struct  Monoid
     Algebraic monoid structure used by default for type T by the pow function and prod function. More...
     
    struct  Monoid< std::string >
     
    + + + +

    +Typedefs

    using Perm16 = Perm16
     
    +

    Typedef Documentation

    + +

    ◆ Perm16

    + +
    +
    + + + + +
    using HPCombi::power_helper::Perm16 = typedef Perm16
    +
    + +
    +
    +
    + + + + diff --git a/docs/namespacelibsemigroups.html b/docs/namespacelibsemigroups.html new file mode 100644 index 00000000..915fdf10 --- /dev/null +++ b/docs/namespacelibsemigroups.html @@ -0,0 +1,90 @@ + + + + + + + +HPCombi: libsemigroups Namespace Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    HPCombi +
    +
    High Performance Combinatorics in C++ using vector instructions v1.0.0
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + +
    +
    + +
    +
    libsemigroups Namespace Reference
    +
    +
    + + + + +

    +Classes

    class  Timer
     
    +
    + + + + diff --git a/docs/namespacemembers.html b/docs/namespacemembers.html new file mode 100644 index 00000000..810e001d --- /dev/null +++ b/docs/namespacemembers.html @@ -0,0 +1,433 @@ + + + + + + + +HPCombi: Namespace Members + + + + + + + + + + + +
    +
    + + + + + + +
    +
    HPCombi +
    +
    High Performance Combinatorics in C++ using vector instructions v1.0.0
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    + +
    + +
    +
    Here is a list of all namespace members with links to the namespace documentation for each member:
    + +

    - a -

    + + +

    - e -

    + + +

    - f -

    + + +

    - h -

    + + +

    - i -

    + + +

    - l -

    + + +

    - m -

    + + +

    - n -

    + + +

    - o -

      +
    • operator""_u8() +: HPCombi +
    • +
    • operator<<() +: std +
    • +
    + + +

    - p -

    + + +

    - r -

    + + +

    - s -

    + + +

    - t -

      +
    • to_string() +: std +
    • +
    +
    + + + + diff --git a/docs/namespacemembers_func.html b/docs/namespacemembers_func.html new file mode 100644 index 00000000..b090e2d2 --- /dev/null +++ b/docs/namespacemembers_func.html @@ -0,0 +1,397 @@ + + + + + + + +HPCombi: Namespace Members + + + + + + + + + + + +
    +
    + + + + + + +
    +
    HPCombi +
    +
    High Performance Combinatorics in C++ using vector instructions v1.0.0
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    + +
    + +
    +  + +

    - a -

    + + +

    - e -

    + + +

    - f -

    + + +

    - h -

    + + +

    - i -

    + + +

    - l -

    + + +

    - m -

    + + +

    - n -

    + + +

    - o -

      +
    • operator""_u8() +: HPCombi +
    • +
    • operator<<() +: std +
    • +
    + + +

    - p -

    + + +

    - r -

    + + +

    - s -

    + + +

    - t -

      +
    • to_string() +: std +
    • +
    +
    + + + + diff --git a/docs/namespacemembers_type.html b/docs/namespacemembers_type.html new file mode 100644 index 00000000..02702469 --- /dev/null +++ b/docs/namespacemembers_type.html @@ -0,0 +1,89 @@ + + + + + + + +HPCombi: Namespace Members + + + + + + + + + + + +
    +
    + + + + + + +
    +
    HPCombi +
    +
    High Performance Combinatorics in C++ using vector instructions v1.0.0
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    + +
    + +
    +
    + + + + diff --git a/docs/namespacemembers_vars.html b/docs/namespacemembers_vars.html new file mode 100644 index 00000000..a99c8237 --- /dev/null +++ b/docs/namespacemembers_vars.html @@ -0,0 +1,107 @@ + + + + + + + +HPCombi: Namespace Members + + + + + + + + + + + +
    +
    + + + + + + +
    +
    HPCombi +
    +
    High Performance Combinatorics in C++ using vector instructions v1.0.0
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    + +
    + +
    +
    + + + + diff --git a/docs/namespaces.html b/docs/namespaces.html new file mode 100644 index 00000000..9a11dbfc --- /dev/null +++ b/docs/namespaces.html @@ -0,0 +1,116 @@ + + + + + + + +HPCombi: Namespace List + + + + + + + + + + + +
    +
    + + + + + + +
    +
    HPCombi +
    +
    High Performance Combinatorics in C++ using vector instructions v1.0.0
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    Namespace List
    +
    +
    +
    Here is a list of all namespaces with brief descriptions:
    +
    [detail level 123]
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
     NHPCombi
     Ndetail
     Npower_helper
     CMonoid< Perm16 >
     CMonoidAlgebraic monoid structure used by default for type T by the pow function and prod function
     CMonoid< std::string >
     CBMat8Class for fast boolean matrices of dimension up to 8 x 8
     CTPUBuildClass for factory object associated to a SIMD packed unsigned integers
     CPTransf16Partial transformation of \(\{0\dots 15\}\)
     CTransf16Full transformation of \(\{0\dots 15\}\)
     CPPerm16Partial permutation of \(\{0, \dots, 15\}\)
     CPerm16Permutations of \(\{0\dots 15\}\)
     CPermGeneric
     CVect16
     CVectGenericA generic class for combinatorial integer vectors
     Nlibsemigroups
     CTimer
     Nstd
     Chash< HPCombi::BMat8 >
     Cequal_to< HPCombi::epu8 >
     Cnot_equal_to< HPCombi::epu8 >
     Chash< HPCombi::epu8 >
     Cless< HPCombi::epu8 >
     Chash< HPCombi::PTransf16 >
     Chash< HPCombi::Transf16 >
     Chash< HPCombi::PPerm16 >
     Chash< HPCombi::Perm16 >
     Chash< HPCombi::PermGeneric< Size, Expo > >
     Chash< HPCombi::Vect16 >
     Chash< HPCombi::VectGeneric< Size, Expo > >
    +
    +
    + + + + diff --git a/docs/namespacestd.html b/docs/namespacestd.html new file mode 100644 index 00000000..3ab4b92d --- /dev/null +++ b/docs/namespacestd.html @@ -0,0 +1,292 @@ + + + + + + + +HPCombi: std Namespace Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    HPCombi +
    +
    High Performance Combinatorics in C++ using vector instructions v1.0.0
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + +
    +
    + +
    +
    std Namespace Reference
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Classes

    struct  hash< HPCombi::BMat8 >
     
    struct  equal_to< HPCombi::epu8 >
     
    struct  not_equal_to< HPCombi::epu8 >
     
    struct  hash< HPCombi::epu8 >
     
    struct  less< HPCombi::epu8 >
     
    struct  hash< HPCombi::PTransf16 >
     
    struct  hash< HPCombi::Transf16 >
     
    struct  hash< HPCombi::PPerm16 >
     
    struct  hash< HPCombi::Perm16 >
     
    struct  hash< HPCombi::PermGeneric< Size, Expo > >
     
    struct  hash< HPCombi::Vect16 >
     
    struct  hash< HPCombi::VectGeneric< Size, Expo > >
     
    + + + + + + + + + + + + +

    +Functions

    std::ostream & operator<< (std::ostream &os, HPCombi::BMat8 const &bm)
     
    std::ostream & operator<< (std::ostream &stream, HPCombi::epu8 const &a)
     
    std::string to_string (HPCombi::epu8 const &a)
     
    std::ostream & operator<< (std::ostream &stream, const HPCombi::Vect16 &ar)
     
    template<size_t Size, typename Expo >
    std::ostream & operator<< (std::ostream &stream, const HPCombi::VectGeneric< Size, Expo > &v)
     
    +

    Function Documentation

    + +

    ◆ operator<<() [1/4]

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    std::ostream& std::operator<< (std::ostream & os,
    HPCombi::BMat8 const & bm 
    )
    +
    +inline
    +
    + +
    +
    + +

    ◆ operator<<() [2/4]

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    std::ostream& std::operator<< (std::ostream & stream,
    const HPCombi::Vect16ar 
    )
    +
    +inline
    +
    + +
    +
    + +

    ◆ operator<<() [3/4]

    + +
    +
    +
    +template<size_t Size, typename Expo >
    + + + + + + + + + + + + + + + + + + +
    std::ostream& std::operator<< (std::ostream & stream,
    const HPCombi::VectGeneric< Size, Expo > & v 
    )
    +
    + +
    +
    + +

    ◆ operator<<() [4/4]

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    std::ostream & std::operator<< (std::ostream & stream,
    HPCombi::epu8 const & a 
    )
    +
    +inline
    +
    + +
    +
    + +

    ◆ to_string()

    + +
    +
    + + + + + +
    + + + + + + + + +
    std::string std::to_string (HPCombi::epu8 const & a)
    +
    +inline
    +
    + +
    +
    +
    + + + + diff --git a/docs/nav_f.png b/docs/nav_f.png new file mode 100644 index 00000000..72a58a52 Binary files /dev/null and b/docs/nav_f.png differ diff --git a/docs/nav_g.png b/docs/nav_g.png new file mode 100644 index 00000000..2093a237 Binary files /dev/null and b/docs/nav_g.png differ diff --git a/docs/nav_h.png b/docs/nav_h.png new file mode 100644 index 00000000..33389b10 Binary files /dev/null and b/docs/nav_h.png differ diff --git a/docs/open.png b/docs/open.png new file mode 100644 index 00000000..30f75c7e Binary files /dev/null and b/docs/open.png differ diff --git a/docs/pattern_8cpp.html b/docs/pattern_8cpp.html new file mode 100644 index 00000000..666296d5 --- /dev/null +++ b/docs/pattern_8cpp.html @@ -0,0 +1,329 @@ + + + + + + + +HPCombi: /home/florent/src/HPCombi/examples/pattern.cpp File Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    HPCombi +
    +
    High Performance Combinatorics in C++ using vector instructions v1.0.0
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    pattern.cpp File Reference
    +
    +
    +
    #include <array>
    +#include <cassert>
    +#include <cstdint>
    +#include <functional>
    +#include <iomanip>
    +#include <iostream>
    +#include <string>
    +#include <vector>
    +#include <unordered_map>
    +#include "simde/x86/sse4.1.h"
    +#include "hpcombi/perm16.hpp"
    +
    + + + + + + + + + + + + + + + + + + +

    +Functions

    template<typename T >
    std::ostream & operator<< (std::ostream &out, const std::vector< T > &v)
     
    epu8 tosubset (uint16_t n)
     
    epu8 subset_to_perm (epu8 s)
     
    void make_subsets_of_size (int n, int k)
     
    template<int Size>
    epu8 extract_pattern (epu8 perm, epu8 permset)
     
    template<int Size>
    bool has_pattern (epu8 perm, epu8 patt)
     
    int main ()
     
    + + + + + +

    +Variables

    std::vector< epu8subsets
     
    std::vector< epu8subperm
     
    +

    Function Documentation

    + +

    ◆ extract_pattern()

    + +
    +
    +
    +template<int Size>
    + + + + + + + + + + + + + + + + + + +
    epu8 extract_pattern (epu8 perm,
    epu8 permset 
    )
    +
    + +
    +
    + +

    ◆ has_pattern()

    + +
    +
    +
    +template<int Size>
    + + + + + + + + + + + + + + + + + + +
    bool has_pattern (epu8 perm,
    epu8 patt 
    )
    +
    + +
    +
    + +

    ◆ main()

    + +
    +
    + + + + + + + +
    int main ()
    +
    + +
    +
    + +

    ◆ make_subsets_of_size()

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    void make_subsets_of_size (int n,
    int k 
    )
    +
    + +
    +
    + +

    ◆ operator<<()

    + +
    +
    +
    +template<typename T >
    + + + + + + + + + + + + + + + + + + +
    std::ostream& operator<< (std::ostream & out,
    const std::vector< T > & v 
    )
    +
    + +
    +
    + +

    ◆ subset_to_perm()

    + +
    +
    + + + + + + + + +
    epu8 subset_to_perm (epu8 s)
    +
    + +
    +
    + +

    ◆ tosubset()

    + +
    +
    + + + + + + + + +
    epu8 tosubset (uint16_t n)
    +
    + +
    +
    +

    Variable Documentation

    + +

    ◆ subperm

    + +
    +
    + + + + +
    std::vector<epu8> subperm
    +
    + +
    +
    + +

    ◆ subsets

    + +
    +
    + + + + +
    std::vector<epu8> subsets
    +
    + +
    +
    +
    + + + + diff --git a/docs/perm16_8hpp.html b/docs/perm16_8hpp.html new file mode 100644 index 00000000..88bfe118 --- /dev/null +++ b/docs/perm16_8hpp.html @@ -0,0 +1,134 @@ + + + + + + + +HPCombi: /home/florent/src/HPCombi/include/hpcombi/perm16.hpp File Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    HPCombi +
    +
    High Performance Combinatorics in C++ using vector instructions v1.0.0
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    perm16.hpp File Reference
    +
    +
    +
    #include <cstddef>
    +#include <cstdint>
    +#include <initializer_list>
    +#include <memory>
    +#include <type_traits>
    +#include <vector>
    +#include "epu8.hpp"
    +#include "power.hpp"
    +#include "vect16.hpp"
    +#include "simde/x86/sse4.1.h"
    +#include "simde/x86/sse4.2.h"
    +#include "perm16_impl.hpp"
    +
    +

    Go to the source code of this file.

    + + + + + + + + + + + + + + + + + + + + + + +

    +Classes

    struct  HPCombi::PTransf16
     Partial transformation of \(\{0\dots 15\}\). More...
     
    struct  HPCombi::Transf16
     Full transformation of \(\{0\dots 15\}\). More...
     
    struct  HPCombi::PPerm16
     Partial permutation of \(\{0, \dots, 15\}\). More...
     
    struct  HPCombi::Perm16
     Permutations of \(\{0\dots 15\}\). More...
     
    struct  std::hash< HPCombi::PTransf16 >
     
    struct  std::hash< HPCombi::Transf16 >
     
    struct  std::hash< HPCombi::PPerm16 >
     
    struct  std::hash< HPCombi::Perm16 >
     
    + + + + + +

    +Namespaces

     HPCombi
     
     std
     
    +
    + + + + diff --git a/docs/perm16_8hpp_source.html b/docs/perm16_8hpp_source.html new file mode 100644 index 00000000..75b39231 --- /dev/null +++ b/docs/perm16_8hpp_source.html @@ -0,0 +1,425 @@ + + + + + + + +HPCombi: /home/florent/src/HPCombi/include/hpcombi/perm16.hpp Source File + + + + + + + + + + + +
    +
    + + + + + + +
    +
    HPCombi +
    +
    High Performance Combinatorics in C++ using vector instructions v1.0.0
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    perm16.hpp
    +
    +
    +Go to the documentation of this file.
    1 // Copyright (C) 2016 Florent Hivert <Florent.Hivert@lri.fr>, //
    +
    3 // //
    +
    4 // Distributed under the terms of the GNU General Public License (GPL) //
    +
    5 // //
    +
    6 // This code is distributed in the hope that it will be useful, //
    +
    7 // but WITHOUT ANY WARRANTY; without even the implied warranty of //
    +
    8 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU //
    +
    9 // General Public License for more details. //
    +
    10 // //
    +
    11 // The full text of the GPL is available at: //
    +
    12 // //
    +
    13 // http://www.gnu.org/licenses/ //
    +
    15 
    +
    16 #ifndef HPCOMBI_PERM16_HPP_
    +
    17 #define HPCOMBI_PERM16_HPP_
    +
    18 
    +
    19 #include <cstddef> // for size_t
    +
    20 #include <cstdint> // for uint8_t, uint64_t, uint32_t
    +
    21 #include <initializer_list> // for initializer_list
    +
    22 #include <memory> // for hash
    +
    23 #include <type_traits> // for is_trivial
    +
    24 #include <vector> // for vector
    +
    25 
    +
    26 #include "epu8.hpp" // for epu8, permuted, etc
    +
    27 #include "power.hpp" // for pow
    +
    28 #include "vect16.hpp" // for hash, is_partial_permutation
    +
    29 
    +
    30 #include "simde/x86/sse4.1.h"
    +
    31 #include "simde/x86/sse4.2.h"
    +
    32 
    +
    33 namespace HPCombi {
    +
    34 
    +
    35 // Forward declaration
    +
    36 struct Perm16;
    +
    37 struct PTransf16;
    +
    38 struct Transf16;
    +
    39 
    +
    43 struct alignas(16) PTransf16 : public Vect16 {
    +
    44  static constexpr size_t size() { return 16; }
    +
    45 
    + +
    47  using array = typename decltype(Epu8)::array;
    +
    48 
    +
    49  PTransf16() = default;
    +
    50 
    +
    51  constexpr PTransf16(const vect v) : Vect16(v) {}
    +
    52  constexpr PTransf16(const epu8 x) : Vect16(x) {}
    +
    53  PTransf16(std::vector<uint8_t> dom, std::vector<uint8_t> rng,
    +
    54  size_t = 0 /* unused */);
    +
    55  PTransf16(std::initializer_list<uint8_t> il);
    +
    56 
    +
    58  bool validate(size_t k = 16) const {
    + +
    60  }
    +
    61 
    +
    63  static constexpr PTransf16 one() { return Epu8.id(); }
    +
    65  PTransf16 operator*(const PTransf16 &p) const {
    +
    66  return HPCombi::permuted(v, p.v) | (p.v == Epu8(0xFF));
    +
    67  }
    +
    68 
    +
    70  epu8 image_mask_cmpestrm(bool complement = false) const;
    +
    72  epu8 image_mask_ref(bool complement = false) const;
    +
    73  epu8 image_mask(bool complement = false) const {
    +
    74 #ifdef SIMDE_X86_SSE4_2_NATIVE
    +
    75  return image_mask_cmpestrm(complement);
    +
    76 #else
    +
    77  return image_mask_ref(complement);
    +
    78 #endif
    +
    79  }
    +
    81  uint32_t image_bitset(bool complement = false) const;
    +
    83  epu8 domain_mask(bool complement = false) const;
    +
    85  uint32_t domain_bitset(bool complement = false) const;
    +
    86 
    +
    88  PTransf16 right_one() const;
    +
    90  PTransf16 left_one() const;
    +
    91 
    +
    93  uint32_t rank_ref() const;
    +
    95  uint32_t rank() const;
    +
    97  uint32_t rank_cmpestrm() const;
    +
    98 
    +
    100  epu8 fix_points_mask(bool complement = false) const;
    +
    102  uint32_t fix_points_bitset(bool complement = false) const;
    +
    104  uint8_t smallest_fix_point() const;
    +
    106  uint8_t smallest_moved_point() const;
    +
    108  uint8_t largest_fix_point() const;
    +
    110  uint8_t largest_moved_point() const;
    +
    112  uint8_t nb_fix_points() const;
    +
    113 };
    +
    114 
    +
    118 struct Transf16 : public PTransf16 {
    +
    119  Transf16() = default;
    +
    120  constexpr Transf16(const Transf16 &v) = default;
    +
    121  /* implicit */ constexpr Transf16(const vect v) : PTransf16(v) {} // NOLINT
    +
    122  /* implicit */ constexpr Transf16(const epu8 x) : PTransf16(x) {} // NOLINT
    +
    123  Transf16(std::initializer_list<uint8_t> il) : PTransf16(il) {}
    +
    124  Transf16 &operator=(const Transf16 &) = default;
    +
    125 
    +
    127  bool validate(size_t k = 16) const {
    +
    128  return HPCombi::is_transformation(v, k);
    +
    129  }
    +
    130 
    +
    132  static constexpr Transf16 one() { return Epu8.id(); }
    +
    134  Transf16 operator*(const Transf16 &p) const {
    +
    135  return HPCombi::permuted(v, p.v);
    +
    136  }
    +
    137 
    +
    139  explicit Transf16(uint64_t compressed);
    +
    141  explicit operator uint64_t() const;
    +
    142 };
    +
    143 
    +
    145 struct PPerm16 : public PTransf16 {
    +
    146  PPerm16() = default;
    +
    147  constexpr PPerm16(const PPerm16 &v) = default;
    +
    148  /* implicit */ constexpr PPerm16(const vect v) : PTransf16(v) {} // NOLINT
    +
    149  /* implicit */ constexpr PPerm16(const epu8 x) : PTransf16(x) {} // NOLINT
    +
    150  PPerm16(std::vector<uint8_t> dom, std::vector<uint8_t> rng,
    +
    151  size_t = 0 /* unused */)
    +
    152  : PTransf16(dom, rng) {}
    +
    153  PPerm16(std::initializer_list<uint8_t> il) : PTransf16(il) {}
    +
    154  PPerm16 &operator=(const PPerm16 &) = default;
    +
    155 
    +
    157  bool validate(size_t k = 16) const {
    + +
    159  }
    +
    160 
    +
    162  static constexpr PPerm16 one() { return Epu8.id(); }
    +
    164  PPerm16 operator*(const PPerm16 &p) const {
    +
    165  return this->PTransf16::operator*(p);
    +
    166  }
    +
    167 
    +
    187  PPerm16 inverse_ref() const;
    +
    188 #ifdef SIMDE_X86_SSE4_2_NATIVE
    +
    194  PPerm16 inverse_find() const;
    +
    195 #endif
    +
    196 
    +
    197  PPerm16 right_one() const { return PTransf16::right_one(); }
    +
    198  PPerm16 left_one() const { return PTransf16::left_one(); }
    +
    199 };
    +
    200 
    +
    204 struct Perm16 : public Transf16 /* public PPerm : diamond problem */ {
    +
    205  Perm16() = default;
    +
    206  constexpr Perm16(const Perm16 &) = default;
    +
    207  /* implicit */ constexpr Perm16(const vect v) : Transf16(v) {} // NOLINT
    +
    208  /* implicit */ constexpr Perm16(const epu8 x) : Transf16(x) {} // NOLINT
    +
    209  Perm16 &operator=(const Perm16 &) = default;
    +
    210  Perm16(std::initializer_list<uint8_t> il) : Transf16(il) {}
    +
    211 
    +
    213  bool validate(size_t k = 16) const { return HPCombi::is_permutation(v, k); }
    +
    214 
    +
    215  // It's not possible to have a static constexpr member of same type as class
    +
    216  // being defined (see https://stackoverflow.com/questions/11928089/)
    +
    217  // therefore we chose to have functions.
    +
    219  static constexpr Perm16 one() { return Epu8.id(); }
    +
    221  Perm16 operator*(const Perm16 &p) const {
    +
    222  return HPCombi::permuted(v, p.v);
    +
    223  }
    +
    224 
    +
    226  explicit Perm16(uint64_t compressed) : Transf16(compressed) {}
    +
    227 
    +
    244  Perm16 inverse_ref() const;
    +
    249  Perm16 inverse_arr() const;
    +
    256  Perm16 inverse_sort() const;
    +
    262  Perm16 inverse_find() const { return permutation_of(v, one()); }
    +
    269  Perm16 inverse_pow() const;
    +
    275  Perm16 inverse_cycl() const;
    +
    279  Perm16 inverse() const { return inverse_cycl(); }
    +
    280 
    +
    282  static Perm16 elementary_transposition(uint64_t i);
    +
    284  static Perm16 random(uint64_t n = 16);
    +
    288  static Perm16 unrankSJT(int n, int r);
    +
    289 
    +
    306  epu8 lehmer_ref() const;
    +
    311  epu8 lehmer_arr() const;
    +
    316  epu8 lehmer() const;
    +
    317 
    +
    333  uint8_t length_ref() const;
    +
    339  uint8_t length_arr() const;
    +
    344  uint8_t length() const;
    +
    345 
    +
    361  uint8_t nb_descents_ref() const;
    +
    366  uint8_t nb_descents() const;
    +
    367 
    +
    382  epu8 cycles_partition() const;
    +
    383 
    +
    399  uint8_t nb_cycles_ref() const;
    +
    404  uint8_t nb_cycles_unroll() const;
    +
    408  uint8_t nb_cycles() const { return nb_cycles_unroll(); }
    +
    409 
    +
    423  bool left_weak_leq_ref(Perm16 other) const;
    +
    428  bool left_weak_leq_length(Perm16 other) const;
    +
    433  bool left_weak_leq(Perm16 other) const;
    +
    434 };
    +
    435 
    +
    439 
    +
    440 static_assert(sizeof(epu8) == sizeof(Perm16),
    +
    441  "epu8 and Perm16 have a different memory layout !");
    +
    442 static_assert(std::is_trivial<epu8>(), "epu8 is not a trivial class !");
    +
    443 static_assert(std::is_trivial<Perm16>(), "Perm16 is not a trivial class !");
    +
    444 
    +
    445 } // namespace HPCombi
    +
    446 
    +
    447 #include "perm16_impl.hpp"
    +
    448 
    +
    449 namespace std {
    +
    450 
    +
    451 template <> struct hash<HPCombi::PTransf16> {
    +
    453  size_t operator()(const HPCombi::PTransf16 &ar) const {
    +
    454  return std::hash<HPCombi::epu8>{}(ar.v);
    +
    455  }
    +
    456 };
    +
    457 
    +
    458 template <> struct hash<HPCombi::Transf16> {
    +
    460  size_t operator()(const HPCombi::Transf16 &ar) const {
    +
    461  return uint64_t(ar);
    +
    462  }
    +
    463 };
    +
    464 
    +
    465 template <> struct hash<HPCombi::PPerm16> {
    +
    467  size_t operator()(const HPCombi::PPerm16 &ar) const {
    +
    468  return std::hash<HPCombi::epu8>{}(ar.v);
    +
    469  }
    +
    470 };
    +
    471 
    +
    472 template <> struct hash<HPCombi::Perm16> {
    +
    474  size_t operator()(const HPCombi::Perm16 &ar) const { return uint64_t(ar); }
    +
    475 };
    +
    476 
    +
    477 } // namespace std
    +
    478 
    +
    479 #endif // HPCOMBI_PERM16_HPP_
    + +
    Perm16 Perm16
    Definition: perm16_impl.hpp:236
    +
    Definition: bmat8.hpp:37
    +
    epu8 permuted(epu8 a, epu8 b) noexcept
    Permuting a HPCombi::epu8.
    Definition: epu8.hpp:68
    +
    epu8 permutation_of(epu8 a, epu8 b) noexcept
    Find if a vector is a permutation of one other.
    Definition: epu8_impl.hpp:299
    +
    bool is_permutation(epu8 v, const size_t k=16) noexcept
    Definition: epu8_impl.hpp:526
    +
    bool is_partial_permutation(epu8 v, const size_t k=16) noexcept
    Test for partial permutations.
    Definition: epu8_impl.hpp:495
    +
    constexpr TPUBuild< epu8 > Epu8
    Factory object acting as a class constructor for type HPCombi::epu8.
    Definition: epu8.hpp:49
    +
    uint8_t __attribute__((vector_size(16))) epu8
    SIMD vector of 16 unsigned bytes.
    Definition: epu8.hpp:41
    +
    bool is_transformation(epu8 v, const size_t k=16) noexcept
    Test for transformation.
    Definition: epu8_impl.hpp:489
    +
    bool is_partial_transformation(epu8 v, const size_t k=16) noexcept
    Test for partial transformation.
    Definition: epu8_impl.hpp:481
    +
    Definition: bmat8.hpp:360
    + +
    Generic compile time power.
    +
    Partial permutation of .
    Definition: perm16.hpp:145
    +
    PPerm16 right_one() const
    Definition: perm16.hpp:197
    +
    PPerm16 inverse_ref() const
    The inverse of a partial permutation.
    Definition: perm16_impl.hpp:142
    +
    PPerm16 operator*(const PPerm16 &p) const
    The product of two partial perrmutations.
    Definition: perm16.hpp:164
    +
    PPerm16()=default
    +
    PPerm16 & operator=(const PPerm16 &)=default
    +
    constexpr PPerm16(const PPerm16 &v)=default
    +
    constexpr PPerm16(const vect v)
    Definition: perm16.hpp:148
    +
    PPerm16(std::vector< uint8_t > dom, std::vector< uint8_t > rng, size_t=0)
    Definition: perm16.hpp:150
    +
    static constexpr PPerm16 one()
    The identity partial permutations.
    Definition: perm16.hpp:162
    +
    PPerm16 left_one() const
    Definition: perm16.hpp:198
    +
    PPerm16(std::initializer_list< uint8_t > il)
    Definition: perm16.hpp:153
    +
    bool validate(size_t k=16) const
    Return whether *this is a well constructed object.
    Definition: perm16.hpp:157
    +
    constexpr PPerm16(const epu8 x)
    Definition: perm16.hpp:149
    +
    Partial transformation of .
    Definition: perm16.hpp:43
    +
    uint8_t nb_fix_points() const
    Returns the number of fix points of *this.
    Definition: perm16_impl.hpp:117
    +
    constexpr PTransf16(const epu8 x)
    Definition: perm16.hpp:52
    +
    constexpr PTransf16(const vect v)
    Definition: perm16.hpp:51
    +
    uint32_t fix_points_bitset(bool complement=false) const
    Returns a bit mask for the fix point of *this.
    Definition: perm16_impl.hpp:95
    +
    static constexpr size_t size()
    Definition: perm16.hpp:44
    +
    PTransf16 operator*(const PTransf16 &p) const
    The product of two partial transformations.
    Definition: perm16.hpp:65
    +
    static constexpr PTransf16 one()
    The identity partial transformation.
    Definition: perm16.hpp:63
    +
    uint8_t largest_moved_point() const
    Returns the largest non fix point of *this.
    Definition: perm16_impl.hpp:112
    +
    uint32_t domain_bitset(bool complement=false) const
    Returns a bit mask for the domain of *this.
    Definition: perm16_impl.hpp:44
    +
    PTransf16 left_one() const
    Returns the partial left identity for *this.
    Definition: perm16_impl.hpp:68
    +
    typename decltype(Epu8)::array array
    Definition: perm16.hpp:47
    +
    uint32_t rank_ref() const
    Returns the size of the image of *this.
    Definition: perm16_impl.hpp:71
    +
    PTransf16 right_one() const
    Returns the partial right identity for *this.
    Definition: perm16_impl.hpp:47
    +
    uint32_t image_bitset(bool complement=false) const
    Returns a bit mask for the image of *this.
    Definition: perm16_impl.hpp:65
    +
    epu8 fix_points_mask(bool complement=false) const
    Returns a mask for the fix point of *this.
    Definition: perm16_impl.hpp:92
    +
    uint8_t smallest_fix_point() const
    Returns the smallest fix point of *this.
    Definition: perm16_impl.hpp:99
    + +
    uint32_t rank_cmpestrm() const
    Returns the size of the image of *this.
    Definition: perm16_impl.hpp:80
    +
    epu8 domain_mask(bool complement=false) const
    Returns a mask for the domain of *this.
    Definition: perm16_impl.hpp:41
    +
    uint32_t rank() const
    Returns the size of the image of *this.
    Definition: perm16_impl.hpp:84
    +
    epu8 image_mask_ref(bool complement=false) const
    Returns a mask for the image of *this.
    Definition: perm16_impl.hpp:57
    +
    bool validate(size_t k=16) const
    Return whether *this is a well constructed object.
    Definition: perm16.hpp:58
    +
    uint8_t largest_fix_point() const
    Returns the largest fix point of *this.
    Definition: perm16_impl.hpp:107
    +
    epu8 image_mask(bool complement=false) const
    Definition: perm16.hpp:73
    +
    epu8 image_mask_cmpestrm(bool complement=false) const
    Returns a mask for the image of *this.
    +
    uint8_t smallest_moved_point() const
    Returns the smallest non fix point of *this.
    Definition: perm16_impl.hpp:103
    +
    Permutations of .
    Definition: perm16.hpp:204
    +
    Perm16 inverse_cycl() const
    The inverse permutation.
    Definition: perm16_impl.hpp:245
    +
    Perm16 inverse() const
    The inverse permutation.
    Definition: perm16.hpp:279
    +
    epu8 lehmer() const
    The Lehmer code of a permutation.
    Definition: perm16_impl.hpp:286
    +
    uint8_t length_ref() const
    The Coxeter length (ie: number of inversion) of a permutation.
    Definition: perm16_impl.hpp:295
    +
    epu8 cycles_partition() const
    The set partition of the cycles of a permutation.
    Definition: perm16_impl.hpp:340
    +
    bool left_weak_leq_ref(Perm16 other) const
    Compare two permutations for the left weak order.
    Definition: perm16_impl.hpp:358
    +
    uint8_t nb_descents_ref() const
    The number of descent of a permutation.
    Definition: perm16_impl.hpp:316
    +
    Perm16(uint64_t compressed)
    Construct a permutations from its 64 bits compressed.
    Definition: perm16.hpp:226
    +
    Perm16 inverse_sort() const
    The inverse permutation.
    Definition: perm16_impl.hpp:221
    +
    Perm16 operator*(const Perm16 &p) const
    The product of two permutations.
    Definition: perm16.hpp:221
    +
    Perm16(std::initializer_list< uint8_t > il)
    Definition: perm16.hpp:210
    +
    constexpr Perm16(const epu8 x)
    Definition: perm16.hpp:208
    +
    Perm16 inverse_find() const
    The inverse permutation.
    Definition: perm16.hpp:262
    +
    static constexpr Perm16 one()
    The identity partial permutation.
    Definition: perm16.hpp:219
    +
    epu8 lehmer_ref() const
    The Lehmer code of a permutation.
    Definition: perm16_impl.hpp:267
    +
    bool left_weak_leq_length(Perm16 other) const
    Compare two permutations for the left weak order.
    Definition: perm16_impl.hpp:381
    +
    uint8_t length() const
    The Coxeter length (ie: number of inversion) of a permutation.
    Definition: perm16_impl.hpp:314
    +
    constexpr Perm16(const Perm16 &)=default
    +
    constexpr Perm16(const vect v)
    Definition: perm16.hpp:207
    +
    Perm16 inverse_ref() const
    The inverse permutation.
    Definition: perm16_impl.hpp:205
    +
    Perm16 & operator=(const Perm16 &)=default
    +
    uint8_t nb_descents() const
    The number of descent of a permutation.
    Definition: perm16_impl.hpp:323
    +
    uint8_t nb_cycles() const
    The number of cycles of a permutation.
    Definition: perm16.hpp:408
    +
    uint8_t nb_cycles_ref() const
    The number of cycles of a permutation.
    Definition: perm16_impl.hpp:327
    +
    bool validate(size_t k=16) const
    Return whether *this is a well constructed object.
    Definition: perm16.hpp:213
    +
    static Perm16 elementary_transposition(uint64_t i)
    The elementary transposition exchanging and .
    Definition: perm16_impl.hpp:197
    +
    epu8 lehmer_arr() const
    The Lehmer code of a permutation.
    Definition: perm16_impl.hpp:276
    +
    static Perm16 unrankSJT(int n, int r)
    The r -th permutation of size n for the Steinhaus–Johnson–Trotter order.
    Definition: perm16_impl.hpp:169
    +
    bool left_weak_leq(Perm16 other) const
    Compare two permutations for the left weak order.
    Definition: perm16_impl.hpp:368
    +
    uint8_t nb_cycles_unroll() const
    The number of cycles of a permutation.
    Definition: perm16_impl.hpp:353
    +
    Perm16()=default
    +
    Perm16 inverse_pow() const
    The inverse permutation.
    Definition: perm16_impl.hpp:263
    +
    uint8_t length_arr() const
    The Coxeter length (ie: number of inversion) of a permutation.
    Definition: perm16_impl.hpp:304
    +
    Perm16 inverse_arr() const
    The inverse permutation.
    Definition: perm16_impl.hpp:212
    +
    static Perm16 random(uint64_t n=16)
    A random permutation of size .
    Definition: perm16_impl.hpp:157
    +
    Full transformation of .
    Definition: perm16.hpp:118
    +
    Transf16 operator*(const Transf16 &p) const
    The product of two transformations.
    Definition: perm16.hpp:134
    +
    constexpr Transf16(const vect v)
    Definition: perm16.hpp:121
    +
    Transf16(std::initializer_list< uint8_t > il)
    Definition: perm16.hpp:123
    +
    constexpr Transf16(const epu8 x)
    Definition: perm16.hpp:122
    +
    Transf16()=default
    +
    bool validate(size_t k=16) const
    Return whether *this is a well constructed object.
    Definition: perm16.hpp:127
    +
    Transf16 & operator=(const Transf16 &)=default
    +
    static constexpr Transf16 one()
    The identity transformation.
    Definition: perm16.hpp:132
    +
    constexpr Transf16(const Transf16 &v)=default
    +
    Definition: vect16.hpp:30
    +
    epu8 v
    Definition: vect16.hpp:33
    +
    size_t operator()(const HPCombi::PPerm16 &ar) const
    A hash operator for HPCombi::PPerm16.
    Definition: perm16.hpp:467
    +
    size_t operator()(const HPCombi::PTransf16 &ar) const
    A hash operator for HPCombi::PTransf16.
    Definition: perm16.hpp:453
    +
    size_t operator()(const HPCombi::Perm16 &ar) const
    A hash operator for HPCombi::Perm16.
    Definition: perm16.hpp:474
    +
    size_t operator()(const HPCombi::Transf16 &ar) const
    A hash operator for HPCombi::Transf16.
    Definition: perm16.hpp:460
    +
    Definition: epu8_impl.hpp:566
    + +
    + + + + diff --git a/docs/perm16__impl_8hpp.html b/docs/perm16__impl_8hpp.html new file mode 100644 index 00000000..4a3f7ab7 --- /dev/null +++ b/docs/perm16__impl_8hpp.html @@ -0,0 +1,110 @@ + + + + + + + +HPCombi: /home/florent/src/HPCombi/include/hpcombi/perm16_impl.hpp File Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    HPCombi +
    +
    High Performance Combinatorics in C++ using vector instructions v1.0.0
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    perm16_impl.hpp File Reference
    +
    +
    + +

    Go to the source code of this file.

    + + + + +

    +Classes

    struct  HPCombi::power_helper::Monoid< Perm16 >
     
    + + + + + +

    +Namespaces

     HPCombi
     
     HPCombi::power_helper
     
    + + + +

    +Typedefs

    using HPCombi::power_helper::Perm16 = Perm16
     
    +
    + + + + diff --git a/docs/perm16__impl_8hpp_source.html b/docs/perm16__impl_8hpp_source.html new file mode 100644 index 00000000..3e3e2949 --- /dev/null +++ b/docs/perm16__impl_8hpp_source.html @@ -0,0 +1,537 @@ + + + + + + + +HPCombi: /home/florent/src/HPCombi/include/hpcombi/perm16_impl.hpp Source File + + + + + + + + + + + +
    +
    + + + + + + +
    +
    HPCombi +
    +
    High Performance Combinatorics in C++ using vector instructions v1.0.0
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    perm16_impl.hpp
    +
    +
    +Go to the documentation of this file.
    1 // Copyright (C) 2016 Florent Hivert <Florent.Hivert@lri.fr>, //
    +
    3 // //
    +
    4 // Distributed under the terms of the GNU General Public License (GPL) //
    +
    5 // //
    +
    6 // This code is distributed in the hope that it will be useful, //
    +
    7 // but WITHOUT ANY WARRANTY; without even the implied warranty of //
    +
    8 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU //
    +
    9 // General Public License for more details. //
    +
    10 // //
    +
    11 // The full text of the GPL is available at: //
    +
    12 // //
    +
    13 // http://www.gnu.org/licenses/ //
    +
    15 
    +
    16 // NOLINT(build/header_guard)
    +
    17 
    +
    18 namespace HPCombi {
    +
    19 
    +
    21 // Implementation part for inline functions //////////////////////////////////
    +
    23 
    +
    24 inline PTransf16::PTransf16(std::initializer_list<uint8_t> il)
    +
    25  : Vect16(Epu8.id()) {
    +
    26  HPCOMBI_ASSERT(il.size() <= 16);
    +
    27  std::copy(il.begin(), il.end(), HPCombi::as_array(v).begin());
    +
    28 }
    +
    29 
    +
    30 inline PTransf16::PTransf16(std::vector<uint8_t> dom, std::vector<uint8_t> rng,
    +
    31  size_t /*unused */)
    +
    32  : Vect16(Epu8(0xFF)) {
    +
    33  HPCOMBI_ASSERT(dom.size() == rng.size());
    +
    34  HPCOMBI_ASSERT(dom.size() <= 16);
    +
    35  for (size_t i = 0; i < dom.size(); ++i) {
    +
    36  HPCOMBI_ASSERT(dom[i] < 16);
    +
    37  v[dom[i]] = rng[i];
    +
    38  }
    +
    39 }
    +
    40 
    +
    41 inline epu8 PTransf16::domain_mask(bool complement) const {
    +
    42  return complement ? v == Epu8(0xFF) : v != Epu8(0xFF);
    +
    43 }
    +
    44 inline uint32_t PTransf16::domain_bitset(bool complement) const {
    +
    45  return simde_mm_movemask_epi8(domain_mask(complement));
    +
    46 }
    + +
    48  return domain_mask(true) | Epu8.id();
    +
    49 }
    +
    50 
    +
    51 #ifdef SIMDE_X86_SSE4_2_NATIVE
    +
    52 inline epu8 PTransf16::image_mask_cmpestrm(bool complement) const {
    +
    53  return complement ? _mm_cmpestrm(v, 16, one().v, 16, FIND_IN_VECT)
    +
    54  : _mm_cmpestrm(v, 16, one().v, 16, FIND_IN_VECT_COMPL);
    +
    55 }
    +
    56 #endif
    +
    57 inline epu8 PTransf16::image_mask_ref(bool complement) const {
    +
    58  epu8 res{};
    +
    59  for (auto x : *this)
    +
    60  if (x != 0xFF)
    +
    61  res[x] = 0xFF;
    +
    62  return complement ? static_cast<epu8>(!res) : res;
    +
    63 }
    +
    64 
    +
    65 inline uint32_t PTransf16::image_bitset(bool complement) const {
    +
    66  return simde_mm_movemask_epi8(image_mask(complement));
    +
    67 }
    + +
    69  return image_mask(true) | Epu8.id();
    +
    70 }
    +
    71 inline uint32_t PTransf16::rank_ref() const {
    +
    72  decltype(Epu8)::array tmp{};
    +
    73  static_assert(decltype(Epu8)::size == 16, "Wrong size of EPU8 array");
    +
    74  for (auto x : *this)
    +
    75  if (x != 0xFF)
    +
    76  tmp[x] = 1;
    +
    77  return std::accumulate(tmp.begin(), tmp.end(), uint8_t(0));
    +
    78 }
    +
    79 
    +
    80 inline uint32_t PTransf16::rank_cmpestrm() const {
    +
    81  return __builtin_popcountl(image_bitset());
    +
    82 }
    +
    83 
    +
    84 inline uint32_t PTransf16::rank() const {
    +
    85 #ifdef SIMDE_X86_SSE4_2_NATIVE
    +
    86  return rank_cmpestrm();
    +
    87 #else
    +
    88  return rank_ref();
    +
    89 #endif
    +
    90 }
    +
    91 
    +
    92 inline epu8 PTransf16::fix_points_mask(bool complement) const {
    +
    93  return complement ? v != one().v : v == one().v;
    +
    94 }
    +
    95 inline uint32_t PTransf16::fix_points_bitset(bool complement) const {
    +
    96  return simde_mm_movemask_epi8(fix_points_mask(complement));
    +
    97 }
    +
    98 
    +
    99 inline uint8_t PTransf16::smallest_fix_point() const {
    +
    100  return __builtin_ffs(fix_points_bitset(false)) - 1;
    +
    101 }
    +
    103 inline uint8_t PTransf16::smallest_moved_point() const {
    +
    104  return __builtin_ffs(fix_points_bitset(true)) - 1;
    +
    105 }
    +
    107 inline uint8_t PTransf16::largest_fix_point() const {
    +
    108  uint32_t res = fix_points_bitset(false);
    +
    109  return res == 0 ? 0xFF : 31 - __builtin_clz(res);
    +
    110 }
    +
    112 inline uint8_t PTransf16::largest_moved_point() const {
    +
    113  uint32_t res = fix_points_bitset(true);
    +
    114  return res == 0 ? 0xFF : 31 - __builtin_clz(res);
    +
    115 }
    +
    117 inline uint8_t PTransf16::nb_fix_points() const {
    +
    118  return __builtin_popcountl(fix_points_bitset());
    +
    119 }
    +
    120 
    +
    121 inline static constexpr uint8_t hilo_exchng_fun(uint8_t i) {
    +
    122  return i < 8 ? i + 8 : i - 8;
    +
    123 }
    +
    124 static constexpr epu8 hilo_exchng = Epu8(hilo_exchng_fun);
    +
    125 inline static constexpr uint8_t hilo_mask_fun(uint8_t i) {
    +
    126  return i < 8 ? 0x0 : 0xFF;
    +
    127 }
    +
    128 static constexpr epu8 hilo_mask = Epu8(hilo_mask_fun);
    +
    129 
    +
    130 inline Transf16::Transf16(uint64_t compressed) {
    +
    131  epu8 res = simde_mm_set_epi64x(compressed, compressed);
    +
    132  v = simde_mm_blendv_epi8(res & Epu8(0x0F), res >> 4, hilo_mask);
    +
    133 }
    +
    134 
    +
    135 inline Transf16::operator uint64_t() const {
    +
    136  epu8 res =
    +
    137  static_cast<epu8>(simde_mm_slli_epi32(static_cast<simde__m128i>(v), 4));
    +
    138  res = HPCombi::permuted(res, hilo_exchng) + v;
    +
    139  return simde_mm_extract_epi64(res, 0);
    +
    140 }
    +
    141 
    + +
    143  epu8 res = Epu8(0xFF);
    +
    144  for (size_t i = 0; i < 16; ++i)
    +
    145  if (v[i] < 16)
    +
    146  res[v[i]] = i;
    +
    147  return res;
    +
    148 }
    +
    149 
    +
    150 #ifdef SIMDE_X86_SSE4_2_NATIVE
    +
    151 inline PPerm16 PPerm16::inverse_find() const {
    +
    152  epu8 mask = _mm_cmpestrm(v, 16, one(), 16, FIND_IN_VECT);
    +
    153  return permutation_of(v, one()) | mask;
    +
    154 }
    +
    155 #endif
    +
    156 
    +
    157 inline Perm16 Perm16::random(uint64_t n) {
    +
    158  static std::random_device rd;
    +
    159  static std::mt19937 g(rd());
    +
    160 
    +
    161  Perm16 res = one();
    +
    162  auto ar = res.as_array();
    +
    163 
    +
    164  std::shuffle(ar.begin(), ar.begin() + n, g);
    +
    165  return res;
    +
    166 }
    +
    167 
    +
    168 // From Ruskey : Combinatorial Generation page 138
    +
    169 inline Perm16 Perm16::unrankSJT(int n, int r) {
    +
    170  int j;
    +
    171  std::array<int, 16> dir;
    +
    172  epu8 res{};
    +
    173  for (j = 0; j < n; ++j)
    +
    174  res[j] = 0xFF;
    +
    175  for (j = n - 1; j >= 0; --j) {
    +
    176  int k, rem, c;
    +
    177  rem = r % (j + 1);
    +
    178  r = r / (j + 1);
    +
    179  if ((r & 1) != 0) {
    +
    180  k = -1;
    +
    181  dir[j] = +1;
    +
    182  } else {
    +
    183  k = n;
    +
    184  dir[j] = -1;
    +
    185  }
    +
    186  c = -1;
    +
    187  do {
    +
    188  k = k + dir[j];
    +
    189  if (res[k] == 0xFF)
    +
    190  ++c;
    +
    191  } while (c < rem);
    +
    192  res[k] = j;
    +
    193  }
    +
    194  return res;
    +
    195 }
    +
    196 
    + +
    198  HPCOMBI_ASSERT(i < 16);
    +
    199  epu8 res = one();
    +
    200  res[i] = i + 1;
    +
    201  res[i + 1] = i;
    +
    202  return res;
    +
    203 }
    +
    204 
    +
    205 inline Perm16 Perm16::inverse_ref() const {
    +
    206  epu8 res;
    +
    207  for (size_t i = 0; i < 16; ++i)
    +
    208  res[v[i]] = i;
    +
    209  return res;
    +
    210 }
    +
    211 
    +
    212 inline Perm16 Perm16::inverse_arr() const {
    +
    213  epu8 res;
    +
    214  auto &arres = HPCombi::as_array(res);
    +
    215  auto self = as_array();
    +
    216  for (size_t i = 0; i < 16; ++i)
    +
    217  arres[self[i]] = i;
    +
    218  return res;
    +
    219 }
    +
    220 
    +
    221 inline Perm16 Perm16::inverse_sort() const {
    +
    222  // G++-7 compile this shift by 3 additions.
    +
    223  // epu8 res = (v << 4) + one().v;
    +
    224  // I call directly the shift intrinsic
    +
    225  epu8 res = static_cast<epu8>(
    +
    226  simde_mm_slli_epi32(static_cast<simde__m128i>(v), 4)) +
    +
    227  one().v;
    +
    228  res = sorted(res) & Epu8(0x0F);
    +
    229  return res;
    +
    230 }
    +
    231 
    +
    232 // We declare PERM16 as a correct Monoid
    +
    233 namespace power_helper {
    +
    234 
    +
    235 // TODO required?
    +
    236 using Perm16 = Perm16;
    +
    237 
    +
    238 template <> struct Monoid<Perm16> {
    +
    239  static const Perm16 one() { return Perm16::one(); }
    +
    240  static Perm16 prod(Perm16 a, Perm16 b) { return a * b; }
    +
    241 };
    +
    242 
    +
    243 } // namespace power_helper
    +
    244 
    +
    245 inline Perm16 Perm16::inverse_cycl() const {
    +
    246  Perm16 res = one();
    +
    247  Perm16 newpow = pow<8>(*this);
    +
    248  for (int i = 9; i <= 16; i++) {
    +
    249  Perm16 oldpow = newpow;
    +
    250  newpow = oldpow * *this;
    +
    251  res.v = simde_mm_blendv_epi8(res, oldpow, newpow.v == one().v);
    +
    252  }
    +
    253  return res;
    +
    254 }
    +
    255 
    +
    256 static constexpr uint32_t lcm_range(uint8_t n) {
    +
    257  uint32_t res = 1;
    +
    258  for (uint8_t i = 1; i <= n; ++i)
    +
    259  res = std::lcm(res, i);
    +
    260  return res;
    +
    261 }
    +
    262 
    +
    263 inline Perm16 Perm16::inverse_pow() const {
    +
    264  return pow<lcm_range(16) - 1>(*this);
    +
    265 }
    +
    266 
    +
    267 inline epu8 Perm16::lehmer_ref() const {
    +
    268  epu8 res{};
    +
    269  for (size_t i = 0; i < 16; i++)
    +
    270  for (size_t j = i + 1; j < 16; j++)
    +
    271  if (v[i] > v[j])
    +
    272  res[i]++;
    +
    273  return res;
    +
    274 }
    +
    275 
    +
    276 inline epu8 Perm16::lehmer_arr() const {
    +
    277  decltype(Epu8)::array res{};
    +
    278  decltype(Epu8)::array ar = as_array();
    +
    279  for (size_t i = 0; i < 16; i++)
    +
    280  for (size_t j = i + 1; j < 16; j++)
    +
    281  if (ar[i] > ar[j])
    +
    282  res[i]++;
    +
    283  return Epu8(res);
    +
    284 }
    +
    285 
    +
    286 inline epu8 Perm16::lehmer() const {
    +
    287  epu8 vsh = v, res = -one().v;
    +
    288  for (int i = 1; i < 16; i++) {
    +
    289  vsh = shifted_left(vsh);
    +
    290  res -= (v >= vsh);
    +
    291  }
    +
    292  return res;
    +
    293 }
    +
    294 
    +
    295 inline uint8_t Perm16::length_ref() const {
    +
    296  uint8_t res = 0;
    +
    297  for (size_t i = 0; i < 16; i++)
    +
    298  for (size_t j = i + 1; j < 16; j++)
    +
    299  if (v[i] > v[j])
    +
    300  res++;
    +
    301  return res;
    +
    302 }
    +
    303 
    +
    304 inline uint8_t Perm16::length_arr() const {
    +
    305  uint8_t res = 0;
    +
    306  decltype(Epu8)::array ar = as_array();
    +
    307  for (size_t i = 0; i < 16; i++)
    +
    308  for (size_t j = i + 1; j < 16; j++)
    +
    309  if (ar[i] > ar[j])
    +
    310  res++;
    +
    311  return res;
    +
    312 }
    +
    313 
    +
    314 inline uint8_t Perm16::length() const { return horiz_sum(lehmer()); }
    +
    315 
    +
    316 inline uint8_t Perm16::nb_descents_ref() const {
    +
    317  uint8_t res = 0;
    +
    318  for (size_t i = 0; i < 16 - 1; i++)
    +
    319  if (v[i] > v[i + 1])
    +
    320  res++;
    +
    321  return res;
    +
    322 }
    +
    323 inline uint8_t Perm16::nb_descents() const {
    +
    324  return __builtin_popcountl(simde_mm_movemask_epi8(v < shifted_right(v)));
    +
    325 }
    +
    326 
    +
    327 inline uint8_t Perm16::nb_cycles_ref() const {
    +
    328  std::array<bool, 16> b{};
    +
    329  uint8_t c = 0;
    +
    330  for (size_t i = 0; i < 16; i++) {
    +
    331  if (!b[i]) {
    +
    332  for (size_t j = i; !b[j]; j = v[j])
    +
    333  b[j] = true;
    +
    334  c++;
    +
    335  }
    +
    336  }
    +
    337  return c;
    +
    338 }
    +
    339 
    + +
    341  epu8 x0, x1 = one();
    +
    342  Perm16 p = *this;
    +
    343  x0 = simde_mm_min_epi8(x1, HPCombi::permuted(x1, p));
    +
    344  p = p * p;
    +
    345  x1 = simde_mm_min_epi8(x0, HPCombi::permuted(x0, p));
    +
    346  p = p * p;
    +
    347  x0 = simde_mm_min_epi8(x1, HPCombi::permuted(x1, p));
    +
    348  p = p * p;
    +
    349  x1 = simde_mm_min_epi8(x0, HPCombi::permuted(x0, p));
    +
    350  return x1;
    +
    351 }
    +
    352 
    +
    353 inline uint8_t Perm16::nb_cycles_unroll() const {
    +
    354  epu8 res = (Epu8.id() == cycles_partition());
    +
    355  return __builtin_popcountl(simde_mm_movemask_epi8(res));
    +
    356 }
    +
    357 
    +
    358 inline bool Perm16::left_weak_leq_ref(Perm16 other) const {
    +
    359  for (size_t i = 0; i < 16; i++) {
    +
    360  for (size_t j = i + 1; j < 16; j++) {
    +
    361  if ((v[i] > v[j]) && (other[i] < other[j]))
    +
    362  return false;
    +
    363  }
    +
    364  }
    +
    365  return true;
    +
    366 }
    +
    367 
    +
    368 inline bool Perm16::left_weak_leq(Perm16 other) const {
    +
    369  epu8 srot = v, orot = other;
    +
    370  for (size_t i = 0; i < 15; i++) {
    +
    371  srot = shifted_right(srot);
    +
    372  orot = shifted_right(orot);
    +
    373  uint64_t sinv = simde_mm_movemask_epi8(v < srot);
    +
    374  uint64_t oinv = simde_mm_movemask_epi8(other.v < orot);
    +
    375  if ((sinv & oinv) != sinv)
    +
    376  return false;
    +
    377  }
    +
    378  return true;
    +
    379 }
    +
    380 
    +
    381 inline bool Perm16::left_weak_leq_length(Perm16 other) const {
    +
    382  Perm16 prod = *this * other.inverse();
    +
    383  return other.length() == length() + prod.length();
    +
    384 }
    +
    385 
    +
    386 } // namespace HPCombi
    +
    const PTransf16 id
    Definition: RD.cpp:33
    +
    #define HPCOMBI_ASSERT(x)
    Definition: debug.hpp:23
    +
    std::array< std::tuple< uint16_t, uint16_t, std::array< uint16_t, gens.size()> >, 65536 > res
    Definition: image.cpp:62
    +
    Perm16 Perm16
    Definition: perm16_impl.hpp:236
    +
    Definition: bmat8.hpp:37
    +
    epu8 permuted(epu8 a, epu8 b) noexcept
    Permuting a HPCombi::epu8.
    Definition: epu8.hpp:68
    +
    epu8 shifted_right(epu8 a) noexcept
    Left shifted of a HPCombi::epu8 inserting a 0.
    Definition: epu8.hpp:74
    +
    epu8 permutation_of(epu8 a, epu8 b) noexcept
    Find if a vector is a permutation of one other.
    Definition: epu8_impl.hpp:299
    +
    TPUBuild< TPU >::array & as_array(TPU &v) noexcept
    Cast a TPU to a c++ std::array.
    Definition: builder.hpp:135
    +
    uint8_t horiz_sum(epu8 v) noexcept
    Horizontal sum of a HPCombi::epu8.
    Definition: epu8.hpp:213
    +
    epu8 sorted(epu8 a) noexcept
    Return a sorted HPCombi::epu8.
    Definition: epu8_impl.hpp:199
    +
    constexpr TPUBuild< epu8 > Epu8
    Factory object acting as a class constructor for type HPCombi::epu8.
    Definition: epu8.hpp:49
    +
    uint8_t __attribute__((vector_size(16))) epu8
    SIMD vector of 16 unsigned bytes.
    Definition: epu8.hpp:41
    +
    epu8 shifted_left(epu8 a) noexcept
    Right shifted of a HPCombi::epu8 inserting a 0.
    Definition: epu8.hpp:80
    +
    const T pow(const T x)
    A generic compile time exponentiation function.
    Definition: power.hpp:79
    +
    Partial permutation of .
    Definition: perm16.hpp:145
    +
    PPerm16 inverse_ref() const
    The inverse of a partial permutation.
    Definition: perm16_impl.hpp:142
    +
    static constexpr PPerm16 one()
    The identity partial permutations.
    Definition: perm16.hpp:162
    +
    Partial transformation of .
    Definition: perm16.hpp:43
    +
    uint8_t nb_fix_points() const
    Returns the number of fix points of *this.
    Definition: perm16_impl.hpp:117
    +
    uint32_t fix_points_bitset(bool complement=false) const
    Returns a bit mask for the fix point of *this.
    Definition: perm16_impl.hpp:95
    +
    static constexpr size_t size()
    Definition: perm16.hpp:44
    +
    static constexpr PTransf16 one()
    The identity partial transformation.
    Definition: perm16.hpp:63
    +
    uint8_t largest_moved_point() const
    Returns the largest non fix point of *this.
    Definition: perm16_impl.hpp:112
    +
    uint32_t domain_bitset(bool complement=false) const
    Returns a bit mask for the domain of *this.
    Definition: perm16_impl.hpp:44
    +
    PTransf16 left_one() const
    Returns the partial left identity for *this.
    Definition: perm16_impl.hpp:68
    +
    typename decltype(Epu8)::array array
    Definition: perm16.hpp:47
    +
    uint32_t rank_ref() const
    Returns the size of the image of *this.
    Definition: perm16_impl.hpp:71
    +
    PTransf16 right_one() const
    Returns the partial right identity for *this.
    Definition: perm16_impl.hpp:47
    +
    uint32_t image_bitset(bool complement=false) const
    Returns a bit mask for the image of *this.
    Definition: perm16_impl.hpp:65
    +
    epu8 fix_points_mask(bool complement=false) const
    Returns a mask for the fix point of *this.
    Definition: perm16_impl.hpp:92
    +
    uint8_t smallest_fix_point() const
    Returns the smallest fix point of *this.
    Definition: perm16_impl.hpp:99
    + +
    uint32_t rank_cmpestrm() const
    Returns the size of the image of *this.
    Definition: perm16_impl.hpp:80
    +
    epu8 domain_mask(bool complement=false) const
    Returns a mask for the domain of *this.
    Definition: perm16_impl.hpp:41
    +
    uint32_t rank() const
    Returns the size of the image of *this.
    Definition: perm16_impl.hpp:84
    +
    epu8 image_mask_ref(bool complement=false) const
    Returns a mask for the image of *this.
    Definition: perm16_impl.hpp:57
    +
    uint8_t largest_fix_point() const
    Returns the largest fix point of *this.
    Definition: perm16_impl.hpp:107
    +
    epu8 image_mask(bool complement=false) const
    Definition: perm16.hpp:73
    +
    epu8 image_mask_cmpestrm(bool complement=false) const
    Returns a mask for the image of *this.
    +
    uint8_t smallest_moved_point() const
    Returns the smallest non fix point of *this.
    Definition: perm16_impl.hpp:103
    +
    Permutations of .
    Definition: perm16.hpp:204
    +
    Perm16 inverse_cycl() const
    The inverse permutation.
    Definition: perm16_impl.hpp:245
    +
    Perm16 inverse() const
    The inverse permutation.
    Definition: perm16.hpp:279
    +
    epu8 lehmer() const
    The Lehmer code of a permutation.
    Definition: perm16_impl.hpp:286
    +
    uint8_t length_ref() const
    The Coxeter length (ie: number of inversion) of a permutation.
    Definition: perm16_impl.hpp:295
    +
    epu8 cycles_partition() const
    The set partition of the cycles of a permutation.
    Definition: perm16_impl.hpp:340
    +
    bool left_weak_leq_ref(Perm16 other) const
    Compare two permutations for the left weak order.
    Definition: perm16_impl.hpp:358
    +
    uint8_t nb_descents_ref() const
    The number of descent of a permutation.
    Definition: perm16_impl.hpp:316
    +
    Perm16 inverse_sort() const
    The inverse permutation.
    Definition: perm16_impl.hpp:221
    +
    static constexpr Perm16 one()
    The identity partial permutation.
    Definition: perm16.hpp:219
    +
    epu8 lehmer_ref() const
    The Lehmer code of a permutation.
    Definition: perm16_impl.hpp:267
    +
    bool left_weak_leq_length(Perm16 other) const
    Compare two permutations for the left weak order.
    Definition: perm16_impl.hpp:381
    +
    uint8_t length() const
    The Coxeter length (ie: number of inversion) of a permutation.
    Definition: perm16_impl.hpp:314
    +
    Perm16 inverse_ref() const
    The inverse permutation.
    Definition: perm16_impl.hpp:205
    +
    uint8_t nb_descents() const
    The number of descent of a permutation.
    Definition: perm16_impl.hpp:323
    +
    uint8_t nb_cycles_ref() const
    The number of cycles of a permutation.
    Definition: perm16_impl.hpp:327
    +
    static Perm16 elementary_transposition(uint64_t i)
    The elementary transposition exchanging and .
    Definition: perm16_impl.hpp:197
    +
    epu8 lehmer_arr() const
    The Lehmer code of a permutation.
    Definition: perm16_impl.hpp:276
    +
    static Perm16 unrankSJT(int n, int r)
    The r -th permutation of size n for the Steinhaus–Johnson–Trotter order.
    Definition: perm16_impl.hpp:169
    +
    bool left_weak_leq(Perm16 other) const
    Compare two permutations for the left weak order.
    Definition: perm16_impl.hpp:368
    +
    uint8_t nb_cycles_unroll() const
    The number of cycles of a permutation.
    Definition: perm16_impl.hpp:353
    +
    Perm16 inverse_pow() const
    The inverse permutation.
    Definition: perm16_impl.hpp:263
    +
    uint8_t length_arr() const
    The Coxeter length (ie: number of inversion) of a permutation.
    Definition: perm16_impl.hpp:304
    +
    Perm16 inverse_arr() const
    The inverse permutation.
    Definition: perm16_impl.hpp:212
    +
    static Perm16 random(uint64_t n=16)
    A random permutation of size .
    Definition: perm16_impl.hpp:157
    +
    Transf16()=default
    +
    Definition: vect16.hpp:30
    +
    epu8 v
    Definition: vect16.hpp:33
    +
    array & as_array()
    Definition: vect16.hpp:41
    +
    static const Perm16 one()
    Definition: perm16_impl.hpp:239
    +
    static Perm16 prod(Perm16 a, Perm16 b)
    Definition: perm16_impl.hpp:240
    +
    Algebraic monoid structure used by default for type T by the pow function and prod function.
    Definition: power.hpp:99
    +
    + + + + diff --git a/docs/perm__generic_8hpp.html b/docs/perm__generic_8hpp.html new file mode 100644 index 00000000..20fda191 --- /dev/null +++ b/docs/perm__generic_8hpp.html @@ -0,0 +1,114 @@ + + + + + + + +HPCombi: /home/florent/src/HPCombi/include/hpcombi/perm_generic.hpp File Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    HPCombi +
    +
    High Performance Combinatorics in C++ using vector instructions v1.0.0
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    perm_generic.hpp File Reference
    +
    +
    +
    #include <algorithm>
    +#include <array>
    +#include <cstddef>
    +#include <cstdint>
    +#include <functional>
    +#include <initializer_list>
    +#include <memory>
    +#include <random>
    +#include <type_traits>
    +#include "debug.hpp"
    +#include "vect_generic.hpp"
    +#include "perm_generic_impl.hpp"
    +
    +

    Go to the source code of this file.

    + + + + +

    +Classes

    struct  HPCombi::PermGeneric< Size, Expo >
     
    + + + +

    +Namespaces

     HPCombi
     
    +
    + + + + diff --git a/docs/perm__generic_8hpp_source.html b/docs/perm__generic_8hpp_source.html new file mode 100644 index 00000000..9619eece --- /dev/null +++ b/docs/perm__generic_8hpp_source.html @@ -0,0 +1,180 @@ + + + + + + + +HPCombi: /home/florent/src/HPCombi/include/hpcombi/perm_generic.hpp Source File + + + + + + + + + + + +
    +
    + + + + + + +
    +
    HPCombi +
    +
    High Performance Combinatorics in C++ using vector instructions v1.0.0
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    perm_generic.hpp
    +
    +
    +Go to the documentation of this file.
    1 // Copyright (C) 2016 Florent Hivert <Florent.Hivert@lri.fr>, //
    +
    3 // //
    +
    4 // Distributed under the terms of the GNU General Public License (GPL) //
    +
    5 // //
    +
    6 // This code is distributed in the hope that it will be useful, //
    +
    7 // but WITHOUT ANY WARRANTY; without even the implied warranty of //
    +
    8 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU //
    +
    9 // General Public License for more details. //
    +
    10 // //
    +
    11 // The full text of the GPL is available at: //
    +
    12 // //
    +
    13 // http://www.gnu.org/licenses/ //
    +
    15 
    +
    16 #ifndef HPCOMBI_PERM_GENERIC_HPP_
    +
    17 #define HPCOMBI_PERM_GENERIC_HPP_
    +
    18 
    +
    19 #include <algorithm> // for shuffle
    +
    20 #include <array> // for array
    +
    21 #include <cstddef> // for size_t
    +
    22 #include <cstdint> // for uint64_t, uint8_t
    +
    23 #include <functional> // for hash
    +
    24 #include <initializer_list> // for initializer_list
    +
    25 #include <memory> // for hash
    +
    26 #include <random> // for mt19937
    +
    27 #include <type_traits> // for is_trivial
    +
    28 
    +
    29 #include "debug.hpp" // for HPCOMBI_ASSERT
    +
    30 #include "vect_generic.hpp" // for VectGeneric
    +
    31 
    +
    32 namespace HPCombi {
    +
    33 
    +
    34 template <size_t Size, typename Expo = uint8_t>
    +
    35 struct PermGeneric : public VectGeneric<Size, Expo> {
    + +
    37 
    +
    38  static constexpr size_t size() { return Size; }
    +
    39 
    +
    40  PermGeneric() = default;
    +
    41  PermGeneric(const vect v) : vect(v) {} // NOLINT
    +
    42  // Not marked explicit because we want to be able to pass non-initializer
    +
    43  // lists here
    +
    44  PermGeneric(std::initializer_list<Expo> il); // NOLINT
    +
    45 
    +
    46  PermGeneric operator*(const PermGeneric &p) const {
    +
    47  return this->permuted(p);
    +
    48  }
    +
    49  static PermGeneric one() { return PermGeneric({}); }
    +
    50  static PermGeneric elementary_transposition(uint64_t i);
    +
    51 
    +
    52  PermGeneric inverse() const;
    +
    53  static PermGeneric random();
    +
    54 
    +
    55  vect lehmer() const;
    +
    56  uint64_t length() const;
    +
    57  uint64_t nb_descents() const;
    +
    58  uint64_t nb_cycles() const;
    +
    59 
    +
    60  bool left_weak_leq(PermGeneric other) const;
    +
    61 };
    +
    62 
    +
    64 // Memory layout concepts check //////////////////////////////////////////////
    +
    66 
    +
    67 static_assert(sizeof(VectGeneric<12>) == sizeof(PermGeneric<12>),
    +
    68  "VectGeneric and PermGeneric have a different memory layout !");
    +
    69 static_assert(std::is_trivial<PermGeneric<12>>(),
    +
    70  "PermGeneric is not trivial !");
    +
    71 
    +
    72 } // namespace HPCombi
    +
    73 
    +
    74 #include "perm_generic_impl.hpp"
    +
    75 
    +
    76 #endif // HPCOMBI_PERM_GENERIC_HPP_
    + +
    Definition: bmat8.hpp:37
    + +
    Definition: perm_generic.hpp:35
    +
    uint64_t length() const
    Definition: perm_generic_impl.hpp:67
    +
    PermGeneric(const vect v)
    Definition: perm_generic.hpp:41
    +
    bool left_weak_leq(PermGeneric other) const
    Definition: perm_generic_impl.hpp:100
    +
    VectGeneric< Size, Expo > vect
    Definition: perm_generic.hpp:36
    + +
    PermGeneric operator*(const PermGeneric &p) const
    Definition: perm_generic.hpp:46
    +
    static PermGeneric elementary_transposition(uint64_t i)
    Definition: perm_generic_impl.hpp:30
    +
    static PermGeneric random()
    Definition: perm_generic_impl.hpp:47
    +
    static constexpr size_t size()
    Definition: perm_generic.hpp:38
    +
    PermGeneric inverse() const
    Definition: perm_generic_impl.hpp:39
    +
    uint64_t nb_cycles() const
    Definition: perm_generic_impl.hpp:86
    +
    vect lehmer() const
    Definition: perm_generic_impl.hpp:57
    +
    static PermGeneric one()
    Definition: perm_generic.hpp:49
    +
    uint64_t nb_descents() const
    Definition: perm_generic_impl.hpp:77
    +
    A generic class for combinatorial integer vectors.
    Definition: vect_generic.hpp:44
    +
    array v
    Definition: vect_generic.hpp:47
    +
    VectGeneric permuted(const VectGeneric &u) const
    Definition: vect_generic.hpp:102
    + +
    + + + + diff --git a/docs/perm__generic__impl_8hpp.html b/docs/perm__generic__impl_8hpp.html new file mode 100644 index 00000000..9f980440 --- /dev/null +++ b/docs/perm__generic__impl_8hpp.html @@ -0,0 +1,104 @@ + + + + + + + +HPCombi: /home/florent/src/HPCombi/include/hpcombi/perm_generic_impl.hpp File Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    HPCombi +
    +
    High Performance Combinatorics in C++ using vector instructions v1.0.0
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    perm_generic_impl.hpp File Reference
    +
    +
    + +

    Go to the source code of this file.

    + + + + +

    +Classes

    struct  std::hash< HPCombi::PermGeneric< Size, Expo > >
     
    + + + + + +

    +Namespaces

     HPCombi
     
     std
     
    +
    + + + + diff --git a/docs/perm__generic__impl_8hpp_source.html b/docs/perm__generic__impl_8hpp_source.html new file mode 100644 index 00000000..b401ec53 --- /dev/null +++ b/docs/perm__generic__impl_8hpp_source.html @@ -0,0 +1,221 @@ + + + + + + + +HPCombi: /home/florent/src/HPCombi/include/hpcombi/perm_generic_impl.hpp Source File + + + + + + + + + + + +
    +
    + + + + + + +
    +
    HPCombi +
    +
    High Performance Combinatorics in C++ using vector instructions v1.0.0
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    perm_generic_impl.hpp
    +
    +
    +Go to the documentation of this file.
    1 // Copyright (C) 2016 Florent Hivert <Florent.Hivert@lri.fr>, //
    +
    3 // //
    +
    4 // Distributed under the terms of the GNU General Public License (GPL) //
    +
    5 // //
    +
    6 // This code is distributed in the hope that it will be useful, //
    +
    7 // but WITHOUT ANY WARRANTY; without even the implied warranty of //
    +
    8 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU //
    +
    9 // General Public License for more details. //
    +
    10 // //
    +
    11 // The full text of the GPL is available at: //
    +
    12 // //
    +
    13 // http://www.gnu.org/licenses/ //
    +
    15 
    +
    16 // NOLINT(build/header_guard)
    +
    17 
    +
    18 namespace HPCombi {
    +
    19 
    +
    20 template <size_t Size, typename Expo>
    +
    21 PermGeneric<Size, Expo>::PermGeneric(std::initializer_list<Expo> il) {
    +
    22  HPCOMBI_ASSERT(il.size() <= Size);
    +
    23  std::copy(il.begin(), il.end(), this->v.begin());
    +
    24  for (Expo i = il.size(); i < Size; i++)
    +
    25  this->v[i] = i;
    +
    26 }
    +
    27 
    +
    28 template <size_t Size, typename Expo>
    + + +
    31  HPCOMBI_ASSERT(i < Size);
    +
    32  PermGeneric res{{}};
    +
    33  res[i] = i + 1;
    +
    34  res[i + 1] = i;
    +
    35  return res;
    +
    36 }
    +
    37 
    +
    38 template <size_t Size, typename Expo>
    + + +
    41  for (uint64_t i = 0; i < Size; i++)
    +
    42  res[this->v[i]] = i;
    +
    43  return res;
    +
    44 }
    +
    45 
    +
    46 template <size_t Size, typename Expo>
    + +
    48  static std::random_device rd;
    +
    49  static std::mt19937 g(rd());
    +
    50 
    +
    51  PermGeneric res{{}};
    +
    52  std::shuffle(res.v.begin(), res.v.end(), g);
    +
    53  return res;
    +
    54 }
    +
    55 
    +
    56 template <size_t Size, typename Expo>
    + +
    58  vect res{};
    +
    59  for (size_t i = 0; i < Size; i++)
    +
    60  for (size_t j = i + 1; j < Size; j++)
    +
    61  if (this->v[i] > this->v[j])
    +
    62  res[i]++;
    +
    63  return res;
    +
    64 }
    +
    65 
    +
    66 template <size_t Size, typename Expo>
    + +
    68  uint64_t res = 0;
    +
    69  for (size_t i = 0; i < Size; i++)
    +
    70  for (size_t j = i + 1; j < Size; j++)
    +
    71  if (this->v[i] > this->v[j])
    +
    72  res++;
    +
    73  return res;
    +
    74 }
    +
    75 
    +
    76 template <size_t Size, typename Expo>
    + +
    78  uint64_t res = 0;
    +
    79  for (size_t i = 0; i < Size - 1; i++)
    +
    80  if (this->v[i] > this->v[i + 1])
    +
    81  res++;
    +
    82  return res;
    +
    83 }
    +
    84 
    +
    85 template <size_t Size, typename Expo>
    + +
    87  std::array<bool, Size> b{};
    +
    88  uint64_t c = 0;
    +
    89  for (size_t i = 0; i < Size; i++) {
    +
    90  if (!b[i]) {
    +
    91  for (size_t j = i; !b[j]; j = this->v[j])
    +
    92  b[j] = true;
    +
    93  c++;
    +
    94  }
    +
    95  }
    +
    96  return c;
    +
    97 }
    +
    98 
    +
    99 template <size_t Size, typename Expo>
    + +
    101  for (size_t i = 0; i < Size; i++) {
    +
    102  for (size_t j = i + 1; j < Size; j++) {
    +
    103  if ((this->v[i] > this->v[j]) && (other[i] < other[j]))
    +
    104  return false;
    +
    105  }
    +
    106  }
    +
    107  return true;
    +
    108 }
    +
    109 
    +
    110 }; // namespace HPCombi
    +
    111 
    +
    112 namespace std {
    +
    113 
    +
    114 template <size_t Size, typename Expo>
    +
    115 struct hash<HPCombi::PermGeneric<Size, Expo>> {
    + +
    117  return hash<HPCombi::VectGeneric<Size, Expo>>()(ar);
    +
    118  }
    +
    119 };
    +
    120 
    +
    121 } // namespace std
    +
    #define HPCOMBI_ASSERT(x)
    Definition: debug.hpp:23
    +
    std::array< std::tuple< uint16_t, uint16_t, std::array< uint16_t, gens.size()> >, 65536 > res
    Definition: image.cpp:62
    +
    Definition: bmat8.hpp:37
    +
    Definition: bmat8.hpp:360
    +
    Definition: perm_generic.hpp:35
    +
    uint64_t length() const
    Definition: perm_generic_impl.hpp:67
    +
    bool left_weak_leq(PermGeneric other) const
    Definition: perm_generic_impl.hpp:100
    + +
    static PermGeneric elementary_transposition(uint64_t i)
    Definition: perm_generic_impl.hpp:30
    +
    static PermGeneric random()
    Definition: perm_generic_impl.hpp:47
    +
    PermGeneric inverse() const
    Definition: perm_generic_impl.hpp:39
    +
    uint64_t nb_cycles() const
    Definition: perm_generic_impl.hpp:86
    +
    vect lehmer() const
    Definition: perm_generic_impl.hpp:57
    +
    uint64_t nb_descents() const
    Definition: perm_generic_impl.hpp:77
    +
    A generic class for combinatorial integer vectors.
    Definition: vect_generic.hpp:44
    +
    size_t operator()(const HPCombi::PermGeneric< Size, Expo > &ar) const
    Definition: perm_generic_impl.hpp:116
    +
    + + + + diff --git a/docs/power_8hpp.html b/docs/power_8hpp.html new file mode 100644 index 00000000..fd2c583f --- /dev/null +++ b/docs/power_8hpp.html @@ -0,0 +1,124 @@ + + + + + + + +HPCombi: /home/florent/src/HPCombi/include/hpcombi/power.hpp File Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    HPCombi +
    +
    High Performance Combinatorics in C++ using vector instructions v1.0.0
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    power.hpp File Reference
    +
    +
    + +

    Generic compile time power. +More...

    + +

    Go to the source code of this file.

    + + + + + +

    +Classes

    struct  HPCombi::power_helper::Monoid< T >
     Algebraic monoid structure used by default for type T by the pow function and prod function. More...
     
    + + + + + +

    +Namespaces

     HPCombi
     
     HPCombi::power_helper
     
    + + + + + + + + + +

    +Functions

    template<typename T , typename M = power_helper::Monoid<T>>
    const T HPCombi::square (const T x)
     A generic compile time squaring function. More...
     
    template<unsigned exp, typename T , typename M = power_helper::Monoid<T>>
    const T HPCombi::pow (const T x)
     A generic compile time exponentiation function. More...
     
    +

    Detailed Description

    +

    Generic compile time power.

    +

    The goal of this file is to be able to write expressions such as pow<23>(2.5) or pow<n>(x) where the first expression is entirely computed as compile time and the second one is expanded also as compile time to a O(log n) long sequence of multiplication. Furthermore such expression not only works for numbers for for any type where there is a neutral element and an associative (non necessarily commutative) product, namely what mathematicians call monoids. These include for example, strings where the neutral element is the empty string and the product is the concatenation.

    +

    see HPCombi::power_helper::Monoid<std::string>

    +
    + + + + diff --git a/docs/power_8hpp_source.html b/docs/power_8hpp_source.html new file mode 100644 index 00000000..ec7198b2 --- /dev/null +++ b/docs/power_8hpp_source.html @@ -0,0 +1,143 @@ + + + + + + + +HPCombi: /home/florent/src/HPCombi/include/hpcombi/power.hpp Source File + + + + + + + + + + + +
    +
    + + + + + + +
    +
    HPCombi +
    +
    High Performance Combinatorics in C++ using vector instructions v1.0.0
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    power.hpp
    +
    +
    +Go to the documentation of this file.
    1 // Copyright (C) 2016 Florent Hivert <Florent.Hivert@lri.fr>, //
    +
    3 // //
    +
    4 // Distributed under the terms of the GNU General Public License (GPL) //
    +
    5 // //
    +
    6 // This code is distributed in the hope that it will be useful, //
    +
    7 // but WITHOUT ANY WARRANTY; without even the implied warranty of //
    +
    8 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU //
    +
    9 // General Public License for more details. //
    +
    10 // //
    +
    11 // The full text of the GPL is available at: //
    +
    12 // //
    +
    13 // http://www.gnu.org/licenses/ //
    +
    15 
    +
    35 #ifndef HPCOMBI_POWER_HPP_
    +
    36 #define HPCOMBI_POWER_HPP_
    +
    37 
    +
    38 namespace HPCombi {
    +
    39 
    +
    40 namespace power_helper {
    +
    41 
    +
    42 // Forward declaration
    +
    43 template <typename T> struct Monoid;
    +
    44 
    +
    45 } // namespace power_helper
    +
    46 
    +
    57 template <typename T, typename M = power_helper::Monoid<T>>
    +
    58 const T square(const T x) {
    +
    59  return M::prod(x, x);
    +
    60 }
    +
    61 
    +
    78 template <unsigned exp, typename T, typename M = power_helper::Monoid<T>>
    +
    79 const T pow(const T x) {
    +
    80  return (exp == 0) ? M::one()
    +
    81  : (exp % 2 == 0)
    +
    82  ? square<T, M>(pow<unsigned(exp / 2), T, M>(x))
    +
    83  : M::prod(x, square<T, M>(pow<unsigned(exp / 2), T, M>(x)));
    +
    84 }
    +
    85 
    +
    86 namespace power_helper {
    +
    87 
    +
    99 template <typename T> struct Monoid {
    +
    101  static const T one() { return 1; }
    +
    102 
    +
    108  static const T prod(T a, T b) { return a * b; }
    +
    109 };
    +
    110 
    +
    111 } // namespace power_helper
    +
    112 
    +
    113 } // namespace HPCombi
    +
    114 
    +
    115 #endif // HPCOMBI_POWER_HPP_
    +
    Definition: bmat8.hpp:37
    +
    const T square(const T x)
    A generic compile time squaring function.
    Definition: power.hpp:58
    +
    const T pow(const T x)
    A generic compile time exponentiation function.
    Definition: power.hpp:79
    +
    Algebraic monoid structure used by default for type T by the pow function and prod function.
    Definition: power.hpp:99
    +
    static const T prod(T a, T b)
    the product of two elements of type T
    Definition: power.hpp:108
    +
    static const T one()
    The one of type T.
    Definition: power.hpp:101
    +
    + + + + diff --git a/docs/search/all_0.html b/docs/search/all_0.html new file mode 100644 index 00000000..1ec5b2d5 --- /dev/null +++ b/docs/search/all_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/all_0.js b/docs/search/all_0.js new file mode 100644 index 00000000..53c6e6f7 --- /dev/null +++ b/docs/search/all_0.js @@ -0,0 +1,17 @@ +var searchData= +[ + ['a1_0',['a1',['../image_8cpp.html#a1ba9a573d6f8d94359304c4ed986c96e',1,'image.cpp']]], + ['a2_1',['a2',['../image_8cpp.html#ab3f31a5ccd13d943d1359bd78c2981d0',1,'image.cpp']]], + ['a3_2',['a3',['../image_8cpp.html#a52e6772308f2738f7c7dcc0bf4d920ac',1,'image.cpp']]], + ['a4_3',['a4',['../image_8cpp.html#af3e2df949f2ed4fae1883cc2595731f1',1,'image.cpp']]], + ['a5_4',['a5',['../image_8cpp.html#a8c99d511d82ecd940d9b7ae4609e8d5e',1,'image.cpp']]], + ['a6_5',['a6',['../image_8cpp.html#a8aa57c13944dd7764448efe12dc34a89',1,'image.cpp']]], + ['a7_6',['a7',['../image_8cpp.html#ab8fcee0341f5811fd4ad4a0c7ad92bd0',1,'image.cpp']]], + ['a8_7',['a8',['../image_8cpp.html#a07eefc7bd342605d1536855fbf61f066',1,'image.cpp']]], + ['act0_8',['act0',['../Renner_8cpp.html#a5268b29472a0b202cd849985401f2544',1,'act0(PTransf16 x, PTransf16 y): Renner.cpp'],['../RD_8cpp.html#a5268b29472a0b202cd849985401f2544',1,'act0(PTransf16 x, PTransf16 y): RD.cpp']]], + ['act1_9',['act1',['../Renner_8cpp.html#a2df2854a3f5b79cce160307511181cd9',1,'act1(PTransf16 x, PTransf16 y): Renner.cpp'],['../RD_8cpp.html#a2df2854a3f5b79cce160307511181cd9',1,'act1(PTransf16 x, PTransf16 y): RD.cpp']]], + ['arch_2ehpp_10',['arch.hpp',['../arch_8hpp.html',1,'']]], + ['array_11',['array',['../structHPCombi_1_1TPUBuild.html#affd84f79b18ecbd5a7325e0e857a7360',1,'HPCombi::TPUBuild::array()'],['../structHPCombi_1_1VectGeneric.html#ac70e6b1f5af8d49e84383bfe6d320382',1,'HPCombi::VectGeneric::array()'],['../structHPCombi_1_1Vect16.html#aa143b15c812c66144dbadc1dbcd034f2',1,'HPCombi::Vect16::array()'],['../structHPCombi_1_1PTransf16.html#a74666f4922b11847751de673a2ab66b7',1,'HPCombi::PTransf16::array()']]], + ['as_5farray_12',['as_array',['../structHPCombi_1_1Vect16.html#ae888daddab266a00b77724e786188198',1,'HPCombi::Vect16::as_array() const'],['../structHPCombi_1_1Vect16.html#ad7a402feb477d9451f6aa2c23ef2f746',1,'HPCombi::Vect16::as_array()'],['../namespaceHPCombi.html#a40923f8c14a58676737c57c386eada16',1,'HPCombi::as_array(TPU &v) noexcept'],['../namespaceHPCombi.html#a6f6bb2714293cd27b30d723176bc5157',1,'HPCombi::as_array(const TPU &v) noexcept']]], + ['as_5fvectgeneric_13',['as_VectGeneric',['../namespaceHPCombi.html#a5516e8f4ea2fc542d7198a23a17e8f26',1,'HPCombi::as_VectGeneric(TPU &v)'],['../namespaceHPCombi.html#a7ccfbdda0682d98ccfd4b4eeac077d79',1,'HPCombi::as_VectGeneric(const TPU &v)']]] +]; diff --git a/docs/search/all_1.html b/docs/search/all_1.html new file mode 100644 index 00000000..9f80e904 --- /dev/null +++ b/docs/search/all_1.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/all_1.js b/docs/search/all_1.js new file mode 100644 index 00000000..079cd401 --- /dev/null +++ b/docs/search/all_1.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['begin_14',['begin',['../structHPCombi_1_1Vect16.html#aa37ac47dced9ec8bc30e03964a3df3a3',1,'HPCombi::Vect16::begin()'],['../structHPCombi_1_1Vect16.html#a1428c4a6e58e9df4c5334f45496c2519',1,'HPCombi::Vect16::begin() const'],['../structHPCombi_1_1VectGeneric.html#a9ed45b64e927943afb2bd1b4b5093a1d',1,'HPCombi::VectGeneric::begin()'],['../structHPCombi_1_1VectGeneric.html#ad41135a25336243eef460fbd7cd6c2b8',1,'HPCombi::VectGeneric::begin() const'],['../classEqEpu8.html#aebcf8fe92ed706e9665f81405ef0cce9',1,'EqEpu8::begin()']]], + ['bmat8_15',['BMat8',['../classHPCombi_1_1BMat8.html#a8df699a486dadb3d66f3bd5fd03c8a5c',1,'HPCombi::BMat8::BMat8() noexcept=default'],['../classHPCombi_1_1BMat8.html#a407534bb745fc7104771f4bad6e03088',1,'HPCombi::BMat8::BMat8(uint64_t mat) noexcept'],['../classHPCombi_1_1BMat8.html#ac510a5f28cf0cc7cb0e4225e2d5391e7',1,'HPCombi::BMat8::BMat8(std::vector< std::vector< bool >> const &mat)'],['../classHPCombi_1_1BMat8.html#a4fe049c3f44d6c4d52229cc5ad9099be',1,'HPCombi::BMat8::BMat8(BMat8 const &) noexcept=default'],['../classHPCombi_1_1BMat8.html#a6674b736c269806e85f80a056e68134b',1,'HPCombi::BMat8::BMat8(BMat8 &&) noexcept=default'],['../classHPCombi_1_1BMat8.html',1,'HPCombi::BMat8']]], + ['bmat8_2ehpp_16',['bmat8.hpp',['../bmat8_8hpp.html',1,'']]], + ['bmat8_5fimpl_2ehpp_17',['bmat8_impl.hpp',['../bmat8__impl_8hpp.html',1,'']]], + ['builder_2ehpp_18',['builder.hpp',['../builder_8hpp.html',1,'']]] +]; diff --git a/docs/search/all_10.html b/docs/search/all_10.html new file mode 100644 index 00000000..3bf11961 --- /dev/null +++ b/docs/search/all_10.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/all_10.js b/docs/search/all_10.js new file mode 100644 index 00000000..b5894712 --- /dev/null +++ b/docs/search/all_10.js @@ -0,0 +1,16 @@ +var searchData= +[ + ['timer_311',['Timer',['../classlibsemigroups_1_1Timer.html',1,'libsemigroups::Timer'],['../classlibsemigroups_1_1Timer.html#a55e77d45dca20592fd5912e2ee399ce2',1,'libsemigroups::Timer::Timer()']]], + ['timer_2eh_312',['timer.h',['../timer_8h.html',1,'']]], + ['to_5fint_313',['to_int',['../classHPCombi_1_1BMat8.html#aab6eeeac5fae056b595cdf16e3f1f358',1,'HPCombi::BMat8']]], + ['to_5fstring_314',['to_string',['../namespacestd.html#ab23ef44c64cdfc7d83dc91a5788c58b3',1,'std']]], + ['tosubset_315',['tosubset',['../pattern_8cpp.html#a0e4b6de9624f56e537f2896fba9f3e3d',1,'pattern.cpp']]], + ['tpubuild_316',['TPUBuild',['../structHPCombi_1_1TPUBuild.html',1,'HPCombi']]], + ['trans_2ecpp_317',['Trans.cpp',['../Trans_8cpp.html',1,'']]], + ['transf16_318',['Transf16',['../structHPCombi_1_1Transf16.html',1,'HPCombi::Transf16'],['../structHPCombi_1_1Transf16.html#ab4938e3ca65d552efd2c93696e2a9d1b',1,'HPCombi::Transf16::Transf16()=default'],['../structHPCombi_1_1Transf16.html#af56c55fce7ee678ea3a244394d6934e8',1,'HPCombi::Transf16::Transf16(const Transf16 &v)=default'],['../structHPCombi_1_1Transf16.html#a3d0ee573b865f77aa9cc39f6f627f6ef',1,'HPCombi::Transf16::Transf16(const vect v)'],['../structHPCombi_1_1Transf16.html#a5f831a36ba0a2c39ec009fc5f72f1c83',1,'HPCombi::Transf16::Transf16(const epu8 x)'],['../structHPCombi_1_1Transf16.html#a5d938f718b72e09b0f50dd7c4e7d65e6',1,'HPCombi::Transf16::Transf16(std::initializer_list< uint8_t > il)'],['../structHPCombi_1_1Transf16.html#a8a170f0108164b8ee0d37786987e6abc',1,'HPCombi::Transf16::Transf16(uint64_t compressed)']]], + ['transpose_319',['transpose',['../classHPCombi_1_1BMat8.html#a71a4dd27b3bb7f430db403992586f145',1,'HPCombi::BMat8']]], + ['transpose2_320',['transpose2',['../classHPCombi_1_1BMat8.html#a3334530356cbe17651ee07535962a580',1,'HPCombi::BMat8']]], + ['transpose_5fmask_321',['transpose_mask',['../classHPCombi_1_1BMat8.html#abf1bde4f72b5c5dcbbd320dcf570a6a5',1,'HPCombi::BMat8']]], + ['transpose_5fmaskd_322',['transpose_maskd',['../classHPCombi_1_1BMat8.html#a528ac7f8ada4a9f0468f648c8bed9bdc',1,'HPCombi::BMat8']]], + ['type_5felem_323',['type_elem',['../structHPCombi_1_1TPUBuild.html#afdf9d3ec986ee23bd4f3ebd0156cfef3',1,'HPCombi::TPUBuild']]] +]; diff --git a/docs/search/all_11.html b/docs/search/all_11.html new file mode 100644 index 00000000..c9f79d28 --- /dev/null +++ b/docs/search/all_11.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/all_11.js b/docs/search/all_11.js new file mode 100644 index 00000000..9907cb01 --- /dev/null +++ b/docs/search/all_11.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['unranksjt_324',['unrankSJT',['../structHPCombi_1_1Perm16.html#ac31abc936e8fb6b71524a36a7f2e93a7',1,'HPCombi::Perm16']]] +]; diff --git a/docs/search/all_12.html b/docs/search/all_12.html new file mode 100644 index 00000000..ab934722 --- /dev/null +++ b/docs/search/all_12.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/all_12.js b/docs/search/all_12.js new file mode 100644 index 00000000..e0be595c --- /dev/null +++ b/docs/search/all_12.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['v_325',['v',['../structHPCombi_1_1Vect16.html#aa52a31997c72f76a64ff4ef8bbc1d179',1,'HPCombi::Vect16::v()'],['../structHPCombi_1_1VectGeneric.html#a47fda9d33a4e22f9eed53434df042b01',1,'HPCombi::VectGeneric::v()']]], + ['validate_326',['validate',['../structHPCombi_1_1PTransf16.html#ad1285ebd8e5900198f94bd7625b0fe64',1,'HPCombi::PTransf16::validate()'],['../structHPCombi_1_1Transf16.html#ab5b8347b235a32b0857c51c28a6cf2dd',1,'HPCombi::Transf16::validate()'],['../structHPCombi_1_1PPerm16.html#aeea67ef5a96b922f0ee1b49661053ec4',1,'HPCombi::PPerm16::validate()'],['../structHPCombi_1_1Perm16.html#aad44a4d8edb4f7bd21fb7f883213259a',1,'HPCombi::Perm16::validate()']]], + ['value_5ftype_327',['value_type',['../structHPCombi_1_1VectGeneric.html#a1ddce1a15d25e74fb4e886deb67ebf69',1,'HPCombi::VectGeneric::value_type()'],['../structHPCombi_1_1Vect16.html#aa5ee5b32db0f267a2657f0624fd068e4',1,'HPCombi::Vect16::value_type()']]], + ['vect_328',['vect',['../structHPCombi_1_1PermGeneric.html#a367fc347c37034f96617365d7d002bfb',1,'HPCombi::PermGeneric::vect()'],['../structHPCombi_1_1PTransf16.html#a369dd455007da2a497e2584f4659480a',1,'HPCombi::PTransf16::vect()']]], + ['vect16_329',['Vect16',['../structHPCombi_1_1Vect16.html',1,'HPCombi::Vect16'],['../structHPCombi_1_1Vect16.html#a30798d557d51dd3b65b50ca7c7ac3687',1,'HPCombi::Vect16::Vect16(std::initializer_list< uint8_t > il, uint8_t def=0)'],['../structHPCombi_1_1Vect16.html#a789adca694f8d38230c910db6e191198',1,'HPCombi::Vect16::Vect16()=default'],['../structHPCombi_1_1Vect16.html#ae89c2af14936aa1089abb0239275c4da',1,'HPCombi::Vect16::Vect16(epu8 x)']]], + ['vect16_2ehpp_330',['vect16.hpp',['../vect16_8hpp.html',1,'']]], + ['vect_5fgeneric_2ehpp_331',['vect_generic.hpp',['../vect__generic_8hpp.html',1,'']]], + ['vectgeneric_332',['VectGeneric',['../structHPCombi_1_1VectGeneric.html',1,'HPCombi::VectGeneric< Size, Expo >'],['../structHPCombi_1_1VectGeneric.html#aced1e94a358046cdeb15bca1eccf1dbe',1,'HPCombi::VectGeneric::VectGeneric()=default'],['../structHPCombi_1_1VectGeneric.html#aa0430519498c632799bb27ecfd5bca67',1,'HPCombi::VectGeneric::VectGeneric(const array &_v)'],['../structHPCombi_1_1VectGeneric.html#af5ef012d18450d8da4b1317b0c7b2109',1,'HPCombi::VectGeneric::VectGeneric(std::initializer_list< Expo > il, Expo def=0)']]], + ['vectgeneric_3c_20size_2c_20uint8_5ft_20_3e_333',['VectGeneric< Size, uint8_t >',['../structHPCombi_1_1VectGeneric.html',1,'HPCombi']]] +]; diff --git a/docs/search/all_13.html b/docs/search/all_13.html new file mode 100644 index 00000000..51172c2f --- /dev/null +++ b/docs/search/all_13.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/all_13.js b/docs/search/all_13.js new file mode 100644 index 00000000..9ff6db25 --- /dev/null +++ b/docs/search/all_13.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['write_334',['write',['../classHPCombi_1_1BMat8.html#a92aad62aba3da0468a24b9a88fc2e1aa',1,'HPCombi::BMat8']]] +]; diff --git a/docs/search/all_14.html b/docs/search/all_14.html new file mode 100644 index 00000000..afecf563 --- /dev/null +++ b/docs/search/all_14.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/all_14.js b/docs/search/all_14.js new file mode 100644 index 00000000..4926a1c6 --- /dev/null +++ b/docs/search/all_14.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['_7ebmat8_335',['~BMat8',['../classHPCombi_1_1BMat8.html#a228c91aa2d3a1a443947d86ba09c95e6',1,'HPCombi::BMat8']]] +]; diff --git a/docs/search/all_2.html b/docs/search/all_2.html new file mode 100644 index 00000000..02cfffc2 --- /dev/null +++ b/docs/search/all_2.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/all_2.js b/docs/search/all_2.js new file mode 100644 index 00000000..deb9d8c0 --- /dev/null +++ b/docs/search/all_2.js @@ -0,0 +1,31 @@ +var searchData= +[ + ['cbegin_19',['cbegin',['../structHPCombi_1_1Vect16.html#a6c198d8eaad46c9119981392ba41d62f',1,'HPCombi::Vect16']]], + ['cend_20',['cend',['../structHPCombi_1_1Vect16.html#af47651711a5b9076c40921b693f1d55b',1,'HPCombi::Vect16']]], + ['cf_2ecpp_21',['CF.cpp',['../CF_8cpp.html',1,'']]], + ['col_5fpermutation_5fmatrix_22',['col_permutation_matrix',['../classHPCombi_1_1BMat8.html#a7b8b6e55a3a2b9f22981eab2486e9127',1,'HPCombi::BMat8']]], + ['col_5fpermuted_23',['col_permuted',['../classHPCombi_1_1BMat8.html#aaaee5afb25e0c541be9eecef89d0682d',1,'HPCombi::BMat8']]], + ['col_5fspace_5fbasis_24',['col_space_basis',['../classHPCombi_1_1BMat8.html#a8f89ab037a3fc12cfdf9c85f6e71c779',1,'HPCombi::BMat8']]], + ['common_5feval16_25',['common_eval16',['../classcommon__eval16.html',1,'']]], + ['common_5ffirst_5fdiff_26',['common_first_diff',['../classcommon__first__diff.html',1,'']]], + ['common_5fhoriz_5fmax_27',['common_horiz_max',['../classcommon__horiz__max.html',1,'']]], + ['common_5fhoriz_5fmin_28',['common_horiz_min',['../classcommon__horiz__min.html',1,'']]], + ['common_5fhoriz_5fsum_29',['common_horiz_sum',['../classcommon__horiz__sum.html',1,'']]], + ['common_5finverse_30',['common_inverse',['../classcommon__inverse.html',1,'']]], + ['common_5finverse_5fpperm_31',['common_inverse_pperm',['../classcommon__inverse__pperm.html',1,'']]], + ['common_5fis_5fpermutation_32',['common_is_permutation',['../classcommon__is__permutation.html',1,'']]], + ['common_5flast_5fdiff_33',['common_last_diff',['../classcommon__last__diff.html',1,'']]], + ['common_5fleft_5fweak_5fleq_34',['common_left_weak_leq',['../classcommon__left__weak__leq.html',1,'']]], + ['common_5flehmer_35',['common_lehmer',['../classcommon__lehmer.html',1,'']]], + ['common_5flength_36',['common_length',['../classcommon__length.html',1,'']]], + ['common_5fmerge_37',['common_merge',['../classcommon__merge.html',1,'']]], + ['common_5fnb_5fcycles_38',['common_nb_cycles',['../classcommon__nb__cycles.html',1,'']]], + ['common_5fnb_5fdescent_39',['common_nb_descent',['../classcommon__nb__descent.html',1,'']]], + ['common_5fpartial_5fmax_40',['common_partial_max',['../classcommon__partial__max.html',1,'']]], + ['common_5fpartial_5fmin_41',['common_partial_min',['../classcommon__partial__min.html',1,'']]], + ['common_5fpartial_5fsums_42',['common_partial_sums',['../classcommon__partial__sums.html',1,'']]], + ['common_5fpermutation_5fof_43',['common_permutation_of',['../classcommon__permutation__of.html',1,'']]], + ['const_5fiterator_44',['const_iterator',['../structHPCombi_1_1Vect16.html#a3e6401b1265904d4b16ccbad66af55e3',1,'HPCombi::Vect16::const_iterator()'],['../structHPCombi_1_1VectGeneric.html#a974eda5f6379699857d0cb46619a6cea',1,'HPCombi::VectGeneric::const_iterator()']]], + ['cy_45',['cy',['../Trans_8cpp.html#a010a8c488c9494c4f998737623b71762',1,'Trans.cpp']]], + ['cycles_5fpartition_46',['cycles_partition',['../structHPCombi_1_1Perm16.html#a38eda8cf653fcb46166e651af9f76b80',1,'HPCombi::Perm16']]] +]; diff --git a/docs/search/all_3.html b/docs/search/all_3.html new file mode 100644 index 00000000..39767b85 --- /dev/null +++ b/docs/search/all_3.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/all_3.js b/docs/search/all_3.js new file mode 100644 index 00000000..83bb5d7d --- /dev/null +++ b/docs/search/all_3.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['debug_2ehpp_47',['debug.hpp',['../debug_8hpp.html',1,'']]], + ['domain_5fbitset_48',['domain_bitset',['../structHPCombi_1_1PTransf16.html#a6ef6ffd0d271aceb8fad80bf39b76e8d',1,'HPCombi::PTransf16']]], + ['domain_5fmask_49',['domain_mask',['../structHPCombi_1_1PTransf16.html#aca2a11e1a6bf8ae4ff7e6078b783a232',1,'HPCombi::PTransf16']]] +]; diff --git a/docs/search/all_4.html b/docs/search/all_4.html new file mode 100644 index 00000000..fc40463c --- /dev/null +++ b/docs/search/all_4.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/all_4.js b/docs/search/all_4.js new file mode 100644 index 00000000..338aa70c --- /dev/null +++ b/docs/search/all_4.js @@ -0,0 +1,23 @@ +var searchData= +[ + ['elapsed_50',['elapsed',['../classlibsemigroups_1_1Timer.html#ab3416636f26f7bdc37aae78ac059a0bd',1,'libsemigroups::Timer']]], + ['elementary_5ftransposition_51',['elementary_transposition',['../structHPCombi_1_1Perm16.html#ab12cd9d1c274527259e3f2b3dc80ed07',1,'HPCombi::Perm16::elementary_transposition()'],['../structHPCombi_1_1PermGeneric.html#a73bf07d40f7f7626044444fc172e7e22',1,'HPCombi::PermGeneric::elementary_transposition()']]], + ['elems_52',['elems',['../Renner_8cpp.html#aea766d7a0d38082ac5c455b7e45bc0d1',1,'Renner.cpp']]], + ['end_53',['end',['../structHPCombi_1_1Vect16.html#a3053a74dfbdfac751f4cf0334d4fd7ec',1,'HPCombi::Vect16::end()'],['../structHPCombi_1_1Vect16.html#a406e932e19a9a600ed1b1088d45cf4eb',1,'HPCombi::Vect16::end() const'],['../structHPCombi_1_1VectGeneric.html#aa985592427419965cfa7c8331f4c1cde',1,'HPCombi::VectGeneric::end()'],['../structHPCombi_1_1VectGeneric.html#a07bf26896188a8587c611dfdf2183061',1,'HPCombi::VectGeneric::end() const'],['../classEqEpu8.html#ab6ea501b65615fb37da3893a0f47ab82',1,'EqEpu8::end()']]], + ['epu64_54',['epu64',['../namespaceHPCombi.html#a8609116a46e59669cab0aef62e9c487b',1,'HPCombi']]], + ['epu8_55',['epu8',['../namespaceHPCombi.html#ac87988810bfcec65d51fe86a9707963a',1,'HPCombi']]], + ['epu8_56',['Epu8',['../namespaceHPCombi.html#ab2d0adbafd0a6fad9e728e571ef2ec4e',1,'HPCombi']]], + ['epu8_2ehpp_57',['epu8.hpp',['../epu8_8hpp.html',1,'']]], + ['epu8_5fimpl_2ehpp_58',['epu8_impl.hpp',['../epu8__impl_8hpp.html',1,'']]], + ['eqepu8_59',['EqEpu8',['../classEqEpu8.html#af2b77cb1348f7ff050738f23b796cb4e',1,'EqEpu8::EqEpu8()'],['../classEqEpu8.html',1,'EqEpu8']]], + ['equal_60',['equal',['../namespaceHPCombi.html#a6ff0939c8b327c7b60ac9743b1de7b11',1,'HPCombi']]], + ['equal_5fto_3c_20hpcombi_3a_3aepu8_20_3e_61',['equal_to< HPCombi::epu8 >',['../structstd_1_1equal__to_3_01HPCombi_1_1epu8_01_4.html',1,'std']]], + ['eval_62',['eval',['../structHPCombi_1_1VectGeneric.html#ad7e98a6c8cf8402f6efdb410479381a4',1,'HPCombi::VectGeneric']]], + ['eval16_63',['eval16',['../structHPCombi_1_1Vect16.html#aeae787a534284f33701847cad5a8d891',1,'HPCombi::Vect16::eval16()'],['../namespaceHPCombi.html#a7f639b83ee205ad8d243957a03989308',1,'HPCombi::eval16(epu8 v) noexcept']]], + ['eval16_5farr_64',['eval16_arr',['../namespaceHPCombi.html#a11398c30a4a9a3166aef687c66f6db5e',1,'HPCombi']]], + ['eval16_5fcycle_65',['eval16_cycle',['../namespaceHPCombi.html#a979590b2fa1172017d5574cc934dd14d',1,'HPCombi']]], + ['eval16_5fgen_66',['eval16_gen',['../namespaceHPCombi.html#a3264b507dca3de1b84e7fc4e3bcc9b86',1,'HPCombi']]], + ['eval16_5fpopcount_67',['eval16_popcount',['../namespaceHPCombi.html#acc0cc310df92374740a43e3b34a216b2',1,'HPCombi']]], + ['eval16_5fref_68',['eval16_ref',['../namespaceHPCombi.html#aa10ed40ed441f2083b63a35556cd03c0',1,'HPCombi']]], + ['extract_5fpattern_69',['extract_pattern',['../pattern_8cpp.html#a9924bb55cf29a9e598d4a3710e80e44b',1,'pattern.cpp']]] +]; diff --git a/docs/search/all_5.html b/docs/search/all_5.html new file mode 100644 index 00000000..9dd9344b --- /dev/null +++ b/docs/search/all_5.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/all_5.js b/docs/search/all_5.js new file mode 100644 index 00000000..300ac305 --- /dev/null +++ b/docs/search/all_5.js @@ -0,0 +1,13 @@ +var searchData= +[ + ['fe_70',['FE',['../Trans_8cpp.html#a4bdbea5a489057864ff6781849195946',1,'FE(): Trans.cpp'],['../Renner_8cpp.html#a4bdbea5a489057864ff6781849195946',1,'FE(): Renner.cpp'],['../RD_8cpp.html#a4bdbea5a489057864ff6781849195946',1,'FE(): RD.cpp']]], + ['ff_71',['FF',['../Renner_8cpp.html#a7ef85a95d1c5de54a9009385639d9115',1,'FF(): Renner.cpp'],['../RD_8cpp.html#a7ef85a95d1c5de54a9009385639d9115',1,'FF(): RD.cpp'],['../epu8__impl_8hpp.html#a201a0d2d698f67adfe3f4ca209a3c7ff',1,'FF(): epu8_impl.hpp'],['../bmat8__impl_8hpp.html#a201a0d2d698f67adfe3f4ca209a3c7ff',1,'FF(): bmat8_impl.hpp']]], + ['first_5fdiff_72',['first_diff',['../structHPCombi_1_1VectGeneric.html#a9512d7238369c508c6b1015b6a8a1ff4',1,'HPCombi::VectGeneric::first_diff()'],['../namespaceHPCombi.html#ae5c206a948004e4609a721a2d3e78713',1,'HPCombi::first_diff()'],['../structHPCombi_1_1Vect16.html#aa1e213d038d344219b795b1815a6280c',1,'HPCombi::Vect16::first_diff()']]], + ['first_5fdiff_5fmask_73',['first_diff_mask',['../namespaceHPCombi.html#a265fe6e5c41ef0b63f2421ee42c7d3d3',1,'HPCombi']]], + ['first_5fdiff_5fref_74',['first_diff_ref',['../namespaceHPCombi.html#a24e32c26ae9b9e6ccbdaec20967845c9',1,'HPCombi']]], + ['first_5fmask_75',['first_mask',['../namespaceHPCombi.html#a75a9e3ae9476d58ad8aaab915491bb3c',1,'HPCombi']]], + ['first_5fnon_5fzero_76',['first_non_zero',['../structHPCombi_1_1VectGeneric.html#a58884049db779208525ff83be6b24769',1,'HPCombi::VectGeneric::first_non_zero()'],['../structHPCombi_1_1Vect16.html#a8cb80a40fa55c752414149c38b7db80c',1,'HPCombi::Vect16::first_non_zero()'],['../namespaceHPCombi.html#a0e08a51a53154072c50a3c01ce596d22',1,'HPCombi::first_non_zero()']]], + ['first_5fzero_77',['first_zero',['../structHPCombi_1_1VectGeneric.html#a51c24367006f9fe7304f17dc262a3596',1,'HPCombi::VectGeneric::first_zero()'],['../structHPCombi_1_1Vect16.html#a3c30c31892028a0a29d362d558885549',1,'HPCombi::Vect16::first_zero()'],['../namespaceHPCombi.html#aba0e87bcbabb680ae7f3b3a44c313bf5',1,'HPCombi::first_zero()']]], + ['fix_5fpoints_5fbitset_78',['fix_points_bitset',['../structHPCombi_1_1PTransf16.html#a257c39f09c2de8bdccb8c5dcd414ae60',1,'HPCombi::PTransf16']]], + ['fix_5fpoints_5fmask_79',['fix_points_mask',['../structHPCombi_1_1PTransf16.html#aa232bc5ac28fb44599df3e8f824fa813',1,'HPCombi::PTransf16']]] +]; diff --git a/docs/search/all_6.html b/docs/search/all_6.html new file mode 100644 index 00000000..f1e516d7 --- /dev/null +++ b/docs/search/all_6.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/all_6.js b/docs/search/all_6.js new file mode 100644 index 00000000..d9e5d46f --- /dev/null +++ b/docs/search/all_6.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['gene_80',['gene',['../RD_8cpp.html#a4896c0e9b10ced608c1b0618df4a9a7f',1,'gene(): RD.cpp'],['../Renner_8cpp.html#a4896c0e9b10ced608c1b0618df4a9a7f',1,'gene(): Renner.cpp']]], + ['genf_81',['genf',['../RD_8cpp.html#a982f9ad63699c56d5d6a29e59fc68f77',1,'genf(): RD.cpp'],['../Renner_8cpp.html#a982f9ad63699c56d5d6a29e59fc68f77',1,'genf(): Renner.cpp']]], + ['gens_82',['gens',['../image_8cpp.html#aaf65b3741673e02c4fd68d9171451fa1',1,'gens(): image.cpp'],['../Renner_8cpp.html#aeb59c6da6e27dab7d481b77982c4c18e',1,'gens(): Renner.cpp'],['../Trans_8cpp.html#a5314931fa541c542634efc63b55b9f8c',1,'gens(): Trans.cpp']]] +]; diff --git a/docs/search/all_7.html b/docs/search/all_7.html new file mode 100644 index 00000000..8ddbf6c8 --- /dev/null +++ b/docs/search/all_7.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/all_7.js b/docs/search/all_7.js new file mode 100644 index 00000000..d4aea786 --- /dev/null +++ b/docs/search/all_7.js @@ -0,0 +1,33 @@ +var searchData= +[ + ['detail_83',['detail',['../namespaceHPCombi_1_1detail.html',1,'HPCombi']]], + ['has_5fpattern_84',['has_pattern',['../pattern_8cpp.html#a646d303d1afd411646168f20eee074e3',1,'pattern.cpp']]], + ['hash_3c_20hpcombi_3a_3abmat8_20_3e_85',['hash< HPCombi::BMat8 >',['../structstd_1_1hash_3_01HPCombi_1_1BMat8_01_4.html',1,'std']]], + ['hash_3c_20hpcombi_3a_3aepu8_20_3e_86',['hash< HPCombi::epu8 >',['../structstd_1_1hash_3_01HPCombi_1_1epu8_01_4.html',1,'std']]], + ['hash_3c_20hpcombi_3a_3aperm16_20_3e_87',['hash< HPCombi::Perm16 >',['../structstd_1_1hash_3_01HPCombi_1_1Perm16_01_4.html',1,'std']]], + ['hash_3c_20hpcombi_3a_3apermgeneric_3c_20size_2c_20expo_20_3e_20_3e_88',['hash< HPCombi::PermGeneric< Size, Expo > >',['../structstd_1_1hash_3_01HPCombi_1_1PermGeneric_3_01Size_00_01Expo_01_4_01_4.html',1,'std']]], + ['hash_3c_20hpcombi_3a_3apperm16_20_3e_89',['hash< HPCombi::PPerm16 >',['../structstd_1_1hash_3_01HPCombi_1_1PPerm16_01_4.html',1,'std']]], + ['hash_3c_20hpcombi_3a_3aptransf16_20_3e_90',['hash< HPCombi::PTransf16 >',['../structstd_1_1hash_3_01HPCombi_1_1PTransf16_01_4.html',1,'std']]], + ['hash_3c_20hpcombi_3a_3atransf16_20_3e_91',['hash< HPCombi::Transf16 >',['../structstd_1_1hash_3_01HPCombi_1_1Transf16_01_4.html',1,'std']]], + ['hash_3c_20hpcombi_3a_3avect16_20_3e_92',['hash< HPCombi::Vect16 >',['../structstd_1_1hash_3_01HPCombi_1_1Vect16_01_4.html',1,'std']]], + ['hash_3c_20hpcombi_3a_3avectgeneric_3c_20size_2c_20expo_20_3e_20_3e_93',['hash< HPCombi::VectGeneric< Size, Expo > >',['../structstd_1_1hash_3_01HPCombi_1_1VectGeneric_3_01Size_00_01Expo_01_4_01_4.html',1,'std']]], + ['horiz_5fmax_94',['horiz_max',['../namespaceHPCombi.html#a87adf727d561fa11a7b9214cc137d649',1,'HPCombi::horiz_max()'],['../structHPCombi_1_1VectGeneric.html#afcc183c6e29e2b28d0ed914fb03ea5ec',1,'HPCombi::VectGeneric::horiz_max()']]], + ['horiz_5fmax3_95',['horiz_max3',['../namespaceHPCombi.html#a4f28da42ee647c4364d292bcd6d9af77',1,'HPCombi']]], + ['horiz_5fmax4_96',['horiz_max4',['../namespaceHPCombi.html#a4e7ba4a01c23e13ff625672d28b29573',1,'HPCombi']]], + ['horiz_5fmax_5fgen_97',['horiz_max_gen',['../namespaceHPCombi.html#ad7e3db96bbeba229f92ed9c2ed675dc5',1,'HPCombi']]], + ['horiz_5fmax_5fref_98',['horiz_max_ref',['../namespaceHPCombi.html#aa7f5e8e968d56b6babc1fba9b124d33e',1,'HPCombi']]], + ['horiz_5fmin_99',['horiz_min',['../structHPCombi_1_1VectGeneric.html#ac6060f7ae582f1a8052fb9d33fddbcc8',1,'HPCombi::VectGeneric::horiz_min()'],['../namespaceHPCombi.html#a2b8a25566daa66f51043fa6038e5d967',1,'HPCombi::horiz_min(epu8 v) noexcept']]], + ['horiz_5fmin3_100',['horiz_min3',['../namespaceHPCombi.html#af03610453e4f629a1b878b62a4cc2396',1,'HPCombi']]], + ['horiz_5fmin4_101',['horiz_min4',['../namespaceHPCombi.html#a033c95a36e1d6f63befd77d7692644ef',1,'HPCombi']]], + ['horiz_5fmin_5fgen_102',['horiz_min_gen',['../namespaceHPCombi.html#a511083ab52763c4f25f535bec48fb262',1,'HPCombi']]], + ['horiz_5fmin_5fref_103',['horiz_min_ref',['../namespaceHPCombi.html#a0f96cea5c5a6e8b90ebeeeb9899c8109',1,'HPCombi']]], + ['horiz_5fsum_104',['horiz_sum',['../structHPCombi_1_1VectGeneric.html#a8e750bf6fb679ea736d98b9e4e884cc6',1,'HPCombi::VectGeneric::horiz_sum()'],['../namespaceHPCombi.html#a858065135d453d5a6a39cc90e81f68c0',1,'HPCombi::horiz_sum(epu8 v) noexcept']]], + ['horiz_5fsum3_105',['horiz_sum3',['../namespaceHPCombi.html#a6c2291f70eb54bb79981eca2ae5af5c1',1,'HPCombi']]], + ['horiz_5fsum4_106',['horiz_sum4',['../namespaceHPCombi.html#a623cd8ff3391e0f832d57554b044927b',1,'HPCombi']]], + ['horiz_5fsum_5fgen_107',['horiz_sum_gen',['../namespaceHPCombi.html#aef2505d534d007462fc2546af7d787bd',1,'HPCombi']]], + ['horiz_5fsum_5fref_108',['horiz_sum_ref',['../namespaceHPCombi.html#a6c6f1388eb85daeeb82674ed11039e88',1,'HPCombi']]], + ['hpcombi_109',['HPCombi',['../namespaceHPCombi.html',1,'HPCombi'],['../index.html',1,'(Global Namespace)']]], + ['hpcombi_2ehpp_110',['hpcombi.hpp',['../hpcombi_8hpp.html',1,'']]], + ['hpcombi_5fassert_111',['HPCOMBI_ASSERT',['../debug_8hpp.html#a35656321588a81b81a5f2d2c1afceba0',1,'debug.hpp']]], + ['power_5fhelper_112',['power_helper',['../namespaceHPCombi_1_1power__helper.html',1,'HPCombi']]] +]; diff --git a/docs/search/all_8.html b/docs/search/all_8.html new file mode 100644 index 00000000..83c55ae2 --- /dev/null +++ b/docs/search/all_8.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/all_8.js b/docs/search/all_8.js new file mode 100644 index 00000000..07b571f3 --- /dev/null +++ b/docs/search/all_8.js @@ -0,0 +1,27 @@ +var searchData= +[ + ['id_113',['id',['../structHPCombi_1_1TPUBuild.html#aed9c115d3df8b6d23fe8e6cba53058a4',1,'HPCombi::TPUBuild::id()'],['../Renner_8cpp.html#a012b46607c6e4badeb51938a7265a809',1,'id(): Renner.cpp'],['../RD_8cpp.html#a012b46607c6e4badeb51938a7265a809',1,'id(): RD.cpp']]], + ['image_2ecpp_114',['image.cpp',['../image_8cpp.html',1,'']]], + ['image_5fbitset_115',['image_bitset',['../structHPCombi_1_1PTransf16.html#a94af63b3480e1fd989c796ecf12293b3',1,'HPCombi::PTransf16']]], + ['image_5fmask_116',['image_mask',['../structHPCombi_1_1PTransf16.html#ae0757d9adc336545b9a7f78b19e3163e',1,'HPCombi::PTransf16']]], + ['image_5fmask_5fcmpestrm_117',['image_mask_cmpestrm',['../structHPCombi_1_1PTransf16.html#aef3cf621e47f9b7f20d613ee5e5781a5',1,'HPCombi::PTransf16']]], + ['image_5fmask_5fref_118',['image_mask_ref',['../structHPCombi_1_1PTransf16.html#acfc94618f7b9f6e1de91df1c205458b0',1,'HPCombi::PTransf16']]], + ['inverse_119',['inverse',['../structHPCombi_1_1Perm16.html#a175f40a78824b7ea838b265475acf3a0',1,'HPCombi::Perm16::inverse()'],['../structHPCombi_1_1PermGeneric.html#a9a426ab06b8967c48160b927f11002af',1,'HPCombi::PermGeneric::inverse()']]], + ['inverse_5farr_120',['inverse_arr',['../structHPCombi_1_1Perm16.html#af8996f8687c0454a2df1e908d65f93e5',1,'HPCombi::Perm16']]], + ['inverse_5fcycl_121',['inverse_cycl',['../structHPCombi_1_1Perm16.html#a09c5a4cb561215987e924993f976b452',1,'HPCombi::Perm16']]], + ['inverse_5ffind_122',['inverse_find',['../structHPCombi_1_1Perm16.html#a631e451f841177eb2326037b1f60a815',1,'HPCombi::Perm16']]], + ['inverse_5fpow_123',['inverse_pow',['../structHPCombi_1_1Perm16.html#af35cb988980e785965af83b73fde7a5b',1,'HPCombi::Perm16']]], + ['inverse_5fref_124',['inverse_ref',['../structHPCombi_1_1PPerm16.html#a04b30cc8fbb58a1fa00c7cc0908e6fe0',1,'HPCombi::PPerm16::inverse_ref()'],['../structHPCombi_1_1Perm16.html#a9b1fc76ad024bbf3db2e6e72ed07edd8',1,'HPCombi::Perm16::inverse_ref() const']]], + ['inverse_5fsort_125',['inverse_sort',['../structHPCombi_1_1Perm16.html#a500fcb8f89bb5b1985f6017ecf1e66c2',1,'HPCombi::Perm16']]], + ['inverting_5frounds_126',['inverting_rounds',['../namespaceHPCombi.html#aca86cd7eabd1bc46f339d87dd0959c8f',1,'HPCombi']]], + ['is_5fall_5fone_127',['is_all_one',['../namespaceHPCombi.html#a4fdbefc5c5adb2ad975bc0beb34006c8',1,'HPCombi']]], + ['is_5fall_5fzero_128',['is_all_zero',['../namespaceHPCombi.html#aba1cc5c8f5097866de1ed4e89c2427ff',1,'HPCombi']]], + ['is_5fpartial_5fpermutation_129',['is_partial_permutation',['../namespaceHPCombi.html#a52dc25430df70f4c2571c195ee3e6b74',1,'HPCombi']]], + ['is_5fpartial_5ftransformation_130',['is_partial_transformation',['../namespaceHPCombi.html#ae78f298131c7e5ec92ab6c4af6d8db38',1,'HPCombi']]], + ['is_5fpermutation_131',['is_permutation',['../namespaceHPCombi.html#a478bcb766797a616faba4369b3a2a932',1,'HPCombi::is_permutation()'],['../structHPCombi_1_1Vect16.html#aa3ee3393e867dd42866ff5eb0cf85762',1,'HPCombi::Vect16::is_permutation()'],['../structHPCombi_1_1VectGeneric.html#a6a4f96d01b21b6c5f46f815c9f4a9350',1,'HPCombi::VectGeneric::is_permutation()'],['../structHPCombi_1_1Vect16.html#a61f0dbde0e8b166c78cf1f63fa535b21',1,'HPCombi::Vect16::is_permutation()']]], + ['is_5fpermutation_5feval_132',['is_permutation_eval',['../namespaceHPCombi.html#ab66c3586217cad552a623dda25fde541',1,'HPCombi']]], + ['is_5fpermutation_5fsort_133',['is_permutation_sort',['../namespaceHPCombi.html#a52e15434f0b79e6b7b9af96da4ebf41e',1,'HPCombi']]], + ['is_5fsorted_134',['is_sorted',['../structHPCombi_1_1VectGeneric.html#a667eb2c4643cc02bf68925c2c288c7d8',1,'HPCombi::VectGeneric::is_sorted()'],['../namespaceHPCombi.html#ac6b92ba1fcb5dceab675f88a81388bb3',1,'HPCombi::is_sorted(epu8 a) noexcept']]], + ['is_5ftransformation_135',['is_transformation',['../namespaceHPCombi.html#adf9ec872a6e55eb5bd3dbb71a622153a',1,'HPCombi']]], + ['iterator_136',['iterator',['../structHPCombi_1_1VectGeneric.html#a7d14b9d3c7ed8fd33163dc2a34170bbf',1,'HPCombi::VectGeneric::iterator()'],['../structHPCombi_1_1Vect16.html#af9ba842160f8893c7627072d44019cee',1,'HPCombi::Vect16::iterator()']]] +]; diff --git a/docs/search/all_9.html b/docs/search/all_9.html new file mode 100644 index 00000000..1e263c13 --- /dev/null +++ b/docs/search/all_9.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/all_9.js b/docs/search/all_9.js new file mode 100644 index 00000000..c8cc97c4 --- /dev/null +++ b/docs/search/all_9.js @@ -0,0 +1,27 @@ +var searchData= +[ + ['largest_5ffix_5fpoint_137',['largest_fix_point',['../structHPCombi_1_1PTransf16.html#ad5720ce9be1366ff916c050e5ece6137',1,'HPCombi::PTransf16']]], + ['largest_5fmoved_5fpoint_138',['largest_moved_point',['../structHPCombi_1_1PTransf16.html#a68c50e2963bce023b94ab6d66bfd1d9d',1,'HPCombi::PTransf16']]], + ['last_5fdiff_139',['last_diff',['../structHPCombi_1_1Vect16.html#a30efb6b1130f0e075f9dc5eb0d631430',1,'HPCombi::Vect16::last_diff()'],['../structHPCombi_1_1VectGeneric.html#abae25bc3fa4def0f072bccffbb51d7ca',1,'HPCombi::VectGeneric::last_diff()'],['../namespaceHPCombi.html#acc03c8b728fe7757e1afdb5c5ade6d6e',1,'HPCombi::last_diff(epu8 a, epu8 b, size_t bound=16) noexcept']]], + ['last_5fdiff_5fmask_140',['last_diff_mask',['../namespaceHPCombi.html#a4eb3521f1e6e8d41ab3d29b85a1434e0',1,'HPCombi']]], + ['last_5fdiff_5fref_141',['last_diff_ref',['../namespaceHPCombi.html#a08f3869d86935e4d673d689100897795',1,'HPCombi']]], + ['last_5fmask_142',['last_mask',['../namespaceHPCombi.html#aae562c31169e562932063a85cce73011',1,'HPCombi']]], + ['last_5fnon_5fzero_143',['last_non_zero',['../namespaceHPCombi.html#acbe31eeff89aa06d27e20c816f49e6d3',1,'HPCombi::last_non_zero()'],['../structHPCombi_1_1Vect16.html#ad7c5bae2832dfa5dac7b80a300966106',1,'HPCombi::Vect16::last_non_zero()'],['../structHPCombi_1_1VectGeneric.html#a51a6375879266451a138673275e1d161',1,'HPCombi::VectGeneric::last_non_zero()']]], + ['last_5fzero_144',['last_zero',['../namespaceHPCombi.html#a53a462687b8e475e593408aae6812a38',1,'HPCombi::last_zero()'],['../structHPCombi_1_1VectGeneric.html#a2e306fc2d5743dca472728ba237f623f',1,'HPCombi::VectGeneric::last_zero()'],['../structHPCombi_1_1Vect16.html#a4bd825c889f30ab2f2ffe0e8187d0275',1,'HPCombi::Vect16::last_zero()']]], + ['left_5fcycle_145',['left_cycle',['../structHPCombi_1_1TPUBuild.html#adfb6832fdd4c5350e747029fee8dccc6',1,'HPCombi::TPUBuild']]], + ['left_5fdup_146',['left_dup',['../structHPCombi_1_1TPUBuild.html#a3153054b3d221fff16b7c98f55af806c',1,'HPCombi::TPUBuild']]], + ['left_5fone_147',['left_one',['../structHPCombi_1_1PTransf16.html#a71b0218d6b7d1c8a55f52c67a068ad51',1,'HPCombi::PTransf16::left_one()'],['../structHPCombi_1_1PPerm16.html#aae92b2ae8a843da11e25f64633a10751',1,'HPCombi::PPerm16::left_one()']]], + ['left_5fweak_5fleq_148',['left_weak_leq',['../structHPCombi_1_1Perm16.html#ac7ae022d0bc677bc601c372303e05f14',1,'HPCombi::Perm16::left_weak_leq()'],['../structHPCombi_1_1PermGeneric.html#a306ae8219524cbc29a85b121905f32cd',1,'HPCombi::PermGeneric::left_weak_leq()']]], + ['left_5fweak_5fleq_5flength_149',['left_weak_leq_length',['../structHPCombi_1_1Perm16.html#a8289607c4b881c86f6770f4826cafacc',1,'HPCombi::Perm16']]], + ['left_5fweak_5fleq_5fref_150',['left_weak_leq_ref',['../structHPCombi_1_1Perm16.html#a3c807d4f8ff80f1ccc967efe95af7b3e',1,'HPCombi::Perm16']]], + ['lehmer_151',['lehmer',['../structHPCombi_1_1PermGeneric.html#aa1cc32d6ad16e0288a3ed53114ab5d88',1,'HPCombi::PermGeneric::lehmer()'],['../structHPCombi_1_1Perm16.html#a2304bd009f63be8ab28154ec6774c546',1,'HPCombi::Perm16::lehmer() const']]], + ['lehmer_5farr_152',['lehmer_arr',['../structHPCombi_1_1Perm16.html#ac1738649bf6566817be4408ae6630a96',1,'HPCombi::Perm16']]], + ['lehmer_5fref_153',['lehmer_ref',['../structHPCombi_1_1Perm16.html#a65c8b896254a7a6dde4b579ec09159c3',1,'HPCombi::Perm16']]], + ['length_154',['length',['../structHPCombi_1_1Perm16.html#a84b7d749ffebabf06adb3e73b1e3f0b0',1,'HPCombi::Perm16::length()'],['../structHPCombi_1_1PermGeneric.html#a0260047ce8685bad02ea84babc2bb634',1,'HPCombi::PermGeneric::length()']]], + ['length_5farr_155',['length_arr',['../structHPCombi_1_1Perm16.html#af7de3325da3fa6290a4560910508553c',1,'HPCombi::Perm16']]], + ['length_5fref_156',['length_ref',['../structHPCombi_1_1Perm16.html#a2e3c937402f48f0b0968091802e91dfe',1,'HPCombi::Perm16']]], + ['less_157',['less',['../namespaceHPCombi.html#aa61b4954734a02068f591c7eafa1aeb6',1,'HPCombi']]], + ['less_3c_20hpcombi_3a_3aepu8_20_3e_158',['less< HPCombi::epu8 >',['../structstd_1_1less_3_01HPCombi_1_1epu8_01_4.html',1,'std']]], + ['less_5fpartial_159',['less_partial',['../namespaceHPCombi.html#a48d70a6a69df96cc4f981306c1c0dc44',1,'HPCombi::less_partial()'],['../structHPCombi_1_1VectGeneric.html#a294b418ee2482f48bf27d504b9b5c4e9',1,'HPCombi::VectGeneric::less_partial()'],['../structHPCombi_1_1Vect16.html#a4493fd35ac6e942b8318c918df98c2aa',1,'HPCombi::Vect16::less_partial()']]], + ['libsemigroups_160',['libsemigroups',['../namespacelibsemigroups.html',1,'']]] +]; diff --git a/docs/search/all_a.html b/docs/search/all_a.html new file mode 100644 index 00000000..3a6cac10 --- /dev/null +++ b/docs/search/all_a.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/all_a.js b/docs/search/all_a.js new file mode 100644 index 00000000..a536fbaa --- /dev/null +++ b/docs/search/all_a.js @@ -0,0 +1,19 @@ +var searchData= +[ + ['main_161',['main',['../CF_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): CF.cpp'],['../image_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): image.cpp'],['../pattern_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): pattern.cpp'],['../RD_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): RD.cpp'],['../Renner_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): Renner.cpp'],['../stringmonoid_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): stringmonoid.cpp'],['../Trans_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): Trans.cpp']]], + ['make_5fhelper_162',['make_helper',['../structHPCombi_1_1TPUBuild.html#ae93e314a3ce647fab47f0977e8a358d7',1,'HPCombi::TPUBuild']]], + ['make_5fsubsets_5fof_5fsize_163',['make_subsets_of_size',['../pattern_8cpp.html#a709bbc0209d67b746b6c98d6cedab346',1,'pattern.cpp']]], + ['masks_164',['masks',['../namespaceHPCombi.html#ad32ade8a6114aee1b93afb9371e91daf',1,'HPCombi']]], + ['max_165',['max',['../namespaceHPCombi.html#a0646701c19ff360b4c2d657792aea5af',1,'HPCombi']]], + ['merge_166',['merge',['../namespaceHPCombi.html#a586f702ac2ec0c080f2353dfcc8e9468',1,'HPCombi']]], + ['merge_5frev_167',['merge_rev',['../namespaceHPCombi.html#a47f3ce91786c3eb76ba794fac71464bf',1,'HPCombi']]], + ['merge_5frounds_168',['merge_rounds',['../namespaceHPCombi.html#aeacebab2816991f0dffc0324d0617d5f',1,'HPCombi']]], + ['min_169',['min',['../namespaceHPCombi.html#a7311b8e708cad54b14267310fd0330e9',1,'HPCombi']]], + ['mining_5frounds_170',['mining_rounds',['../namespaceHPCombi.html#aaf9e65eb3263a0c17896f4dd6856ac2d',1,'HPCombi']]], + ['monoid_171',['Monoid',['../structHPCombi_1_1power__helper_1_1Monoid.html',1,'HPCombi::power_helper']]], + ['monoid_3c_20perm16_20_3e_172',['Monoid< Perm16 >',['../structHPCombi_1_1power__helper_1_1Monoid_3_01Perm16_01_4.html',1,'HPCombi::power_helper']]], + ['monoid_3c_20std_3a_3astring_20_3e_173',['Monoid< std::string >',['../structHPCombi_1_1power__helper_1_1Monoid_3_01std_1_1string_01_4.html',1,'HPCombi::power_helper']]], + ['mult0_174',['mult0',['../Renner_8cpp.html#a9234754a158da685f218472ce18fa2a1',1,'Renner.cpp']]], + ['mult1_175',['mult1',['../Renner_8cpp.html#a5900f2f52cf050a63e110455f6b8ba28',1,'Renner.cpp']]], + ['mult_5ftranspose_176',['mult_transpose',['../classHPCombi_1_1BMat8.html#a4651222219806ac931098b4313686c79',1,'HPCombi::BMat8']]] +]; diff --git a/docs/search/all_b.html b/docs/search/all_b.html new file mode 100644 index 00000000..130deb4e --- /dev/null +++ b/docs/search/all_b.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/all_b.js b/docs/search/all_b.js new file mode 100644 index 00000000..3a064704 --- /dev/null +++ b/docs/search/all_b.js @@ -0,0 +1,15 @@ +var searchData= +[ + ['nb_5fcycles_177',['nb_cycles',['../structHPCombi_1_1Perm16.html#aa8419e1bd0baa579230662ec330d4b59',1,'HPCombi::Perm16::nb_cycles()'],['../structHPCombi_1_1PermGeneric.html#a9b459b328e72baf66183aa4d0fb74d19',1,'HPCombi::PermGeneric::nb_cycles()']]], + ['nb_5fcycles_5fref_178',['nb_cycles_ref',['../structHPCombi_1_1Perm16.html#aa97a138984c6f2d65f01ae10060aa404',1,'HPCombi::Perm16']]], + ['nb_5fcycles_5funroll_179',['nb_cycles_unroll',['../structHPCombi_1_1Perm16.html#ad13762ff67667cefd5b168e9d3749de0',1,'HPCombi::Perm16']]], + ['nb_5fdescents_180',['nb_descents',['../structHPCombi_1_1Perm16.html#a9e7516967d131748bb71025272fc2cb8',1,'HPCombi::Perm16::nb_descents()'],['../structHPCombi_1_1PermGeneric.html#ac22db541f350a935dc1d4251e16396ea',1,'HPCombi::PermGeneric::nb_descents()']]], + ['nb_5fdescents_5fref_181',['nb_descents_ref',['../structHPCombi_1_1Perm16.html#a416fa7fe28a69a8dce58fd5c510580b3',1,'HPCombi::Perm16']]], + ['nb_5ffix_5fpoints_182',['nb_fix_points',['../structHPCombi_1_1PTransf16.html#a0bcb7c0ad622432d9cfb123d84cacc01',1,'HPCombi::PTransf16']]], + ['network_5fsort_183',['network_sort',['../namespaceHPCombi.html#a3680243ecce798cc11e87c57607271f0',1,'HPCombi']]], + ['network_5fsort_5fperm_184',['network_sort_perm',['../namespaceHPCombi.html#a86b7437ea131f9e4f39fa48afe3c997a',1,'HPCombi']]], + ['not_5fequal_185',['not_equal',['../namespaceHPCombi.html#af15fa0a701cf19a906188cef47ff0369',1,'HPCombi']]], + ['not_5fequal_5fto_3c_20hpcombi_3a_3aepu8_20_3e_186',['not_equal_to< HPCombi::epu8 >',['../structstd_1_1not__equal__to_3_01HPCombi_1_1epu8_01_4.html',1,'std']]], + ['nprint_187',['nprint',['../Renner_8cpp.html#a6b84f9889bd0dce8d8e93221ff301d28',1,'Renner.cpp']]], + ['nr_5frows_188',['nr_rows',['../classHPCombi_1_1BMat8.html#adc18c527e7344c22637b4572834a5547',1,'HPCombi::BMat8']]] +]; diff --git a/docs/search/all_c.html b/docs/search/all_c.html new file mode 100644 index 00000000..3dd5af06 --- /dev/null +++ b/docs/search/all_c.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/all_c.js b/docs/search/all_c.js new file mode 100644 index 00000000..21834735 --- /dev/null +++ b/docs/search/all_c.js @@ -0,0 +1,16 @@ +var searchData= +[ + ['one_189',['one',['../structHPCombi_1_1PTransf16.html#a5ced9d0ea584cc041a3d8797f1b3f660',1,'HPCombi::PTransf16::one()'],['../structHPCombi_1_1Transf16.html#aeb023daa93795f73d8d4283e3c805182',1,'HPCombi::Transf16::one()'],['../structHPCombi_1_1PPerm16.html#a8202e3201728fc1291e9552d47f86e2b',1,'HPCombi::PPerm16::one()'],['../structHPCombi_1_1Perm16.html#a63b40f30e52e7b6c927c694ef5e1873b',1,'HPCombi::Perm16::one()'],['../structHPCombi_1_1power__helper_1_1Monoid_3_01Perm16_01_4.html#a4d3541f1afa49819274925c9fa9e2162',1,'HPCombi::power_helper::Monoid< Perm16 >::one()'],['../structHPCombi_1_1PermGeneric.html#abc4729ffdb38a9521d9a3198cef25bec',1,'HPCombi::PermGeneric::one()'],['../structHPCombi_1_1power__helper_1_1Monoid.html#a77b1edca3343d14c5c635aa8466ae54a',1,'HPCombi::power_helper::Monoid::one()'],['../structHPCombi_1_1power__helper_1_1Monoid_3_01std_1_1string_01_4.html#a99d01c0528473fb59ce2795fc169a082',1,'HPCombi::power_helper::Monoid< std::string >::one()'],['../classHPCombi_1_1BMat8.html#ac4cf296bf88a395be8aa66c24758c4e8',1,'HPCombi::BMat8::one()']]], + ['operator_20epu8_190',['operator epu8',['../structHPCombi_1_1Vect16.html#a6be7e52ae279ba88fb250940b6918b49',1,'HPCombi::Vect16']]], + ['operator_20uint64_5ft_191',['operator uint64_t',['../structHPCombi_1_1Transf16.html#aaf2212d8d42159c1d6e667b349c76278',1,'HPCombi::Transf16']]], + ['operator_21_3d_192',['operator!=',['../structHPCombi_1_1Vect16.html#ac726f3a33254a303ad93a0bd2f68629f',1,'HPCombi::Vect16::operator!=()'],['../structHPCombi_1_1VectGeneric.html#ad9c84c68870655d8ff8ddebc4f059552',1,'HPCombi::VectGeneric::operator!=()'],['../classHPCombi_1_1BMat8.html#aaa2ea8ecae3e65884a96229415d581ae',1,'HPCombi::BMat8::operator!=()']]], + ['operator_22_22_5fu8_193',['operator""_u8',['../namespaceHPCombi.html#a4e21f6f62adc6a8c2a44235ea1fdb6aa',1,'HPCombi']]], + ['operator_28_29_194',['operator()',['../structstd_1_1hash_3_01HPCombi_1_1VectGeneric_3_01Size_00_01Expo_01_4_01_4.html#a4818ad56ea83fcc1e26344a926d22417',1,'std::hash< HPCombi::VectGeneric< Size, Expo > >::operator()()'],['../structstd_1_1hash_3_01HPCombi_1_1Vect16_01_4.html#a8886609d963cd209fa385aa4f9f5bf5e',1,'std::hash< HPCombi::Vect16 >::operator()()'],['../structstd_1_1hash_3_01HPCombi_1_1PermGeneric_3_01Size_00_01Expo_01_4_01_4.html#a64048804317848cf915f9243a6ecb2b4',1,'std::hash< HPCombi::PermGeneric< Size, Expo > >::operator()()'],['../structstd_1_1hash_3_01HPCombi_1_1Perm16_01_4.html#a9a264af7ec92b2c31f80fff3cfe3129b',1,'std::hash< HPCombi::Perm16 >::operator()()'],['../structstd_1_1hash_3_01HPCombi_1_1PPerm16_01_4.html#a35a6f55ba3c3d29e326294b8ef43040c',1,'std::hash< HPCombi::PPerm16 >::operator()()'],['../structstd_1_1hash_3_01HPCombi_1_1Transf16_01_4.html#a12b841a945df6a07fc2ecfd627594333',1,'std::hash< HPCombi::Transf16 >::operator()()'],['../structstd_1_1hash_3_01HPCombi_1_1PTransf16_01_4.html#a0f210c77e5828b81e8b85ec36ed5fcd3',1,'std::hash< HPCombi::PTransf16 >::operator()()'],['../structstd_1_1less_3_01HPCombi_1_1epu8_01_4.html#a91b48367cf233a042759d45a3acf23b1',1,'std::less< HPCombi::epu8 >::operator()()'],['../structstd_1_1hash_3_01HPCombi_1_1epu8_01_4.html#a0bbfaaa9227daa6dfa3f7d0f8adca9ca',1,'std::hash< HPCombi::epu8 >::operator()()'],['../structstd_1_1equal__to_3_01HPCombi_1_1epu8_01_4.html#a370365acfbf64a846b02e7cb31182ec5',1,'std::equal_to< HPCombi::epu8 >::operator()()'],['../classHPCombi_1_1BMat8.html#aece1174c28ff5113a00022d2a089cfd9',1,'HPCombi::BMat8::operator()()'],['../structstd_1_1not__equal__to_3_01HPCombi_1_1epu8_01_4.html#aad871e7d80045cadd65190a555a35d3d',1,'std::not_equal_to< HPCombi::epu8 >::operator()()'],['../structstd_1_1hash_3_01HPCombi_1_1BMat8_01_4.html#a988a0f8198d58347e32e0905224f81f1',1,'std::hash< HPCombi::BMat8 >::operator()()'],['../structHPCombi_1_1TPUBuild.html#a8603c51a9f98f6f2ca555983ceac8d0a',1,'HPCombi::TPUBuild::operator()(std::initializer_list< type_elem > il, type_elem def) const'],['../structHPCombi_1_1TPUBuild.html#ad742d9c0485c162740dc16b6809cee03',1,'HPCombi::TPUBuild::operator()(Fun f) const'],['../structHPCombi_1_1TPUBuild.html#a6fb6834162324d97335201db3c70f79e',1,'HPCombi::TPUBuild::operator()(int c) const'],['../structHPCombi_1_1TPUBuild.html#a8182bdc6f41fce3f7fa0fd8f2c5cf57d',1,'HPCombi::TPUBuild::operator()(size_t c) const'],['../structHPCombi_1_1TPUBuild.html#ad2cc6df933b4fc9b73b20fe9f2cb9a39',1,'HPCombi::TPUBuild::operator()(array a) const'],['../structHPCombi_1_1TPUBuild.html#ae752a5bdb661c7f28b390395f3ec5311',1,'HPCombi::TPUBuild::operator()(type_elem c) const']]], + ['operator_2a_195',['operator*',['../classHPCombi_1_1BMat8.html#a9a8e81165fc69d94c245f2eab848025d',1,'HPCombi::BMat8::operator*()'],['../structHPCombi_1_1PTransf16.html#a38a01e52057d08f842e13c60b03eb976',1,'HPCombi::PTransf16::operator*()'],['../structHPCombi_1_1Transf16.html#a33f554c7429538f8857c7072e625719e',1,'HPCombi::Transf16::operator*()'],['../structHPCombi_1_1PPerm16.html#a060c7efa99da156adf26251a99eb91c2',1,'HPCombi::PPerm16::operator*()'],['../structHPCombi_1_1Perm16.html#a54dc666e276176878a1aa62e57fab0c4',1,'HPCombi::Perm16::operator*()'],['../structHPCombi_1_1PermGeneric.html#a6017270703ae89a3c10777b8c98492dd',1,'HPCombi::PermGeneric::operator*()']]], + ['operator_3c_196',['operator<',['../structHPCombi_1_1Vect16.html#a6a2c90e00a555321a9edf6ac2fe14680',1,'HPCombi::Vect16::operator<()'],['../structHPCombi_1_1VectGeneric.html#a0a9ad9bd2f8db3dda236cf2c6e4053ea',1,'HPCombi::VectGeneric::operator<()'],['../classHPCombi_1_1BMat8.html#af1133c4c4d89be6e8c45b24747e703f5',1,'HPCombi::BMat8::operator<()']]], + ['operator_3c_3c_197',['operator<<',['../pattern_8cpp.html#a752c44978f0f5abde8919968032102bb',1,'operator<<(std::ostream &out, const std::vector< T > &v): pattern.cpp'],['../image_8cpp.html#a752c44978f0f5abde8919968032102bb',1,'operator<<(std::ostream &out, const std::vector< T > &v): image.cpp'],['../namespacestd.html#a465dcbfbb08ba0ce8dc8e1f63c45b286',1,'std::operator<<(std::ostream &stream, const HPCombi::VectGeneric< Size, Expo > &v)'],['../namespacestd.html#a506955df44792820b0c2b74edb311a65',1,'std::operator<<(std::ostream &stream, const HPCombi::Vect16 &ar)'],['../namespacestd.html#a652bbc8106891de4dc7de5aef7b1e12a',1,'std::operator<<(std::ostream &stream, HPCombi::epu8 const &a)'],['../namespacestd.html#a6e16d9b96075ed604216f0b0cfdbbdaa',1,'std::operator<<(std::ostream &os, HPCombi::BMat8 const &bm)'],['../Renner_8cpp.html#a752c44978f0f5abde8919968032102bb',1,'operator<<(): Renner.cpp'],['../classlibsemigroups_1_1Timer.html#abc161ba00cf4e40783f7c82002c3e55f',1,'libsemigroups::Timer::operator<<()']]], + ['operator_3d_198',['operator=',['../structHPCombi_1_1Perm16.html#a9e07b23b99ca0b8d7b5dd8dbefd25e05',1,'HPCombi::Perm16::operator=()'],['../structHPCombi_1_1PPerm16.html#a378724b2ac086483a7a0b546007c880c',1,'HPCombi::PPerm16::operator=()'],['../structHPCombi_1_1Transf16.html#acbac6dc78027602d03935ac3f1bf5b08',1,'HPCombi::Transf16::operator=()'],['../classHPCombi_1_1BMat8.html#abd4df5c8242ebc30c75f261714214ae1',1,'HPCombi::BMat8::operator=(BMat8 &&) noexcept=default'],['../classHPCombi_1_1BMat8.html#a33ff906396b92d5964bf97321c1d9aa8',1,'HPCombi::BMat8::operator=(BMat8 const &) noexcept=default']]], + ['operator_3d_3d_199',['operator==',['../structHPCombi_1_1VectGeneric.html#a28071e7216c62fffdf5dc91060ee6d01',1,'HPCombi::VectGeneric::operator==()'],['../structHPCombi_1_1Vect16.html#a0f8289f694502bd2d95f3a9adafe0099',1,'HPCombi::Vect16::operator==()'],['../classHPCombi_1_1BMat8.html#ae4b3bfd6f9907f772cd99f714d80b39e',1,'HPCombi::BMat8::operator==(BMat8 const &that) const noexcept']]], + ['operator_3e_200',['operator>',['../classHPCombi_1_1BMat8.html#a6f3c955245b9a995934cf8f687056b3d',1,'HPCombi::BMat8']]], + ['operator_5b_5d_201',['operator[]',['../structHPCombi_1_1Vect16.html#a36975a719b4512de62b01524feb41909',1,'HPCombi::Vect16::operator[](uint64_t i) const'],['../structHPCombi_1_1Vect16.html#a8fd217b7b42b2725bb35c3b1d2b36216',1,'HPCombi::Vect16::operator[](uint64_t i)'],['../structHPCombi_1_1VectGeneric.html#ae13a794b06324d082285ad1a9c00a369',1,'HPCombi::VectGeneric::operator[](uint64_t i) const'],['../structHPCombi_1_1VectGeneric.html#a540e20fcdb1774898d00f22fe5810605',1,'HPCombi::VectGeneric::operator[](uint64_t i)']]] +]; diff --git a/docs/search/all_d.html b/docs/search/all_d.html new file mode 100644 index 00000000..af7f2f0f --- /dev/null +++ b/docs/search/all_d.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/all_d.js b/docs/search/all_d.js new file mode 100644 index 00000000..4cf6ed39 --- /dev/null +++ b/docs/search/all_d.js @@ -0,0 +1,38 @@ +var searchData= +[ + ['partial_5fmax_202',['partial_max',['../namespaceHPCombi.html#aebabe1134b200833d13df297171044ef',1,'HPCombi']]], + ['partial_5fmax_5fgen_203',['partial_max_gen',['../namespaceHPCombi.html#aa34703f1217e3895d78e3298644cf866',1,'HPCombi']]], + ['partial_5fmax_5finplace_204',['partial_max_inplace',['../structHPCombi_1_1VectGeneric.html#ac4b66975021656ca46667099ecc411df',1,'HPCombi::VectGeneric']]], + ['partial_5fmax_5fref_205',['partial_max_ref',['../namespaceHPCombi.html#a767e7ba4b8b510af066cc701ae2d239e',1,'HPCombi']]], + ['partial_5fmax_5fround_206',['partial_max_round',['../namespaceHPCombi.html#a7b2fbe8b3e4b850266173841d03e3380',1,'HPCombi']]], + ['partial_5fmin_207',['partial_min',['../namespaceHPCombi.html#abad0634130ca5c6ceb618aeb8288b89d',1,'HPCombi']]], + ['partial_5fmin_5fgen_208',['partial_min_gen',['../namespaceHPCombi.html#acf38a699b1247482f0ab7510c570a76f',1,'HPCombi']]], + ['partial_5fmin_5finplace_209',['partial_min_inplace',['../structHPCombi_1_1VectGeneric.html#a9db4ea0b4930e5397d29135b13ce0a30',1,'HPCombi::VectGeneric']]], + ['partial_5fmin_5fref_210',['partial_min_ref',['../namespaceHPCombi.html#ad158e198d89c30ee0c12a585eb5c0201',1,'HPCombi']]], + ['partial_5fmin_5fround_211',['partial_min_round',['../namespaceHPCombi.html#ac5e754a10eae32f40987fd4135620045',1,'HPCombi']]], + ['partial_5fsums_212',['partial_sums',['../namespaceHPCombi.html#a28889b97d949a58fe0a6f512a972448c',1,'HPCombi::partial_sums()'],['../structHPCombi_1_1Vect16.html#af3b49b7660ef789a346220e205ba3651',1,'HPCombi::Vect16::partial_sums()'],['../structHPCombi_1_1VectGeneric.html#ada6492c1cb27ee503e8dd5b140967829',1,'HPCombi::VectGeneric::partial_sums()']]], + ['partial_5fsums_5fgen_213',['partial_sums_gen',['../namespaceHPCombi.html#a6d9fc8a25884023cf4ba1ce178d52ff9',1,'HPCombi']]], + ['partial_5fsums_5finplace_214',['partial_sums_inplace',['../structHPCombi_1_1VectGeneric.html#aaa696ffe7323a721d4327c2124408c85',1,'HPCombi::VectGeneric']]], + ['partial_5fsums_5fref_215',['partial_sums_ref',['../namespaceHPCombi.html#a28294ae8292022d82bd3430c140e80d8',1,'HPCombi']]], + ['partial_5fsums_5fround_216',['partial_sums_round',['../namespaceHPCombi.html#a64cc63aae55df82d6890848608d468ea',1,'HPCombi']]], + ['pattern_2ecpp_217',['pattern.cpp',['../pattern_8cpp.html',1,'']]], + ['perm16_218',['Perm16',['../structHPCombi_1_1Perm16.html',1,'HPCombi::Perm16'],['../structHPCombi_1_1Perm16.html#a59a9ce7e2f628906e2d41c83ba6a7242',1,'HPCombi::Perm16::Perm16(std::initializer_list< uint8_t > il)'],['../structHPCombi_1_1Perm16.html#a419ed5f66e57f09d9c987706788415ef',1,'HPCombi::Perm16::Perm16(uint64_t compressed)'],['../structHPCombi_1_1Perm16.html#a5cffc55786ae082fd25c52d8daead018',1,'HPCombi::Perm16::Perm16(const epu8 x)'],['../structHPCombi_1_1Perm16.html#a9150b9db88258091929271ed7ed8b6cf',1,'HPCombi::Perm16::Perm16(const vect v)'],['../structHPCombi_1_1Perm16.html#a8ec5730506e0d8549f33deb7620566c9',1,'HPCombi::Perm16::Perm16(const Perm16 &)=default'],['../structHPCombi_1_1Perm16.html#af349aab7da2fa288680f430194e5f939',1,'HPCombi::Perm16::Perm16()=default'],['../namespaceHPCombi_1_1power__helper.html#a00952a61908a8370a693636e5aeb379b',1,'HPCombi::power_helper::Perm16()']]], + ['perm16_2ehpp_219',['perm16.hpp',['../perm16_8hpp.html',1,'']]], + ['perm16_5fimpl_2ehpp_220',['perm16_impl.hpp',['../perm16__impl_8hpp.html',1,'']]], + ['perm_5fgeneric_2ehpp_221',['perm_generic.hpp',['../perm__generic_8hpp.html',1,'']]], + ['perm_5fgeneric_5fimpl_2ehpp_222',['perm_generic_impl.hpp',['../perm__generic__impl_8hpp.html',1,'']]], + ['permgeneric_223',['PermGeneric',['../structHPCombi_1_1PermGeneric.html',1,'HPCombi::PermGeneric< Size, Expo >'],['../structHPCombi_1_1PermGeneric.html#ac5138b09b1aba0eb325e8f9ea6eda1bd',1,'HPCombi::PermGeneric::PermGeneric(std::initializer_list< Expo > il)'],['../structHPCombi_1_1PermGeneric.html#a2fbddc3199299c3254048f23af3628e9',1,'HPCombi::PermGeneric::PermGeneric(const vect v)'],['../structHPCombi_1_1PermGeneric.html#a5349dacff5ac377bbe47b6e36d385021',1,'HPCombi::PermGeneric::PermGeneric()=default']]], + ['permutation_5fof_224',['permutation_of',['../namespaceHPCombi.html#a4056154d0d25a4a8ac6b6495116b7e08',1,'HPCombi']]], + ['permutation_5fof_5fref_225',['permutation_of_ref',['../namespaceHPCombi.html#a708390f084759d351f03cc5d5da0f80d',1,'HPCombi']]], + ['permuted_226',['permuted',['../namespaceHPCombi.html#a12096692b1ed038c3818699db58fd5d9',1,'HPCombi::permuted()'],['../structHPCombi_1_1VectGeneric.html#a80626cf8650ddff8c78a8cafe3ae0fb2',1,'HPCombi::VectGeneric::permuted()'],['../structHPCombi_1_1Vect16.html#ae69701cd6be2cd268557a252fd0fb770',1,'HPCombi::Vect16::permuted()']]], + ['permuted_5fref_227',['permuted_ref',['../namespaceHPCombi.html#ae9f0193201159ecc65acb87414980d8d',1,'HPCombi']]], + ['pi_228',['pi',['../Trans_8cpp.html#ad63357671f82dad9b784bf5863289a0d',1,'Trans.cpp']]], + ['popcount_229',['popcount',['../structHPCombi_1_1TPUBuild.html#a1ac46b633d0cf853e7eb5321fe6b37da',1,'HPCombi::TPUBuild']]], + ['popcount16_230',['popcount16',['../namespaceHPCombi.html#a6429428fa9145e1e9d7fa3f9bf5b6e0e',1,'HPCombi']]], + ['pow_231',['pow',['../namespaceHPCombi.html#af015d3fb3769a7b157aef162ced70b2d',1,'HPCombi']]], + ['power_2ehpp_232',['power.hpp',['../power_8hpp.html',1,'']]], + ['pperm16_233',['PPerm16',['../structHPCombi_1_1PPerm16.html',1,'HPCombi::PPerm16'],['../structHPCombi_1_1PPerm16.html#a715994e4263a61e769265320a20f8a69',1,'HPCombi::PPerm16::PPerm16(std::vector< uint8_t > dom, std::vector< uint8_t > rng, size_t=0)'],['../structHPCombi_1_1PPerm16.html#addc8303c5b76fbc04a6fac131fc1f4bc',1,'HPCombi::PPerm16::PPerm16(std::initializer_list< uint8_t > il)'],['../structHPCombi_1_1PPerm16.html#af295909af453517bb56c0aeedeb134b7',1,'HPCombi::PPerm16::PPerm16(const epu8 x)'],['../structHPCombi_1_1PPerm16.html#a5da248f5427f1463fa6cda8906ac7aee',1,'HPCombi::PPerm16::PPerm16(const vect v)'],['../structHPCombi_1_1PPerm16.html#a502bebb5b8a87913a5636f12d811418f',1,'HPCombi::PPerm16::PPerm16(const PPerm16 &v)=default'],['../structHPCombi_1_1PPerm16.html#a2fe10a6644f786ee932e7e7e7b878035',1,'HPCombi::PPerm16::PPerm16()=default']]], + ['prime_234',['prime',['../namespaceHPCombi.html#a50a6882430bc4ff898a3883fdc2c8e4b',1,'HPCombi']]], + ['prod_235',['prod',['../structHPCombi_1_1power__helper_1_1Monoid_3_01std_1_1string_01_4.html#a4220fe3efef853644e3bce316a584449',1,'HPCombi::power_helper::Monoid< std::string >::prod()'],['../structHPCombi_1_1power__helper_1_1Monoid.html#a0312ff434c0c6e5ffc7a0b31fd414c21',1,'HPCombi::power_helper::Monoid::prod()'],['../structHPCombi_1_1power__helper_1_1Monoid_3_01Perm16_01_4.html#adb49631389118499de2cda8956b71c32',1,'HPCombi::power_helper::Monoid< Perm16 >::prod()']]], + ['ptransf16_236',['PTransf16',['../structHPCombi_1_1PTransf16.html',1,'HPCombi::PTransf16'],['../structHPCombi_1_1PTransf16.html#a608b265495baab1306f561f35d9543d9',1,'HPCombi::PTransf16::PTransf16(std::initializer_list< uint8_t > il)'],['../structHPCombi_1_1PTransf16.html#ac2a38a43ab81b728c8dabf4b9a47b874',1,'HPCombi::PTransf16::PTransf16(std::vector< uint8_t > dom, std::vector< uint8_t > rng, size_t=0)'],['../structHPCombi_1_1PTransf16.html#a134f422d7bf5db98dbba6df06b24f3be',1,'HPCombi::PTransf16::PTransf16(const epu8 x)'],['../structHPCombi_1_1PTransf16.html#a20c2f9d089590c25739808102bc2ce7f',1,'HPCombi::PTransf16::PTransf16(const vect v)'],['../structHPCombi_1_1PTransf16.html#ab80cdcc476da2477092bca0b52e9a100',1,'HPCombi::PTransf16::PTransf16()=default']]] +]; diff --git a/docs/search/all_e.html b/docs/search/all_e.html new file mode 100644 index 00000000..e25df423 --- /dev/null +++ b/docs/search/all_e.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/all_e.js b/docs/search/all_e.js new file mode 100644 index 00000000..e8a7e769 --- /dev/null +++ b/docs/search/all_e.js @@ -0,0 +1,41 @@ +var searchData= +[ + ['random_237',['random',['../classHPCombi_1_1BMat8.html#ae11d5e25f0b00a1bf3fe0b5439857c5f',1,'HPCombi::BMat8::random()'],['../classHPCombi_1_1BMat8.html#a5b78e33ef34b88ebe02a3f044095106e',1,'HPCombi::BMat8::random(size_t dim)'],['../structHPCombi_1_1Perm16.html#affd2e8718806fef529fb61f9896f5bab',1,'HPCombi::Perm16::random()'],['../structHPCombi_1_1PermGeneric.html#a89830884599dda631b4a1c32185b5948',1,'HPCombi::PermGeneric::random()'],['../structHPCombi_1_1VectGeneric.html#a5c40a4e62227138426ff3396b37134d1',1,'HPCombi::VectGeneric::random()']]], + ['random_5fepu8_238',['random_epu8',['../namespaceHPCombi.html#abaad3d89908e243d0b72e1a5cd92a794',1,'HPCombi']]], + ['rank_239',['rank',['../structHPCombi_1_1PTransf16.html#aca525318dac96287d80b28f96bb79811',1,'HPCombi::PTransf16']]], + ['rank_5fcmpestrm_240',['rank_cmpestrm',['../structHPCombi_1_1PTransf16.html#abbb81eea4358289059ef89f3fba39352',1,'HPCombi::PTransf16']]], + ['rank_5fref_241',['rank_ref',['../structHPCombi_1_1PTransf16.html#a81aad41fd8619fcb017d193bf62fb12e',1,'HPCombi::PTransf16']]], + ['rd_2ecpp_242',['RD.cpp',['../RD_8cpp.html',1,'']]], + ['readme_2emd_243',['README.md',['../README_8md.html',1,'']]], + ['reduced_5fword_244',['reduced_word',['../Renner_8cpp.html#ae4d0bf3d717808f38c753202203e2ab3',1,'Renner.cpp']]], + ['remove_5fdups_245',['remove_dups',['../namespaceHPCombi.html#a3abaa0d1231460f1fc25f643f343acf9',1,'HPCombi']]], + ['renner_2ecpp_246',['Renner.cpp',['../Renner_8cpp.html',1,'']]], + ['res_247',['res',['../image_8cpp.html#af4858e3800fddfba3132594e83e83a8d',1,'image.cpp']]], + ['reset_248',['reset',['../classlibsemigroups_1_1Timer.html#a49797cfcb6f59671baaf98b92ba645f5',1,'libsemigroups::Timer']]], + ['rev_249',['rev',['../structHPCombi_1_1TPUBuild.html#a83b9320793bd16fe1a45715e4a284de5',1,'HPCombi::TPUBuild']]], + ['reverted_250',['reverted',['../namespaceHPCombi.html#a946c689038bb806c934577567c37b976',1,'HPCombi']]], + ['revsorted_251',['revsorted',['../namespaceHPCombi.html#abb0cc2ba3dea86d17e1bcfcb67379748',1,'HPCombi']]], + ['revsorted8_252',['revsorted8',['../namespaceHPCombi.html#a3f4db33e3cec019f4ea00e7b8a3b76f1',1,'HPCombi']]], + ['right_5fcycle_253',['right_cycle',['../structHPCombi_1_1TPUBuild.html#add13529e2df027a24455a78b9bb56cab',1,'HPCombi::TPUBuild']]], + ['right_5fdup_254',['right_dup',['../structHPCombi_1_1TPUBuild.html#a7dec13a66bd0d01e9f37d2a7a27a6cac',1,'HPCombi::TPUBuild']]], + ['right_5fone_255',['right_one',['../structHPCombi_1_1PTransf16.html#a9485b4a9afd125074c7c1d14c34abd96',1,'HPCombi::PTransf16::right_one()'],['../structHPCombi_1_1PPerm16.html#a0404c61f26b3a8732709800fe62d40de',1,'HPCombi::PPerm16::right_one()']]], + ['right_5fperm_5faction_5fon_5fbasis_256',['right_perm_action_on_basis',['../classHPCombi_1_1BMat8.html#a9e528d9c673cb6598311e41de4d5b79c',1,'HPCombi::BMat8']]], + ['right_5fperm_5faction_5fon_5fbasis_5fref_257',['right_perm_action_on_basis_ref',['../classHPCombi_1_1BMat8.html#afef14b4311c38d6987a1bbccd3e78bc7',1,'HPCombi::BMat8']]], + ['row_5fpermutation_5fmatrix_258',['row_permutation_matrix',['../classHPCombi_1_1BMat8.html#a44a9189dbb2ebfeb57779f71356c7386',1,'HPCombi::BMat8']]], + ['row_5fpermuted_259',['row_permuted',['../classHPCombi_1_1BMat8.html#a8d4fd804fab0a5e7cc94b773fb403548',1,'HPCombi::BMat8']]], + ['row_5fspace_5fbasis_260',['row_space_basis',['../classHPCombi_1_1BMat8.html#a1ae3421b568f665a9415c93891cb00a3',1,'HPCombi::BMat8']]], + ['row_5fspace_5fbitset_261',['row_space_bitset',['../classHPCombi_1_1BMat8.html#a9370b31e936f0c3fe38212eac0a99130',1,'HPCombi::BMat8']]], + ['row_5fspace_5fbitset_5fref_262',['row_space_bitset_ref',['../classHPCombi_1_1BMat8.html#aa0fd49af0a7b93c0be24cffed9a1487e',1,'HPCombi::BMat8']]], + ['row_5fspace_5fincluded_263',['row_space_included',['../classHPCombi_1_1BMat8.html#a910526b0f2b25dc81c6cede4cdf76cff',1,'HPCombi::BMat8']]], + ['row_5fspace_5fincluded2_264',['row_space_included2',['../classHPCombi_1_1BMat8.html#a251c4c9019eb4b2fdaed3f88ac5584de',1,'HPCombi::BMat8']]], + ['row_5fspace_5fincluded_5fbitset_265',['row_space_included_bitset',['../classHPCombi_1_1BMat8.html#a6c1cb3215c07a385d661ce5eb178ab81',1,'HPCombi::BMat8']]], + ['row_5fspace_5fincluded_5fref_266',['row_space_included_ref',['../classHPCombi_1_1BMat8.html#afd96bd1bc161eafcec67db56c6bde99f',1,'HPCombi::BMat8']]], + ['row_5fspace_5fmask_267',['row_space_mask',['../classHPCombi_1_1BMat8.html#a809b5701d5ead9904785b22a13eb3113',1,'HPCombi::BMat8']]], + ['row_5fspace_5fsize_268',['row_space_size',['../classHPCombi_1_1BMat8.html#aba499f4f2a02fc34b68e898ba4af5cc2',1,'HPCombi::BMat8']]], + ['row_5fspace_5fsize_5fbitset_269',['row_space_size_bitset',['../classHPCombi_1_1BMat8.html#a35ddab6a9cf0f7486606f2c48af53ba4',1,'HPCombi::BMat8']]], + ['row_5fspace_5fsize_5fincl_270',['row_space_size_incl',['../classHPCombi_1_1BMat8.html#a0720fee634f178d70ebb10516606b1e3',1,'HPCombi::BMat8']]], + ['row_5fspace_5fsize_5fincl1_271',['row_space_size_incl1',['../classHPCombi_1_1BMat8.html#afb918c64533a5b91848cf195f72bf506',1,'HPCombi::BMat8']]], + ['row_5fspace_5fsize_5fref_272',['row_space_size_ref',['../classHPCombi_1_1BMat8.html#ab14dd34b536d25fed060639ba4c5373c',1,'HPCombi::BMat8']]], + ['row_5fspace_5fupdate_5fbitset_273',['row_space_update_bitset',['../namespaceHPCombi_1_1detail.html#a2e37f9ef9892dec87eed0d091b5868db',1,'HPCombi::detail']]], + ['rows_274',['rows',['../classHPCombi_1_1BMat8.html#ac82188ebe929ea3bfe8e803b08eab06d',1,'HPCombi::BMat8']]] +]; diff --git a/docs/search/all_f.html b/docs/search/all_f.html new file mode 100644 index 00000000..b23da6ce --- /dev/null +++ b/docs/search/all_f.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/all_f.js b/docs/search/all_f.js new file mode 100644 index 00000000..0c3c720f --- /dev/null +++ b/docs/search/all_f.js @@ -0,0 +1,39 @@ +var searchData= +[ + ['s_275',['s',['../Trans_8cpp.html#ab62b64c99cb299e4a311da638e053937',1,'Trans.cpp']]], + ['s0_276',['s0',['../Renner_8cpp.html#a1bf244058b6a2691cf1728552ce737fd',1,'s0(): Renner.cpp'],['../RD_8cpp.html#a1bf244058b6a2691cf1728552ce737fd',1,'s0(): RD.cpp']]], + ['s1e_277',['s1e',['../Renner_8cpp.html#aa08ff492f3f96749ec7f73eacc769f13',1,'s1e(): Renner.cpp'],['../RD_8cpp.html#aa08ff492f3f96749ec7f73eacc769f13',1,'s1e(): RD.cpp']]], + ['s1f_278',['s1f',['../RD_8cpp.html#a8eda73a9906d0131b7868c6924f4dbe6',1,'s1f(): RD.cpp'],['../Renner_8cpp.html#a8eda73a9906d0131b7868c6924f4dbe6',1,'s1f(): Renner.cpp']]], + ['s2_279',['s2',['../RD_8cpp.html#a5a3c0f7a7f6a8cbf47abb4fec07bbd54',1,'s2(): RD.cpp'],['../Renner_8cpp.html#a5a3c0f7a7f6a8cbf47abb4fec07bbd54',1,'s2(): Renner.cpp']]], + ['s3_280',['s3',['../Renner_8cpp.html#ab8232360f3f3ac57ba64edb85681da84',1,'s3(): Renner.cpp'],['../RD_8cpp.html#ab8232360f3f3ac57ba64edb85681da84',1,'s3(): RD.cpp']]], + ['s4_281',['s4',['../RD_8cpp.html#a76b41e049796761d13864beaac111222',1,'s4(): RD.cpp'],['../Renner_8cpp.html#a76b41e049796761d13864beaac111222',1,'s4(): Renner.cpp']]], + ['s5_282',['s5',['../RD_8cpp.html#a401ac167d35facdbdfe4a7a5b99be6ea',1,'s5(): RD.cpp'],['../Renner_8cpp.html#a401ac167d35facdbdfe4a7a5b99be6ea',1,'s5(): Renner.cpp']]], + ['s6_283',['s6',['../RD_8cpp.html#ac3764b20394357c6e6d81fa98b83feb9',1,'s6(): RD.cpp'],['../Renner_8cpp.html#ac3764b20394357c6e6d81fa98b83feb9',1,'s6(): Renner.cpp']]], + ['s7_284',['s7',['../RD_8cpp.html#afee30f9098a333c32c5e094f47ded3f5',1,'s7(): RD.cpp'],['../Renner_8cpp.html#afee30f9098a333c32c5e094f47ded3f5',1,'s7(): Renner.cpp']]], + ['set_285',['set',['../classHPCombi_1_1BMat8.html#adfe928574d45e0cbaa41b4e715e57da6',1,'HPCombi::BMat8']]], + ['shifted_5fleft_286',['shifted_left',['../namespaceHPCombi.html#adf326a8c4f538e9b8ffb1bfdc9b5c8fd',1,'HPCombi']]], + ['shifted_5fright_287',['shifted_right',['../namespaceHPCombi.html#a24815578dbf9e6b6c59e8c0b212881b3',1,'HPCombi']]], + ['size_288',['size',['../structHPCombi_1_1VectGeneric.html#a828e4d93e45b68e508cc39b35efbb6c1',1,'HPCombi::VectGeneric::size()'],['../structHPCombi_1_1Vect16.html#a7842db0e44a976b42da11273b7ec0709',1,'HPCombi::Vect16::size()'],['../structHPCombi_1_1PermGeneric.html#a8bcf352d4b329d249cdd5d500d447692',1,'HPCombi::PermGeneric::size()'],['../structHPCombi_1_1PTransf16.html#a313bad8c66a2f1b2b58a1b9fafb9a9e7',1,'HPCombi::PTransf16::size()'],['../structHPCombi_1_1TPUBuild.html#afe4f9341e1e1d6838c33aaa628025046',1,'HPCombi::TPUBuild::size()']]], + ['size_5felem_289',['size_elem',['../structHPCombi_1_1TPUBuild.html#a2f6c25300e88243cff3f1c1e160e0fdc',1,'HPCombi::TPUBuild']]], + ['smallest_5ffix_5fpoint_290',['smallest_fix_point',['../structHPCombi_1_1PTransf16.html#aa97b295b719df0a48e5b21d2f4fa05b8',1,'HPCombi::PTransf16']]], + ['smallest_5fmoved_5fpoint_291',['smallest_moved_point',['../structHPCombi_1_1PTransf16.html#af56cf3531f73c5050d69a5b03e1bf8ad',1,'HPCombi::PTransf16']]], + ['sort_292',['sort',['../structHPCombi_1_1VectGeneric.html#a46462974f835b5ec9221c04121eca52b',1,'HPCombi::VectGeneric']]], + ['sort8_5fperm_293',['sort8_perm',['../namespaceHPCombi.html#a142458f17822a780bf4e2a9b9c214399',1,'HPCombi']]], + ['sort_5fperm_294',['sort_perm',['../namespaceHPCombi.html#acd3a0b5608da9c501d2acfd1b42f41e6',1,'HPCombi']]], + ['sorted_295',['sorted',['../namespaceHPCombi.html#aac0b8c59858e6dbf4a074ea169b16529',1,'HPCombi']]], + ['sorted8_296',['sorted8',['../namespaceHPCombi.html#a769db30abfc516fc861d976f22d7600e',1,'HPCombi']]], + ['sorted_5fvect_297',['sorted_vect',['../namespaceHPCombi.html#a0d15a3f90e72b4b414504ccd0e1ba05c',1,'HPCombi']]], + ['sorting_5frounds_298',['sorting_rounds',['../namespaceHPCombi.html#a9b3378bbc42d19454d3f3c517f052a98',1,'HPCombi']]], + ['sorting_5frounds8_299',['sorting_rounds8',['../namespaceHPCombi.html#a8b2203c677370cd26a28ffd73cbc59cf',1,'HPCombi']]], + ['square_300',['square',['../namespaceHPCombi.html#adaad0b0ef93f416f19063c142bcb464d',1,'HPCombi']]], + ['std_301',['std',['../namespacestd.html',1,'']]], + ['string_302',['string',['../classlibsemigroups_1_1Timer.html#a7534e8abf939183699da93ed77b20976',1,'libsemigroups::Timer::string() const'],['../classlibsemigroups_1_1Timer.html#ae28f366322a29a507b12082f348ed43a',1,'libsemigroups::Timer::string(std::chrono::nanoseconds elapsed) const']]], + ['stringmonoid_2ecpp_303',['stringmonoid.cpp',['../stringmonoid_8cpp.html',1,'']]], + ['subperm_304',['subperm',['../pattern_8cpp.html#a7c2b4982a09e109835ab8ae125eace66',1,'pattern.cpp']]], + ['subset_5fto_5fperm_305',['subset_to_perm',['../pattern_8cpp.html#ad463f9694046405cafa124ba3e6bc223',1,'pattern.cpp']]], + ['subsets_306',['subsets',['../pattern_8cpp.html#ab4ce0f0f017ac2394098404c54645458',1,'pattern.cpp']]], + ['sum_307',['sum',['../structHPCombi_1_1Vect16.html#acfbb79a84125465f08a9a8a5ac5d606b',1,'HPCombi::Vect16']]], + ['summing_5frounds_308',['summing_rounds',['../namespaceHPCombi.html#a48bf424600461a580daf0576711fcd69',1,'HPCombi']]], + ['swap_309',['swap',['../classHPCombi_1_1BMat8.html#ac3dc620abd1c33e02278f557f8e71c9d',1,'HPCombi::BMat8']]], + ['sym_5frenner_310',['sym_renner',['../Renner_8cpp.html#ae1b3a7418fdf9311fd87bee0e058a2fe',1,'Renner.cpp']]] +]; diff --git a/docs/search/classes_0.html b/docs/search/classes_0.html new file mode 100644 index 00000000..af8159ee --- /dev/null +++ b/docs/search/classes_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/classes_0.js b/docs/search/classes_0.js new file mode 100644 index 00000000..29708872 --- /dev/null +++ b/docs/search/classes_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['bmat8_336',['BMat8',['../classHPCombi_1_1BMat8.html',1,'HPCombi']]] +]; diff --git a/docs/search/classes_1.html b/docs/search/classes_1.html new file mode 100644 index 00000000..576e9168 --- /dev/null +++ b/docs/search/classes_1.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/classes_1.js b/docs/search/classes_1.js new file mode 100644 index 00000000..3146037f --- /dev/null +++ b/docs/search/classes_1.js @@ -0,0 +1,22 @@ +var searchData= +[ + ['common_5feval16_337',['common_eval16',['../classcommon__eval16.html',1,'']]], + ['common_5ffirst_5fdiff_338',['common_first_diff',['../classcommon__first__diff.html',1,'']]], + ['common_5fhoriz_5fmax_339',['common_horiz_max',['../classcommon__horiz__max.html',1,'']]], + ['common_5fhoriz_5fmin_340',['common_horiz_min',['../classcommon__horiz__min.html',1,'']]], + ['common_5fhoriz_5fsum_341',['common_horiz_sum',['../classcommon__horiz__sum.html',1,'']]], + ['common_5finverse_342',['common_inverse',['../classcommon__inverse.html',1,'']]], + ['common_5finverse_5fpperm_343',['common_inverse_pperm',['../classcommon__inverse__pperm.html',1,'']]], + ['common_5fis_5fpermutation_344',['common_is_permutation',['../classcommon__is__permutation.html',1,'']]], + ['common_5flast_5fdiff_345',['common_last_diff',['../classcommon__last__diff.html',1,'']]], + ['common_5fleft_5fweak_5fleq_346',['common_left_weak_leq',['../classcommon__left__weak__leq.html',1,'']]], + ['common_5flehmer_347',['common_lehmer',['../classcommon__lehmer.html',1,'']]], + ['common_5flength_348',['common_length',['../classcommon__length.html',1,'']]], + ['common_5fmerge_349',['common_merge',['../classcommon__merge.html',1,'']]], + ['common_5fnb_5fcycles_350',['common_nb_cycles',['../classcommon__nb__cycles.html',1,'']]], + ['common_5fnb_5fdescent_351',['common_nb_descent',['../classcommon__nb__descent.html',1,'']]], + ['common_5fpartial_5fmax_352',['common_partial_max',['../classcommon__partial__max.html',1,'']]], + ['common_5fpartial_5fmin_353',['common_partial_min',['../classcommon__partial__min.html',1,'']]], + ['common_5fpartial_5fsums_354',['common_partial_sums',['../classcommon__partial__sums.html',1,'']]], + ['common_5fpermutation_5fof_355',['common_permutation_of',['../classcommon__permutation__of.html',1,'']]] +]; diff --git a/docs/search/classes_2.html b/docs/search/classes_2.html new file mode 100644 index 00000000..956405e5 --- /dev/null +++ b/docs/search/classes_2.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/classes_2.js b/docs/search/classes_2.js new file mode 100644 index 00000000..f93a5ef4 --- /dev/null +++ b/docs/search/classes_2.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['eqepu8_356',['EqEpu8',['../classEqEpu8.html',1,'']]], + ['equal_5fto_3c_20hpcombi_3a_3aepu8_20_3e_357',['equal_to< HPCombi::epu8 >',['../structstd_1_1equal__to_3_01HPCombi_1_1epu8_01_4.html',1,'std']]] +]; diff --git a/docs/search/classes_3.html b/docs/search/classes_3.html new file mode 100644 index 00000000..d33343bc --- /dev/null +++ b/docs/search/classes_3.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/classes_3.js b/docs/search/classes_3.js new file mode 100644 index 00000000..70bcc2e4 --- /dev/null +++ b/docs/search/classes_3.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['hash_3c_20hpcombi_3a_3abmat8_20_3e_358',['hash< HPCombi::BMat8 >',['../structstd_1_1hash_3_01HPCombi_1_1BMat8_01_4.html',1,'std']]], + ['hash_3c_20hpcombi_3a_3aepu8_20_3e_359',['hash< HPCombi::epu8 >',['../structstd_1_1hash_3_01HPCombi_1_1epu8_01_4.html',1,'std']]], + ['hash_3c_20hpcombi_3a_3aperm16_20_3e_360',['hash< HPCombi::Perm16 >',['../structstd_1_1hash_3_01HPCombi_1_1Perm16_01_4.html',1,'std']]], + ['hash_3c_20hpcombi_3a_3apermgeneric_3c_20size_2c_20expo_20_3e_20_3e_361',['hash< HPCombi::PermGeneric< Size, Expo > >',['../structstd_1_1hash_3_01HPCombi_1_1PermGeneric_3_01Size_00_01Expo_01_4_01_4.html',1,'std']]], + ['hash_3c_20hpcombi_3a_3apperm16_20_3e_362',['hash< HPCombi::PPerm16 >',['../structstd_1_1hash_3_01HPCombi_1_1PPerm16_01_4.html',1,'std']]], + ['hash_3c_20hpcombi_3a_3aptransf16_20_3e_363',['hash< HPCombi::PTransf16 >',['../structstd_1_1hash_3_01HPCombi_1_1PTransf16_01_4.html',1,'std']]], + ['hash_3c_20hpcombi_3a_3atransf16_20_3e_364',['hash< HPCombi::Transf16 >',['../structstd_1_1hash_3_01HPCombi_1_1Transf16_01_4.html',1,'std']]], + ['hash_3c_20hpcombi_3a_3avect16_20_3e_365',['hash< HPCombi::Vect16 >',['../structstd_1_1hash_3_01HPCombi_1_1Vect16_01_4.html',1,'std']]], + ['hash_3c_20hpcombi_3a_3avectgeneric_3c_20size_2c_20expo_20_3e_20_3e_366',['hash< HPCombi::VectGeneric< Size, Expo > >',['../structstd_1_1hash_3_01HPCombi_1_1VectGeneric_3_01Size_00_01Expo_01_4_01_4.html',1,'std']]] +]; diff --git a/docs/search/classes_4.html b/docs/search/classes_4.html new file mode 100644 index 00000000..8430b07f --- /dev/null +++ b/docs/search/classes_4.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/classes_4.js b/docs/search/classes_4.js new file mode 100644 index 00000000..e5ce6a30 --- /dev/null +++ b/docs/search/classes_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['less_3c_20hpcombi_3a_3aepu8_20_3e_367',['less< HPCombi::epu8 >',['../structstd_1_1less_3_01HPCombi_1_1epu8_01_4.html',1,'std']]] +]; diff --git a/docs/search/classes_5.html b/docs/search/classes_5.html new file mode 100644 index 00000000..c2f1b767 --- /dev/null +++ b/docs/search/classes_5.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/classes_5.js b/docs/search/classes_5.js new file mode 100644 index 00000000..db6f1a15 --- /dev/null +++ b/docs/search/classes_5.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['monoid_368',['Monoid',['../structHPCombi_1_1power__helper_1_1Monoid.html',1,'HPCombi::power_helper']]], + ['monoid_3c_20perm16_20_3e_369',['Monoid< Perm16 >',['../structHPCombi_1_1power__helper_1_1Monoid_3_01Perm16_01_4.html',1,'HPCombi::power_helper']]], + ['monoid_3c_20std_3a_3astring_20_3e_370',['Monoid< std::string >',['../structHPCombi_1_1power__helper_1_1Monoid_3_01std_1_1string_01_4.html',1,'HPCombi::power_helper']]] +]; diff --git a/docs/search/classes_6.html b/docs/search/classes_6.html new file mode 100644 index 00000000..e39847ce --- /dev/null +++ b/docs/search/classes_6.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/classes_6.js b/docs/search/classes_6.js new file mode 100644 index 00000000..c4798f64 --- /dev/null +++ b/docs/search/classes_6.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['not_5fequal_5fto_3c_20hpcombi_3a_3aepu8_20_3e_371',['not_equal_to< HPCombi::epu8 >',['../structstd_1_1not__equal__to_3_01HPCombi_1_1epu8_01_4.html',1,'std']]] +]; diff --git a/docs/search/classes_7.html b/docs/search/classes_7.html new file mode 100644 index 00000000..a2c4d1a3 --- /dev/null +++ b/docs/search/classes_7.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/classes_7.js b/docs/search/classes_7.js new file mode 100644 index 00000000..4fe89680 --- /dev/null +++ b/docs/search/classes_7.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['perm16_372',['Perm16',['../structHPCombi_1_1Perm16.html',1,'HPCombi']]], + ['permgeneric_373',['PermGeneric',['../structHPCombi_1_1PermGeneric.html',1,'HPCombi']]], + ['pperm16_374',['PPerm16',['../structHPCombi_1_1PPerm16.html',1,'HPCombi']]], + ['ptransf16_375',['PTransf16',['../structHPCombi_1_1PTransf16.html',1,'HPCombi']]] +]; diff --git a/docs/search/classes_8.html b/docs/search/classes_8.html new file mode 100644 index 00000000..17003e48 --- /dev/null +++ b/docs/search/classes_8.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/classes_8.js b/docs/search/classes_8.js new file mode 100644 index 00000000..b64b1242 --- /dev/null +++ b/docs/search/classes_8.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['timer_376',['Timer',['../classlibsemigroups_1_1Timer.html',1,'libsemigroups']]], + ['tpubuild_377',['TPUBuild',['../structHPCombi_1_1TPUBuild.html',1,'HPCombi']]], + ['transf16_378',['Transf16',['../structHPCombi_1_1Transf16.html',1,'HPCombi']]] +]; diff --git a/docs/search/classes_9.html b/docs/search/classes_9.html new file mode 100644 index 00000000..b8afa8cb --- /dev/null +++ b/docs/search/classes_9.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/classes_9.js b/docs/search/classes_9.js new file mode 100644 index 00000000..89b586fb --- /dev/null +++ b/docs/search/classes_9.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['vect16_379',['Vect16',['../structHPCombi_1_1Vect16.html',1,'HPCombi']]], + ['vectgeneric_380',['VectGeneric',['../structHPCombi_1_1VectGeneric.html',1,'HPCombi']]], + ['vectgeneric_3c_20size_2c_20uint8_5ft_20_3e_381',['VectGeneric< Size, uint8_t >',['../structHPCombi_1_1VectGeneric.html',1,'HPCombi']]] +]; diff --git a/docs/search/close.svg b/docs/search/close.svg new file mode 100644 index 00000000..a933eea1 --- /dev/null +++ b/docs/search/close.svg @@ -0,0 +1,31 @@ + + + + + + image/svg+xml + + + + + + + + diff --git a/docs/search/defines_0.html b/docs/search/defines_0.html new file mode 100644 index 00000000..15cc3de3 --- /dev/null +++ b/docs/search/defines_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/defines_0.js b/docs/search/defines_0.js new file mode 100644 index 00000000..51153cc0 --- /dev/null +++ b/docs/search/defines_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['ff_685',['FF',['../bmat8__impl_8hpp.html#a201a0d2d698f67adfe3f4ca209a3c7ff',1,'FF(): bmat8_impl.hpp'],['../epu8__impl_8hpp.html#a201a0d2d698f67adfe3f4ca209a3c7ff',1,'FF(): epu8_impl.hpp']]] +]; diff --git a/docs/search/defines_1.html b/docs/search/defines_1.html new file mode 100644 index 00000000..c49009c7 --- /dev/null +++ b/docs/search/defines_1.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/defines_1.js b/docs/search/defines_1.js new file mode 100644 index 00000000..07368c81 --- /dev/null +++ b/docs/search/defines_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['hpcombi_5fassert_686',['HPCOMBI_ASSERT',['../debug_8hpp.html#a35656321588a81b81a5f2d2c1afceba0',1,'debug.hpp']]] +]; diff --git a/docs/search/files_0.html b/docs/search/files_0.html new file mode 100644 index 00000000..9498842a --- /dev/null +++ b/docs/search/files_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/files_0.js b/docs/search/files_0.js new file mode 100644 index 00000000..c8e7726a --- /dev/null +++ b/docs/search/files_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['arch_2ehpp_387',['arch.hpp',['../arch_8hpp.html',1,'']]] +]; diff --git a/docs/search/files_1.html b/docs/search/files_1.html new file mode 100644 index 00000000..7050ef48 --- /dev/null +++ b/docs/search/files_1.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/files_1.js b/docs/search/files_1.js new file mode 100644 index 00000000..58ba8bd2 --- /dev/null +++ b/docs/search/files_1.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['bmat8_2ehpp_388',['bmat8.hpp',['../bmat8_8hpp.html',1,'']]], + ['bmat8_5fimpl_2ehpp_389',['bmat8_impl.hpp',['../bmat8__impl_8hpp.html',1,'']]], + ['builder_2ehpp_390',['builder.hpp',['../builder_8hpp.html',1,'']]] +]; diff --git a/docs/search/files_2.html b/docs/search/files_2.html new file mode 100644 index 00000000..497cdf5c --- /dev/null +++ b/docs/search/files_2.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/files_2.js b/docs/search/files_2.js new file mode 100644 index 00000000..460de2ea --- /dev/null +++ b/docs/search/files_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['cf_2ecpp_391',['CF.cpp',['../CF_8cpp.html',1,'']]] +]; diff --git a/docs/search/files_3.html b/docs/search/files_3.html new file mode 100644 index 00000000..1ba106b2 --- /dev/null +++ b/docs/search/files_3.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/files_3.js b/docs/search/files_3.js new file mode 100644 index 00000000..cebd324c --- /dev/null +++ b/docs/search/files_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['debug_2ehpp_392',['debug.hpp',['../debug_8hpp.html',1,'']]] +]; diff --git a/docs/search/files_4.html b/docs/search/files_4.html new file mode 100644 index 00000000..753b7b10 --- /dev/null +++ b/docs/search/files_4.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/files_4.js b/docs/search/files_4.js new file mode 100644 index 00000000..1ac50de1 --- /dev/null +++ b/docs/search/files_4.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['epu8_2ehpp_393',['epu8.hpp',['../epu8_8hpp.html',1,'']]], + ['epu8_5fimpl_2ehpp_394',['epu8_impl.hpp',['../epu8__impl_8hpp.html',1,'']]] +]; diff --git a/docs/search/files_5.html b/docs/search/files_5.html new file mode 100644 index 00000000..7b6affd7 --- /dev/null +++ b/docs/search/files_5.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/files_5.js b/docs/search/files_5.js new file mode 100644 index 00000000..32c39082 --- /dev/null +++ b/docs/search/files_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['hpcombi_2ehpp_395',['hpcombi.hpp',['../hpcombi_8hpp.html',1,'']]] +]; diff --git a/docs/search/files_6.html b/docs/search/files_6.html new file mode 100644 index 00000000..802ebf71 --- /dev/null +++ b/docs/search/files_6.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/files_6.js b/docs/search/files_6.js new file mode 100644 index 00000000..317fea88 --- /dev/null +++ b/docs/search/files_6.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['image_2ecpp_396',['image.cpp',['../image_8cpp.html',1,'']]] +]; diff --git a/docs/search/files_7.html b/docs/search/files_7.html new file mode 100644 index 00000000..365e6484 --- /dev/null +++ b/docs/search/files_7.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/files_7.js b/docs/search/files_7.js new file mode 100644 index 00000000..8b6ef28c --- /dev/null +++ b/docs/search/files_7.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['pattern_2ecpp_397',['pattern.cpp',['../pattern_8cpp.html',1,'']]], + ['perm16_2ehpp_398',['perm16.hpp',['../perm16_8hpp.html',1,'']]], + ['perm16_5fimpl_2ehpp_399',['perm16_impl.hpp',['../perm16__impl_8hpp.html',1,'']]], + ['perm_5fgeneric_2ehpp_400',['perm_generic.hpp',['../perm__generic_8hpp.html',1,'']]], + ['perm_5fgeneric_5fimpl_2ehpp_401',['perm_generic_impl.hpp',['../perm__generic__impl_8hpp.html',1,'']]], + ['power_2ehpp_402',['power.hpp',['../power_8hpp.html',1,'']]] +]; diff --git a/docs/search/files_8.html b/docs/search/files_8.html new file mode 100644 index 00000000..3df0f2fa --- /dev/null +++ b/docs/search/files_8.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/files_8.js b/docs/search/files_8.js new file mode 100644 index 00000000..fae082a7 --- /dev/null +++ b/docs/search/files_8.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['rd_2ecpp_403',['RD.cpp',['../RD_8cpp.html',1,'']]], + ['readme_2emd_404',['README.md',['../README_8md.html',1,'']]], + ['renner_2ecpp_405',['Renner.cpp',['../Renner_8cpp.html',1,'']]] +]; diff --git a/docs/search/files_9.html b/docs/search/files_9.html new file mode 100644 index 00000000..52f8b6c0 --- /dev/null +++ b/docs/search/files_9.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/files_9.js b/docs/search/files_9.js new file mode 100644 index 00000000..5a248efb --- /dev/null +++ b/docs/search/files_9.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['stringmonoid_2ecpp_406',['stringmonoid.cpp',['../stringmonoid_8cpp.html',1,'']]] +]; diff --git a/docs/search/files_a.html b/docs/search/files_a.html new file mode 100644 index 00000000..11d4c117 --- /dev/null +++ b/docs/search/files_a.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/files_a.js b/docs/search/files_a.js new file mode 100644 index 00000000..45afdd06 --- /dev/null +++ b/docs/search/files_a.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['timer_2eh_407',['timer.h',['../timer_8h.html',1,'']]], + ['trans_2ecpp_408',['Trans.cpp',['../Trans_8cpp.html',1,'']]] +]; diff --git a/docs/search/files_b.html b/docs/search/files_b.html new file mode 100644 index 00000000..9fc83436 --- /dev/null +++ b/docs/search/files_b.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/files_b.js b/docs/search/files_b.js new file mode 100644 index 00000000..260314e0 --- /dev/null +++ b/docs/search/files_b.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['vect16_2ehpp_409',['vect16.hpp',['../vect16_8hpp.html',1,'']]], + ['vect_5fgeneric_2ehpp_410',['vect_generic.hpp',['../vect__generic_8hpp.html',1,'']]] +]; diff --git a/docs/search/functions_0.html b/docs/search/functions_0.html new file mode 100644 index 00000000..eb4c5014 --- /dev/null +++ b/docs/search/functions_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/functions_0.js b/docs/search/functions_0.js new file mode 100644 index 00000000..cacac9df --- /dev/null +++ b/docs/search/functions_0.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['act0_411',['act0',['../RD_8cpp.html#a5268b29472a0b202cd849985401f2544',1,'act0(PTransf16 x, PTransf16 y): RD.cpp'],['../Renner_8cpp.html#a5268b29472a0b202cd849985401f2544',1,'act0(PTransf16 x, PTransf16 y): Renner.cpp']]], + ['act1_412',['act1',['../RD_8cpp.html#a2df2854a3f5b79cce160307511181cd9',1,'act1(PTransf16 x, PTransf16 y): RD.cpp'],['../Renner_8cpp.html#a2df2854a3f5b79cce160307511181cd9',1,'act1(PTransf16 x, PTransf16 y): Renner.cpp']]], + ['as_5farray_413',['as_array',['../structHPCombi_1_1Vect16.html#ad7a402feb477d9451f6aa2c23ef2f746',1,'HPCombi::Vect16::as_array()'],['../structHPCombi_1_1Vect16.html#ae888daddab266a00b77724e786188198',1,'HPCombi::Vect16::as_array() const'],['../namespaceHPCombi.html#a40923f8c14a58676737c57c386eada16',1,'HPCombi::as_array(TPU &v) noexcept'],['../namespaceHPCombi.html#a6f6bb2714293cd27b30d723176bc5157',1,'HPCombi::as_array(const TPU &v) noexcept']]], + ['as_5fvectgeneric_414',['as_VectGeneric',['../namespaceHPCombi.html#a5516e8f4ea2fc542d7198a23a17e8f26',1,'HPCombi::as_VectGeneric(TPU &v)'],['../namespaceHPCombi.html#a7ccfbdda0682d98ccfd4b4eeac077d79',1,'HPCombi::as_VectGeneric(const TPU &v)']]] +]; diff --git a/docs/search/functions_1.html b/docs/search/functions_1.html new file mode 100644 index 00000000..ef4088b8 --- /dev/null +++ b/docs/search/functions_1.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/functions_1.js b/docs/search/functions_1.js new file mode 100644 index 00000000..6c682479 --- /dev/null +++ b/docs/search/functions_1.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['begin_415',['begin',['../structHPCombi_1_1Vect16.html#aa37ac47dced9ec8bc30e03964a3df3a3',1,'HPCombi::Vect16::begin()'],['../structHPCombi_1_1Vect16.html#a1428c4a6e58e9df4c5334f45496c2519',1,'HPCombi::Vect16::begin() const'],['../structHPCombi_1_1VectGeneric.html#a9ed45b64e927943afb2bd1b4b5093a1d',1,'HPCombi::VectGeneric::begin()'],['../structHPCombi_1_1VectGeneric.html#ad41135a25336243eef460fbd7cd6c2b8',1,'HPCombi::VectGeneric::begin() const'],['../classEqEpu8.html#aebcf8fe92ed706e9665f81405ef0cce9',1,'EqEpu8::begin()']]], + ['bmat8_416',['BMat8',['../classHPCombi_1_1BMat8.html#a8df699a486dadb3d66f3bd5fd03c8a5c',1,'HPCombi::BMat8::BMat8() noexcept=default'],['../classHPCombi_1_1BMat8.html#a407534bb745fc7104771f4bad6e03088',1,'HPCombi::BMat8::BMat8(uint64_t mat) noexcept'],['../classHPCombi_1_1BMat8.html#ac510a5f28cf0cc7cb0e4225e2d5391e7',1,'HPCombi::BMat8::BMat8(std::vector< std::vector< bool >> const &mat)'],['../classHPCombi_1_1BMat8.html#a4fe049c3f44d6c4d52229cc5ad9099be',1,'HPCombi::BMat8::BMat8(BMat8 const &) noexcept=default'],['../classHPCombi_1_1BMat8.html#a6674b736c269806e85f80a056e68134b',1,'HPCombi::BMat8::BMat8(BMat8 &&) noexcept=default']]] +]; diff --git a/docs/search/functions_10.html b/docs/search/functions_10.html new file mode 100644 index 00000000..1bdc1257 --- /dev/null +++ b/docs/search/functions_10.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/functions_10.js b/docs/search/functions_10.js new file mode 100644 index 00000000..e8fffcae --- /dev/null +++ b/docs/search/functions_10.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['unranksjt_626',['unrankSJT',['../structHPCombi_1_1Perm16.html#ac31abc936e8fb6b71524a36a7f2e93a7',1,'HPCombi::Perm16']]] +]; diff --git a/docs/search/functions_11.html b/docs/search/functions_11.html new file mode 100644 index 00000000..188076ef --- /dev/null +++ b/docs/search/functions_11.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/functions_11.js b/docs/search/functions_11.js new file mode 100644 index 00000000..7ed3f891 --- /dev/null +++ b/docs/search/functions_11.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['validate_627',['validate',['../structHPCombi_1_1PTransf16.html#ad1285ebd8e5900198f94bd7625b0fe64',1,'HPCombi::PTransf16::validate()'],['../structHPCombi_1_1Transf16.html#ab5b8347b235a32b0857c51c28a6cf2dd',1,'HPCombi::Transf16::validate()'],['../structHPCombi_1_1PPerm16.html#aeea67ef5a96b922f0ee1b49661053ec4',1,'HPCombi::PPerm16::validate()'],['../structHPCombi_1_1Perm16.html#aad44a4d8edb4f7bd21fb7f883213259a',1,'HPCombi::Perm16::validate()']]], + ['vect16_628',['Vect16',['../structHPCombi_1_1Vect16.html#a789adca694f8d38230c910db6e191198',1,'HPCombi::Vect16::Vect16()=default'],['../structHPCombi_1_1Vect16.html#ae89c2af14936aa1089abb0239275c4da',1,'HPCombi::Vect16::Vect16(epu8 x)'],['../structHPCombi_1_1Vect16.html#a30798d557d51dd3b65b50ca7c7ac3687',1,'HPCombi::Vect16::Vect16(std::initializer_list< uint8_t > il, uint8_t def=0)']]], + ['vectgeneric_629',['VectGeneric',['../structHPCombi_1_1VectGeneric.html#aced1e94a358046cdeb15bca1eccf1dbe',1,'HPCombi::VectGeneric::VectGeneric()=default'],['../structHPCombi_1_1VectGeneric.html#aa0430519498c632799bb27ecfd5bca67',1,'HPCombi::VectGeneric::VectGeneric(const array &_v)'],['../structHPCombi_1_1VectGeneric.html#af5ef012d18450d8da4b1317b0c7b2109',1,'HPCombi::VectGeneric::VectGeneric(std::initializer_list< Expo > il, Expo def=0)']]] +]; diff --git a/docs/search/functions_12.html b/docs/search/functions_12.html new file mode 100644 index 00000000..eb29d8f9 --- /dev/null +++ b/docs/search/functions_12.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/functions_12.js b/docs/search/functions_12.js new file mode 100644 index 00000000..3c701363 --- /dev/null +++ b/docs/search/functions_12.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['write_630',['write',['../classHPCombi_1_1BMat8.html#a92aad62aba3da0468a24b9a88fc2e1aa',1,'HPCombi::BMat8']]] +]; diff --git a/docs/search/functions_13.html b/docs/search/functions_13.html new file mode 100644 index 00000000..3da2ea69 --- /dev/null +++ b/docs/search/functions_13.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/functions_13.js b/docs/search/functions_13.js new file mode 100644 index 00000000..4c49ce69 --- /dev/null +++ b/docs/search/functions_13.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['_7ebmat8_631',['~BMat8',['../classHPCombi_1_1BMat8.html#a228c91aa2d3a1a443947d86ba09c95e6',1,'HPCombi::BMat8']]] +]; diff --git a/docs/search/functions_2.html b/docs/search/functions_2.html new file mode 100644 index 00000000..ca5aa10e --- /dev/null +++ b/docs/search/functions_2.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/functions_2.js b/docs/search/functions_2.js new file mode 100644 index 00000000..e7209f90 --- /dev/null +++ b/docs/search/functions_2.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['cbegin_417',['cbegin',['../structHPCombi_1_1Vect16.html#a6c198d8eaad46c9119981392ba41d62f',1,'HPCombi::Vect16']]], + ['cend_418',['cend',['../structHPCombi_1_1Vect16.html#af47651711a5b9076c40921b693f1d55b',1,'HPCombi::Vect16']]], + ['col_5fpermutation_5fmatrix_419',['col_permutation_matrix',['../classHPCombi_1_1BMat8.html#a7b8b6e55a3a2b9f22981eab2486e9127',1,'HPCombi::BMat8']]], + ['col_5fpermuted_420',['col_permuted',['../classHPCombi_1_1BMat8.html#aaaee5afb25e0c541be9eecef89d0682d',1,'HPCombi::BMat8']]], + ['col_5fspace_5fbasis_421',['col_space_basis',['../classHPCombi_1_1BMat8.html#a8f89ab037a3fc12cfdf9c85f6e71c779',1,'HPCombi::BMat8']]], + ['cycles_5fpartition_422',['cycles_partition',['../structHPCombi_1_1Perm16.html#a38eda8cf653fcb46166e651af9f76b80',1,'HPCombi::Perm16']]] +]; diff --git a/docs/search/functions_3.html b/docs/search/functions_3.html new file mode 100644 index 00000000..d79f55b8 --- /dev/null +++ b/docs/search/functions_3.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/functions_3.js b/docs/search/functions_3.js new file mode 100644 index 00000000..cb0c4504 --- /dev/null +++ b/docs/search/functions_3.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['domain_5fbitset_423',['domain_bitset',['../structHPCombi_1_1PTransf16.html#a6ef6ffd0d271aceb8fad80bf39b76e8d',1,'HPCombi::PTransf16']]], + ['domain_5fmask_424',['domain_mask',['../structHPCombi_1_1PTransf16.html#aca2a11e1a6bf8ae4ff7e6078b783a232',1,'HPCombi::PTransf16']]] +]; diff --git a/docs/search/functions_4.html b/docs/search/functions_4.html new file mode 100644 index 00000000..1657cad0 --- /dev/null +++ b/docs/search/functions_4.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/functions_4.js b/docs/search/functions_4.js new file mode 100644 index 00000000..fd7ad5d3 --- /dev/null +++ b/docs/search/functions_4.js @@ -0,0 +1,16 @@ +var searchData= +[ + ['elapsed_425',['elapsed',['../classlibsemigroups_1_1Timer.html#ab3416636f26f7bdc37aae78ac059a0bd',1,'libsemigroups::Timer']]], + ['elementary_5ftransposition_426',['elementary_transposition',['../structHPCombi_1_1Perm16.html#ab12cd9d1c274527259e3f2b3dc80ed07',1,'HPCombi::Perm16::elementary_transposition()'],['../structHPCombi_1_1PermGeneric.html#a73bf07d40f7f7626044444fc172e7e22',1,'HPCombi::PermGeneric::elementary_transposition()']]], + ['end_427',['end',['../structHPCombi_1_1Vect16.html#a3053a74dfbdfac751f4cf0334d4fd7ec',1,'HPCombi::Vect16::end()'],['../structHPCombi_1_1Vect16.html#a406e932e19a9a600ed1b1088d45cf4eb',1,'HPCombi::Vect16::end() const'],['../structHPCombi_1_1VectGeneric.html#aa985592427419965cfa7c8331f4c1cde',1,'HPCombi::VectGeneric::end()'],['../structHPCombi_1_1VectGeneric.html#a07bf26896188a8587c611dfdf2183061',1,'HPCombi::VectGeneric::end() const'],['../classEqEpu8.html#ab6ea501b65615fb37da3893a0f47ab82',1,'EqEpu8::end()']]], + ['eqepu8_428',['EqEpu8',['../classEqEpu8.html#af2b77cb1348f7ff050738f23b796cb4e',1,'EqEpu8']]], + ['equal_429',['equal',['../namespaceHPCombi.html#a6ff0939c8b327c7b60ac9743b1de7b11',1,'HPCombi']]], + ['eval_430',['eval',['../structHPCombi_1_1VectGeneric.html#ad7e98a6c8cf8402f6efdb410479381a4',1,'HPCombi::VectGeneric']]], + ['eval16_431',['eval16',['../structHPCombi_1_1Vect16.html#aeae787a534284f33701847cad5a8d891',1,'HPCombi::Vect16::eval16()'],['../namespaceHPCombi.html#a7f639b83ee205ad8d243957a03989308',1,'HPCombi::eval16(epu8 v) noexcept']]], + ['eval16_5farr_432',['eval16_arr',['../namespaceHPCombi.html#a11398c30a4a9a3166aef687c66f6db5e',1,'HPCombi']]], + ['eval16_5fcycle_433',['eval16_cycle',['../namespaceHPCombi.html#a979590b2fa1172017d5574cc934dd14d',1,'HPCombi']]], + ['eval16_5fgen_434',['eval16_gen',['../namespaceHPCombi.html#a3264b507dca3de1b84e7fc4e3bcc9b86',1,'HPCombi']]], + ['eval16_5fpopcount_435',['eval16_popcount',['../namespaceHPCombi.html#acc0cc310df92374740a43e3b34a216b2',1,'HPCombi']]], + ['eval16_5fref_436',['eval16_ref',['../namespaceHPCombi.html#aa10ed40ed441f2083b63a35556cd03c0',1,'HPCombi']]], + ['extract_5fpattern_437',['extract_pattern',['../pattern_8cpp.html#a9924bb55cf29a9e598d4a3710e80e44b',1,'pattern.cpp']]] +]; diff --git a/docs/search/functions_5.html b/docs/search/functions_5.html new file mode 100644 index 00000000..9301d6b9 --- /dev/null +++ b/docs/search/functions_5.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/functions_5.js b/docs/search/functions_5.js new file mode 100644 index 00000000..957c716f --- /dev/null +++ b/docs/search/functions_5.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['first_5fdiff_438',['first_diff',['../structHPCombi_1_1Vect16.html#aa1e213d038d344219b795b1815a6280c',1,'HPCombi::Vect16::first_diff()'],['../structHPCombi_1_1VectGeneric.html#a9512d7238369c508c6b1015b6a8a1ff4',1,'HPCombi::VectGeneric::first_diff()'],['../namespaceHPCombi.html#ae5c206a948004e4609a721a2d3e78713',1,'HPCombi::first_diff(epu8 a, epu8 b, size_t bound=16) noexcept']]], + ['first_5fdiff_5fmask_439',['first_diff_mask',['../namespaceHPCombi.html#a265fe6e5c41ef0b63f2421ee42c7d3d3',1,'HPCombi']]], + ['first_5fdiff_5fref_440',['first_diff_ref',['../namespaceHPCombi.html#a24e32c26ae9b9e6ccbdaec20967845c9',1,'HPCombi']]], + ['first_5fmask_441',['first_mask',['../namespaceHPCombi.html#a75a9e3ae9476d58ad8aaab915491bb3c',1,'HPCombi']]], + ['first_5fnon_5fzero_442',['first_non_zero',['../structHPCombi_1_1Vect16.html#a8cb80a40fa55c752414149c38b7db80c',1,'HPCombi::Vect16::first_non_zero()'],['../structHPCombi_1_1VectGeneric.html#a58884049db779208525ff83be6b24769',1,'HPCombi::VectGeneric::first_non_zero()'],['../namespaceHPCombi.html#a0e08a51a53154072c50a3c01ce596d22',1,'HPCombi::first_non_zero()']]], + ['first_5fzero_443',['first_zero',['../structHPCombi_1_1Vect16.html#a3c30c31892028a0a29d362d558885549',1,'HPCombi::Vect16::first_zero()'],['../structHPCombi_1_1VectGeneric.html#a51c24367006f9fe7304f17dc262a3596',1,'HPCombi::VectGeneric::first_zero()'],['../namespaceHPCombi.html#aba0e87bcbabb680ae7f3b3a44c313bf5',1,'HPCombi::first_zero()']]], + ['fix_5fpoints_5fbitset_444',['fix_points_bitset',['../structHPCombi_1_1PTransf16.html#a257c39f09c2de8bdccb8c5dcd414ae60',1,'HPCombi::PTransf16']]], + ['fix_5fpoints_5fmask_445',['fix_points_mask',['../structHPCombi_1_1PTransf16.html#aa232bc5ac28fb44599df3e8f824fa813',1,'HPCombi::PTransf16']]] +]; diff --git a/docs/search/functions_6.html b/docs/search/functions_6.html new file mode 100644 index 00000000..9c4f5fc6 --- /dev/null +++ b/docs/search/functions_6.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/functions_6.js b/docs/search/functions_6.js new file mode 100644 index 00000000..9ab07374 --- /dev/null +++ b/docs/search/functions_6.js @@ -0,0 +1,19 @@ +var searchData= +[ + ['has_5fpattern_446',['has_pattern',['../pattern_8cpp.html#a646d303d1afd411646168f20eee074e3',1,'pattern.cpp']]], + ['horiz_5fmax_447',['horiz_max',['../structHPCombi_1_1VectGeneric.html#afcc183c6e29e2b28d0ed914fb03ea5ec',1,'HPCombi::VectGeneric::horiz_max()'],['../namespaceHPCombi.html#a87adf727d561fa11a7b9214cc137d649',1,'HPCombi::horiz_max(epu8 v) noexcept']]], + ['horiz_5fmax3_448',['horiz_max3',['../namespaceHPCombi.html#a4f28da42ee647c4364d292bcd6d9af77',1,'HPCombi']]], + ['horiz_5fmax4_449',['horiz_max4',['../namespaceHPCombi.html#a4e7ba4a01c23e13ff625672d28b29573',1,'HPCombi']]], + ['horiz_5fmax_5fgen_450',['horiz_max_gen',['../namespaceHPCombi.html#ad7e3db96bbeba229f92ed9c2ed675dc5',1,'HPCombi']]], + ['horiz_5fmax_5fref_451',['horiz_max_ref',['../namespaceHPCombi.html#aa7f5e8e968d56b6babc1fba9b124d33e',1,'HPCombi']]], + ['horiz_5fmin_452',['horiz_min',['../structHPCombi_1_1VectGeneric.html#ac6060f7ae582f1a8052fb9d33fddbcc8',1,'HPCombi::VectGeneric::horiz_min()'],['../namespaceHPCombi.html#a2b8a25566daa66f51043fa6038e5d967',1,'HPCombi::horiz_min(epu8 v) noexcept']]], + ['horiz_5fmin3_453',['horiz_min3',['../namespaceHPCombi.html#af03610453e4f629a1b878b62a4cc2396',1,'HPCombi']]], + ['horiz_5fmin4_454',['horiz_min4',['../namespaceHPCombi.html#a033c95a36e1d6f63befd77d7692644ef',1,'HPCombi']]], + ['horiz_5fmin_5fgen_455',['horiz_min_gen',['../namespaceHPCombi.html#a511083ab52763c4f25f535bec48fb262',1,'HPCombi']]], + ['horiz_5fmin_5fref_456',['horiz_min_ref',['../namespaceHPCombi.html#a0f96cea5c5a6e8b90ebeeeb9899c8109',1,'HPCombi']]], + ['horiz_5fsum_457',['horiz_sum',['../structHPCombi_1_1VectGeneric.html#a8e750bf6fb679ea736d98b9e4e884cc6',1,'HPCombi::VectGeneric::horiz_sum()'],['../namespaceHPCombi.html#a858065135d453d5a6a39cc90e81f68c0',1,'HPCombi::horiz_sum(epu8 v) noexcept']]], + ['horiz_5fsum3_458',['horiz_sum3',['../namespaceHPCombi.html#a6c2291f70eb54bb79981eca2ae5af5c1',1,'HPCombi']]], + ['horiz_5fsum4_459',['horiz_sum4',['../namespaceHPCombi.html#a623cd8ff3391e0f832d57554b044927b',1,'HPCombi']]], + ['horiz_5fsum_5fgen_460',['horiz_sum_gen',['../namespaceHPCombi.html#aef2505d534d007462fc2546af7d787bd',1,'HPCombi']]], + ['horiz_5fsum_5fref_461',['horiz_sum_ref',['../namespaceHPCombi.html#a6c6f1388eb85daeeb82674ed11039e88',1,'HPCombi']]] +]; diff --git a/docs/search/functions_7.html b/docs/search/functions_7.html new file mode 100644 index 00000000..46b5c0f6 --- /dev/null +++ b/docs/search/functions_7.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/functions_7.js b/docs/search/functions_7.js new file mode 100644 index 00000000..edaa60e5 --- /dev/null +++ b/docs/search/functions_7.js @@ -0,0 +1,24 @@ +var searchData= +[ + ['id_462',['id',['../structHPCombi_1_1TPUBuild.html#aed9c115d3df8b6d23fe8e6cba53058a4',1,'HPCombi::TPUBuild']]], + ['image_5fbitset_463',['image_bitset',['../structHPCombi_1_1PTransf16.html#a94af63b3480e1fd989c796ecf12293b3',1,'HPCombi::PTransf16']]], + ['image_5fmask_464',['image_mask',['../structHPCombi_1_1PTransf16.html#ae0757d9adc336545b9a7f78b19e3163e',1,'HPCombi::PTransf16']]], + ['image_5fmask_5fcmpestrm_465',['image_mask_cmpestrm',['../structHPCombi_1_1PTransf16.html#aef3cf621e47f9b7f20d613ee5e5781a5',1,'HPCombi::PTransf16']]], + ['image_5fmask_5fref_466',['image_mask_ref',['../structHPCombi_1_1PTransf16.html#acfc94618f7b9f6e1de91df1c205458b0',1,'HPCombi::PTransf16']]], + ['inverse_467',['inverse',['../structHPCombi_1_1Perm16.html#a175f40a78824b7ea838b265475acf3a0',1,'HPCombi::Perm16::inverse()'],['../structHPCombi_1_1PermGeneric.html#a9a426ab06b8967c48160b927f11002af',1,'HPCombi::PermGeneric::inverse()']]], + ['inverse_5farr_468',['inverse_arr',['../structHPCombi_1_1Perm16.html#af8996f8687c0454a2df1e908d65f93e5',1,'HPCombi::Perm16']]], + ['inverse_5fcycl_469',['inverse_cycl',['../structHPCombi_1_1Perm16.html#a09c5a4cb561215987e924993f976b452',1,'HPCombi::Perm16']]], + ['inverse_5ffind_470',['inverse_find',['../structHPCombi_1_1Perm16.html#a631e451f841177eb2326037b1f60a815',1,'HPCombi::Perm16']]], + ['inverse_5fpow_471',['inverse_pow',['../structHPCombi_1_1Perm16.html#af35cb988980e785965af83b73fde7a5b',1,'HPCombi::Perm16']]], + ['inverse_5fref_472',['inverse_ref',['../structHPCombi_1_1PPerm16.html#a04b30cc8fbb58a1fa00c7cc0908e6fe0',1,'HPCombi::PPerm16::inverse_ref()'],['../structHPCombi_1_1Perm16.html#a9b1fc76ad024bbf3db2e6e72ed07edd8',1,'HPCombi::Perm16::inverse_ref() const']]], + ['inverse_5fsort_473',['inverse_sort',['../structHPCombi_1_1Perm16.html#a500fcb8f89bb5b1985f6017ecf1e66c2',1,'HPCombi::Perm16']]], + ['is_5fall_5fone_474',['is_all_one',['../namespaceHPCombi.html#a4fdbefc5c5adb2ad975bc0beb34006c8',1,'HPCombi']]], + ['is_5fall_5fzero_475',['is_all_zero',['../namespaceHPCombi.html#aba1cc5c8f5097866de1ed4e89c2427ff',1,'HPCombi']]], + ['is_5fpartial_5fpermutation_476',['is_partial_permutation',['../namespaceHPCombi.html#a52dc25430df70f4c2571c195ee3e6b74',1,'HPCombi']]], + ['is_5fpartial_5ftransformation_477',['is_partial_transformation',['../namespaceHPCombi.html#ae78f298131c7e5ec92ab6c4af6d8db38',1,'HPCombi']]], + ['is_5fpermutation_478',['is_permutation',['../structHPCombi_1_1Vect16.html#a61f0dbde0e8b166c78cf1f63fa535b21',1,'HPCombi::Vect16::is_permutation() const'],['../structHPCombi_1_1Vect16.html#aa3ee3393e867dd42866ff5eb0cf85762',1,'HPCombi::Vect16::is_permutation(size_t k) const'],['../structHPCombi_1_1VectGeneric.html#a6a4f96d01b21b6c5f46f815c9f4a9350',1,'HPCombi::VectGeneric::is_permutation()'],['../namespaceHPCombi.html#a478bcb766797a616faba4369b3a2a932',1,'HPCombi::is_permutation(epu8 v, const size_t k=16) noexcept']]], + ['is_5fpermutation_5feval_479',['is_permutation_eval',['../namespaceHPCombi.html#ab66c3586217cad552a623dda25fde541',1,'HPCombi']]], + ['is_5fpermutation_5fsort_480',['is_permutation_sort',['../namespaceHPCombi.html#a52e15434f0b79e6b7b9af96da4ebf41e',1,'HPCombi']]], + ['is_5fsorted_481',['is_sorted',['../structHPCombi_1_1VectGeneric.html#a667eb2c4643cc02bf68925c2c288c7d8',1,'HPCombi::VectGeneric::is_sorted()'],['../namespaceHPCombi.html#ac6b92ba1fcb5dceab675f88a81388bb3',1,'HPCombi::is_sorted(epu8 a) noexcept']]], + ['is_5ftransformation_482',['is_transformation',['../namespaceHPCombi.html#adf9ec872a6e55eb5bd3dbb71a622153a',1,'HPCombi']]] +]; diff --git a/docs/search/functions_8.html b/docs/search/functions_8.html new file mode 100644 index 00000000..31a1d950 --- /dev/null +++ b/docs/search/functions_8.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/functions_8.js b/docs/search/functions_8.js new file mode 100644 index 00000000..bc89b37c --- /dev/null +++ b/docs/search/functions_8.js @@ -0,0 +1,25 @@ +var searchData= +[ + ['largest_5ffix_5fpoint_483',['largest_fix_point',['../structHPCombi_1_1PTransf16.html#ad5720ce9be1366ff916c050e5ece6137',1,'HPCombi::PTransf16']]], + ['largest_5fmoved_5fpoint_484',['largest_moved_point',['../structHPCombi_1_1PTransf16.html#a68c50e2963bce023b94ab6d66bfd1d9d',1,'HPCombi::PTransf16']]], + ['last_5fdiff_485',['last_diff',['../namespaceHPCombi.html#acc03c8b728fe7757e1afdb5c5ade6d6e',1,'HPCombi::last_diff()'],['../structHPCombi_1_1VectGeneric.html#abae25bc3fa4def0f072bccffbb51d7ca',1,'HPCombi::VectGeneric::last_diff()'],['../structHPCombi_1_1Vect16.html#a30efb6b1130f0e075f9dc5eb0d631430',1,'HPCombi::Vect16::last_diff()']]], + ['last_5fdiff_5fmask_486',['last_diff_mask',['../namespaceHPCombi.html#a4eb3521f1e6e8d41ab3d29b85a1434e0',1,'HPCombi']]], + ['last_5fdiff_5fref_487',['last_diff_ref',['../namespaceHPCombi.html#a08f3869d86935e4d673d689100897795',1,'HPCombi']]], + ['last_5fmask_488',['last_mask',['../namespaceHPCombi.html#aae562c31169e562932063a85cce73011',1,'HPCombi']]], + ['last_5fnon_5fzero_489',['last_non_zero',['../structHPCombi_1_1Vect16.html#ad7c5bae2832dfa5dac7b80a300966106',1,'HPCombi::Vect16::last_non_zero()'],['../structHPCombi_1_1VectGeneric.html#a51a6375879266451a138673275e1d161',1,'HPCombi::VectGeneric::last_non_zero()'],['../namespaceHPCombi.html#acbe31eeff89aa06d27e20c816f49e6d3',1,'HPCombi::last_non_zero()']]], + ['last_5fzero_490',['last_zero',['../structHPCombi_1_1Vect16.html#a4bd825c889f30ab2f2ffe0e8187d0275',1,'HPCombi::Vect16::last_zero()'],['../structHPCombi_1_1VectGeneric.html#a2e306fc2d5743dca472728ba237f623f',1,'HPCombi::VectGeneric::last_zero()'],['../namespaceHPCombi.html#a53a462687b8e475e593408aae6812a38',1,'HPCombi::last_zero()']]], + ['left_5fcycle_491',['left_cycle',['../structHPCombi_1_1TPUBuild.html#adfb6832fdd4c5350e747029fee8dccc6',1,'HPCombi::TPUBuild']]], + ['left_5fdup_492',['left_dup',['../structHPCombi_1_1TPUBuild.html#a3153054b3d221fff16b7c98f55af806c',1,'HPCombi::TPUBuild']]], + ['left_5fone_493',['left_one',['../structHPCombi_1_1PTransf16.html#a71b0218d6b7d1c8a55f52c67a068ad51',1,'HPCombi::PTransf16::left_one()'],['../structHPCombi_1_1PPerm16.html#aae92b2ae8a843da11e25f64633a10751',1,'HPCombi::PPerm16::left_one()']]], + ['left_5fweak_5fleq_494',['left_weak_leq',['../structHPCombi_1_1PermGeneric.html#a306ae8219524cbc29a85b121905f32cd',1,'HPCombi::PermGeneric::left_weak_leq()'],['../structHPCombi_1_1Perm16.html#ac7ae022d0bc677bc601c372303e05f14',1,'HPCombi::Perm16::left_weak_leq(Perm16 other) const']]], + ['left_5fweak_5fleq_5flength_495',['left_weak_leq_length',['../structHPCombi_1_1Perm16.html#a8289607c4b881c86f6770f4826cafacc',1,'HPCombi::Perm16']]], + ['left_5fweak_5fleq_5fref_496',['left_weak_leq_ref',['../structHPCombi_1_1Perm16.html#a3c807d4f8ff80f1ccc967efe95af7b3e',1,'HPCombi::Perm16']]], + ['lehmer_497',['lehmer',['../structHPCombi_1_1PermGeneric.html#aa1cc32d6ad16e0288a3ed53114ab5d88',1,'HPCombi::PermGeneric::lehmer()'],['../structHPCombi_1_1Perm16.html#a2304bd009f63be8ab28154ec6774c546',1,'HPCombi::Perm16::lehmer() const']]], + ['lehmer_5farr_498',['lehmer_arr',['../structHPCombi_1_1Perm16.html#ac1738649bf6566817be4408ae6630a96',1,'HPCombi::Perm16']]], + ['lehmer_5fref_499',['lehmer_ref',['../structHPCombi_1_1Perm16.html#a65c8b896254a7a6dde4b579ec09159c3',1,'HPCombi::Perm16']]], + ['length_500',['length',['../structHPCombi_1_1PermGeneric.html#a0260047ce8685bad02ea84babc2bb634',1,'HPCombi::PermGeneric::length()'],['../structHPCombi_1_1Perm16.html#a84b7d749ffebabf06adb3e73b1e3f0b0',1,'HPCombi::Perm16::length() const']]], + ['length_5farr_501',['length_arr',['../structHPCombi_1_1Perm16.html#af7de3325da3fa6290a4560910508553c',1,'HPCombi::Perm16']]], + ['length_5fref_502',['length_ref',['../structHPCombi_1_1Perm16.html#a2e3c937402f48f0b0968091802e91dfe',1,'HPCombi::Perm16']]], + ['less_503',['less',['../namespaceHPCombi.html#aa61b4954734a02068f591c7eafa1aeb6',1,'HPCombi']]], + ['less_5fpartial_504',['less_partial',['../structHPCombi_1_1Vect16.html#a4493fd35ac6e942b8318c918df98c2aa',1,'HPCombi::Vect16::less_partial()'],['../structHPCombi_1_1VectGeneric.html#a294b418ee2482f48bf27d504b9b5c4e9',1,'HPCombi::VectGeneric::less_partial()'],['../namespaceHPCombi.html#a48d70a6a69df96cc4f981306c1c0dc44',1,'HPCombi::less_partial()']]] +]; diff --git a/docs/search/functions_9.html b/docs/search/functions_9.html new file mode 100644 index 00000000..9a8e4290 --- /dev/null +++ b/docs/search/functions_9.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/functions_9.js b/docs/search/functions_9.js new file mode 100644 index 00000000..eabbddc6 --- /dev/null +++ b/docs/search/functions_9.js @@ -0,0 +1,13 @@ +var searchData= +[ + ['main_505',['main',['../CF_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): CF.cpp'],['../image_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): image.cpp'],['../pattern_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): pattern.cpp'],['../RD_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): RD.cpp'],['../Renner_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): Renner.cpp'],['../stringmonoid_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): stringmonoid.cpp'],['../Trans_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): Trans.cpp']]], + ['make_5fhelper_506',['make_helper',['../structHPCombi_1_1TPUBuild.html#ae93e314a3ce647fab47f0977e8a358d7',1,'HPCombi::TPUBuild']]], + ['make_5fsubsets_5fof_5fsize_507',['make_subsets_of_size',['../pattern_8cpp.html#a709bbc0209d67b746b6c98d6cedab346',1,'pattern.cpp']]], + ['max_508',['max',['../namespaceHPCombi.html#a0646701c19ff360b4c2d657792aea5af',1,'HPCombi']]], + ['merge_509',['merge',['../namespaceHPCombi.html#a586f702ac2ec0c080f2353dfcc8e9468',1,'HPCombi']]], + ['merge_5frev_510',['merge_rev',['../namespaceHPCombi.html#a47f3ce91786c3eb76ba794fac71464bf',1,'HPCombi']]], + ['min_511',['min',['../namespaceHPCombi.html#a7311b8e708cad54b14267310fd0330e9',1,'HPCombi']]], + ['mult0_512',['mult0',['../Renner_8cpp.html#a9234754a158da685f218472ce18fa2a1',1,'Renner.cpp']]], + ['mult1_513',['mult1',['../Renner_8cpp.html#a5900f2f52cf050a63e110455f6b8ba28',1,'Renner.cpp']]], + ['mult_5ftranspose_514',['mult_transpose',['../classHPCombi_1_1BMat8.html#a4651222219806ac931098b4313686c79',1,'HPCombi::BMat8']]] +]; diff --git a/docs/search/functions_a.html b/docs/search/functions_a.html new file mode 100644 index 00000000..5ecc152c --- /dev/null +++ b/docs/search/functions_a.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/functions_a.js b/docs/search/functions_a.js new file mode 100644 index 00000000..066e83c5 --- /dev/null +++ b/docs/search/functions_a.js @@ -0,0 +1,13 @@ +var searchData= +[ + ['nb_5fcycles_515',['nb_cycles',['../structHPCombi_1_1Perm16.html#aa8419e1bd0baa579230662ec330d4b59',1,'HPCombi::Perm16::nb_cycles()'],['../structHPCombi_1_1PermGeneric.html#a9b459b328e72baf66183aa4d0fb74d19',1,'HPCombi::PermGeneric::nb_cycles()']]], + ['nb_5fcycles_5fref_516',['nb_cycles_ref',['../structHPCombi_1_1Perm16.html#aa97a138984c6f2d65f01ae10060aa404',1,'HPCombi::Perm16']]], + ['nb_5fcycles_5funroll_517',['nb_cycles_unroll',['../structHPCombi_1_1Perm16.html#ad13762ff67667cefd5b168e9d3749de0',1,'HPCombi::Perm16']]], + ['nb_5fdescents_518',['nb_descents',['../structHPCombi_1_1Perm16.html#a9e7516967d131748bb71025272fc2cb8',1,'HPCombi::Perm16::nb_descents()'],['../structHPCombi_1_1PermGeneric.html#ac22db541f350a935dc1d4251e16396ea',1,'HPCombi::PermGeneric::nb_descents()']]], + ['nb_5fdescents_5fref_519',['nb_descents_ref',['../structHPCombi_1_1Perm16.html#a416fa7fe28a69a8dce58fd5c510580b3',1,'HPCombi::Perm16']]], + ['nb_5ffix_5fpoints_520',['nb_fix_points',['../structHPCombi_1_1PTransf16.html#a0bcb7c0ad622432d9cfb123d84cacc01',1,'HPCombi::PTransf16']]], + ['network_5fsort_521',['network_sort',['../namespaceHPCombi.html#a3680243ecce798cc11e87c57607271f0',1,'HPCombi']]], + ['network_5fsort_5fperm_522',['network_sort_perm',['../namespaceHPCombi.html#a86b7437ea131f9e4f39fa48afe3c997a',1,'HPCombi']]], + ['not_5fequal_523',['not_equal',['../namespaceHPCombi.html#af15fa0a701cf19a906188cef47ff0369',1,'HPCombi']]], + ['nr_5frows_524',['nr_rows',['../classHPCombi_1_1BMat8.html#adc18c527e7344c22637b4572834a5547',1,'HPCombi::BMat8']]] +]; diff --git a/docs/search/functions_b.html b/docs/search/functions_b.html new file mode 100644 index 00000000..e301fedd --- /dev/null +++ b/docs/search/functions_b.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/functions_b.js b/docs/search/functions_b.js new file mode 100644 index 00000000..170e3613 --- /dev/null +++ b/docs/search/functions_b.js @@ -0,0 +1,16 @@ +var searchData= +[ + ['one_525',['one',['../structHPCombi_1_1PTransf16.html#a5ced9d0ea584cc041a3d8797f1b3f660',1,'HPCombi::PTransf16::one()'],['../structHPCombi_1_1Transf16.html#aeb023daa93795f73d8d4283e3c805182',1,'HPCombi::Transf16::one()'],['../structHPCombi_1_1PPerm16.html#a8202e3201728fc1291e9552d47f86e2b',1,'HPCombi::PPerm16::one()'],['../structHPCombi_1_1Perm16.html#a63b40f30e52e7b6c927c694ef5e1873b',1,'HPCombi::Perm16::one()'],['../structHPCombi_1_1power__helper_1_1Monoid_3_01Perm16_01_4.html#a4d3541f1afa49819274925c9fa9e2162',1,'HPCombi::power_helper::Monoid< Perm16 >::one()'],['../structHPCombi_1_1PermGeneric.html#abc4729ffdb38a9521d9a3198cef25bec',1,'HPCombi::PermGeneric::one()'],['../structHPCombi_1_1power__helper_1_1Monoid.html#a77b1edca3343d14c5c635aa8466ae54a',1,'HPCombi::power_helper::Monoid::one()'],['../structHPCombi_1_1power__helper_1_1Monoid_3_01std_1_1string_01_4.html#a99d01c0528473fb59ce2795fc169a082',1,'HPCombi::power_helper::Monoid< std::string >::one()'],['../classHPCombi_1_1BMat8.html#ac4cf296bf88a395be8aa66c24758c4e8',1,'HPCombi::BMat8::one()']]], + ['operator_20epu8_526',['operator epu8',['../structHPCombi_1_1Vect16.html#a6be7e52ae279ba88fb250940b6918b49',1,'HPCombi::Vect16']]], + ['operator_20uint64_5ft_527',['operator uint64_t',['../structHPCombi_1_1Transf16.html#aaf2212d8d42159c1d6e667b349c76278',1,'HPCombi::Transf16']]], + ['operator_21_3d_528',['operator!=',['../structHPCombi_1_1Vect16.html#ac726f3a33254a303ad93a0bd2f68629f',1,'HPCombi::Vect16::operator!=()'],['../structHPCombi_1_1VectGeneric.html#ad9c84c68870655d8ff8ddebc4f059552',1,'HPCombi::VectGeneric::operator!=()'],['../classHPCombi_1_1BMat8.html#aaa2ea8ecae3e65884a96229415d581ae',1,'HPCombi::BMat8::operator!=()']]], + ['operator_22_22_5fu8_529',['operator""_u8',['../namespaceHPCombi.html#a4e21f6f62adc6a8c2a44235ea1fdb6aa',1,'HPCombi']]], + ['operator_28_29_530',['operator()',['../structstd_1_1hash_3_01HPCombi_1_1Vect16_01_4.html#a8886609d963cd209fa385aa4f9f5bf5e',1,'std::hash< HPCombi::Vect16 >::operator()()'],['../structstd_1_1hash_3_01HPCombi_1_1VectGeneric_3_01Size_00_01Expo_01_4_01_4.html#a4818ad56ea83fcc1e26344a926d22417',1,'std::hash< HPCombi::VectGeneric< Size, Expo > >::operator()()'],['../structstd_1_1hash_3_01HPCombi_1_1PermGeneric_3_01Size_00_01Expo_01_4_01_4.html#a64048804317848cf915f9243a6ecb2b4',1,'std::hash< HPCombi::PermGeneric< Size, Expo > >::operator()()'],['../structstd_1_1hash_3_01HPCombi_1_1Perm16_01_4.html#a9a264af7ec92b2c31f80fff3cfe3129b',1,'std::hash< HPCombi::Perm16 >::operator()()'],['../structstd_1_1hash_3_01HPCombi_1_1PPerm16_01_4.html#a35a6f55ba3c3d29e326294b8ef43040c',1,'std::hash< HPCombi::PPerm16 >::operator()()'],['../structstd_1_1hash_3_01HPCombi_1_1Transf16_01_4.html#a12b841a945df6a07fc2ecfd627594333',1,'std::hash< HPCombi::Transf16 >::operator()()'],['../structstd_1_1hash_3_01HPCombi_1_1PTransf16_01_4.html#a0f210c77e5828b81e8b85ec36ed5fcd3',1,'std::hash< HPCombi::PTransf16 >::operator()()'],['../structstd_1_1less_3_01HPCombi_1_1epu8_01_4.html#a91b48367cf233a042759d45a3acf23b1',1,'std::less< HPCombi::epu8 >::operator()()'],['../structstd_1_1hash_3_01HPCombi_1_1epu8_01_4.html#a0bbfaaa9227daa6dfa3f7d0f8adca9ca',1,'std::hash< HPCombi::epu8 >::operator()()'],['../structstd_1_1equal__to_3_01HPCombi_1_1epu8_01_4.html#a370365acfbf64a846b02e7cb31182ec5',1,'std::equal_to< HPCombi::epu8 >::operator()()'],['../classHPCombi_1_1BMat8.html#aece1174c28ff5113a00022d2a089cfd9',1,'HPCombi::BMat8::operator()()'],['../structstd_1_1not__equal__to_3_01HPCombi_1_1epu8_01_4.html#aad871e7d80045cadd65190a555a35d3d',1,'std::not_equal_to< HPCombi::epu8 >::operator()()'],['../structstd_1_1hash_3_01HPCombi_1_1BMat8_01_4.html#a988a0f8198d58347e32e0905224f81f1',1,'std::hash< HPCombi::BMat8 >::operator()()'],['../structHPCombi_1_1TPUBuild.html#a8603c51a9f98f6f2ca555983ceac8d0a',1,'HPCombi::TPUBuild::operator()(std::initializer_list< type_elem > il, type_elem def) const'],['../structHPCombi_1_1TPUBuild.html#ad742d9c0485c162740dc16b6809cee03',1,'HPCombi::TPUBuild::operator()(Fun f) const'],['../structHPCombi_1_1TPUBuild.html#a6fb6834162324d97335201db3c70f79e',1,'HPCombi::TPUBuild::operator()(int c) const'],['../structHPCombi_1_1TPUBuild.html#a8182bdc6f41fce3f7fa0fd8f2c5cf57d',1,'HPCombi::TPUBuild::operator()(size_t c) const'],['../structHPCombi_1_1TPUBuild.html#ad2cc6df933b4fc9b73b20fe9f2cb9a39',1,'HPCombi::TPUBuild::operator()(array a) const'],['../structHPCombi_1_1TPUBuild.html#ae752a5bdb661c7f28b390395f3ec5311',1,'HPCombi::TPUBuild::operator()(type_elem c) const']]], + ['operator_2a_531',['operator*',['../classHPCombi_1_1BMat8.html#a9a8e81165fc69d94c245f2eab848025d',1,'HPCombi::BMat8::operator*()'],['../structHPCombi_1_1PTransf16.html#a38a01e52057d08f842e13c60b03eb976',1,'HPCombi::PTransf16::operator*()'],['../structHPCombi_1_1Transf16.html#a33f554c7429538f8857c7072e625719e',1,'HPCombi::Transf16::operator*()'],['../structHPCombi_1_1PPerm16.html#a060c7efa99da156adf26251a99eb91c2',1,'HPCombi::PPerm16::operator*()'],['../structHPCombi_1_1Perm16.html#a54dc666e276176878a1aa62e57fab0c4',1,'HPCombi::Perm16::operator*()'],['../structHPCombi_1_1PermGeneric.html#a6017270703ae89a3c10777b8c98492dd',1,'HPCombi::PermGeneric::operator*()']]], + ['operator_3c_532',['operator<',['../structHPCombi_1_1Vect16.html#a6a2c90e00a555321a9edf6ac2fe14680',1,'HPCombi::Vect16::operator<()'],['../structHPCombi_1_1VectGeneric.html#a0a9ad9bd2f8db3dda236cf2c6e4053ea',1,'HPCombi::VectGeneric::operator<()'],['../classHPCombi_1_1BMat8.html#af1133c4c4d89be6e8c45b24747e703f5',1,'HPCombi::BMat8::operator<()']]], + ['operator_3c_3c_533',['operator<<',['../pattern_8cpp.html#a752c44978f0f5abde8919968032102bb',1,'operator<<(std::ostream &out, const std::vector< T > &v): pattern.cpp'],['../image_8cpp.html#a752c44978f0f5abde8919968032102bb',1,'operator<<(std::ostream &out, const std::vector< T > &v): image.cpp'],['../namespacestd.html#a465dcbfbb08ba0ce8dc8e1f63c45b286',1,'std::operator<<(std::ostream &stream, const HPCombi::VectGeneric< Size, Expo > &v)'],['../namespacestd.html#a506955df44792820b0c2b74edb311a65',1,'std::operator<<(std::ostream &stream, const HPCombi::Vect16 &ar)'],['../namespacestd.html#a652bbc8106891de4dc7de5aef7b1e12a',1,'std::operator<<(std::ostream &stream, HPCombi::epu8 const &a)'],['../namespacestd.html#a6e16d9b96075ed604216f0b0cfdbbdaa',1,'std::operator<<(std::ostream &os, HPCombi::BMat8 const &bm)'],['../Renner_8cpp.html#a752c44978f0f5abde8919968032102bb',1,'operator<<(): Renner.cpp']]], + ['operator_3d_534',['operator=',['../structHPCombi_1_1Perm16.html#a9e07b23b99ca0b8d7b5dd8dbefd25e05',1,'HPCombi::Perm16::operator=()'],['../structHPCombi_1_1PPerm16.html#a378724b2ac086483a7a0b546007c880c',1,'HPCombi::PPerm16::operator=()'],['../structHPCombi_1_1Transf16.html#acbac6dc78027602d03935ac3f1bf5b08',1,'HPCombi::Transf16::operator=()'],['../classHPCombi_1_1BMat8.html#abd4df5c8242ebc30c75f261714214ae1',1,'HPCombi::BMat8::operator=(BMat8 &&) noexcept=default'],['../classHPCombi_1_1BMat8.html#a33ff906396b92d5964bf97321c1d9aa8',1,'HPCombi::BMat8::operator=(BMat8 const &) noexcept=default']]], + ['operator_3d_3d_535',['operator==',['../structHPCombi_1_1VectGeneric.html#a28071e7216c62fffdf5dc91060ee6d01',1,'HPCombi::VectGeneric::operator==()'],['../structHPCombi_1_1Vect16.html#a0f8289f694502bd2d95f3a9adafe0099',1,'HPCombi::Vect16::operator==()'],['../classHPCombi_1_1BMat8.html#ae4b3bfd6f9907f772cd99f714d80b39e',1,'HPCombi::BMat8::operator==(BMat8 const &that) const noexcept']]], + ['operator_3e_536',['operator>',['../classHPCombi_1_1BMat8.html#a6f3c955245b9a995934cf8f687056b3d',1,'HPCombi::BMat8']]], + ['operator_5b_5d_537',['operator[]',['../structHPCombi_1_1Vect16.html#a36975a719b4512de62b01524feb41909',1,'HPCombi::Vect16::operator[](uint64_t i) const'],['../structHPCombi_1_1Vect16.html#a8fd217b7b42b2725bb35c3b1d2b36216',1,'HPCombi::Vect16::operator[](uint64_t i)'],['../structHPCombi_1_1VectGeneric.html#ae13a794b06324d082285ad1a9c00a369',1,'HPCombi::VectGeneric::operator[](uint64_t i) const'],['../structHPCombi_1_1VectGeneric.html#a540e20fcdb1774898d00f22fe5810605',1,'HPCombi::VectGeneric::operator[](uint64_t i)']]] +]; diff --git a/docs/search/functions_c.html b/docs/search/functions_c.html new file mode 100644 index 00000000..c4f32687 --- /dev/null +++ b/docs/search/functions_c.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/functions_c.js b/docs/search/functions_c.js new file mode 100644 index 00000000..b1ec51d2 --- /dev/null +++ b/docs/search/functions_c.js @@ -0,0 +1,30 @@ +var searchData= +[ + ['partial_5fmax_538',['partial_max',['../namespaceHPCombi.html#aebabe1134b200833d13df297171044ef',1,'HPCombi']]], + ['partial_5fmax_5fgen_539',['partial_max_gen',['../namespaceHPCombi.html#aa34703f1217e3895d78e3298644cf866',1,'HPCombi']]], + ['partial_5fmax_5finplace_540',['partial_max_inplace',['../structHPCombi_1_1VectGeneric.html#ac4b66975021656ca46667099ecc411df',1,'HPCombi::VectGeneric']]], + ['partial_5fmax_5fref_541',['partial_max_ref',['../namespaceHPCombi.html#a767e7ba4b8b510af066cc701ae2d239e',1,'HPCombi']]], + ['partial_5fmax_5fround_542',['partial_max_round',['../namespaceHPCombi.html#a7b2fbe8b3e4b850266173841d03e3380',1,'HPCombi']]], + ['partial_5fmin_543',['partial_min',['../namespaceHPCombi.html#abad0634130ca5c6ceb618aeb8288b89d',1,'HPCombi']]], + ['partial_5fmin_5fgen_544',['partial_min_gen',['../namespaceHPCombi.html#acf38a699b1247482f0ab7510c570a76f',1,'HPCombi']]], + ['partial_5fmin_5finplace_545',['partial_min_inplace',['../structHPCombi_1_1VectGeneric.html#a9db4ea0b4930e5397d29135b13ce0a30',1,'HPCombi::VectGeneric']]], + ['partial_5fmin_5fref_546',['partial_min_ref',['../namespaceHPCombi.html#ad158e198d89c30ee0c12a585eb5c0201',1,'HPCombi']]], + ['partial_5fmin_5fround_547',['partial_min_round',['../namespaceHPCombi.html#ac5e754a10eae32f40987fd4135620045',1,'HPCombi']]], + ['partial_5fsums_548',['partial_sums',['../namespaceHPCombi.html#a28889b97d949a58fe0a6f512a972448c',1,'HPCombi::partial_sums()'],['../structHPCombi_1_1VectGeneric.html#ada6492c1cb27ee503e8dd5b140967829',1,'HPCombi::VectGeneric::partial_sums()'],['../structHPCombi_1_1Vect16.html#af3b49b7660ef789a346220e205ba3651',1,'HPCombi::Vect16::partial_sums()']]], + ['partial_5fsums_5fgen_549',['partial_sums_gen',['../namespaceHPCombi.html#a6d9fc8a25884023cf4ba1ce178d52ff9',1,'HPCombi']]], + ['partial_5fsums_5finplace_550',['partial_sums_inplace',['../structHPCombi_1_1VectGeneric.html#aaa696ffe7323a721d4327c2124408c85',1,'HPCombi::VectGeneric']]], + ['partial_5fsums_5fref_551',['partial_sums_ref',['../namespaceHPCombi.html#a28294ae8292022d82bd3430c140e80d8',1,'HPCombi']]], + ['partial_5fsums_5fround_552',['partial_sums_round',['../namespaceHPCombi.html#a64cc63aae55df82d6890848608d468ea',1,'HPCombi']]], + ['perm16_553',['Perm16',['../structHPCombi_1_1Perm16.html#a419ed5f66e57f09d9c987706788415ef',1,'HPCombi::Perm16::Perm16(uint64_t compressed)'],['../structHPCombi_1_1Perm16.html#af349aab7da2fa288680f430194e5f939',1,'HPCombi::Perm16::Perm16()=default'],['../structHPCombi_1_1Perm16.html#a59a9ce7e2f628906e2d41c83ba6a7242',1,'HPCombi::Perm16::Perm16(std::initializer_list< uint8_t > il)'],['../structHPCombi_1_1Perm16.html#a5cffc55786ae082fd25c52d8daead018',1,'HPCombi::Perm16::Perm16(const epu8 x)'],['../structHPCombi_1_1Perm16.html#a9150b9db88258091929271ed7ed8b6cf',1,'HPCombi::Perm16::Perm16(const vect v)'],['../structHPCombi_1_1Perm16.html#a8ec5730506e0d8549f33deb7620566c9',1,'HPCombi::Perm16::Perm16(const Perm16 &)=default']]], + ['permgeneric_554',['PermGeneric',['../structHPCombi_1_1PermGeneric.html#ac5138b09b1aba0eb325e8f9ea6eda1bd',1,'HPCombi::PermGeneric::PermGeneric(std::initializer_list< Expo > il)'],['../structHPCombi_1_1PermGeneric.html#a2fbddc3199299c3254048f23af3628e9',1,'HPCombi::PermGeneric::PermGeneric(const vect v)'],['../structHPCombi_1_1PermGeneric.html#a5349dacff5ac377bbe47b6e36d385021',1,'HPCombi::PermGeneric::PermGeneric()=default']]], + ['permutation_5fof_555',['permutation_of',['../namespaceHPCombi.html#a4056154d0d25a4a8ac6b6495116b7e08',1,'HPCombi']]], + ['permutation_5fof_5fref_556',['permutation_of_ref',['../namespaceHPCombi.html#a708390f084759d351f03cc5d5da0f80d',1,'HPCombi']]], + ['permuted_557',['permuted',['../namespaceHPCombi.html#a12096692b1ed038c3818699db58fd5d9',1,'HPCombi::permuted()'],['../structHPCombi_1_1VectGeneric.html#a80626cf8650ddff8c78a8cafe3ae0fb2',1,'HPCombi::VectGeneric::permuted()'],['../structHPCombi_1_1Vect16.html#ae69701cd6be2cd268557a252fd0fb770',1,'HPCombi::Vect16::permuted()']]], + ['permuted_5fref_558',['permuted_ref',['../namespaceHPCombi.html#ae9f0193201159ecc65acb87414980d8d',1,'HPCombi']]], + ['popcount_559',['popcount',['../structHPCombi_1_1TPUBuild.html#a1ac46b633d0cf853e7eb5321fe6b37da',1,'HPCombi::TPUBuild']]], + ['popcount16_560',['popcount16',['../namespaceHPCombi.html#a6429428fa9145e1e9d7fa3f9bf5b6e0e',1,'HPCombi']]], + ['pow_561',['pow',['../namespaceHPCombi.html#af015d3fb3769a7b157aef162ced70b2d',1,'HPCombi']]], + ['pperm16_562',['PPerm16',['../structHPCombi_1_1PPerm16.html#addc8303c5b76fbc04a6fac131fc1f4bc',1,'HPCombi::PPerm16::PPerm16(std::initializer_list< uint8_t > il)'],['../structHPCombi_1_1PPerm16.html#a715994e4263a61e769265320a20f8a69',1,'HPCombi::PPerm16::PPerm16(std::vector< uint8_t > dom, std::vector< uint8_t > rng, size_t=0)'],['../structHPCombi_1_1PPerm16.html#af295909af453517bb56c0aeedeb134b7',1,'HPCombi::PPerm16::PPerm16(const epu8 x)'],['../structHPCombi_1_1PPerm16.html#a5da248f5427f1463fa6cda8906ac7aee',1,'HPCombi::PPerm16::PPerm16(const vect v)'],['../structHPCombi_1_1PPerm16.html#a502bebb5b8a87913a5636f12d811418f',1,'HPCombi::PPerm16::PPerm16(const PPerm16 &v)=default'],['../structHPCombi_1_1PPerm16.html#a2fe10a6644f786ee932e7e7e7b878035',1,'HPCombi::PPerm16::PPerm16()=default']]], + ['prod_563',['prod',['../structHPCombi_1_1power__helper_1_1Monoid_3_01std_1_1string_01_4.html#a4220fe3efef853644e3bce316a584449',1,'HPCombi::power_helper::Monoid< std::string >::prod()'],['../structHPCombi_1_1power__helper_1_1Monoid.html#a0312ff434c0c6e5ffc7a0b31fd414c21',1,'HPCombi::power_helper::Monoid::prod()'],['../structHPCombi_1_1power__helper_1_1Monoid_3_01Perm16_01_4.html#adb49631389118499de2cda8956b71c32',1,'HPCombi::power_helper::Monoid< Perm16 >::prod()']]], + ['ptransf16_564',['PTransf16',['../structHPCombi_1_1PTransf16.html#a608b265495baab1306f561f35d9543d9',1,'HPCombi::PTransf16::PTransf16(std::initializer_list< uint8_t > il)'],['../structHPCombi_1_1PTransf16.html#ac2a38a43ab81b728c8dabf4b9a47b874',1,'HPCombi::PTransf16::PTransf16(std::vector< uint8_t > dom, std::vector< uint8_t > rng, size_t=0)'],['../structHPCombi_1_1PTransf16.html#a134f422d7bf5db98dbba6df06b24f3be',1,'HPCombi::PTransf16::PTransf16(const epu8 x)'],['../structHPCombi_1_1PTransf16.html#a20c2f9d089590c25739808102bc2ce7f',1,'HPCombi::PTransf16::PTransf16(const vect v)'],['../structHPCombi_1_1PTransf16.html#ab80cdcc476da2477092bca0b52e9a100',1,'HPCombi::PTransf16::PTransf16()=default']]] +]; diff --git a/docs/search/functions_d.html b/docs/search/functions_d.html new file mode 100644 index 00000000..7a1ed065 --- /dev/null +++ b/docs/search/functions_d.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/functions_d.js b/docs/search/functions_d.js new file mode 100644 index 00000000..837e825a --- /dev/null +++ b/docs/search/functions_d.js @@ -0,0 +1,37 @@ +var searchData= +[ + ['random_565',['random',['../classHPCombi_1_1BMat8.html#a5b78e33ef34b88ebe02a3f044095106e',1,'HPCombi::BMat8::random()'],['../structHPCombi_1_1Perm16.html#affd2e8718806fef529fb61f9896f5bab',1,'HPCombi::Perm16::random()'],['../structHPCombi_1_1PermGeneric.html#a89830884599dda631b4a1c32185b5948',1,'HPCombi::PermGeneric::random()'],['../structHPCombi_1_1VectGeneric.html#a5c40a4e62227138426ff3396b37134d1',1,'HPCombi::VectGeneric::random()'],['../classHPCombi_1_1BMat8.html#ae11d5e25f0b00a1bf3fe0b5439857c5f',1,'HPCombi::BMat8::random()']]], + ['random_5fepu8_566',['random_epu8',['../namespaceHPCombi.html#abaad3d89908e243d0b72e1a5cd92a794',1,'HPCombi']]], + ['rank_567',['rank',['../structHPCombi_1_1PTransf16.html#aca525318dac96287d80b28f96bb79811',1,'HPCombi::PTransf16']]], + ['rank_5fcmpestrm_568',['rank_cmpestrm',['../structHPCombi_1_1PTransf16.html#abbb81eea4358289059ef89f3fba39352',1,'HPCombi::PTransf16']]], + ['rank_5fref_569',['rank_ref',['../structHPCombi_1_1PTransf16.html#a81aad41fd8619fcb017d193bf62fb12e',1,'HPCombi::PTransf16']]], + ['reduced_5fword_570',['reduced_word',['../Renner_8cpp.html#ae4d0bf3d717808f38c753202203e2ab3',1,'Renner.cpp']]], + ['remove_5fdups_571',['remove_dups',['../namespaceHPCombi.html#a3abaa0d1231460f1fc25f643f343acf9',1,'HPCombi']]], + ['reset_572',['reset',['../classlibsemigroups_1_1Timer.html#a49797cfcb6f59671baaf98b92ba645f5',1,'libsemigroups::Timer']]], + ['rev_573',['rev',['../structHPCombi_1_1TPUBuild.html#a83b9320793bd16fe1a45715e4a284de5',1,'HPCombi::TPUBuild']]], + ['reverted_574',['reverted',['../namespaceHPCombi.html#a946c689038bb806c934577567c37b976',1,'HPCombi']]], + ['revsorted_575',['revsorted',['../namespaceHPCombi.html#abb0cc2ba3dea86d17e1bcfcb67379748',1,'HPCombi']]], + ['revsorted8_576',['revsorted8',['../namespaceHPCombi.html#a3f4db33e3cec019f4ea00e7b8a3b76f1',1,'HPCombi']]], + ['right_5fcycle_577',['right_cycle',['../structHPCombi_1_1TPUBuild.html#add13529e2df027a24455a78b9bb56cab',1,'HPCombi::TPUBuild']]], + ['right_5fdup_578',['right_dup',['../structHPCombi_1_1TPUBuild.html#a7dec13a66bd0d01e9f37d2a7a27a6cac',1,'HPCombi::TPUBuild']]], + ['right_5fone_579',['right_one',['../structHPCombi_1_1PPerm16.html#a0404c61f26b3a8732709800fe62d40de',1,'HPCombi::PPerm16::right_one()'],['../structHPCombi_1_1PTransf16.html#a9485b4a9afd125074c7c1d14c34abd96',1,'HPCombi::PTransf16::right_one()']]], + ['right_5fperm_5faction_5fon_5fbasis_580',['right_perm_action_on_basis',['../classHPCombi_1_1BMat8.html#a9e528d9c673cb6598311e41de4d5b79c',1,'HPCombi::BMat8']]], + ['right_5fperm_5faction_5fon_5fbasis_5fref_581',['right_perm_action_on_basis_ref',['../classHPCombi_1_1BMat8.html#afef14b4311c38d6987a1bbccd3e78bc7',1,'HPCombi::BMat8']]], + ['row_5fpermutation_5fmatrix_582',['row_permutation_matrix',['../classHPCombi_1_1BMat8.html#a44a9189dbb2ebfeb57779f71356c7386',1,'HPCombi::BMat8']]], + ['row_5fpermuted_583',['row_permuted',['../classHPCombi_1_1BMat8.html#a8d4fd804fab0a5e7cc94b773fb403548',1,'HPCombi::BMat8']]], + ['row_5fspace_5fbasis_584',['row_space_basis',['../classHPCombi_1_1BMat8.html#a1ae3421b568f665a9415c93891cb00a3',1,'HPCombi::BMat8']]], + ['row_5fspace_5fbitset_585',['row_space_bitset',['../classHPCombi_1_1BMat8.html#a9370b31e936f0c3fe38212eac0a99130',1,'HPCombi::BMat8']]], + ['row_5fspace_5fbitset_5fref_586',['row_space_bitset_ref',['../classHPCombi_1_1BMat8.html#aa0fd49af0a7b93c0be24cffed9a1487e',1,'HPCombi::BMat8']]], + ['row_5fspace_5fincluded_587',['row_space_included',['../classHPCombi_1_1BMat8.html#a910526b0f2b25dc81c6cede4cdf76cff',1,'HPCombi::BMat8']]], + ['row_5fspace_5fincluded2_588',['row_space_included2',['../classHPCombi_1_1BMat8.html#a251c4c9019eb4b2fdaed3f88ac5584de',1,'HPCombi::BMat8']]], + ['row_5fspace_5fincluded_5fbitset_589',['row_space_included_bitset',['../classHPCombi_1_1BMat8.html#a6c1cb3215c07a385d661ce5eb178ab81',1,'HPCombi::BMat8']]], + ['row_5fspace_5fincluded_5fref_590',['row_space_included_ref',['../classHPCombi_1_1BMat8.html#afd96bd1bc161eafcec67db56c6bde99f',1,'HPCombi::BMat8']]], + ['row_5fspace_5fmask_591',['row_space_mask',['../classHPCombi_1_1BMat8.html#a809b5701d5ead9904785b22a13eb3113',1,'HPCombi::BMat8']]], + ['row_5fspace_5fsize_592',['row_space_size',['../classHPCombi_1_1BMat8.html#aba499f4f2a02fc34b68e898ba4af5cc2',1,'HPCombi::BMat8']]], + ['row_5fspace_5fsize_5fbitset_593',['row_space_size_bitset',['../classHPCombi_1_1BMat8.html#a35ddab6a9cf0f7486606f2c48af53ba4',1,'HPCombi::BMat8']]], + ['row_5fspace_5fsize_5fincl_594',['row_space_size_incl',['../classHPCombi_1_1BMat8.html#a0720fee634f178d70ebb10516606b1e3',1,'HPCombi::BMat8']]], + ['row_5fspace_5fsize_5fincl1_595',['row_space_size_incl1',['../classHPCombi_1_1BMat8.html#afb918c64533a5b91848cf195f72bf506',1,'HPCombi::BMat8']]], + ['row_5fspace_5fsize_5fref_596',['row_space_size_ref',['../classHPCombi_1_1BMat8.html#ab14dd34b536d25fed060639ba4c5373c',1,'HPCombi::BMat8']]], + ['row_5fspace_5fupdate_5fbitset_597',['row_space_update_bitset',['../namespaceHPCombi_1_1detail.html#a2e37f9ef9892dec87eed0d091b5868db',1,'HPCombi::detail']]], + ['rows_598',['rows',['../classHPCombi_1_1BMat8.html#ac82188ebe929ea3bfe8e803b08eab06d',1,'HPCombi::BMat8']]] +]; diff --git a/docs/search/functions_e.html b/docs/search/functions_e.html new file mode 100644 index 00000000..22d2a6bf --- /dev/null +++ b/docs/search/functions_e.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/functions_e.js b/docs/search/functions_e.js new file mode 100644 index 00000000..3d5ac273 --- /dev/null +++ b/docs/search/functions_e.js @@ -0,0 +1,21 @@ +var searchData= +[ + ['set_599',['set',['../classHPCombi_1_1BMat8.html#adfe928574d45e0cbaa41b4e715e57da6',1,'HPCombi::BMat8']]], + ['shifted_5fleft_600',['shifted_left',['../namespaceHPCombi.html#adf326a8c4f538e9b8ffb1bfdc9b5c8fd',1,'HPCombi']]], + ['shifted_5fright_601',['shifted_right',['../namespaceHPCombi.html#a24815578dbf9e6b6c59e8c0b212881b3',1,'HPCombi']]], + ['size_602',['size',['../structHPCombi_1_1PTransf16.html#a313bad8c66a2f1b2b58a1b9fafb9a9e7',1,'HPCombi::PTransf16::size()'],['../structHPCombi_1_1PermGeneric.html#a8bcf352d4b329d249cdd5d500d447692',1,'HPCombi::PermGeneric::size()'],['../structHPCombi_1_1Vect16.html#a7842db0e44a976b42da11273b7ec0709',1,'HPCombi::Vect16::size()'],['../structHPCombi_1_1VectGeneric.html#a828e4d93e45b68e508cc39b35efbb6c1',1,'HPCombi::VectGeneric::size()']]], + ['smallest_5ffix_5fpoint_603',['smallest_fix_point',['../structHPCombi_1_1PTransf16.html#aa97b295b719df0a48e5b21d2f4fa05b8',1,'HPCombi::PTransf16']]], + ['smallest_5fmoved_5fpoint_604',['smallest_moved_point',['../structHPCombi_1_1PTransf16.html#af56cf3531f73c5050d69a5b03e1bf8ad',1,'HPCombi::PTransf16']]], + ['sort_605',['sort',['../structHPCombi_1_1VectGeneric.html#a46462974f835b5ec9221c04121eca52b',1,'HPCombi::VectGeneric']]], + ['sort8_5fperm_606',['sort8_perm',['../namespaceHPCombi.html#a142458f17822a780bf4e2a9b9c214399',1,'HPCombi']]], + ['sort_5fperm_607',['sort_perm',['../namespaceHPCombi.html#acd3a0b5608da9c501d2acfd1b42f41e6',1,'HPCombi']]], + ['sorted_608',['sorted',['../namespaceHPCombi.html#aac0b8c59858e6dbf4a074ea169b16529',1,'HPCombi']]], + ['sorted8_609',['sorted8',['../namespaceHPCombi.html#a769db30abfc516fc861d976f22d7600e',1,'HPCombi']]], + ['sorted_5fvect_610',['sorted_vect',['../namespaceHPCombi.html#a0d15a3f90e72b4b414504ccd0e1ba05c',1,'HPCombi']]], + ['square_611',['square',['../namespaceHPCombi.html#adaad0b0ef93f416f19063c142bcb464d',1,'HPCombi']]], + ['string_612',['string',['../classlibsemigroups_1_1Timer.html#a7534e8abf939183699da93ed77b20976',1,'libsemigroups::Timer::string() const'],['../classlibsemigroups_1_1Timer.html#ae28f366322a29a507b12082f348ed43a',1,'libsemigroups::Timer::string(std::chrono::nanoseconds elapsed) const']]], + ['subset_5fto_5fperm_613',['subset_to_perm',['../pattern_8cpp.html#ad463f9694046405cafa124ba3e6bc223',1,'pattern.cpp']]], + ['sum_614',['sum',['../structHPCombi_1_1Vect16.html#acfbb79a84125465f08a9a8a5ac5d606b',1,'HPCombi::Vect16']]], + ['swap_615',['swap',['../classHPCombi_1_1BMat8.html#ac3dc620abd1c33e02278f557f8e71c9d',1,'HPCombi::BMat8']]], + ['sym_5frenner_616',['sym_renner',['../Renner_8cpp.html#ae1b3a7418fdf9311fd87bee0e058a2fe',1,'Renner.cpp']]] +]; diff --git a/docs/search/functions_f.html b/docs/search/functions_f.html new file mode 100644 index 00000000..54b7dee0 --- /dev/null +++ b/docs/search/functions_f.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/functions_f.js b/docs/search/functions_f.js new file mode 100644 index 00000000..65822aca --- /dev/null +++ b/docs/search/functions_f.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['timer_617',['Timer',['../classlibsemigroups_1_1Timer.html#a55e77d45dca20592fd5912e2ee399ce2',1,'libsemigroups::Timer']]], + ['to_5fint_618',['to_int',['../classHPCombi_1_1BMat8.html#aab6eeeac5fae056b595cdf16e3f1f358',1,'HPCombi::BMat8']]], + ['to_5fstring_619',['to_string',['../namespacestd.html#ab23ef44c64cdfc7d83dc91a5788c58b3',1,'std']]], + ['tosubset_620',['tosubset',['../pattern_8cpp.html#a0e4b6de9624f56e537f2896fba9f3e3d',1,'pattern.cpp']]], + ['transf16_621',['Transf16',['../structHPCombi_1_1Transf16.html#ab4938e3ca65d552efd2c93696e2a9d1b',1,'HPCombi::Transf16::Transf16()=default'],['../structHPCombi_1_1Transf16.html#af56c55fce7ee678ea3a244394d6934e8',1,'HPCombi::Transf16::Transf16(const Transf16 &v)=default'],['../structHPCombi_1_1Transf16.html#a3d0ee573b865f77aa9cc39f6f627f6ef',1,'HPCombi::Transf16::Transf16(const vect v)'],['../structHPCombi_1_1Transf16.html#a5f831a36ba0a2c39ec009fc5f72f1c83',1,'HPCombi::Transf16::Transf16(const epu8 x)'],['../structHPCombi_1_1Transf16.html#a5d938f718b72e09b0f50dd7c4e7d65e6',1,'HPCombi::Transf16::Transf16(std::initializer_list< uint8_t > il)'],['../structHPCombi_1_1Transf16.html#a8a170f0108164b8ee0d37786987e6abc',1,'HPCombi::Transf16::Transf16(uint64_t compressed)']]], + ['transpose_622',['transpose',['../classHPCombi_1_1BMat8.html#a71a4dd27b3bb7f430db403992586f145',1,'HPCombi::BMat8']]], + ['transpose2_623',['transpose2',['../classHPCombi_1_1BMat8.html#a3334530356cbe17651ee07535962a580',1,'HPCombi::BMat8']]], + ['transpose_5fmask_624',['transpose_mask',['../classHPCombi_1_1BMat8.html#abf1bde4f72b5c5dcbbd320dcf570a6a5',1,'HPCombi::BMat8']]], + ['transpose_5fmaskd_625',['transpose_maskd',['../classHPCombi_1_1BMat8.html#a528ac7f8ada4a9f0468f648c8bed9bdc',1,'HPCombi::BMat8']]] +]; diff --git a/docs/search/mag_sel.svg b/docs/search/mag_sel.svg new file mode 100644 index 00000000..03626f64 --- /dev/null +++ b/docs/search/mag_sel.svg @@ -0,0 +1,74 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/docs/search/namespaces_0.html b/docs/search/namespaces_0.html new file mode 100644 index 00000000..21db2c3a --- /dev/null +++ b/docs/search/namespaces_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/namespaces_0.js b/docs/search/namespaces_0.js new file mode 100644 index 00000000..3788f4ea --- /dev/null +++ b/docs/search/namespaces_0.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['detail_382',['detail',['../namespaceHPCombi_1_1detail.html',1,'HPCombi']]], + ['hpcombi_383',['HPCombi',['../namespaceHPCombi.html',1,'']]], + ['power_5fhelper_384',['power_helper',['../namespaceHPCombi_1_1power__helper.html',1,'HPCombi']]] +]; diff --git a/docs/search/namespaces_1.html b/docs/search/namespaces_1.html new file mode 100644 index 00000000..a01efeb1 --- /dev/null +++ b/docs/search/namespaces_1.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/namespaces_1.js b/docs/search/namespaces_1.js new file mode 100644 index 00000000..1add1b55 --- /dev/null +++ b/docs/search/namespaces_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['libsemigroups_385',['libsemigroups',['../namespacelibsemigroups.html',1,'']]] +]; diff --git a/docs/search/namespaces_2.html b/docs/search/namespaces_2.html new file mode 100644 index 00000000..b46f2a5d --- /dev/null +++ b/docs/search/namespaces_2.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/namespaces_2.js b/docs/search/namespaces_2.js new file mode 100644 index 00000000..a5e9693b --- /dev/null +++ b/docs/search/namespaces_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['std_386',['std',['../namespacestd.html',1,'']]] +]; diff --git a/docs/search/nomatches.html b/docs/search/nomatches.html new file mode 100644 index 00000000..2b9360b6 --- /dev/null +++ b/docs/search/nomatches.html @@ -0,0 +1,13 @@ + + + + + + + + +
    +
    No Matches
    +
    + + diff --git a/docs/search/pages_0.html b/docs/search/pages_0.html new file mode 100644 index 00000000..8517b48f --- /dev/null +++ b/docs/search/pages_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/pages_0.js b/docs/search/pages_0.js new file mode 100644 index 00000000..058881d0 --- /dev/null +++ b/docs/search/pages_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['hpcombi_687',['HPCombi',['../index.html',1,'']]] +]; diff --git a/docs/search/related_0.html b/docs/search/related_0.html new file mode 100644 index 00000000..506aaecc --- /dev/null +++ b/docs/search/related_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/related_0.js b/docs/search/related_0.js new file mode 100644 index 00000000..db68f5c4 --- /dev/null +++ b/docs/search/related_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['operator_3c_3c_684',['operator<<',['../classlibsemigroups_1_1Timer.html#abc161ba00cf4e40783f7c82002c3e55f',1,'libsemigroups::Timer']]] +]; diff --git a/docs/search/search.css b/docs/search/search.css new file mode 100644 index 00000000..9074198f --- /dev/null +++ b/docs/search/search.css @@ -0,0 +1,257 @@ +/*---------------- Search Box */ + +#MSearchBox { + white-space : nowrap; + background: white; + border-radius: 0.65em; + box-shadow: inset 0.5px 0.5px 3px 0px #555; + z-index: 102; +} + +#MSearchBox .left { + display: inline-block; + vertical-align: middle; + height: 1.4em; +} + +#MSearchSelect { + display: inline-block; + vertical-align: middle; + height: 1.4em; + padding: 0 0 0 0.3em; + margin: 0; +} + +#MSearchField { + display: inline-block; + vertical-align: middle; + width: 7.5em; + height: 1.1em; + margin: 0 0.15em; + padding: 0; + line-height: 1em; + border:none; + color: #909090; + outline: none; + font-family: Arial, Verdana, sans-serif; + -webkit-border-radius: 0px; + border-radius: 0px; + background: none; +} + + +#MSearchBox .right { + display: inline-block; + vertical-align: middle; + width: 1.4em; + height: 1.4em; +} + +#MSearchClose { + display: none; + font-size: inherit; + background : none; + border: none; + margin: 0; + padding: 0; + outline: none; + +} + +#MSearchCloseImg { + height: 1.4em; + padding: 0.3em; + margin: 0; +} + +.MSearchBoxActive #MSearchField { + color: #000000; +} + +#main-menu > li:last-child { + /* This
  • object is the parent of the search bar */ + display: flex; + justify-content: center; + align-items: center; + height: 36px; + margin-right: 1em; +} + +/*---------------- Search filter selection */ + +#MSearchSelectWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid #90A5CE; + background-color: #F9FAFC; + z-index: 10001; + padding-top: 4px; + padding-bottom: 4px; + -moz-border-radius: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +.SelectItem { + font: 8pt Arial, Verdana, sans-serif; + padding-left: 2px; + padding-right: 12px; + border: 0px; +} + +span.SelectionMark { + margin-right: 4px; + font-family: monospace; + outline-style: none; + text-decoration: none; +} + +a.SelectItem { + display: block; + outline-style: none; + color: #000000; + text-decoration: none; + padding-left: 6px; + padding-right: 12px; +} + +a.SelectItem:focus, +a.SelectItem:active { + color: #000000; + outline-style: none; + text-decoration: none; +} + +a.SelectItem:hover { + color: #FFFFFF; + background-color: #3D578C; + outline-style: none; + text-decoration: none; + cursor: pointer; + display: block; +} + +/*---------------- Search results window */ + +iframe#MSearchResults { + width: 60ex; + height: 15em; +} + +#MSearchResultsWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid #000; + background-color: #EEF1F7; + z-index:10000; +} + +/* ----------------------------------- */ + + +#SRIndex { + clear:both; + padding-bottom: 15px; +} + +.SREntry { + font-size: 10pt; + padding-left: 1ex; +} + +.SRPage .SREntry { + font-size: 8pt; + padding: 1px 5px; +} + +body.SRPage { + margin: 5px 2px; +} + +.SRChildren { + padding-left: 3ex; padding-bottom: .5em +} + +.SRPage .SRChildren { + display: none; +} + +.SRSymbol { + font-weight: bold; + color: #425E97; + font-family: Arial, Verdana, sans-serif; + text-decoration: none; + outline: none; +} + +a.SRScope { + display: block; + color: #425E97; + font-family: Arial, Verdana, sans-serif; + text-decoration: none; + outline: none; +} + +a.SRSymbol:focus, a.SRSymbol:active, +a.SRScope:focus, a.SRScope:active { + text-decoration: underline; +} + +span.SRScope { + padding-left: 4px; + font-family: Arial, Verdana, sans-serif; +} + +.SRPage .SRStatus { + padding: 2px 5px; + font-size: 8pt; + font-style: italic; + font-family: Arial, Verdana, sans-serif; +} + +.SRResult { + display: none; +} + +div.searchresults { + margin-left: 10px; + margin-right: 10px; +} + +/*---------------- External search page results */ + +.searchresult { + background-color: #F0F3F8; +} + +.pages b { + color: white; + padding: 5px 5px 3px 5px; + background-image: url("../tab_a.png"); + background-repeat: repeat-x; + text-shadow: 0 1px 1px #000000; +} + +.pages { + line-height: 17px; + margin-left: 4px; + text-decoration: none; +} + +.hl { + font-weight: bold; +} + +#searchresults { + margin-bottom: 20px; +} + +.searchpages { + margin-top: 10px; +} + diff --git a/docs/search/search.js b/docs/search/search.js new file mode 100644 index 00000000..fb226f73 --- /dev/null +++ b/docs/search/search.js @@ -0,0 +1,816 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function convertToId(search) +{ + var result = ''; + for (i=0;i do a search + { + this.Search(); + } + } + + this.OnSearchSelectKey = function(evt) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==40 && this.searchIndex0) // Up + { + this.searchIndex--; + this.OnSelectItem(this.searchIndex); + } + else if (e.keyCode==13 || e.keyCode==27) + { + this.OnSelectItem(this.searchIndex); + this.CloseSelectionWindow(); + this.DOMSearchField().focus(); + } + return false; + } + + // --------- Actions + + // Closes the results window. + this.CloseResultsWindow = function() + { + this.DOMPopupSearchResultsWindow().style.display = 'none'; + this.DOMSearchClose().style.display = 'none'; + this.Activate(false); + } + + this.CloseSelectionWindow = function() + { + this.DOMSearchSelectWindow().style.display = 'none'; + } + + // Performs a search. + this.Search = function() + { + this.keyTimeout = 0; + + // strip leading whitespace + var searchValue = this.DOMSearchField().value.replace(/^ +/, ""); + + var code = searchValue.toLowerCase().charCodeAt(0); + var idxChar = searchValue.substr(0, 1).toLowerCase(); + if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) // surrogate pair + { + idxChar = searchValue.substr(0, 2); + } + + var resultsPage; + var resultsPageWithSearch; + var hasResultsPage; + + var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar); + if (idx!=-1) + { + var hexCode=idx.toString(16); + resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + this.extension; + resultsPageWithSearch = resultsPage+'?'+escape(searchValue); + hasResultsPage = true; + } + else // nothing available for this search term + { + resultsPage = this.resultsPath + '/nomatches' + this.extension; + resultsPageWithSearch = resultsPage; + hasResultsPage = false; + } + + window.frames.MSearchResults.location = resultsPageWithSearch; + var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); + + if (domPopupSearchResultsWindow.style.display!='block') + { + var domSearchBox = this.DOMSearchBox(); + this.DOMSearchClose().style.display = 'inline-block'; + if (this.insideFrame) + { + var domPopupSearchResults = this.DOMPopupSearchResults(); + domPopupSearchResultsWindow.style.position = 'relative'; + domPopupSearchResultsWindow.style.display = 'block'; + var width = document.body.clientWidth - 8; // the -8 is for IE :-( + domPopupSearchResultsWindow.style.width = width + 'px'; + domPopupSearchResults.style.width = width + 'px'; + } + else + { + var domPopupSearchResults = this.DOMPopupSearchResults(); + var left = getXPos(domSearchBox) + 150; // domSearchBox.offsetWidth; + var top = getYPos(domSearchBox) + 20; // domSearchBox.offsetHeight + 1; + domPopupSearchResultsWindow.style.display = 'block'; + left -= domPopupSearchResults.offsetWidth; + domPopupSearchResultsWindow.style.top = top + 'px'; + domPopupSearchResultsWindow.style.left = left + 'px'; + } + } + + this.lastSearchValue = searchValue; + this.lastResultsPage = resultsPage; + } + + // -------- Activation Functions + + // Activates or deactivates the search panel, resetting things to + // their default values if necessary. + this.Activate = function(isActive) + { + if (isActive || // open it + this.DOMPopupSearchResultsWindow().style.display == 'block' + ) + { + this.DOMSearchBox().className = 'MSearchBoxActive'; + + var searchField = this.DOMSearchField(); + + if (searchField.value == this.searchLabel) // clear "Search" term upon entry + { + searchField.value = ''; + this.searchActive = true; + } + } + else if (!isActive) // directly remove the panel + { + this.DOMSearchBox().className = 'MSearchBoxInactive'; + this.DOMSearchField().value = this.searchLabel; + this.searchActive = false; + this.lastSearchValue = '' + this.lastResultsPage = ''; + } + } +} + +// ----------------------------------------------------------------------- + +// The class that handles everything on the search results page. +function SearchResults(name) +{ + // The number of matches from the last run of . + this.lastMatchCount = 0; + this.lastKey = 0; + this.repeatOn = false; + + // Toggles the visibility of the passed element ID. + this.FindChildElement = function(id) + { + var parentElement = document.getElementById(id); + var element = parentElement.firstChild; + + while (element && element!=parentElement) + { + if (element.nodeName.toLowerCase() == 'div' && element.className == 'SRChildren') + { + return element; + } + + if (element.nodeName.toLowerCase() == 'div' && element.hasChildNodes()) + { + element = element.firstChild; + } + else if (element.nextSibling) + { + element = element.nextSibling; + } + else + { + do + { + element = element.parentNode; + } + while (element && element!=parentElement && !element.nextSibling); + + if (element && element!=parentElement) + { + element = element.nextSibling; + } + } + } + } + + this.Toggle = function(id) + { + var element = this.FindChildElement(id); + if (element) + { + if (element.style.display == 'block') + { + element.style.display = 'none'; + } + else + { + element.style.display = 'block'; + } + } + } + + // Searches for the passed string. If there is no parameter, + // it takes it from the URL query. + // + // Always returns true, since other documents may try to call it + // and that may or may not be possible. + this.Search = function(search) + { + if (!search) // get search word from URL + { + search = window.location.search; + search = search.substring(1); // Remove the leading '?' + search = unescape(search); + } + + search = search.replace(/^ +/, ""); // strip leading spaces + search = search.replace(/ +$/, ""); // strip trailing spaces + search = search.toLowerCase(); + search = convertToId(search); + + var resultRows = document.getElementsByTagName("div"); + var matches = 0; + + var i = 0; + while (i < resultRows.length) + { + var row = resultRows.item(i); + if (row.className == "SRResult") + { + var rowMatchName = row.id.toLowerCase(); + rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' + + if (search.length<=rowMatchName.length && + rowMatchName.substr(0, search.length)==search) + { + row.style.display = 'block'; + matches++; + } + else + { + row.style.display = 'none'; + } + } + i++; + } + document.getElementById("Searching").style.display='none'; + if (matches == 0) // no results + { + document.getElementById("NoMatches").style.display='block'; + } + else // at least one result + { + document.getElementById("NoMatches").style.display='none'; + } + this.lastMatchCount = matches; + return true; + } + + // return the first item with index index or higher that is visible + this.NavNext = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index++; + } + return focusItem; + } + + this.NavPrev = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index--; + } + return focusItem; + } + + this.ProcessKeys = function(e) + { + if (e.type == "keydown") + { + this.repeatOn = false; + this.lastKey = e.keyCode; + } + else if (e.type == "keypress") + { + if (!this.repeatOn) + { + if (this.lastKey) this.repeatOn = true; + return false; // ignore first keypress after keydown + } + } + else if (e.type == "keyup") + { + this.lastKey = 0; + this.repeatOn = false; + } + return this.lastKey!=0; + } + + this.Nav = function(evt,itemIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + var newIndex = itemIndex-1; + var focusItem = this.NavPrev(newIndex); + if (focusItem) + { + var child = this.FindChildElement(focusItem.parentNode.parentNode.id); + if (child && child.style.display == 'block') // children visible + { + var n=0; + var tmpElem; + while (1) // search for last child + { + tmpElem = document.getElementById('Item'+newIndex+'_c'+n); + if (tmpElem) + { + focusItem = tmpElem; + } + else // found it! + { + break; + } + n++; + } + } + } + if (focusItem) + { + focusItem.focus(); + } + else // return focus to search field + { + parent.document.getElementById("MSearchField").focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = itemIndex+1; + var focusItem; + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem && elem.style.display == 'block') // children visible + { + focusItem = document.getElementById('Item'+itemIndex+'_c0'); + } + if (!focusItem) focusItem = this.NavNext(newIndex); + if (focusItem) focusItem.focus(); + } + else if (this.lastKey==39) // Right + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'block'; + } + else if (this.lastKey==37) // Left + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'none'; + } + else if (this.lastKey==27) // Escape + { + parent.searchBox.CloseResultsWindow(); + parent.document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } + + this.NavChild = function(evt,itemIndex,childIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + if (childIndex>0) + { + var newIndex = childIndex-1; + document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); + } + else // already at first child, jump to parent + { + document.getElementById('Item'+itemIndex).focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = childIndex+1; + var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); + if (!elem) // last child, jump to parent next parent + { + elem = this.NavNext(itemIndex+1); + } + if (elem) + { + elem.focus(); + } + } + else if (this.lastKey==27) // Escape + { + parent.searchBox.CloseResultsWindow(); + parent.document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } +} + +function setKeyActions(elem,action) +{ + elem.setAttribute('onkeydown',action); + elem.setAttribute('onkeypress',action); + elem.setAttribute('onkeyup',action); +} + +function setClassAttr(elem,attr) +{ + elem.setAttribute('class',attr); + elem.setAttribute('className',attr); +} + +function createResults() +{ + var results = document.getElementById("SRResults"); + for (var e=0; e + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/typedefs_0.js b/docs/search/typedefs_0.js new file mode 100644 index 00000000..d1ed61ff --- /dev/null +++ b/docs/search/typedefs_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['array_675',['array',['../structHPCombi_1_1TPUBuild.html#affd84f79b18ecbd5a7325e0e857a7360',1,'HPCombi::TPUBuild::array()'],['../structHPCombi_1_1PTransf16.html#a74666f4922b11847751de673a2ab66b7',1,'HPCombi::PTransf16::array()'],['../structHPCombi_1_1Vect16.html#aa143b15c812c66144dbadc1dbcd034f2',1,'HPCombi::Vect16::array()'],['../structHPCombi_1_1VectGeneric.html#ac70e6b1f5af8d49e84383bfe6d320382',1,'HPCombi::VectGeneric::array()']]] +]; diff --git a/docs/search/typedefs_1.html b/docs/search/typedefs_1.html new file mode 100644 index 00000000..46cf01e6 --- /dev/null +++ b/docs/search/typedefs_1.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/typedefs_1.js b/docs/search/typedefs_1.js new file mode 100644 index 00000000..98b00114 --- /dev/null +++ b/docs/search/typedefs_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['const_5fiterator_676',['const_iterator',['../structHPCombi_1_1Vect16.html#a3e6401b1265904d4b16ccbad66af55e3',1,'HPCombi::Vect16::const_iterator()'],['../structHPCombi_1_1VectGeneric.html#a974eda5f6379699857d0cb46619a6cea',1,'HPCombi::VectGeneric::const_iterator()']]] +]; diff --git a/docs/search/typedefs_2.html b/docs/search/typedefs_2.html new file mode 100644 index 00000000..6835ee65 --- /dev/null +++ b/docs/search/typedefs_2.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/typedefs_2.js b/docs/search/typedefs_2.js new file mode 100644 index 00000000..e5f82a37 --- /dev/null +++ b/docs/search/typedefs_2.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['epu64_677',['epu64',['../namespaceHPCombi.html#a8609116a46e59669cab0aef62e9c487b',1,'HPCombi']]], + ['epu8_678',['epu8',['../namespaceHPCombi.html#ac87988810bfcec65d51fe86a9707963a',1,'HPCombi']]] +]; diff --git a/docs/search/typedefs_3.html b/docs/search/typedefs_3.html new file mode 100644 index 00000000..01700476 --- /dev/null +++ b/docs/search/typedefs_3.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/typedefs_3.js b/docs/search/typedefs_3.js new file mode 100644 index 00000000..403ed0d8 --- /dev/null +++ b/docs/search/typedefs_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['iterator_679',['iterator',['../structHPCombi_1_1Vect16.html#af9ba842160f8893c7627072d44019cee',1,'HPCombi::Vect16::iterator()'],['../structHPCombi_1_1VectGeneric.html#a7d14b9d3c7ed8fd33163dc2a34170bbf',1,'HPCombi::VectGeneric::iterator()']]] +]; diff --git a/docs/search/typedefs_4.html b/docs/search/typedefs_4.html new file mode 100644 index 00000000..81466a5d --- /dev/null +++ b/docs/search/typedefs_4.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/typedefs_4.js b/docs/search/typedefs_4.js new file mode 100644 index 00000000..0b56462e --- /dev/null +++ b/docs/search/typedefs_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['perm16_680',['Perm16',['../namespaceHPCombi_1_1power__helper.html#a00952a61908a8370a693636e5aeb379b',1,'HPCombi::power_helper']]] +]; diff --git a/docs/search/typedefs_5.html b/docs/search/typedefs_5.html new file mode 100644 index 00000000..43fbec1f --- /dev/null +++ b/docs/search/typedefs_5.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/typedefs_5.js b/docs/search/typedefs_5.js new file mode 100644 index 00000000..2dec278f --- /dev/null +++ b/docs/search/typedefs_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['type_5felem_681',['type_elem',['../structHPCombi_1_1TPUBuild.html#afdf9d3ec986ee23bd4f3ebd0156cfef3',1,'HPCombi::TPUBuild']]] +]; diff --git a/docs/search/typedefs_6.html b/docs/search/typedefs_6.html new file mode 100644 index 00000000..99479c2d --- /dev/null +++ b/docs/search/typedefs_6.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/typedefs_6.js b/docs/search/typedefs_6.js new file mode 100644 index 00000000..29c4304d --- /dev/null +++ b/docs/search/typedefs_6.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['value_5ftype_682',['value_type',['../structHPCombi_1_1Vect16.html#aa5ee5b32db0f267a2657f0624fd068e4',1,'HPCombi::Vect16::value_type()'],['../structHPCombi_1_1VectGeneric.html#a1ddce1a15d25e74fb4e886deb67ebf69',1,'HPCombi::VectGeneric::value_type()']]], + ['vect_683',['vect',['../structHPCombi_1_1PTransf16.html#a369dd455007da2a497e2584f4659480a',1,'HPCombi::PTransf16::vect()'],['../structHPCombi_1_1PermGeneric.html#a367fc347c37034f96617365d7d002bfb',1,'HPCombi::PermGeneric::vect()']]] +]; diff --git a/docs/search/variables_0.html b/docs/search/variables_0.html new file mode 100644 index 00000000..1e477c08 --- /dev/null +++ b/docs/search/variables_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/variables_0.js b/docs/search/variables_0.js new file mode 100644 index 00000000..e552b33c --- /dev/null +++ b/docs/search/variables_0.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['a1_632',['a1',['../image_8cpp.html#a1ba9a573d6f8d94359304c4ed986c96e',1,'image.cpp']]], + ['a2_633',['a2',['../image_8cpp.html#ab3f31a5ccd13d943d1359bd78c2981d0',1,'image.cpp']]], + ['a3_634',['a3',['../image_8cpp.html#a52e6772308f2738f7c7dcc0bf4d920ac',1,'image.cpp']]], + ['a4_635',['a4',['../image_8cpp.html#af3e2df949f2ed4fae1883cc2595731f1',1,'image.cpp']]], + ['a5_636',['a5',['../image_8cpp.html#a8c99d511d82ecd940d9b7ae4609e8d5e',1,'image.cpp']]], + ['a6_637',['a6',['../image_8cpp.html#a8aa57c13944dd7764448efe12dc34a89',1,'image.cpp']]], + ['a7_638',['a7',['../image_8cpp.html#ab8fcee0341f5811fd4ad4a0c7ad92bd0',1,'image.cpp']]], + ['a8_639',['a8',['../image_8cpp.html#a07eefc7bd342605d1536855fbf61f066',1,'image.cpp']]] +]; diff --git a/docs/search/variables_1.html b/docs/search/variables_1.html new file mode 100644 index 00000000..ea73d9a4 --- /dev/null +++ b/docs/search/variables_1.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/variables_1.js b/docs/search/variables_1.js new file mode 100644 index 00000000..bcb08630 --- /dev/null +++ b/docs/search/variables_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['cy_640',['cy',['../Trans_8cpp.html#a010a8c488c9494c4f998737623b71762',1,'Trans.cpp']]] +]; diff --git a/docs/search/variables_2.html b/docs/search/variables_2.html new file mode 100644 index 00000000..0580462e --- /dev/null +++ b/docs/search/variables_2.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/variables_2.js b/docs/search/variables_2.js new file mode 100644 index 00000000..aef81a1d --- /dev/null +++ b/docs/search/variables_2.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['elems_641',['elems',['../Renner_8cpp.html#aea766d7a0d38082ac5c455b7e45bc0d1',1,'Renner.cpp']]], + ['epu8_642',['Epu8',['../namespaceHPCombi.html#ab2d0adbafd0a6fad9e728e571ef2ec4e',1,'HPCombi']]] +]; diff --git a/docs/search/variables_3.html b/docs/search/variables_3.html new file mode 100644 index 00000000..0d69e761 --- /dev/null +++ b/docs/search/variables_3.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/variables_3.js b/docs/search/variables_3.js new file mode 100644 index 00000000..b6f2327d --- /dev/null +++ b/docs/search/variables_3.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['fe_643',['FE',['../RD_8cpp.html#a4bdbea5a489057864ff6781849195946',1,'FE(): RD.cpp'],['../Renner_8cpp.html#a4bdbea5a489057864ff6781849195946',1,'FE(): Renner.cpp'],['../Trans_8cpp.html#a4bdbea5a489057864ff6781849195946',1,'FE(): Trans.cpp']]], + ['ff_644',['FF',['../RD_8cpp.html#a7ef85a95d1c5de54a9009385639d9115',1,'FF(): RD.cpp'],['../Renner_8cpp.html#a7ef85a95d1c5de54a9009385639d9115',1,'FF(): Renner.cpp']]] +]; diff --git a/docs/search/variables_4.html b/docs/search/variables_4.html new file mode 100644 index 00000000..a4b6506b --- /dev/null +++ b/docs/search/variables_4.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/variables_4.js b/docs/search/variables_4.js new file mode 100644 index 00000000..99a7ce8a --- /dev/null +++ b/docs/search/variables_4.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['gene_645',['gene',['../RD_8cpp.html#a4896c0e9b10ced608c1b0618df4a9a7f',1,'gene(): RD.cpp'],['../Renner_8cpp.html#a4896c0e9b10ced608c1b0618df4a9a7f',1,'gene(): Renner.cpp']]], + ['genf_646',['genf',['../RD_8cpp.html#a982f9ad63699c56d5d6a29e59fc68f77',1,'genf(): RD.cpp'],['../Renner_8cpp.html#a982f9ad63699c56d5d6a29e59fc68f77',1,'genf(): Renner.cpp']]], + ['gens_647',['gens',['../image_8cpp.html#aaf65b3741673e02c4fd68d9171451fa1',1,'gens(): image.cpp'],['../Renner_8cpp.html#aeb59c6da6e27dab7d481b77982c4c18e',1,'gens(): Renner.cpp'],['../Trans_8cpp.html#a5314931fa541c542634efc63b55b9f8c',1,'gens(): Trans.cpp']]] +]; diff --git a/docs/search/variables_5.html b/docs/search/variables_5.html new file mode 100644 index 00000000..7e345d16 --- /dev/null +++ b/docs/search/variables_5.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/variables_5.js b/docs/search/variables_5.js new file mode 100644 index 00000000..44666c03 --- /dev/null +++ b/docs/search/variables_5.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['id_648',['id',['../RD_8cpp.html#a012b46607c6e4badeb51938a7265a809',1,'id(): RD.cpp'],['../Renner_8cpp.html#a012b46607c6e4badeb51938a7265a809',1,'id(): Renner.cpp']]], + ['inverting_5frounds_649',['inverting_rounds',['../namespaceHPCombi.html#aca86cd7eabd1bc46f339d87dd0959c8f',1,'HPCombi']]] +]; diff --git a/docs/search/variables_6.html b/docs/search/variables_6.html new file mode 100644 index 00000000..7d48e75e --- /dev/null +++ b/docs/search/variables_6.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/variables_6.js b/docs/search/variables_6.js new file mode 100644 index 00000000..b0bb801a --- /dev/null +++ b/docs/search/variables_6.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['masks_650',['masks',['../namespaceHPCombi.html#ad32ade8a6114aee1b93afb9371e91daf',1,'HPCombi']]], + ['merge_5frounds_651',['merge_rounds',['../namespaceHPCombi.html#aeacebab2816991f0dffc0324d0617d5f',1,'HPCombi']]], + ['mining_5frounds_652',['mining_rounds',['../namespaceHPCombi.html#aaf9e65eb3263a0c17896f4dd6856ac2d',1,'HPCombi']]] +]; diff --git a/docs/search/variables_7.html b/docs/search/variables_7.html new file mode 100644 index 00000000..5c263409 --- /dev/null +++ b/docs/search/variables_7.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/variables_7.js b/docs/search/variables_7.js new file mode 100644 index 00000000..0a4cab66 --- /dev/null +++ b/docs/search/variables_7.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['nprint_653',['nprint',['../Renner_8cpp.html#a6b84f9889bd0dce8d8e93221ff301d28',1,'Renner.cpp']]] +]; diff --git a/docs/search/variables_8.html b/docs/search/variables_8.html new file mode 100644 index 00000000..dc9ec54a --- /dev/null +++ b/docs/search/variables_8.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/variables_8.js b/docs/search/variables_8.js new file mode 100644 index 00000000..f4f4e490 --- /dev/null +++ b/docs/search/variables_8.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['pi_654',['pi',['../Trans_8cpp.html#ad63357671f82dad9b784bf5863289a0d',1,'Trans.cpp']]], + ['prime_655',['prime',['../namespaceHPCombi.html#a50a6882430bc4ff898a3883fdc2c8e4b',1,'HPCombi']]] +]; diff --git a/docs/search/variables_9.html b/docs/search/variables_9.html new file mode 100644 index 00000000..7b014750 --- /dev/null +++ b/docs/search/variables_9.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/variables_9.js b/docs/search/variables_9.js new file mode 100644 index 00000000..5ace9ab2 --- /dev/null +++ b/docs/search/variables_9.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['res_656',['res',['../image_8cpp.html#af4858e3800fddfba3132594e83e83a8d',1,'image.cpp']]] +]; diff --git a/docs/search/variables_a.html b/docs/search/variables_a.html new file mode 100644 index 00000000..52a724d1 --- /dev/null +++ b/docs/search/variables_a.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/variables_a.js b/docs/search/variables_a.js new file mode 100644 index 00000000..4dcebf89 --- /dev/null +++ b/docs/search/variables_a.js @@ -0,0 +1,20 @@ +var searchData= +[ + ['s_657',['s',['../Trans_8cpp.html#ab62b64c99cb299e4a311da638e053937',1,'Trans.cpp']]], + ['s0_658',['s0',['../RD_8cpp.html#a1bf244058b6a2691cf1728552ce737fd',1,'s0(): RD.cpp'],['../Renner_8cpp.html#a1bf244058b6a2691cf1728552ce737fd',1,'s0(): Renner.cpp']]], + ['s1e_659',['s1e',['../RD_8cpp.html#aa08ff492f3f96749ec7f73eacc769f13',1,'s1e(): RD.cpp'],['../Renner_8cpp.html#aa08ff492f3f96749ec7f73eacc769f13',1,'s1e(): Renner.cpp']]], + ['s1f_660',['s1f',['../RD_8cpp.html#a8eda73a9906d0131b7868c6924f4dbe6',1,'s1f(): RD.cpp'],['../Renner_8cpp.html#a8eda73a9906d0131b7868c6924f4dbe6',1,'s1f(): Renner.cpp']]], + ['s2_661',['s2',['../RD_8cpp.html#a5a3c0f7a7f6a8cbf47abb4fec07bbd54',1,'s2(): RD.cpp'],['../Renner_8cpp.html#a5a3c0f7a7f6a8cbf47abb4fec07bbd54',1,'s2(): Renner.cpp']]], + ['s3_662',['s3',['../RD_8cpp.html#ab8232360f3f3ac57ba64edb85681da84',1,'s3(): RD.cpp'],['../Renner_8cpp.html#ab8232360f3f3ac57ba64edb85681da84',1,'s3(): Renner.cpp']]], + ['s4_663',['s4',['../RD_8cpp.html#a76b41e049796761d13864beaac111222',1,'s4(): RD.cpp'],['../Renner_8cpp.html#a76b41e049796761d13864beaac111222',1,'s4(): Renner.cpp']]], + ['s5_664',['s5',['../Renner_8cpp.html#a401ac167d35facdbdfe4a7a5b99be6ea',1,'s5(): Renner.cpp'],['../RD_8cpp.html#a401ac167d35facdbdfe4a7a5b99be6ea',1,'s5(): RD.cpp']]], + ['s6_665',['s6',['../RD_8cpp.html#ac3764b20394357c6e6d81fa98b83feb9',1,'s6(): RD.cpp'],['../Renner_8cpp.html#ac3764b20394357c6e6d81fa98b83feb9',1,'s6(): Renner.cpp']]], + ['s7_666',['s7',['../RD_8cpp.html#afee30f9098a333c32c5e094f47ded3f5',1,'s7(): RD.cpp'],['../Renner_8cpp.html#afee30f9098a333c32c5e094f47ded3f5',1,'s7(): Renner.cpp']]], + ['size_667',['size',['../structHPCombi_1_1TPUBuild.html#afe4f9341e1e1d6838c33aaa628025046',1,'HPCombi::TPUBuild']]], + ['size_5felem_668',['size_elem',['../structHPCombi_1_1TPUBuild.html#a2f6c25300e88243cff3f1c1e160e0fdc',1,'HPCombi::TPUBuild']]], + ['sorting_5frounds_669',['sorting_rounds',['../namespaceHPCombi.html#a9b3378bbc42d19454d3f3c517f052a98',1,'HPCombi']]], + ['sorting_5frounds8_670',['sorting_rounds8',['../namespaceHPCombi.html#a8b2203c677370cd26a28ffd73cbc59cf',1,'HPCombi']]], + ['subperm_671',['subperm',['../pattern_8cpp.html#a7c2b4982a09e109835ab8ae125eace66',1,'pattern.cpp']]], + ['subsets_672',['subsets',['../pattern_8cpp.html#ab4ce0f0f017ac2394098404c54645458',1,'pattern.cpp']]], + ['summing_5frounds_673',['summing_rounds',['../namespaceHPCombi.html#a48bf424600461a580daf0576711fcd69',1,'HPCombi']]] +]; diff --git a/docs/search/variables_b.html b/docs/search/variables_b.html new file mode 100644 index 00000000..f376b27a --- /dev/null +++ b/docs/search/variables_b.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/search/variables_b.js b/docs/search/variables_b.js new file mode 100644 index 00000000..fae9e630 --- /dev/null +++ b/docs/search/variables_b.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['v_674',['v',['../structHPCombi_1_1Vect16.html#aa52a31997c72f76a64ff4ef8bbc1d179',1,'HPCombi::Vect16::v()'],['../structHPCombi_1_1VectGeneric.html#a47fda9d33a4e22f9eed53434df042b01',1,'HPCombi::VectGeneric::v()']]] +]; diff --git a/docs/splitbar.png b/docs/splitbar.png new file mode 100644 index 00000000..fe895f2c Binary files /dev/null and b/docs/splitbar.png differ diff --git a/docs/stringmonoid_8cpp-example.html b/docs/stringmonoid_8cpp-example.html new file mode 100644 index 00000000..936fce9a --- /dev/null +++ b/docs/stringmonoid_8cpp-example.html @@ -0,0 +1,133 @@ + + + + + + + +HPCombi: stringmonoid.cpp + + + + + + + + + + + +
    +
    + + + + + + +
    +
    HPCombi +
    +
    High Performance Combinatorics in C++ using vector instructions v1.0.0
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    stringmonoid.cpp
    +
    +
    +

    This is an example of how to use pow with a non numerical Monoid.

    +
    //****************************************************************************//
    +
    // Copyright (C) 2016 Florent Hivert <Florent.Hivert@lri.fr>, //
    +
    // //
    +
    // Distributed under the terms of the GNU General Public License (GPL) //
    +
    // //
    +
    // This code is distributed in the hope that it will be useful, //
    +
    // but WITHOUT ANY WARRANTY; without even the implied warranty of //
    +
    // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU //
    +
    // General Public License for more details. //
    +
    // //
    +
    // The full text of the GPL is available at: //
    +
    // //
    +
    // http://www.gnu.org/licenses/ //
    +
    //****************************************************************************//
    +
    #include <cassert>
    +
    #include <string>
    +
    + +
    +
    namespace HPCombi {
    +
    namespace power_helper {
    +
    +
    // Algebraic monoid for string with concatenation
    +
    template <> struct Monoid<std::string> {
    +
    +
    // The one of the string monoid
    +
    static std::string one() { return {}; };
    +
    +
    /* The product of two strings that is their concatenation
    +
    * @param a the first string to be concatenated
    +
    * @param b the second string to be concatenated
    +
    * @return the concatenation of \a a and \a b
    +
    */
    +
    static std::string prod(std::string a, std::string b) { return a + b; }
    +
    };
    +
    +
    } // namespace power_helper
    +
    } // namespace HPCombi
    +
    +
    int main() {
    +
    assert(HPCombi::pow<0>(std::string("ab")) == "");
    +
    assert(HPCombi::pow<4>(std::string("ab")) == "abababab");
    +
    assert(HPCombi::pow<5>(std::string("abc")) == "abcabcabcabcabc");
    +
    }
    +
    Definition: bmat8.hpp:37
    +
    Definition: bmat8.hpp:360
    +
    Generic compile time power.
    +
    int main()
    Definition: stringmonoid.cpp:45
    +
    static const T prod(T a, T b)
    the product of two elements of type T
    Definition: power.hpp:108
    +
    static const T one()
    The one of type T.
    Definition: power.hpp:101
    +
    + + + + diff --git a/docs/stringmonoid_8cpp.html b/docs/stringmonoid_8cpp.html new file mode 100644 index 00000000..ffa5ccf8 --- /dev/null +++ b/docs/stringmonoid_8cpp.html @@ -0,0 +1,136 @@ + + + + + + + +HPCombi: /home/florent/src/HPCombi/examples/stringmonoid.cpp File Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    HPCombi +
    +
    High Performance Combinatorics in C++ using vector instructions v1.0.0
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    stringmonoid.cpp File Reference
    +
    +
    + +

    Example of how to use HPCombi::pow with HPCombi::power_helper::Monoid. +More...

    +
    #include <cassert>
    +#include <string>
    +#include "hpcombi/power.hpp"
    +
    + + + +

    +Classes

    struct  HPCombi::power_helper::Monoid< std::string >
     
    + + + + + +

    +Namespaces

     HPCombi
     
     HPCombi::power_helper
     
    + + + +

    +Functions

    int main ()
     
    +

    Detailed Description

    +

    Example of how to use HPCombi::pow with HPCombi::power_helper::Monoid.

    +

    Function Documentation

    + +

    ◆ main()

    + +
    +
    + + + + + + + +
    int main ()
    +
    +
    Examples
    stringmonoid.cpp.
    +
    + +
    +
    +
    + + + + diff --git a/docs/structHPCombi_1_1PPerm16-members.html b/docs/structHPCombi_1_1PPerm16-members.html new file mode 100644 index 00000000..17f2847c --- /dev/null +++ b/docs/structHPCombi_1_1PPerm16-members.html @@ -0,0 +1,161 @@ + + + + + + + +HPCombi: Member List + + + + + + + + + + + +
    +
    + + + + + + +
    +
    HPCombi +
    +
    High Performance Combinatorics in C++ using vector instructions v1.0.0
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    HPCombi::PPerm16 Member List
    +
    +
    + +

    This is the complete list of members for HPCombi::PPerm16, including all inherited members.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    array typedefHPCombi::PTransf16
    as_array()HPCombi::Vect16inline
    as_array() constHPCombi::Vect16inline
    begin()HPCombi::Vect16inline
    begin() constHPCombi::Vect16inline
    cbegin() constHPCombi::Vect16inline
    cend() constHPCombi::Vect16inline
    const_iterator typedefHPCombi::Vect16
    domain_bitset(bool complement=false) constHPCombi::PTransf16inline
    domain_mask(bool complement=false) constHPCombi::PTransf16inline
    end()HPCombi::Vect16inline
    end() constHPCombi::Vect16inline
    eval16() constHPCombi::Vect16inline
    first_diff(const Vect16 &u, size_t bound=size()) constHPCombi::Vect16inline
    first_non_zero(size_t bound=size()) constHPCombi::Vect16inline
    first_zero(size_t bound=size()) constHPCombi::Vect16inline
    fix_points_bitset(bool complement=false) constHPCombi::PTransf16inline
    fix_points_mask(bool complement=false) constHPCombi::PTransf16inline
    image_bitset(bool complement=false) constHPCombi::PTransf16inline
    image_mask(bool complement=false) constHPCombi::PTransf16inline
    image_mask_cmpestrm(bool complement=false) constHPCombi::PTransf16
    image_mask_ref(bool complement=false) constHPCombi::PTransf16inline
    inverse_ref() constHPCombi::PPerm16inline
    is_permutation() constHPCombi::Vect16inline
    is_permutation(size_t k) constHPCombi::Vect16inline
    iterator typedefHPCombi::Vect16
    largest_fix_point() constHPCombi::PTransf16inline
    largest_moved_point() constHPCombi::PTransf16inline
    last_diff(const Vect16 &u, size_t bound=size()) constHPCombi::Vect16inline
    last_non_zero(size_t bound=size()) constHPCombi::Vect16inline
    last_zero(size_t bound=size()) constHPCombi::Vect16inline
    left_one() constHPCombi::PPerm16inline
    less_partial(const Vect16 &b, int k) constHPCombi::Vect16inline
    nb_fix_points() constHPCombi::PTransf16inline
    one()HPCombi::PPerm16inlinestatic
    operator epu8() constHPCombi::Vect16inline
    operator!=(const Vect16 &b) constHPCombi::Vect16inline
    operator*(const PPerm16 &p) constHPCombi::PPerm16inline
    HPCombi::PTransf16::operator*(const PTransf16 &p) constHPCombi::PTransf16inline
    operator<(const Vect16 &b) constHPCombi::Vect16inline
    operator=(const PPerm16 &)=defaultHPCombi::PPerm16
    operator==(const Vect16 &b) constHPCombi::Vect16inline
    operator[](uint64_t i) constHPCombi::Vect16inline
    operator[](uint64_t i)HPCombi::Vect16inline
    partial_sums() constHPCombi::Vect16inline
    permuted(const Vect16 &b) constHPCombi::Vect16inline
    PPerm16()=defaultHPCombi::PPerm16
    PPerm16(const PPerm16 &v)=defaultHPCombi::PPerm16
    PPerm16(const vect v)HPCombi::PPerm16inline
    PPerm16(const epu8 x)HPCombi::PPerm16inline
    PPerm16(std::vector< uint8_t > dom, std::vector< uint8_t > rng, size_t=0)HPCombi::PPerm16inline
    PPerm16(std::initializer_list< uint8_t > il)HPCombi::PPerm16inline
    PTransf16()=defaultHPCombi::PTransf16
    PTransf16(const vect v)HPCombi::PTransf16inline
    PTransf16(const epu8 x)HPCombi::PTransf16inline
    PTransf16(std::vector< uint8_t > dom, std::vector< uint8_t > rng, size_t=0)HPCombi::PTransf16inline
    PTransf16(std::initializer_list< uint8_t > il)HPCombi::PTransf16inline
    rank() constHPCombi::PTransf16inline
    rank_cmpestrm() constHPCombi::PTransf16inline
    rank_ref() constHPCombi::PTransf16inline
    right_one() constHPCombi::PPerm16inline
    size()HPCombi::PTransf16inlinestatic
    smallest_fix_point() constHPCombi::PTransf16inline
    smallest_moved_point() constHPCombi::PTransf16inline
    sum() constHPCombi::Vect16inline
    vHPCombi::Vect16
    validate(size_t k=16) constHPCombi::PPerm16inline
    value_type typedefHPCombi::Vect16
    vect typedefHPCombi::PTransf16
    Vect16()=defaultHPCombi::Vect16
    Vect16(epu8 x)HPCombi::Vect16inline
    Vect16(std::initializer_list< uint8_t > il, uint8_t def=0)HPCombi::Vect16inline
    + + + + diff --git a/docs/structHPCombi_1_1PPerm16.html b/docs/structHPCombi_1_1PPerm16.html new file mode 100644 index 00000000..17f69fc0 --- /dev/null +++ b/docs/structHPCombi_1_1PPerm16.html @@ -0,0 +1,674 @@ + + + + + + + +HPCombi: HPCombi::PPerm16 Struct Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    HPCombi +
    +
    High Performance Combinatorics in C++ using vector instructions v1.0.0
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    HPCombi::PPerm16 Struct Reference
    +
    +
    + +

    Partial permutation of \(\{0, \dots, 15\}\). + More...

    + +

    #include <perm16.hpp>

    +
    +Inheritance diagram for HPCombi::PPerm16:
    +
    +
    + + +HPCombi::PTransf16 +HPCombi::Vect16 + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

     PPerm16 ()=default
     
    constexpr PPerm16 (const PPerm16 &v)=default
     
    constexpr PPerm16 (const vect v)
     
    constexpr PPerm16 (const epu8 x)
     
     PPerm16 (std::vector< uint8_t > dom, std::vector< uint8_t > rng, size_t=0)
     
     PPerm16 (std::initializer_list< uint8_t > il)
     
    PPerm16operator= (const PPerm16 &)=default
     
    bool validate (size_t k=16) const
     Return whether *this is a well constructed object. More...
     
    PPerm16 operator* (const PPerm16 &p) const
     The product of two partial perrmutations. More...
     
    PPerm16 inverse_ref () const
     The inverse of a partial permutation. More...
     
    PPerm16 right_one () const
     
    PPerm16 left_one () const
     
    - Public Member Functions inherited from HPCombi::PTransf16
     PTransf16 ()=default
     
    constexpr PTransf16 (const vect v)
     
    constexpr PTransf16 (const epu8 x)
     
     PTransf16 (std::vector< uint8_t > dom, std::vector< uint8_t > rng, size_t=0)
     
     PTransf16 (std::initializer_list< uint8_t > il)
     
    bool validate (size_t k=16) const
     Return whether *this is a well constructed object. More...
     
    PTransf16 operator* (const PTransf16 &p) const
     The product of two partial transformations. More...
     
    epu8 image_mask_cmpestrm (bool complement=false) const
     Returns a mask for the image of *this. More...
     
    epu8 image_mask_ref (bool complement=false) const
     Returns a mask for the image of *this. More...
     
    epu8 image_mask (bool complement=false) const
     
    uint32_t image_bitset (bool complement=false) const
     Returns a bit mask for the image of *this. More...
     
    epu8 domain_mask (bool complement=false) const
     Returns a mask for the domain of *this. More...
     
    uint32_t domain_bitset (bool complement=false) const
     Returns a bit mask for the domain of *this. More...
     
    PTransf16 right_one () const
     Returns the partial right identity for *this. More...
     
    PTransf16 left_one () const
     Returns the partial left identity for *this. More...
     
    uint32_t rank_ref () const
     Returns the size of the image of *this. More...
     
    uint32_t rank () const
     Returns the size of the image of *this. More...
     
    uint32_t rank_cmpestrm () const
     Returns the size of the image of *this. More...
     
    epu8 fix_points_mask (bool complement=false) const
     Returns a mask for the fix point of *this. More...
     
    uint32_t fix_points_bitset (bool complement=false) const
     Returns a bit mask for the fix point of *this. More...
     
    uint8_t smallest_fix_point () const
     Returns the smallest fix point of *this. More...
     
    uint8_t smallest_moved_point () const
     Returns the smallest non fix point of *this. More...
     
    uint8_t largest_fix_point () const
     Returns the largest fix point of *this. More...
     
    uint8_t largest_moved_point () const
     Returns the largest non fix point of *this. More...
     
    uint8_t nb_fix_points () const
     Returns the number of fix points of *this. More...
     
    - Public Member Functions inherited from HPCombi::Vect16
     Vect16 ()=default
     
    constexpr Vect16 (epu8 x)
     
     Vect16 (std::initializer_list< uint8_t > il, uint8_t def=0)
     
    constexpr operator epu8 () const
     
    arrayas_array ()
     
    const arrayas_array () const
     
    const uint8_t & operator[] (uint64_t i) const
     
    uint8_t & operator[] (uint64_t i)
     
    size_t first_diff (const Vect16 &u, size_t bound=size()) const
     
    size_t last_diff (const Vect16 &u, size_t bound=size()) const
     
    size_t first_zero (size_t bound=size()) const
     
    size_t last_zero (size_t bound=size()) const
     
    size_t first_non_zero (size_t bound=size()) const
     
    size_t last_non_zero (size_t bound=size()) const
     
    const_iterator cbegin () const
     
    const_iterator cend () const
     
    iterator begin ()
     
    iterator end ()
     
    const_iterator begin () const
     
    const_iterator end () const
     
    bool operator== (const Vect16 &b) const
     
    bool operator!= (const Vect16 &b) const
     
    bool operator< (const Vect16 &b) const
     
    int8_t less_partial (const Vect16 &b, int k) const
     
    Vect16 permuted (const Vect16 &b) const
     
    uint8_t sum () const
     
    Vect16 partial_sums () const
     
    Vect16 eval16 () const
     
    bool is_permutation () const
     
    bool is_permutation (size_t k) const
     
    + + + + + + + + + + + + + +

    +Static Public Member Functions

    static constexpr PPerm16 one ()
     The identity partial permutations. More...
     
    - Static Public Member Functions inherited from HPCombi::PTransf16
    static constexpr size_t size ()
     
    static constexpr PTransf16 one ()
     The identity partial transformation. More...
     
    - Static Public Member Functions inherited from HPCombi::Vect16
    static constexpr size_t size ()
     
    + + + + + + + + + + + + + + + + + + +

    +Additional Inherited Members

    - Public Types inherited from HPCombi::PTransf16
    using vect = HPCombi::Vect16
     
    using array = typename decltype(Epu8)::array
     
    - Public Types inherited from HPCombi::Vect16
    using array = typename decltype(Epu8)::array
     
    using value_type = uint8_t
     
    using iterator = typename array::iterator
     
    using const_iterator = typename array::const_iterator
     
    - Public Attributes inherited from HPCombi::Vect16
    epu8 v
     
    +

    Detailed Description

    +

    Partial permutation of \(\{0, \dots, 15\}\).

    +

    Constructor & Destructor Documentation

    + +

    ◆ PPerm16() [1/6]

    + +
    +
    + + + + + +
    + + + + + + + +
    HPCombi::PPerm16::PPerm16 ()
    +
    +default
    +
    + +
    +
    + +

    ◆ PPerm16() [2/6]

    + +
    +
    + + + + + +
    + + + + + + + + +
    constexpr HPCombi::PPerm16::PPerm16 (const PPerm16v)
    +
    +constexprdefault
    +
    + +
    +
    + +

    ◆ PPerm16() [3/6]

    + +
    +
    + + + + + +
    + + + + + + + + +
    constexpr HPCombi::PPerm16::PPerm16 (const vect v)
    +
    +inlineconstexpr
    +
    + +
    +
    + +

    ◆ PPerm16() [4/6]

    + +
    +
    + + + + + +
    + + + + + + + + +
    constexpr HPCombi::PPerm16::PPerm16 (const epu8 x)
    +
    +inlineconstexpr
    +
    + +
    +
    + +

    ◆ PPerm16() [5/6]

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    HPCombi::PPerm16::PPerm16 (std::vector< uint8_t > dom,
    std::vector< uint8_t > rng,
    size_t  = 0 
    )
    +
    +inline
    +
    + +
    +
    + +

    ◆ PPerm16() [6/6]

    + +
    +
    + + + + + +
    + + + + + + + + +
    HPCombi::PPerm16::PPerm16 (std::initializer_list< uint8_t > il)
    +
    +inline
    +
    + +
    +
    +

    Member Function Documentation

    + +

    ◆ inverse_ref()

    + +
    +
    + + + + + +
    + + + + + + + +
    PPerm16 HPCombi::PPerm16::inverse_ref () const
    +
    +inline
    +
    + +

    The inverse of a partial permutation.

    +
    Returns
    the inverse of *this. The inverse of \(p\) is the unique partial permutation \(i\) such that \( p * i * p = p\) and \( i * p * i = i\)
    +
    Example:
    Perm16 x = {0,3,2,4,0xFF,5,6,0xFF,8,9,11,0xFF,12,0xFF,0xFF,0xFF};
    +
    x.inverse()
    +
    Perm16 Perm16
    Definition: perm16_impl.hpp:236
    +
    Returns
    {0,0xFF,2,1,3,5,6,0xFF,8,9,0xFF,10,12,0xFF,0xFF,0xFF}
    +* 
    +
    Algorithm:
    \(O(n)\) algorithm using reference cast to arrays
    + +
    +
    + +

    ◆ left_one()

    + +
    +
    + + + + + +
    + + + + + + + +
    PPerm16 HPCombi::PPerm16::left_one () const
    +
    +inline
    +
    + +
    +
    + +

    ◆ one()

    + +
    +
    + + + + + +
    + + + + + + + +
    static constexpr PPerm16 HPCombi::PPerm16::one ()
    +
    +inlinestaticconstexpr
    +
    + +

    The identity partial permutations.

    + +
    +
    + +

    ◆ operator*()

    + +
    +
    + + + + + +
    + + + + + + + + +
    PPerm16 HPCombi::PPerm16::operator* (const PPerm16p) const
    +
    +inline
    +
    + +

    The product of two partial perrmutations.

    + +
    +
    + +

    ◆ operator=()

    + +
    +
    + + + + + +
    + + + + + + + + +
    PPerm16& HPCombi::PPerm16::operator= (const PPerm16)
    +
    +default
    +
    + +
    +
    + +

    ◆ right_one()

    + +
    +
    + + + + + +
    + + + + + + + +
    PPerm16 HPCombi::PPerm16::right_one () const
    +
    +inline
    +
    + +
    +
    + +

    ◆ validate()

    + +
    +
    + + + + + +
    + + + + + + + + +
    bool HPCombi::PPerm16::validate (size_t k = 16) const
    +
    +inline
    +
    + +

    Return whether *this is a well constructed object.

    + +
    +
    +
    The documentation for this struct was generated from the following files: +
    + + + + diff --git a/docs/structHPCombi_1_1PPerm16.png b/docs/structHPCombi_1_1PPerm16.png new file mode 100644 index 00000000..3700578e Binary files /dev/null and b/docs/structHPCombi_1_1PPerm16.png differ diff --git a/docs/structHPCombi_1_1PTransf16-members.html b/docs/structHPCombi_1_1PTransf16-members.html new file mode 100644 index 00000000..52723372 --- /dev/null +++ b/docs/structHPCombi_1_1PTransf16-members.html @@ -0,0 +1,152 @@ + + + + + + + +HPCombi: Member List + + + + + + + + + + + +
    +
    + + + + + + +
    +
    HPCombi +
    +
    High Performance Combinatorics in C++ using vector instructions v1.0.0
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    HPCombi::PTransf16 Member List
    +
    +
    + +

    This is the complete list of members for HPCombi::PTransf16, including all inherited members.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    array typedefHPCombi::PTransf16
    as_array()HPCombi::Vect16inline
    as_array() constHPCombi::Vect16inline
    begin()HPCombi::Vect16inline
    begin() constHPCombi::Vect16inline
    cbegin() constHPCombi::Vect16inline
    cend() constHPCombi::Vect16inline
    const_iterator typedefHPCombi::Vect16
    domain_bitset(bool complement=false) constHPCombi::PTransf16inline
    domain_mask(bool complement=false) constHPCombi::PTransf16inline
    end()HPCombi::Vect16inline
    end() constHPCombi::Vect16inline
    eval16() constHPCombi::Vect16inline
    first_diff(const Vect16 &u, size_t bound=size()) constHPCombi::Vect16inline
    first_non_zero(size_t bound=size()) constHPCombi::Vect16inline
    first_zero(size_t bound=size()) constHPCombi::Vect16inline
    fix_points_bitset(bool complement=false) constHPCombi::PTransf16inline
    fix_points_mask(bool complement=false) constHPCombi::PTransf16inline
    image_bitset(bool complement=false) constHPCombi::PTransf16inline
    image_mask(bool complement=false) constHPCombi::PTransf16inline
    image_mask_cmpestrm(bool complement=false) constHPCombi::PTransf16
    image_mask_ref(bool complement=false) constHPCombi::PTransf16inline
    is_permutation() constHPCombi::Vect16inline
    is_permutation(size_t k) constHPCombi::Vect16inline
    iterator typedefHPCombi::Vect16
    largest_fix_point() constHPCombi::PTransf16inline
    largest_moved_point() constHPCombi::PTransf16inline
    last_diff(const Vect16 &u, size_t bound=size()) constHPCombi::Vect16inline
    last_non_zero(size_t bound=size()) constHPCombi::Vect16inline
    last_zero(size_t bound=size()) constHPCombi::Vect16inline
    left_one() constHPCombi::PTransf16inline
    less_partial(const Vect16 &b, int k) constHPCombi::Vect16inline
    nb_fix_points() constHPCombi::PTransf16inline
    one()HPCombi::PTransf16inlinestatic
    operator epu8() constHPCombi::Vect16inline
    operator!=(const Vect16 &b) constHPCombi::Vect16inline
    operator*(const PTransf16 &p) constHPCombi::PTransf16inline
    operator<(const Vect16 &b) constHPCombi::Vect16inline
    operator==(const Vect16 &b) constHPCombi::Vect16inline
    operator[](uint64_t i) constHPCombi::Vect16inline
    operator[](uint64_t i)HPCombi::Vect16inline
    partial_sums() constHPCombi::Vect16inline
    permuted(const Vect16 &b) constHPCombi::Vect16inline
    PTransf16()=defaultHPCombi::PTransf16
    PTransf16(const vect v)HPCombi::PTransf16inline
    PTransf16(const epu8 x)HPCombi::PTransf16inline
    PTransf16(std::vector< uint8_t > dom, std::vector< uint8_t > rng, size_t=0)HPCombi::PTransf16inline
    PTransf16(std::initializer_list< uint8_t > il)HPCombi::PTransf16inline
    rank() constHPCombi::PTransf16inline
    rank_cmpestrm() constHPCombi::PTransf16inline
    rank_ref() constHPCombi::PTransf16inline
    right_one() constHPCombi::PTransf16inline
    size()HPCombi::PTransf16inlinestatic
    smallest_fix_point() constHPCombi::PTransf16inline
    smallest_moved_point() constHPCombi::PTransf16inline
    sum() constHPCombi::Vect16inline
    vHPCombi::Vect16
    validate(size_t k=16) constHPCombi::PTransf16inline
    value_type typedefHPCombi::Vect16
    vect typedefHPCombi::PTransf16
    Vect16()=defaultHPCombi::Vect16
    Vect16(epu8 x)HPCombi::Vect16inline
    Vect16(std::initializer_list< uint8_t > il, uint8_t def=0)HPCombi::Vect16inline
    + + + + diff --git a/docs/structHPCombi_1_1PTransf16.html b/docs/structHPCombi_1_1PTransf16.html new file mode 100644 index 00000000..554987bf --- /dev/null +++ b/docs/structHPCombi_1_1PTransf16.html @@ -0,0 +1,1049 @@ + + + + + + + +HPCombi: HPCombi::PTransf16 Struct Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    HPCombi +
    +
    High Performance Combinatorics in C++ using vector instructions v1.0.0
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    HPCombi::PTransf16 Struct Reference
    +
    +
    + +

    Partial transformation of \(\{0\dots 15\}\). + More...

    + +

    #include <perm16.hpp>

    +
    +Inheritance diagram for HPCombi::PTransf16:
    +
    +
    + + +HPCombi::Vect16 +HPCombi::PPerm16 +HPCombi::Transf16 +HPCombi::Perm16 + +
    + + + + + + + + + + + + + + + +

    +Public Types

    using vect = HPCombi::Vect16
     
    using array = typename decltype(Epu8)::array
     
    - Public Types inherited from HPCombi::Vect16
    using array = typename decltype(Epu8)::array
     
    using value_type = uint8_t
     
    using iterator = typename array::iterator
     
    using const_iterator = typename array::const_iterator
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

     PTransf16 ()=default
     
    constexpr PTransf16 (const vect v)
     
    constexpr PTransf16 (const epu8 x)
     
     PTransf16 (std::vector< uint8_t > dom, std::vector< uint8_t > rng, size_t=0)
     
     PTransf16 (std::initializer_list< uint8_t > il)
     
    bool validate (size_t k=16) const
     Return whether *this is a well constructed object. More...
     
    PTransf16 operator* (const PTransf16 &p) const
     The product of two partial transformations. More...
     
    epu8 image_mask_cmpestrm (bool complement=false) const
     Returns a mask for the image of *this. More...
     
    epu8 image_mask_ref (bool complement=false) const
     Returns a mask for the image of *this. More...
     
    epu8 image_mask (bool complement=false) const
     
    uint32_t image_bitset (bool complement=false) const
     Returns a bit mask for the image of *this. More...
     
    epu8 domain_mask (bool complement=false) const
     Returns a mask for the domain of *this. More...
     
    uint32_t domain_bitset (bool complement=false) const
     Returns a bit mask for the domain of *this. More...
     
    PTransf16 right_one () const
     Returns the partial right identity for *this. More...
     
    PTransf16 left_one () const
     Returns the partial left identity for *this. More...
     
    uint32_t rank_ref () const
     Returns the size of the image of *this. More...
     
    uint32_t rank () const
     Returns the size of the image of *this. More...
     
    uint32_t rank_cmpestrm () const
     Returns the size of the image of *this. More...
     
    epu8 fix_points_mask (bool complement=false) const
     Returns a mask for the fix point of *this. More...
     
    uint32_t fix_points_bitset (bool complement=false) const
     Returns a bit mask for the fix point of *this. More...
     
    uint8_t smallest_fix_point () const
     Returns the smallest fix point of *this. More...
     
    uint8_t smallest_moved_point () const
     Returns the smallest non fix point of *this. More...
     
    uint8_t largest_fix_point () const
     Returns the largest fix point of *this. More...
     
    uint8_t largest_moved_point () const
     Returns the largest non fix point of *this. More...
     
    uint8_t nb_fix_points () const
     Returns the number of fix points of *this. More...
     
    - Public Member Functions inherited from HPCombi::Vect16
     Vect16 ()=default
     
    constexpr Vect16 (epu8 x)
     
     Vect16 (std::initializer_list< uint8_t > il, uint8_t def=0)
     
    constexpr operator epu8 () const
     
    arrayas_array ()
     
    const arrayas_array () const
     
    const uint8_t & operator[] (uint64_t i) const
     
    uint8_t & operator[] (uint64_t i)
     
    size_t first_diff (const Vect16 &u, size_t bound=size()) const
     
    size_t last_diff (const Vect16 &u, size_t bound=size()) const
     
    size_t first_zero (size_t bound=size()) const
     
    size_t last_zero (size_t bound=size()) const
     
    size_t first_non_zero (size_t bound=size()) const
     
    size_t last_non_zero (size_t bound=size()) const
     
    const_iterator cbegin () const
     
    const_iterator cend () const
     
    iterator begin ()
     
    iterator end ()
     
    const_iterator begin () const
     
    const_iterator end () const
     
    bool operator== (const Vect16 &b) const
     
    bool operator!= (const Vect16 &b) const
     
    bool operator< (const Vect16 &b) const
     
    int8_t less_partial (const Vect16 &b, int k) const
     
    Vect16 permuted (const Vect16 &b) const
     
    uint8_t sum () const
     
    Vect16 partial_sums () const
     
    Vect16 eval16 () const
     
    bool is_permutation () const
     
    bool is_permutation (size_t k) const
     
    + + + + + + + + + +

    +Static Public Member Functions

    static constexpr size_t size ()
     
    static constexpr PTransf16 one ()
     The identity partial transformation. More...
     
    - Static Public Member Functions inherited from HPCombi::Vect16
    static constexpr size_t size ()
     
    + + + + +

    +Additional Inherited Members

    - Public Attributes inherited from HPCombi::Vect16
    epu8 v
     
    +

    Detailed Description

    +

    Partial transformation of \(\{0\dots 15\}\).

    +

    Member Typedef Documentation

    + +

    ◆ array

    + +
    +
    + + + + +
    using HPCombi::PTransf16::array = typename decltype(Epu8)::array
    +
    + +
    +
    + +

    ◆ vect

    + +
    +
    + +
    +
    +

    Constructor & Destructor Documentation

    + +

    ◆ PTransf16() [1/5]

    + +
    +
    + + + + + +
    + + + + + + + +
    HPCombi::PTransf16::PTransf16 ()
    +
    +default
    +
    + +
    +
    + +

    ◆ PTransf16() [2/5]

    + +
    +
    + + + + + +
    + + + + + + + + +
    constexpr HPCombi::PTransf16::PTransf16 (const vect v)
    +
    +inlineconstexpr
    +
    + +
    +
    + +

    ◆ PTransf16() [3/5]

    + +
    +
    + + + + + +
    + + + + + + + + +
    constexpr HPCombi::PTransf16::PTransf16 (const epu8 x)
    +
    +inlineconstexpr
    +
    + +
    +
    + +

    ◆ PTransf16() [4/5]

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    HPCombi::PTransf16::PTransf16 (std::vector< uint8_t > dom,
    std::vector< uint8_t > rng,
    size_t  = 0 
    )
    +
    +inline
    +
    + +
    +
    + +

    ◆ PTransf16() [5/5]

    + +
    +
    + + + + + +
    + + + + + + + + +
    HPCombi::PTransf16::PTransf16 (std::initializer_list< uint8_t > il)
    +
    +inline
    +
    + +
    +
    +

    Member Function Documentation

    + +

    ◆ domain_bitset()

    + +
    +
    + + + + + +
    + + + + + + + + +
    uint32_t HPCombi::PTransf16::domain_bitset (bool complement = false) const
    +
    +inline
    +
    + +

    Returns a bit mask for the domain of *this.

    + +
    +
    + +

    ◆ domain_mask()

    + +
    +
    + + + + + +
    + + + + + + + + +
    epu8 HPCombi::PTransf16::domain_mask (bool complement = false) const
    +
    +inline
    +
    + +

    Returns a mask for the domain of *this.

    + +
    +
    + +

    ◆ fix_points_bitset()

    + +
    +
    + + + + + +
    + + + + + + + + +
    uint32_t HPCombi::PTransf16::fix_points_bitset (bool complement = false) const
    +
    +inline
    +
    + +

    Returns a bit mask for the fix point of *this.

    + +
    +
    + +

    ◆ fix_points_mask()

    + +
    +
    + + + + + +
    + + + + + + + + +
    epu8 HPCombi::PTransf16::fix_points_mask (bool complement = false) const
    +
    +inline
    +
    + +

    Returns a mask for the fix point of *this.

    + +
    +
    + +

    ◆ image_bitset()

    + +
    +
    + + + + + +
    + + + + + + + + +
    uint32_t HPCombi::PTransf16::image_bitset (bool complement = false) const
    +
    +inline
    +
    + +

    Returns a bit mask for the image of *this.

    + +
    +
    + +

    ◆ image_mask()

    + +
    +
    + + + + + +
    + + + + + + + + +
    epu8 HPCombi::PTransf16::image_mask (bool complement = false) const
    +
    +inline
    +
    + +
    +
    + +

    ◆ image_mask_cmpestrm()

    + +
    +
    + + + + + + + + +
    epu8 HPCombi::PTransf16::image_mask_cmpestrm (bool complement = false) const
    +
    + +

    Returns a mask for the image of *this.

    + +
    +
    + +

    ◆ image_mask_ref()

    + +
    +
    + + + + + +
    + + + + + + + + +
    epu8 HPCombi::PTransf16::image_mask_ref (bool complement = false) const
    +
    +inline
    +
    + +

    Returns a mask for the image of *this.

    + +
    +
    + +

    ◆ largest_fix_point()

    + +
    +
    + + + + + +
    + + + + + + + +
    uint8_t HPCombi::PTransf16::largest_fix_point () const
    +
    +inline
    +
    + +

    Returns the largest fix point of *this.

    + +
    +
    + +

    ◆ largest_moved_point()

    + +
    +
    + + + + + +
    + + + + + + + +
    uint8_t HPCombi::PTransf16::largest_moved_point () const
    +
    +inline
    +
    + +

    Returns the largest non fix point of *this.

    + +
    +
    + +

    ◆ left_one()

    + +
    +
    + + + + + +
    + + + + + + + +
    PTransf16 HPCombi::PTransf16::left_one () const
    +
    +inline
    +
    + +

    Returns the partial left identity for *this.

    + +
    +
    + +

    ◆ nb_fix_points()

    + +
    +
    + + + + + +
    + + + + + + + +
    uint8_t HPCombi::PTransf16::nb_fix_points () const
    +
    +inline
    +
    + +

    Returns the number of fix points of *this.

    + +
    +
    + +

    ◆ one()

    + +
    +
    + + + + + +
    + + + + + + + +
    static constexpr PTransf16 HPCombi::PTransf16::one ()
    +
    +inlinestaticconstexpr
    +
    + +

    The identity partial transformation.

    + +
    +
    + +

    ◆ operator*()

    + +
    +
    + + + + + +
    + + + + + + + + +
    PTransf16 HPCombi::PTransf16::operator* (const PTransf16p) const
    +
    +inline
    +
    + +

    The product of two partial transformations.

    + +
    +
    + +

    ◆ rank()

    + +
    +
    + + + + + +
    + + + + + + + +
    uint32_t HPCombi::PTransf16::rank () const
    +
    +inline
    +
    + +

    Returns the size of the image of *this.

    + +
    +
    + +

    ◆ rank_cmpestrm()

    + +
    +
    + + + + + +
    + + + + + + + +
    uint32_t HPCombi::PTransf16::rank_cmpestrm () const
    +
    +inline
    +
    + +

    Returns the size of the image of *this.

    + +
    +
    + +

    ◆ rank_ref()

    + +
    +
    + + + + + +
    + + + + + + + +
    uint32_t HPCombi::PTransf16::rank_ref () const
    +
    +inline
    +
    + +

    Returns the size of the image of *this.

    + +
    +
    + +

    ◆ right_one()

    + +
    +
    + + + + + +
    + + + + + + + +
    PTransf16 HPCombi::PTransf16::right_one () const
    +
    +inline
    +
    + +

    Returns the partial right identity for *this.

    + +
    +
    + +

    ◆ size()

    + +
    +
    + + + + + +
    + + + + + + + +
    static constexpr size_t HPCombi::PTransf16::size ()
    +
    +inlinestaticconstexpr
    +
    + +
    +
    + +

    ◆ smallest_fix_point()

    + +
    +
    + + + + + +
    + + + + + + + +
    uint8_t HPCombi::PTransf16::smallest_fix_point () const
    +
    +inline
    +
    + +

    Returns the smallest fix point of *this.

    + +
    +
    + +

    ◆ smallest_moved_point()

    + +
    +
    + + + + + +
    + + + + + + + +
    uint8_t HPCombi::PTransf16::smallest_moved_point () const
    +
    +inline
    +
    + +

    Returns the smallest non fix point of *this.

    + +
    +
    + +

    ◆ validate()

    + +
    +
    + + + + + +
    + + + + + + + + +
    bool HPCombi::PTransf16::validate (size_t k = 16) const
    +
    +inline
    +
    + +

    Return whether *this is a well constructed object.

    + +
    +
    +
    The documentation for this struct was generated from the following files: +
    + + + + diff --git a/docs/structHPCombi_1_1PTransf16.png b/docs/structHPCombi_1_1PTransf16.png new file mode 100644 index 00000000..5657756b Binary files /dev/null and b/docs/structHPCombi_1_1PTransf16.png differ diff --git a/docs/structHPCombi_1_1Perm16-members.html b/docs/structHPCombi_1_1Perm16-members.html new file mode 100644 index 00000000..31c140d8 --- /dev/null +++ b/docs/structHPCombi_1_1Perm16-members.html @@ -0,0 +1,194 @@ + + + + + + + +HPCombi: Member List + + + + + + + + + + + +
    +
    + + + + + + +
    +
    HPCombi +
    +
    High Performance Combinatorics in C++ using vector instructions v1.0.0
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    HPCombi::Perm16 Member List
    +
    +
    + +

    This is the complete list of members for HPCombi::Perm16, including all inherited members.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    array typedefHPCombi::PTransf16
    as_array()HPCombi::Vect16inline
    as_array() constHPCombi::Vect16inline
    begin()HPCombi::Vect16inline
    begin() constHPCombi::Vect16inline
    cbegin() constHPCombi::Vect16inline
    cend() constHPCombi::Vect16inline
    const_iterator typedefHPCombi::Vect16
    cycles_partition() constHPCombi::Perm16inline
    domain_bitset(bool complement=false) constHPCombi::PTransf16inline
    domain_mask(bool complement=false) constHPCombi::PTransf16inline
    elementary_transposition(uint64_t i)HPCombi::Perm16inlinestatic
    end()HPCombi::Vect16inline
    end() constHPCombi::Vect16inline
    eval16() constHPCombi::Vect16inline
    first_diff(const Vect16 &u, size_t bound=size()) constHPCombi::Vect16inline
    first_non_zero(size_t bound=size()) constHPCombi::Vect16inline
    first_zero(size_t bound=size()) constHPCombi::Vect16inline
    fix_points_bitset(bool complement=false) constHPCombi::PTransf16inline
    fix_points_mask(bool complement=false) constHPCombi::PTransf16inline
    image_bitset(bool complement=false) constHPCombi::PTransf16inline
    image_mask(bool complement=false) constHPCombi::PTransf16inline
    image_mask_cmpestrm(bool complement=false) constHPCombi::PTransf16
    image_mask_ref(bool complement=false) constHPCombi::PTransf16inline
    inverse() constHPCombi::Perm16inline
    inverse_arr() constHPCombi::Perm16inline
    inverse_cycl() constHPCombi::Perm16inline
    inverse_find() constHPCombi::Perm16inline
    inverse_pow() constHPCombi::Perm16inline
    inverse_ref() constHPCombi::Perm16inline
    inverse_sort() constHPCombi::Perm16inline
    is_permutation() constHPCombi::Vect16inline
    is_permutation(size_t k) constHPCombi::Vect16inline
    iterator typedefHPCombi::Vect16
    largest_fix_point() constHPCombi::PTransf16inline
    largest_moved_point() constHPCombi::PTransf16inline
    last_diff(const Vect16 &u, size_t bound=size()) constHPCombi::Vect16inline
    last_non_zero(size_t bound=size()) constHPCombi::Vect16inline
    last_zero(size_t bound=size()) constHPCombi::Vect16inline
    left_one() constHPCombi::PTransf16inline
    left_weak_leq(Perm16 other) constHPCombi::Perm16inline
    left_weak_leq_length(Perm16 other) constHPCombi::Perm16inline
    left_weak_leq_ref(Perm16 other) constHPCombi::Perm16inline
    lehmer() constHPCombi::Perm16inline
    lehmer_arr() constHPCombi::Perm16inline
    lehmer_ref() constHPCombi::Perm16inline
    length() constHPCombi::Perm16inline
    length_arr() constHPCombi::Perm16inline
    length_ref() constHPCombi::Perm16inline
    less_partial(const Vect16 &b, int k) constHPCombi::Vect16inline
    nb_cycles() constHPCombi::Perm16inline
    nb_cycles_ref() constHPCombi::Perm16inline
    nb_cycles_unroll() constHPCombi::Perm16inline
    nb_descents() constHPCombi::Perm16inline
    nb_descents_ref() constHPCombi::Perm16inline
    nb_fix_points() constHPCombi::PTransf16inline
    one()HPCombi::Perm16inlinestatic
    operator epu8() constHPCombi::Vect16inline
    operator uint64_t() constHPCombi::Transf16inlineexplicit
    operator!=(const Vect16 &b) constHPCombi::Vect16inline
    operator*(const Perm16 &p) constHPCombi::Perm16inline
    HPCombi::Transf16::operator*(const Transf16 &p) constHPCombi::Transf16inline
    HPCombi::PTransf16::operator*(const PTransf16 &p) constHPCombi::PTransf16inline
    operator<(const Vect16 &b) constHPCombi::Vect16inline
    operator=(const Perm16 &)=defaultHPCombi::Perm16
    HPCombi::Transf16::operator=(const Transf16 &)=defaultHPCombi::Transf16
    operator==(const Vect16 &b) constHPCombi::Vect16inline
    operator[](uint64_t i) constHPCombi::Vect16inline
    operator[](uint64_t i)HPCombi::Vect16inline
    partial_sums() constHPCombi::Vect16inline
    Perm16()=defaultHPCombi::Perm16
    Perm16(const Perm16 &)=defaultHPCombi::Perm16
    Perm16(const vect v)HPCombi::Perm16inline
    Perm16(const epu8 x)HPCombi::Perm16inline
    Perm16(std::initializer_list< uint8_t > il)HPCombi::Perm16inline
    Perm16(uint64_t compressed)HPCombi::Perm16inlineexplicit
    permuted(const Vect16 &b) constHPCombi::Vect16inline
    PTransf16()=defaultHPCombi::PTransf16
    PTransf16(const vect v)HPCombi::PTransf16inline
    PTransf16(const epu8 x)HPCombi::PTransf16inline
    PTransf16(std::vector< uint8_t > dom, std::vector< uint8_t > rng, size_t=0)HPCombi::PTransf16inline
    PTransf16(std::initializer_list< uint8_t > il)HPCombi::PTransf16inline
    random(uint64_t n=16)HPCombi::Perm16inlinestatic
    rank() constHPCombi::PTransf16inline
    rank_cmpestrm() constHPCombi::PTransf16inline
    rank_ref() constHPCombi::PTransf16inline
    right_one() constHPCombi::PTransf16inline
    size()HPCombi::PTransf16inlinestatic
    smallest_fix_point() constHPCombi::PTransf16inline
    smallest_moved_point() constHPCombi::PTransf16inline
    sum() constHPCombi::Vect16inline
    Transf16()=defaultHPCombi::Transf16
    Transf16(const Transf16 &v)=defaultHPCombi::Transf16
    Transf16(const vect v)HPCombi::Transf16inline
    Transf16(const epu8 x)HPCombi::Transf16inline
    Transf16(std::initializer_list< uint8_t > il)HPCombi::Transf16inline
    Transf16(uint64_t compressed)HPCombi::Transf16inlineexplicit
    unrankSJT(int n, int r)HPCombi::Perm16inlinestatic
    vHPCombi::Vect16
    validate(size_t k=16) constHPCombi::Perm16inline
    value_type typedefHPCombi::Vect16
    vect typedefHPCombi::PTransf16
    Vect16()=defaultHPCombi::Vect16
    Vect16(epu8 x)HPCombi::Vect16inline
    Vect16(std::initializer_list< uint8_t > il, uint8_t def=0)HPCombi::Vect16inline
    + + + + diff --git a/docs/structHPCombi_1_1Perm16.html b/docs/structHPCombi_1_1Perm16.html new file mode 100644 index 00000000..8a241d3a --- /dev/null +++ b/docs/structHPCombi_1_1Perm16.html @@ -0,0 +1,1475 @@ + + + + + + + +HPCombi: HPCombi::Perm16 Struct Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    HPCombi +
    +
    High Performance Combinatorics in C++ using vector instructions v1.0.0
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    HPCombi::Perm16 Struct Reference
    +
    +
    + +

    Permutations of \(\{0\dots 15\}\). + More...

    + +

    #include <perm16.hpp>

    +
    +Inheritance diagram for HPCombi::Perm16:
    +
    +
    + + +HPCombi::Transf16 +HPCombi::PTransf16 +HPCombi::Vect16 + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

     Perm16 ()=default
     
    constexpr Perm16 (const Perm16 &)=default
     
    constexpr Perm16 (const vect v)
     
    constexpr Perm16 (const epu8 x)
     
    Perm16operator= (const Perm16 &)=default
     
     Perm16 (std::initializer_list< uint8_t > il)
     
    bool validate (size_t k=16) const
     Return whether *this is a well constructed object. More...
     
    Perm16 operator* (const Perm16 &p) const
     The product of two permutations. More...
     
     Perm16 (uint64_t compressed)
     Construct a permutations from its 64 bits compressed. More...
     
    Perm16 inverse_ref () const
     The inverse permutation. More...
     
    Perm16 inverse_arr () const
     The inverse permutation. More...
     
    Perm16 inverse_sort () const
     The inverse permutation. More...
     
    Perm16 inverse_find () const
     The inverse permutation. More...
     
    Perm16 inverse_pow () const
     The inverse permutation. More...
     
    Perm16 inverse_cycl () const
     The inverse permutation. More...
     
    Perm16 inverse () const
     The inverse permutation. More...
     
    epu8 lehmer_ref () const
     The Lehmer code of a permutation. More...
     
    epu8 lehmer_arr () const
     The Lehmer code of a permutation. More...
     
    epu8 lehmer () const
     The Lehmer code of a permutation. More...
     
    uint8_t length_ref () const
     The Coxeter length (ie: number of inversion) of a permutation. More...
     
    uint8_t length_arr () const
     The Coxeter length (ie: number of inversion) of a permutation. More...
     
    uint8_t length () const
     The Coxeter length (ie: number of inversion) of a permutation. More...
     
    uint8_t nb_descents_ref () const
     The number of descent of a permutation. More...
     
    uint8_t nb_descents () const
     The number of descent of a permutation. More...
     
    epu8 cycles_partition () const
     The set partition of the cycles of a permutation. More...
     
    uint8_t nb_cycles_ref () const
     The number of cycles of a permutation. More...
     
    uint8_t nb_cycles_unroll () const
     The number of cycles of a permutation. More...
     
    uint8_t nb_cycles () const
     The number of cycles of a permutation. More...
     
    bool left_weak_leq_ref (Perm16 other) const
     Compare two permutations for the left weak order. More...
     
    bool left_weak_leq_length (Perm16 other) const
     Compare two permutations for the left weak order. More...
     
    bool left_weak_leq (Perm16 other) const
     Compare two permutations for the left weak order. More...
     
    - Public Member Functions inherited from HPCombi::Transf16
     Transf16 ()=default
     
    constexpr Transf16 (const Transf16 &v)=default
     
    constexpr Transf16 (const vect v)
     
    constexpr Transf16 (const epu8 x)
     
     Transf16 (std::initializer_list< uint8_t > il)
     
    Transf16operator= (const Transf16 &)=default
     
    bool validate (size_t k=16) const
     Return whether *this is a well constructed object. More...
     
    Transf16 operator* (const Transf16 &p) const
     The product of two transformations. More...
     
     Transf16 (uint64_t compressed)
     Construct a transformation from its 64 bits compressed. More...
     
     operator uint64_t () const
     The 64 bit compressed form of a transformation. More...
     
    - Public Member Functions inherited from HPCombi::PTransf16
     PTransf16 ()=default
     
    constexpr PTransf16 (const vect v)
     
    constexpr PTransf16 (const epu8 x)
     
     PTransf16 (std::vector< uint8_t > dom, std::vector< uint8_t > rng, size_t=0)
     
     PTransf16 (std::initializer_list< uint8_t > il)
     
    bool validate (size_t k=16) const
     Return whether *this is a well constructed object. More...
     
    PTransf16 operator* (const PTransf16 &p) const
     The product of two partial transformations. More...
     
    epu8 image_mask_cmpestrm (bool complement=false) const
     Returns a mask for the image of *this. More...
     
    epu8 image_mask_ref (bool complement=false) const
     Returns a mask for the image of *this. More...
     
    epu8 image_mask (bool complement=false) const
     
    uint32_t image_bitset (bool complement=false) const
     Returns a bit mask for the image of *this. More...
     
    epu8 domain_mask (bool complement=false) const
     Returns a mask for the domain of *this. More...
     
    uint32_t domain_bitset (bool complement=false) const
     Returns a bit mask for the domain of *this. More...
     
    PTransf16 right_one () const
     Returns the partial right identity for *this. More...
     
    PTransf16 left_one () const
     Returns the partial left identity for *this. More...
     
    uint32_t rank_ref () const
     Returns the size of the image of *this. More...
     
    uint32_t rank () const
     Returns the size of the image of *this. More...
     
    uint32_t rank_cmpestrm () const
     Returns the size of the image of *this. More...
     
    epu8 fix_points_mask (bool complement=false) const
     Returns a mask for the fix point of *this. More...
     
    uint32_t fix_points_bitset (bool complement=false) const
     Returns a bit mask for the fix point of *this. More...
     
    uint8_t smallest_fix_point () const
     Returns the smallest fix point of *this. More...
     
    uint8_t smallest_moved_point () const
     Returns the smallest non fix point of *this. More...
     
    uint8_t largest_fix_point () const
     Returns the largest fix point of *this. More...
     
    uint8_t largest_moved_point () const
     Returns the largest non fix point of *this. More...
     
    uint8_t nb_fix_points () const
     Returns the number of fix points of *this. More...
     
    - Public Member Functions inherited from HPCombi::Vect16
     Vect16 ()=default
     
    constexpr Vect16 (epu8 x)
     
     Vect16 (std::initializer_list< uint8_t > il, uint8_t def=0)
     
    constexpr operator epu8 () const
     
    arrayas_array ()
     
    const arrayas_array () const
     
    const uint8_t & operator[] (uint64_t i) const
     
    uint8_t & operator[] (uint64_t i)
     
    size_t first_diff (const Vect16 &u, size_t bound=size()) const
     
    size_t last_diff (const Vect16 &u, size_t bound=size()) const
     
    size_t first_zero (size_t bound=size()) const
     
    size_t last_zero (size_t bound=size()) const
     
    size_t first_non_zero (size_t bound=size()) const
     
    size_t last_non_zero (size_t bound=size()) const
     
    const_iterator cbegin () const
     
    const_iterator cend () const
     
    iterator begin ()
     
    iterator end ()
     
    const_iterator begin () const
     
    const_iterator end () const
     
    bool operator== (const Vect16 &b) const
     
    bool operator!= (const Vect16 &b) const
     
    bool operator< (const Vect16 &b) const
     
    int8_t less_partial (const Vect16 &b, int k) const
     
    Vect16 permuted (const Vect16 &b) const
     
    uint8_t sum () const
     
    Vect16 partial_sums () const
     
    Vect16 eval16 () const
     
    bool is_permutation () const
     
    bool is_permutation (size_t k) const
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Static Public Member Functions

    static constexpr Perm16 one ()
     The identity partial permutation. More...
     
    static Perm16 elementary_transposition (uint64_t i)
     The elementary transposition exchanging \(i\) and \(i+1\). More...
     
    static Perm16 random (uint64_t n=16)
     A random permutation of size \(n\). More...
     
    static Perm16 unrankSJT (int n, int r)
     The r -th permutation of size n for the Steinhaus–Johnson–Trotter order. More...
     
    - Static Public Member Functions inherited from HPCombi::Transf16
    static constexpr Transf16 one ()
     The identity transformation. More...
     
    - Static Public Member Functions inherited from HPCombi::PTransf16
    static constexpr size_t size ()
     
    static constexpr PTransf16 one ()
     The identity partial transformation. More...
     
    - Static Public Member Functions inherited from HPCombi::Vect16
    static constexpr size_t size ()
     
    + + + + + + + + + + + + + + + + + + +

    +Additional Inherited Members

    - Public Types inherited from HPCombi::PTransf16
    using vect = HPCombi::Vect16
     
    using array = typename decltype(Epu8)::array
     
    - Public Types inherited from HPCombi::Vect16
    using array = typename decltype(Epu8)::array
     
    using value_type = uint8_t
     
    using iterator = typename array::iterator
     
    using const_iterator = typename array::const_iterator
     
    - Public Attributes inherited from HPCombi::Vect16
    epu8 v
     
    +

    Detailed Description

    +

    Permutations of \(\{0\dots 15\}\).

    +

    Constructor & Destructor Documentation

    + +

    ◆ Perm16() [1/6]

    + +
    +
    + + + + + +
    + + + + + + + +
    HPCombi::Perm16::Perm16 ()
    +
    +default
    +
    + +
    +
    + +

    ◆ Perm16() [2/6]

    + +
    +
    + + + + + +
    + + + + + + + + +
    constexpr HPCombi::Perm16::Perm16 (const Perm16)
    +
    +constexprdefault
    +
    + +
    +
    + +

    ◆ Perm16() [3/6]

    + +
    +
    + + + + + +
    + + + + + + + + +
    constexpr HPCombi::Perm16::Perm16 (const vect v)
    +
    +inlineconstexpr
    +
    + +
    +
    + +

    ◆ Perm16() [4/6]

    + +
    +
    + + + + + +
    + + + + + + + + +
    constexpr HPCombi::Perm16::Perm16 (const epu8 x)
    +
    +inlineconstexpr
    +
    + +
    +
    + +

    ◆ Perm16() [5/6]

    + +
    +
    + + + + + +
    + + + + + + + + +
    HPCombi::Perm16::Perm16 (std::initializer_list< uint8_t > il)
    +
    +inline
    +
    + +
    +
    + +

    ◆ Perm16() [6/6]

    + +
    +
    + + + + + +
    + + + + + + + + +
    HPCombi::Perm16::Perm16 (uint64_t compressed)
    +
    +inlineexplicit
    +
    + +

    Construct a permutations from its 64 bits compressed.

    + +
    +
    +

    Member Function Documentation

    + +

    ◆ cycles_partition()

    + +
    +
    + + + + + +
    + + + + + + + +
    epu8 HPCombi::Perm16::cycles_partition () const
    +
    +inline
    +
    + +

    The set partition of the cycles of a permutation.

    +
    Returns
    the a vector \(v\) where $fv[i]$f contains the smallest element in the cycle of $i$ in *this
    +
    Example:
    Perm16 x {1,2,3,6,0,5,4,7,8,9,10,11,12,15,14,13}
    +
    x.cycles_partition()
    +
    Perm16()=default
    +
    Returns
    [ 0, 0, 0, 0, 0, 5, 0, 7, 8, 9,10,11,12,13,14,13]
    +
    + +
    +
    + +

    ◆ elementary_transposition()

    + +
    +
    + + + + + +
    + + + + + + + + +
    Perm16 HPCombi::Perm16::elementary_transposition (uint64_t i)
    +
    +inlinestatic
    +
    + +

    The elementary transposition exchanging \(i\) and \(i+1\).

    + +
    +
    + +

    ◆ inverse()

    + +
    +
    + + + + + +
    + + + + + + + +
    Perm16 HPCombi::Perm16::inverse () const
    +
    +inline
    +
    + +

    The inverse permutation.

    +
    Returns
    the inverse of *this
    +
    Example:
    Perm16 x = {0,3,2,4,1,5,6,7,8,9,10,11,12,13,14,15};
    +
    x.inverse()
    +
    Returns
    {0,4,2,1,3,5,6,7,8,9,10,11,12,13,14,15} 
    +

    Frontend method: currently aliased to inverse_cycl

    + +
    +
    + +

    ◆ inverse_arr()

    + +
    +
    + + + + + +
    + + + + + + + +
    Perm16 HPCombi::Perm16::inverse_arr () const
    +
    +inline
    +
    + +

    The inverse permutation.

    +
    Returns
    the inverse of *this
    +
    Example:
    Perm16 x = {0,3,2,4,1,5,6,7,8,9,10,11,12,13,14,15};
    +
    x.inverse()
    +
    Returns
    {0,4,2,1,3,5,6,7,8,9,10,11,12,13,14,15} 
    +
    Algorithm:
    \(O(n)\) algorithm using reference cast to arrays
    + +
    +
    + +

    ◆ inverse_cycl()

    + +
    +
    + + + + + +
    + + + + + + + +
    Perm16 HPCombi::Perm16::inverse_cycl () const
    +
    +inline
    +
    + +

    The inverse permutation.

    +
    Returns
    the inverse of *this
    +
    Example:
    Perm16 x = {0,3,2,4,1,5,6,7,8,9,10,11,12,13,14,15};
    +
    x.inverse()
    +
    Returns
    {0,4,2,1,3,5,6,7,8,9,10,11,12,13,14,15} 
    +
    Algorithm:
    Compute power from \(n/2\) to \(n\), when \(\sigma^k(i)=i\) then \(\sigma^{-1}(i)=\sigma^{k-1}(i)\). Complexity \(O(n)\)
    + +
    +
    + +

    ◆ inverse_find()

    + +
    +
    + + + + + +
    + + + + + + + +
    Perm16 HPCombi::Perm16::inverse_find () const
    +
    +inline
    +
    + +

    The inverse permutation.

    +
    Returns
    the inverse of *this
    +
    Example:
    Perm16 x = {0,3,2,4,1,5,6,7,8,9,10,11,12,13,14,15};
    +
    x.inverse()
    +
    Returns
    {0,4,2,1,3,5,6,7,8,9,10,11,12,13,14,15} 
    +
    Algorithm:
    \(O(\log n)\) algorithm using some kind of vectorized dichotomic search.
    + +
    +
    + +

    ◆ inverse_pow()

    + +
    +
    + + + + + +
    + + + + + + + +
    Perm16 HPCombi::Perm16::inverse_pow () const
    +
    +inline
    +
    + +

    The inverse permutation.

    +
    Returns
    the inverse of *this
    +
    Example:
    Perm16 x = {0,3,2,4,1,5,6,7,8,9,10,11,12,13,14,15};
    +
    x.inverse()
    +
    Returns
    {0,4,2,1,3,5,6,7,8,9,10,11,12,13,14,15} 
    +
    Algorithm:
    +

    Raise *this to power \(\text{LCM}(1, 2, ..., n) - 1\) so complexity is in \(O(log (\text{LCM}(1, 2, ..., n) - 1)) = O(n)\)

    + +
    +
    + +

    ◆ inverse_ref()

    + +
    +
    + + + + + +
    + + + + + + + +
    Perm16 HPCombi::Perm16::inverse_ref () const
    +
    +inline
    +
    + +

    The inverse permutation.

    +
    Returns
    the inverse of *this
    +
    Example:
    Perm16 x = {0,3,2,4,1,5,6,7,8,9,10,11,12,13,14,15};
    +
    x.inverse()
    +
    Returns
    {0,4,2,1,3,5,6,7,8,9,10,11,12,13,14,15} 
    +
    Algorithm:
    Reference \(O(n)\) algorithm using loop and indexed access
    + +
    +
    + +

    ◆ inverse_sort()

    + +
    +
    + + + + + +
    + + + + + + + +
    Perm16 HPCombi::Perm16::inverse_sort () const
    +
    +inline
    +
    + +

    The inverse permutation.

    +
    Returns
    the inverse of *this
    +
    Example:
    Perm16 x = {0,3,2,4,1,5,6,7,8,9,10,11,12,13,14,15};
    +
    x.inverse()
    +
    Returns
    {0,4,2,1,3,5,6,7,8,9,10,11,12,13,14,15} 
    +
    Algorithm:
    Insert the identity in the least significant bits and sort using a sorting network. The number of round of the optimal sorting network is open as far as I know, therefore the complexity is unknown.
    + +
    +
    + +

    ◆ left_weak_leq()

    + +
    +
    + + + + + +
    + + + + + + + + +
    bool HPCombi::Perm16::left_weak_leq (Perm16 other) const
    +
    +inline
    +
    + +

    Compare two permutations for the left weak order.

    +
    Example:
    Perm16 x{2,0,3,1}, y{3,0,2,1};
    +
    x.left_weak_leq(y)
    +
    Returns
    true 
    +
    Algorithm:
    \(O(n)\) algorithm using length
    + +
    +
    + +

    ◆ left_weak_leq_length()

    + +
    +
    + + + + + +
    + + + + + + + + +
    bool HPCombi::Perm16::left_weak_leq_length (Perm16 other) const
    +
    +inline
    +
    + +

    Compare two permutations for the left weak order.

    +
    Example:
    Perm16 x{2,0,3,1}, y{3,0,2,1};
    +
    x.left_weak_leq(y)
    +
    Returns
    true 
    +
    Algorithm:
    Reference \(O(n)\) with vectorized test of inclusion
    + +
    +
    + +

    ◆ left_weak_leq_ref()

    + +
    +
    + + + + + +
    + + + + + + + + +
    bool HPCombi::Perm16::left_weak_leq_ref (Perm16 other) const
    +
    +inline
    +
    + +

    Compare two permutations for the left weak order.

    +
    Example:
    Perm16 x{2,0,3,1}, y{3,0,2,1};
    +
    x.left_weak_leq(y)
    +
    Returns
    true 
    +
    Algorithm:
    Reference \(O(n^2)\) testing inclusion of inversions one by one
    + +
    +
    + +

    ◆ lehmer()

    + +
    +
    + + + + + +
    + + + + + + + +
    epu8 HPCombi::Perm16::lehmer () const
    +
    +inline
    +
    + +

    The Lehmer code of a permutation.

    +
    Returns
    the Lehmer code of *this
    +
    Example:
    Perm16 x = {0,3,2,4,1,5,6,7,8,9,10,11,12,13,14,15};
    +
    x.lehmer()
    +
    Returns
    {0,2,1,1,0,0,0,0,0,0,0,0,0,0,0,0} 
    +
    Algorithm:
    Fast \(O(n)\) algorithm using vector comparison
    + +
    +
    + +

    ◆ lehmer_arr()

    + +
    +
    + + + + + +
    + + + + + + + +
    epu8 HPCombi::Perm16::lehmer_arr () const
    +
    +inline
    +
    + +

    The Lehmer code of a permutation.

    +
    Returns
    the Lehmer code of *this
    +
    Example:
    Perm16 x = {0,3,2,4,1,5,6,7,8,9,10,11,12,13,14,15};
    +
    x.lehmer()
    +
    Returns
    {0,2,1,1,0,0,0,0,0,0,0,0,0,0,0,0} 
    +
    Algorithm:
    Reference \(O(n^2)\) algorithm using array, loop and indexed access
    + +
    +
    + +

    ◆ lehmer_ref()

    + +
    +
    + + + + + +
    + + + + + + + +
    epu8 HPCombi::Perm16::lehmer_ref () const
    +
    +inline
    +
    + +

    The Lehmer code of a permutation.

    +
    Returns
    the Lehmer code of *this
    +
    Example:
    Perm16 x = {0,3,2,4,1,5,6,7,8,9,10,11,12,13,14,15};
    +
    x.lehmer()
    +
    Returns
    {0,2,1,1,0,0,0,0,0,0,0,0,0,0,0,0} 
    +
    Algorithm:
    Reference \(O(n^2)\) algorithm using loop and indexed access
    + +
    +
    + +

    ◆ length()

    + +
    +
    + + + + + +
    + + + + + + + +
    uint8_t HPCombi::Perm16::length () const
    +
    +inline
    +
    + +

    The Coxeter length (ie: number of inversion) of a permutation.

    +
    Returns
    the number of inversions of *this
    +
    Example:
    Perm16 x = {0,3,2,4,1,5,6,7,8,9,10,11,12,13,14,15};
    +
    x.length()
    +
    Returns
    4 
    +
    Algorithm:
    \(O(n)\) using vector lehmer and fast horizontal sum
    + +
    +
    + +

    ◆ length_arr()

    + +
    +
    + + + + + +
    + + + + + + + +
    uint8_t HPCombi::Perm16::length_arr () const
    +
    +inline
    +
    + +

    The Coxeter length (ie: number of inversion) of a permutation.

    +
    Returns
    the number of inversions of *this
    +
    Example:
    Perm16 x = {0,3,2,4,1,5,6,7,8,9,10,11,12,13,14,15};
    +
    x.length()
    +
    Returns
    4 
    +
    Algorithm:
    Reference \(O(n^2)\) algorithm using loop and indexed access after a cast to std::array
    + +
    +
    + +

    ◆ length_ref()

    + +
    +
    + + + + + +
    + + + + + + + +
    uint8_t HPCombi::Perm16::length_ref () const
    +
    +inline
    +
    + +

    The Coxeter length (ie: number of inversion) of a permutation.

    +
    Returns
    the number of inversions of *this
    +
    Example:
    Perm16 x = {0,3,2,4,1,5,6,7,8,9,10,11,12,13,14,15};
    +
    x.length()
    +
    Returns
    4 
    +
    Algorithm:
    Reference \(O(n^2)\) algorithm using loop and indexed access
    + +
    +
    + +

    ◆ nb_cycles()

    + +
    +
    + + + + + +
    + + + + + + + +
    uint8_t HPCombi::Perm16::nb_cycles () const
    +
    +inline
    +
    + +

    The number of cycles of a permutation.

    +
    Returns
    the number of cycles of *this
    +
    Example:
    Perm16 x {1,2,3,6,0,5,4,7,8,9,10,11,12,15,14,13}
    +
    x.nb_cycles()
    +
    Returns
    10 
    +
    Algorithm: aliased to #nb_cycles_unroll
    + +
    +
    + +

    ◆ nb_cycles_ref()

    + +
    +
    + + + + + +
    + + + + + + + +
    uint8_t HPCombi::Perm16::nb_cycles_ref () const
    +
    +inline
    +
    + +

    The number of cycles of a permutation.

    +
    Returns
    the number of cycles of *this
    +
    Example:
    Perm16 x {1,2,3,6,0,5,4,7,8,9,10,11,12,15,14,13}
    +
    x.nb_cycles()
    +
    Returns
    10 
    +
    Algorithm:
    Reference \(O(n)\) using a boolean vector
    + +
    +
    + +

    ◆ nb_cycles_unroll()

    + +
    +
    + + + + + +
    + + + + + + + +
    uint8_t HPCombi::Perm16::nb_cycles_unroll () const
    +
    +inline
    +
    + +

    The number of cycles of a permutation.

    +
    Returns
    the number of cycles of *this
    +
    Example:
    Perm16 x {1,2,3,6,0,5,4,7,8,9,10,11,12,15,14,13}
    +
    x.nb_cycles()
    +
    Returns
    10 
    +
    Algorithm:
    Reference \(O(\log(n))\) using cycles_partition
    + +
    +
    + +

    ◆ nb_descents()

    + +
    +
    + + + + + +
    + + + + + + + +
    uint8_t HPCombi::Perm16::nb_descents () const
    +
    +inline
    +
    + +

    The number of descent of a permutation.

    +
    Returns
    the number of inversions of *this
    +
    Example:
    Perm16 x {0,3,2,4,1,5,6,7,8,9,10,11,12,13,14,15};
    +
    x.length()
    +
    Returns
    2 
    +
    Algorithm:
    Reference \(O(1)\) using vector shift and comparison
    + +
    +
    + +

    ◆ nb_descents_ref()

    + +
    +
    + + + + + +
    + + + + + + + +
    uint8_t HPCombi::Perm16::nb_descents_ref () const
    +
    +inline
    +
    + +

    The number of descent of a permutation.

    +
    Returns
    the number of inversions of *this
    +
    Example:
    Perm16 x {0,3,2,4,1,5,6,7,8,9,10,11,12,13,14,15};
    +
    x.length()
    +
    Returns
    2 
    +
    Algorithm:
    Reference \(O(n)\) using a loop
    + +
    +
    + +

    ◆ one()

    + +
    +
    + + + + + +
    + + + + + + + +
    static constexpr Perm16 HPCombi::Perm16::one ()
    +
    +inlinestaticconstexpr
    +
    + +

    The identity partial permutation.

    + +
    +
    + +

    ◆ operator*()

    + +
    +
    + + + + + +
    + + + + + + + + +
    Perm16 HPCombi::Perm16::operator* (const Perm16p) const
    +
    +inline
    +
    + +

    The product of two permutations.

    + +
    +
    + +

    ◆ operator=()

    + +
    +
    + + + + + +
    + + + + + + + + +
    Perm16& HPCombi::Perm16::operator= (const Perm16)
    +
    +default
    +
    + +
    +
    + +

    ◆ random()

    + +
    +
    + + + + + +
    + + + + + + + + +
    Perm16 HPCombi::Perm16::random (uint64_t n = 16)
    +
    +inlinestatic
    +
    + +

    A random permutation of size \(n\).

    + +
    +
    + +

    ◆ unrankSJT()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    Perm16 HPCombi::Perm16::unrankSJT (int n,
    int r 
    )
    +
    +inlinestatic
    +
    + +

    The r -th permutation of size n for the Steinhaus–Johnson–Trotter order.

    + +
    +
    + +

    ◆ validate()

    + +
    +
    + + + + + +
    + + + + + + + + +
    bool HPCombi::Perm16::validate (size_t k = 16) const
    +
    +inline
    +
    + +

    Return whether *this is a well constructed object.

    + +
    +
    +
    The documentation for this struct was generated from the following files: +
    + + + + diff --git a/docs/structHPCombi_1_1Perm16.png b/docs/structHPCombi_1_1Perm16.png new file mode 100644 index 00000000..9b0fca55 Binary files /dev/null and b/docs/structHPCombi_1_1Perm16.png differ diff --git a/docs/structHPCombi_1_1PermGeneric-members.html b/docs/structHPCombi_1_1PermGeneric-members.html new file mode 100644 index 00000000..63818924 --- /dev/null +++ b/docs/structHPCombi_1_1PermGeneric-members.html @@ -0,0 +1,140 @@ + + + + + + + +HPCombi: Member List + + + + + + + + + + + +
    +
    + + + + + + +
    +
    HPCombi +
    +
    High Performance Combinatorics in C++ using vector instructions v1.0.0
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    HPCombi::PermGeneric< Size, Expo > Member List
    +
    +
    + +

    This is the complete list of members for HPCombi::PermGeneric< Size, Expo >, including all inherited members.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    array typedefHPCombi::VectGeneric< Size, uint8_t >
    begin()HPCombi::VectGeneric< Size, uint8_t >inline
    begin() constHPCombi::VectGeneric< Size, uint8_t >inline
    const_iterator typedefHPCombi::VectGeneric< Size, uint8_t >
    elementary_transposition(uint64_t i)HPCombi::PermGeneric< Size, Expo >static
    end()HPCombi::VectGeneric< Size, uint8_t >inline
    end() constHPCombi::VectGeneric< Size, uint8_t >inline
    eval() constHPCombi::VectGeneric< Size, uint8_t >inline
    first_diff(const VectGeneric &u, size_t bound=Size) constHPCombi::VectGeneric< Size, uint8_t >inline
    first_non_zero(size_t bound=Size) constHPCombi::VectGeneric< Size, uint8_t >inline
    first_zero(size_t bound=Size) constHPCombi::VectGeneric< Size, uint8_t >inline
    horiz_max() constHPCombi::VectGeneric< Size, uint8_t >inline
    horiz_min() constHPCombi::VectGeneric< Size, uint8_t >inline
    horiz_sum() const noexceptHPCombi::VectGeneric< Size, uint8_t >inline
    inverse() constHPCombi::PermGeneric< Size, Expo >
    is_permutation(const size_t k=Size) constHPCombi::VectGeneric< Size, uint8_t >inline
    is_sorted() constHPCombi::VectGeneric< Size, uint8_t >inline
    iterator typedefHPCombi::VectGeneric< Size, uint8_t >
    last_diff(const VectGeneric &u, size_t bound=Size) constHPCombi::VectGeneric< Size, uint8_t >inline
    last_non_zero(size_t bound=Size) constHPCombi::VectGeneric< Size, uint8_t >inline
    last_zero(size_t bound=Size) constHPCombi::VectGeneric< Size, uint8_t >inline
    left_weak_leq(PermGeneric other) constHPCombi::PermGeneric< Size, Expo >
    lehmer() constHPCombi::PermGeneric< Size, Expo >
    length() constHPCombi::PermGeneric< Size, Expo >
    less_partial(const VectGeneric &u, int k) constHPCombi::VectGeneric< Size, uint8_t >inline
    nb_cycles() constHPCombi::PermGeneric< Size, Expo >
    nb_descents() constHPCombi::PermGeneric< Size, Expo >
    one()HPCombi::PermGeneric< Size, Expo >inlinestatic
    operator!=(const VectGeneric &u) constHPCombi::VectGeneric< Size, uint8_t >inline
    operator*(const PermGeneric &p) constHPCombi::PermGeneric< Size, Expo >inline
    operator<(const VectGeneric &u) constHPCombi::VectGeneric< Size, uint8_t >inline
    operator==(const VectGeneric &u) constHPCombi::VectGeneric< Size, uint8_t >inline
    operator[](uint64_t i) constHPCombi::VectGeneric< Size, uint8_t >inline
    operator[](uint64_t i)HPCombi::VectGeneric< Size, uint8_t >inline
    partial_max_inplace()HPCombi::VectGeneric< Size, uint8_t >inline
    partial_min_inplace()HPCombi::VectGeneric< Size, uint8_t >inline
    partial_sums() const noexceptHPCombi::VectGeneric< Size, uint8_t >inline
    partial_sums_inplace()HPCombi::VectGeneric< Size, uint8_t >inline
    PermGeneric()=defaultHPCombi::PermGeneric< Size, Expo >
    PermGeneric(const vect v)HPCombi::PermGeneric< Size, Expo >inline
    PermGeneric(std::initializer_list< Expo > il)HPCombi::PermGeneric< Size, Expo >
    permuted(const VectGeneric &u) constHPCombi::VectGeneric< Size, uint8_t >inline
    random()HPCombi::PermGeneric< Size, Expo >static
    size()HPCombi::PermGeneric< Size, Expo >inlinestatic
    sort()HPCombi::VectGeneric< Size, uint8_t >inline
    vHPCombi::VectGeneric< Size, uint8_t >
    value_type typedefHPCombi::VectGeneric< Size, uint8_t >
    vect typedefHPCombi::PermGeneric< Size, Expo >
    VectGeneric()=defaultHPCombi::VectGeneric< Size, uint8_t >
    VectGeneric(const array &_v)HPCombi::VectGeneric< Size, uint8_t >inline
    VectGeneric(std::initializer_list< uint8_t > il, uint8_t def=0)HPCombi::VectGeneric< Size, uint8_t >inline
    + + + + diff --git a/docs/structHPCombi_1_1PermGeneric.html b/docs/structHPCombi_1_1PermGeneric.html new file mode 100644 index 00000000..01fec45f --- /dev/null +++ b/docs/structHPCombi_1_1PermGeneric.html @@ -0,0 +1,557 @@ + + + + + + + +HPCombi: HPCombi::PermGeneric< Size, Expo > Struct Template Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    HPCombi +
    +
    High Performance Combinatorics in C++ using vector instructions v1.0.0
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    HPCombi::PermGeneric< Size, Expo > Struct Template Reference
    +
    +
    + +

    #include <perm_generic.hpp>

    +
    +Inheritance diagram for HPCombi::PermGeneric< Size, Expo >:
    +
    +
    + + +HPCombi::VectGeneric< Size, uint8_t > + +
    + + + + + + + + + + + + + +

    +Public Types

    using vect = VectGeneric< Size, Expo >
     
    - Public Types inherited from HPCombi::VectGeneric< Size, uint8_t >
    using array = std::array< uint8_t, Size >
     
    using value_type = uint8_t
     
    using iterator = typename array::iterator
     
    using const_iterator = typename array::const_iterator
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

     PermGeneric ()=default
     
     PermGeneric (const vect v)
     
     PermGeneric (std::initializer_list< Expo > il)
     
    PermGeneric operator* (const PermGeneric &p) const
     
    PermGeneric inverse () const
     
    vect lehmer () const
     
    uint64_t length () const
     
    uint64_t nb_descents () const
     
    uint64_t nb_cycles () const
     
    bool left_weak_leq (PermGeneric other) const
     
    - Public Member Functions inherited from HPCombi::VectGeneric< Size, uint8_t >
     VectGeneric ()=default
     
     VectGeneric (const array &_v)
     
     VectGeneric (std::initializer_list< uint8_t > il, uint8_t def=0)
     
    uint8_t operator[] (uint64_t i) const
     
    uint8_t & operator[] (uint64_t i)
     
    size_t first_diff (const VectGeneric &u, size_t bound=Size) const
     
    size_t last_diff (const VectGeneric &u, size_t bound=Size) const
     
    iterator begin ()
     
    const_iterator begin () const
     
    iterator end ()
     
    const_iterator end () const
     
    bool operator== (const VectGeneric &u) const
     
    bool operator!= (const VectGeneric &u) const
     
    bool operator< (const VectGeneric &u) const
     
    int8_t less_partial (const VectGeneric &u, int k) const
     
    VectGeneric permuted (const VectGeneric &u) const
     
    void sort ()
     
    bool is_sorted () const
     
    uint64_t first_non_zero (size_t bound=Size) const
     
    uint64_t first_zero (size_t bound=Size) const
     
    uint64_t last_non_zero (size_t bound=Size) const
     
    uint64_t last_zero (size_t bound=Size) const
     
    bool is_permutation (const size_t k=Size) const
     
    uint64_t horiz_sum () const noexcept
     
    VectGeneric partial_sums () const noexcept
     
    void partial_sums_inplace ()
     
    uint8_t horiz_max () const
     
    void partial_max_inplace ()
     
    uint8_t horiz_min () const
     
    void partial_min_inplace ()
     
    VectGeneric eval () const
     
    + + + + + + + + + + + + + + +

    +Static Public Member Functions

    static constexpr size_t size ()
     
    static PermGeneric one ()
     
    static PermGeneric elementary_transposition (uint64_t i)
     
    static PermGeneric random ()
     
    - Static Public Member Functions inherited from HPCombi::VectGeneric< Size, uint8_t >
    static constexpr size_t size ()
     
    static VectGeneric random ()
     
    + + + + +

    +Additional Inherited Members

    - Public Attributes inherited from HPCombi::VectGeneric< Size, uint8_t >
    array v
     
    +

    Member Typedef Documentation

    + +

    ◆ vect

    + +
    +
    +
    +template<size_t Size, typename Expo = uint8_t>
    + + + + +
    using HPCombi::PermGeneric< Size, Expo >::vect = VectGeneric<Size, Expo>
    +
    + +
    +
    +

    Constructor & Destructor Documentation

    + +

    ◆ PermGeneric() [1/3]

    + +
    +
    +
    +template<size_t Size, typename Expo = uint8_t>
    + + + + + +
    + + + + + + + +
    HPCombi::PermGeneric< Size, Expo >::PermGeneric ()
    +
    +default
    +
    + +
    +
    + +

    ◆ PermGeneric() [2/3]

    + +
    +
    +
    +template<size_t Size, typename Expo = uint8_t>
    + + + + + +
    + + + + + + + + +
    HPCombi::PermGeneric< Size, Expo >::PermGeneric (const vect v)
    +
    +inline
    +
    + +
    +
    + +

    ◆ PermGeneric() [3/3]

    + +
    +
    +
    +template<size_t Size, typename Expo >
    + + + + + + + + +
    HPCombi::PermGeneric< Size, Expo >::PermGeneric (std::initializer_list< Expo > il)
    +
    + +
    +
    +

    Member Function Documentation

    + +

    ◆ elementary_transposition()

    + +
    +
    +
    +template<size_t Size, typename Expo >
    + + + + + +
    + + + + + + + + +
    PermGeneric< Size, Expo > HPCombi::PermGeneric< Size, Expo >::elementary_transposition (uint64_t i)
    +
    +static
    +
    + +
    +
    + +

    ◆ inverse()

    + +
    +
    +
    +template<size_t Size, typename Expo >
    + + + + +
    PermGeneric< Size, Expo > HPCombi::PermGeneric< Size, Expo >::inverse
    +
    + +
    +
    + +

    ◆ left_weak_leq()

    + +
    +
    +
    +template<size_t Size, typename Expo >
    + + + + + + + + +
    bool HPCombi::PermGeneric< Size, Expo >::left_weak_leq (PermGeneric< Size, Expo > other) const
    +
    + +
    +
    + +

    ◆ lehmer()

    + +
    +
    +
    +template<size_t Size, typename Expo >
    + + + + +
    PermGeneric< Size, Expo >::vect HPCombi::PermGeneric< Size, Expo >::lehmer
    +
    + +
    +
    + +

    ◆ length()

    + +
    +
    +
    +template<size_t Size, typename Expo >
    + + + + +
    uint64_t HPCombi::PermGeneric< Size, Expo >::length
    +
    + +
    +
    + +

    ◆ nb_cycles()

    + +
    +
    +
    +template<size_t Size, typename Expo >
    + + + + +
    uint64_t HPCombi::PermGeneric< Size, Expo >::nb_cycles
    +
    + +
    +
    + +

    ◆ nb_descents()

    + +
    +
    +
    +template<size_t Size, typename Expo >
    + + + + +
    uint64_t HPCombi::PermGeneric< Size, Expo >::nb_descents
    +
    + +
    +
    + +

    ◆ one()

    + +
    +
    +
    +template<size_t Size, typename Expo = uint8_t>
    + + + + + +
    + + + + + + + +
    static PermGeneric HPCombi::PermGeneric< Size, Expo >::one ()
    +
    +inlinestatic
    +
    + +
    +
    + +

    ◆ operator*()

    + +
    +
    +
    +template<size_t Size, typename Expo = uint8_t>
    + + + + + +
    + + + + + + + + +
    PermGeneric HPCombi::PermGeneric< Size, Expo >::operator* (const PermGeneric< Size, Expo > & p) const
    +
    +inline
    +
    + +
    +
    + +

    ◆ random()

    + +
    +
    +
    +template<size_t Size, typename Expo >
    + + + + + +
    + + + + +
    PermGeneric< Size, Expo > HPCombi::PermGeneric< Size, Expo >::random
    +
    +static
    +
    + +
    +
    + +

    ◆ size()

    + +
    +
    +
    +template<size_t Size, typename Expo = uint8_t>
    + + + + + +
    + + + + + + + +
    static constexpr size_t HPCombi::PermGeneric< Size, Expo >::size ()
    +
    +inlinestaticconstexpr
    +
    + +
    +
    +
    The documentation for this struct was generated from the following files: +
    + + + + diff --git a/docs/structHPCombi_1_1PermGeneric.png b/docs/structHPCombi_1_1PermGeneric.png new file mode 100644 index 00000000..30e53c58 Binary files /dev/null and b/docs/structHPCombi_1_1PermGeneric.png differ diff --git a/docs/structHPCombi_1_1TPUBuild-members.html b/docs/structHPCombi_1_1TPUBuild-members.html new file mode 100644 index 00000000..e2c7c267 --- /dev/null +++ b/docs/structHPCombi_1_1TPUBuild-members.html @@ -0,0 +1,107 @@ + + + + + + + +HPCombi: Member List + + + + + + + + + + + +
    +
    + + + + + + +
    +
    HPCombi +
    +
    High Performance Combinatorics in C++ using vector instructions v1.0.0
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    HPCombi::TPUBuild< TPU > Member List
    +
    +
    + +

    This is the complete list of members for HPCombi::TPUBuild< TPU >, including all inherited members.

    + + + + + + + + + + + + + + + + + + + +
    array typedefHPCombi::TPUBuild< TPU >
    id() constHPCombi::TPUBuild< TPU >inline
    left_cycle() constHPCombi::TPUBuild< TPU >inline
    left_dup() constHPCombi::TPUBuild< TPU >inline
    make_helper(Fun f, std::index_sequence< Is... >)HPCombi::TPUBuild< TPU >inlinestatic
    operator()(std::initializer_list< type_elem > il, type_elem def) constHPCombi::TPUBuild< TPU >inline
    operator()(Fun f) constHPCombi::TPUBuild< TPU >inline
    operator()(type_elem c) constHPCombi::TPUBuild< TPU >inline
    operator()(int c) constHPCombi::TPUBuild< TPU >inline
    operator()(size_t c) constHPCombi::TPUBuild< TPU >inline
    operator()(array a) constHPCombi::TPUBuild< TPU >inline
    popcount() constHPCombi::TPUBuild< TPU >inline
    rev() constHPCombi::TPUBuild< TPU >inline
    right_cycle() constHPCombi::TPUBuild< TPU >inline
    right_dup() constHPCombi::TPUBuild< TPU >inline
    sizeHPCombi::TPUBuild< TPU >static
    size_elemHPCombi::TPUBuild< TPU >static
    type_elem typedefHPCombi::TPUBuild< TPU >
    + + + + diff --git a/docs/structHPCombi_1_1TPUBuild.html b/docs/structHPCombi_1_1TPUBuild.html new file mode 100644 index 00000000..73d7487a --- /dev/null +++ b/docs/structHPCombi_1_1TPUBuild.html @@ -0,0 +1,703 @@ + + + + + + + +HPCombi: HPCombi::TPUBuild< TPU > Struct Template Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    HPCombi +
    +
    High Performance Combinatorics in C++ using vector instructions v1.0.0
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    HPCombi::TPUBuild< TPU > Struct Template Reference
    +
    +
    + +

    Class for factory object associated to a SIMD packed unsigned integers. + More...

    + +

    #include <builder.hpp>

    + + + + + + + + +

    +Public Types

    using type_elem = typename std::remove_reference_t< decltype((TPU{})[0])>
     Type of the elements. More...
     
    using array = std::array< type_elem, size >
     Array equivalent type. More...
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    constexpr TPU operator() (std::initializer_list< type_elem > il, type_elem def) const
     Construct a TPU from an std::initializer_list and a default value. More...
     
    template<class Fun >
    constexpr TPU operator() (Fun f) const
     Construct a TPU from a function giving the values at \(1,2,\dots\). More...
     
    constexpr TPU operator() (type_elem c) const
     Construct a constant TPU. More...
     
    constexpr TPU operator() (int c) const
     explicit overloading for int constants More...
     
    constexpr TPU operator() (size_t c) const
     explicit overloading for size_t constants More...
     
    constexpr TPU operator() (array a) const
     explicit overloading for array More...
     
    constexpr TPU id () const
     Return the identity element of type TPU. More...
     
    constexpr TPU rev () const
     Return the reversed element of type TPU. More...
     
    constexpr TPU left_cycle () const
     Left cycle TPU permutation. More...
     
    constexpr TPU right_cycle () const
     Right cycle TPU permutation. More...
     
    constexpr TPU left_dup () const
     Left shift TPU, duplicating the rightmost entry. More...
     
    constexpr TPU right_dup () const
     Right shift TPU, duplicating the leftmost entry. More...
     
    constexpr TPU popcount () const
     Popcount TPU: the ith entry contains the number of bits set in i. More...
     
    + + + + +

    +Static Public Member Functions

    template<class Fun , decltype(size)... Is>
    static constexpr TPU make_helper (Fun f, std::index_sequence< Is... >)
     
    + + + + + + + +

    +Static Public Attributes

    static constexpr size_t size_elem = sizeof(type_elem)
     Size of the elements. More...
     
    static constexpr size_t size = sizeof(TPU) / size_elem
     Number of elements. More...
     
    +

    Detailed Description

    +

    template<class TPU>
    +struct HPCombi::TPUBuild< TPU >

    + +

    Class for factory object associated to a SIMD packed unsigned integers.

    +

    The main purpose of this class is to be able to construct in a constexpr way various instances of the TPU SIMD vector type. The behavior of an instance of TPUBuild<TPU> is designed to mimic the behavior of TPU if it where a class:

      +
    • calling operator() on an instance which acts similarly to a class constructor,
    • +
    • calling a member function such as id acts as a static member function.
    • +
    +

    Member Typedef Documentation

    + +

    ◆ array

    + +
    +
    +
    +template<class TPU >
    + + + + +
    using HPCombi::TPUBuild< TPU >::array = std::array<type_elem, size>
    +
    + +

    Array equivalent type.

    + +
    +
    + +

    ◆ type_elem

    + +
    +
    +
    +template<class TPU >
    + + + + +
    using HPCombi::TPUBuild< TPU >::type_elem = typename std::remove_reference_t<decltype((TPU{})[0])>
    +
    + +

    Type of the elements.

    + +
    +
    +

    Member Function Documentation

    + +

    ◆ id()

    + +
    +
    +
    +template<class TPU >
    + + + + + +
    + + + + + + + +
    constexpr TPU HPCombi::TPUBuild< TPU >::id () const
    +
    +inlineconstexpr
    +
    + +

    Return the identity element of type TPU.

    + +
    +
    + +

    ◆ left_cycle()

    + +
    +
    +
    +template<class TPU >
    + + + + + +
    + + + + + + + +
    constexpr TPU HPCombi::TPUBuild< TPU >::left_cycle () const
    +
    +inlineconstexpr
    +
    + +

    Left cycle TPU permutation.

    + +
    +
    + +

    ◆ left_dup()

    + +
    +
    +
    +template<class TPU >
    + + + + + +
    + + + + + + + +
    constexpr TPU HPCombi::TPUBuild< TPU >::left_dup () const
    +
    +inlineconstexpr
    +
    + +

    Left shift TPU, duplicating the rightmost entry.

    + +
    +
    + +

    ◆ make_helper()

    + +
    +
    +
    +template<class TPU >
    +
    +template<class Fun , decltype(size)... Is>
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    static constexpr TPU HPCombi::TPUBuild< TPU >::make_helper (Fun f,
    std::index_sequence< Is... >  
    )
    +
    +inlinestaticconstexpr
    +
    + +
    +
    + +

    ◆ operator()() [1/6]

    + +
    +
    +
    +template<class TPU >
    + + + + + +
    + + + + + + + + +
    constexpr TPU HPCombi::TPUBuild< TPU >::operator() (array a) const
    +
    +inlineconstexpr
    +
    + +

    explicit overloading for array

    + +
    +
    + +

    ◆ operator()() [2/6]

    + +
    +
    +
    +template<class TPU >
    +
    +template<class Fun >
    + + + + + +
    + + + + + + + + +
    constexpr TPU HPCombi::TPUBuild< TPU >::operator() (Fun f) const
    +
    +inlineconstexpr
    +
    + +

    Construct a TPU from a function giving the values at \(1,2,\dots\).

    + +
    +
    + +

    ◆ operator()() [3/6]

    + +
    +
    +
    +template<class TPU >
    + + + + + +
    + + + + + + + + +
    constexpr TPU HPCombi::TPUBuild< TPU >::operator() (int c) const
    +
    +inlineconstexpr
    +
    + +

    explicit overloading for int constants

    + +
    +
    + +

    ◆ operator()() [4/6]

    + +
    +
    +
    +template<class TPU >
    + + + + + +
    + + + + + + + + +
    constexpr TPU HPCombi::TPUBuild< TPU >::operator() (size_t c) const
    +
    +inlineconstexpr
    +
    + +

    explicit overloading for size_t constants

    + +
    +
    + +

    ◆ operator()() [5/6]

    + +
    +
    +
    +template<class TPU >
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    constexpr TPU HPCombi::TPUBuild< TPU >::operator() (std::initializer_list< type_elemil,
    type_elem def 
    ) const
    +
    +inlineconstexpr
    +
    + +

    Construct a TPU from an std::initializer_list and a default value.

    + +
    +
    + +

    ◆ operator()() [6/6]

    + +
    +
    +
    +template<class TPU >
    + + + + + +
    + + + + + + + + +
    constexpr TPU HPCombi::TPUBuild< TPU >::operator() (type_elem c) const
    +
    +inlineconstexpr
    +
    + +

    Construct a constant TPU.

    + +
    +
    + +

    ◆ popcount()

    + +
    +
    +
    +template<class TPU >
    + + + + + +
    + + + + + + + +
    constexpr TPU HPCombi::TPUBuild< TPU >::popcount () const
    +
    +inlineconstexpr
    +
    + +

    Popcount TPU: the ith entry contains the number of bits set in i.

    + +
    +
    + +

    ◆ rev()

    + +
    +
    +
    +template<class TPU >
    + + + + + +
    + + + + + + + +
    constexpr TPU HPCombi::TPUBuild< TPU >::rev () const
    +
    +inlineconstexpr
    +
    + +

    Return the reversed element of type TPU.

    + +
    +
    + +

    ◆ right_cycle()

    + +
    +
    +
    +template<class TPU >
    + + + + + +
    + + + + + + + +
    constexpr TPU HPCombi::TPUBuild< TPU >::right_cycle () const
    +
    +inlineconstexpr
    +
    + +

    Right cycle TPU permutation.

    + +
    +
    + +

    ◆ right_dup()

    + +
    +
    +
    +template<class TPU >
    + + + + + +
    + + + + + + + +
    constexpr TPU HPCombi::TPUBuild< TPU >::right_dup () const
    +
    +inlineconstexpr
    +
    + +

    Right shift TPU, duplicating the leftmost entry.

    + +
    +
    +

    Member Data Documentation

    + +

    ◆ size

    + +
    +
    +
    +template<class TPU >
    + + + + + +
    + + + + +
    constexpr size_t HPCombi::TPUBuild< TPU >::size = sizeof(TPU) / size_elem
    +
    +staticconstexpr
    +
    + +

    Number of elements.

    + +
    +
    + +

    ◆ size_elem

    + +
    +
    +
    +template<class TPU >
    + + + + + +
    + + + + +
    constexpr size_t HPCombi::TPUBuild< TPU >::size_elem = sizeof(type_elem)
    +
    +staticconstexpr
    +
    + +

    Size of the elements.

    + +
    +
    +
    The documentation for this struct was generated from the following file:
      +
    • /home/florent/src/HPCombi/include/hpcombi/builder.hpp
    • +
    +
    + + + + diff --git a/docs/structHPCombi_1_1Transf16-members.html b/docs/structHPCombi_1_1Transf16-members.html new file mode 100644 index 00000000..8ab9c6c2 --- /dev/null +++ b/docs/structHPCombi_1_1Transf16-members.html @@ -0,0 +1,161 @@ + + + + + + + +HPCombi: Member List + + + + + + + + + + + +
    +
    + + + + + + +
    +
    HPCombi +
    +
    High Performance Combinatorics in C++ using vector instructions v1.0.0
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    HPCombi::Transf16 Member List
    +
    +
    + +

    This is the complete list of members for HPCombi::Transf16, including all inherited members.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    array typedefHPCombi::PTransf16
    as_array()HPCombi::Vect16inline
    as_array() constHPCombi::Vect16inline
    begin()HPCombi::Vect16inline
    begin() constHPCombi::Vect16inline
    cbegin() constHPCombi::Vect16inline
    cend() constHPCombi::Vect16inline
    const_iterator typedefHPCombi::Vect16
    domain_bitset(bool complement=false) constHPCombi::PTransf16inline
    domain_mask(bool complement=false) constHPCombi::PTransf16inline
    end()HPCombi::Vect16inline
    end() constHPCombi::Vect16inline
    eval16() constHPCombi::Vect16inline
    first_diff(const Vect16 &u, size_t bound=size()) constHPCombi::Vect16inline
    first_non_zero(size_t bound=size()) constHPCombi::Vect16inline
    first_zero(size_t bound=size()) constHPCombi::Vect16inline
    fix_points_bitset(bool complement=false) constHPCombi::PTransf16inline
    fix_points_mask(bool complement=false) constHPCombi::PTransf16inline
    image_bitset(bool complement=false) constHPCombi::PTransf16inline
    image_mask(bool complement=false) constHPCombi::PTransf16inline
    image_mask_cmpestrm(bool complement=false) constHPCombi::PTransf16
    image_mask_ref(bool complement=false) constHPCombi::PTransf16inline
    is_permutation() constHPCombi::Vect16inline
    is_permutation(size_t k) constHPCombi::Vect16inline
    iterator typedefHPCombi::Vect16
    largest_fix_point() constHPCombi::PTransf16inline
    largest_moved_point() constHPCombi::PTransf16inline
    last_diff(const Vect16 &u, size_t bound=size()) constHPCombi::Vect16inline
    last_non_zero(size_t bound=size()) constHPCombi::Vect16inline
    last_zero(size_t bound=size()) constHPCombi::Vect16inline
    left_one() constHPCombi::PTransf16inline
    less_partial(const Vect16 &b, int k) constHPCombi::Vect16inline
    nb_fix_points() constHPCombi::PTransf16inline
    one()HPCombi::Transf16inlinestatic
    operator epu8() constHPCombi::Vect16inline
    operator uint64_t() constHPCombi::Transf16inlineexplicit
    operator!=(const Vect16 &b) constHPCombi::Vect16inline
    operator*(const Transf16 &p) constHPCombi::Transf16inline
    HPCombi::PTransf16::operator*(const PTransf16 &p) constHPCombi::PTransf16inline
    operator<(const Vect16 &b) constHPCombi::Vect16inline
    operator=(const Transf16 &)=defaultHPCombi::Transf16
    operator==(const Vect16 &b) constHPCombi::Vect16inline
    operator[](uint64_t i) constHPCombi::Vect16inline
    operator[](uint64_t i)HPCombi::Vect16inline
    partial_sums() constHPCombi::Vect16inline
    permuted(const Vect16 &b) constHPCombi::Vect16inline
    PTransf16()=defaultHPCombi::PTransf16
    PTransf16(const vect v)HPCombi::PTransf16inline
    PTransf16(const epu8 x)HPCombi::PTransf16inline
    PTransf16(std::vector< uint8_t > dom, std::vector< uint8_t > rng, size_t=0)HPCombi::PTransf16inline
    PTransf16(std::initializer_list< uint8_t > il)HPCombi::PTransf16inline
    rank() constHPCombi::PTransf16inline
    rank_cmpestrm() constHPCombi::PTransf16inline
    rank_ref() constHPCombi::PTransf16inline
    right_one() constHPCombi::PTransf16inline
    size()HPCombi::PTransf16inlinestatic
    smallest_fix_point() constHPCombi::PTransf16inline
    smallest_moved_point() constHPCombi::PTransf16inline
    sum() constHPCombi::Vect16inline
    Transf16()=defaultHPCombi::Transf16
    Transf16(const Transf16 &v)=defaultHPCombi::Transf16
    Transf16(const vect v)HPCombi::Transf16inline
    Transf16(const epu8 x)HPCombi::Transf16inline
    Transf16(std::initializer_list< uint8_t > il)HPCombi::Transf16inline
    Transf16(uint64_t compressed)HPCombi::Transf16inlineexplicit
    vHPCombi::Vect16
    validate(size_t k=16) constHPCombi::Transf16inline
    value_type typedefHPCombi::Vect16
    vect typedefHPCombi::PTransf16
    Vect16()=defaultHPCombi::Vect16
    Vect16(epu8 x)HPCombi::Vect16inline
    Vect16(std::initializer_list< uint8_t > il, uint8_t def=0)HPCombi::Vect16inline
    + + + + diff --git a/docs/structHPCombi_1_1Transf16.html b/docs/structHPCombi_1_1Transf16.html new file mode 100644 index 00000000..aef2ec10 --- /dev/null +++ b/docs/structHPCombi_1_1Transf16.html @@ -0,0 +1,601 @@ + + + + + + + +HPCombi: HPCombi::Transf16 Struct Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    HPCombi +
    +
    High Performance Combinatorics in C++ using vector instructions v1.0.0
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    HPCombi::Transf16 Struct Reference
    +
    +
    + +

    Full transformation of \(\{0\dots 15\}\). + More...

    + +

    #include <perm16.hpp>

    +
    +Inheritance diagram for HPCombi::Transf16:
    +
    +
    + + +HPCombi::PTransf16 +HPCombi::Vect16 +HPCombi::Perm16 + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

     Transf16 ()=default
     
    constexpr Transf16 (const Transf16 &v)=default
     
    constexpr Transf16 (const vect v)
     
    constexpr Transf16 (const epu8 x)
     
     Transf16 (std::initializer_list< uint8_t > il)
     
    Transf16operator= (const Transf16 &)=default
     
    bool validate (size_t k=16) const
     Return whether *this is a well constructed object. More...
     
    Transf16 operator* (const Transf16 &p) const
     The product of two transformations. More...
     
     Transf16 (uint64_t compressed)
     Construct a transformation from its 64 bits compressed. More...
     
     operator uint64_t () const
     The 64 bit compressed form of a transformation. More...
     
    - Public Member Functions inherited from HPCombi::PTransf16
     PTransf16 ()=default
     
    constexpr PTransf16 (const vect v)
     
    constexpr PTransf16 (const epu8 x)
     
     PTransf16 (std::vector< uint8_t > dom, std::vector< uint8_t > rng, size_t=0)
     
     PTransf16 (std::initializer_list< uint8_t > il)
     
    bool validate (size_t k=16) const
     Return whether *this is a well constructed object. More...
     
    PTransf16 operator* (const PTransf16 &p) const
     The product of two partial transformations. More...
     
    epu8 image_mask_cmpestrm (bool complement=false) const
     Returns a mask for the image of *this. More...
     
    epu8 image_mask_ref (bool complement=false) const
     Returns a mask for the image of *this. More...
     
    epu8 image_mask (bool complement=false) const
     
    uint32_t image_bitset (bool complement=false) const
     Returns a bit mask for the image of *this. More...
     
    epu8 domain_mask (bool complement=false) const
     Returns a mask for the domain of *this. More...
     
    uint32_t domain_bitset (bool complement=false) const
     Returns a bit mask for the domain of *this. More...
     
    PTransf16 right_one () const
     Returns the partial right identity for *this. More...
     
    PTransf16 left_one () const
     Returns the partial left identity for *this. More...
     
    uint32_t rank_ref () const
     Returns the size of the image of *this. More...
     
    uint32_t rank () const
     Returns the size of the image of *this. More...
     
    uint32_t rank_cmpestrm () const
     Returns the size of the image of *this. More...
     
    epu8 fix_points_mask (bool complement=false) const
     Returns a mask for the fix point of *this. More...
     
    uint32_t fix_points_bitset (bool complement=false) const
     Returns a bit mask for the fix point of *this. More...
     
    uint8_t smallest_fix_point () const
     Returns the smallest fix point of *this. More...
     
    uint8_t smallest_moved_point () const
     Returns the smallest non fix point of *this. More...
     
    uint8_t largest_fix_point () const
     Returns the largest fix point of *this. More...
     
    uint8_t largest_moved_point () const
     Returns the largest non fix point of *this. More...
     
    uint8_t nb_fix_points () const
     Returns the number of fix points of *this. More...
     
    - Public Member Functions inherited from HPCombi::Vect16
     Vect16 ()=default
     
    constexpr Vect16 (epu8 x)
     
     Vect16 (std::initializer_list< uint8_t > il, uint8_t def=0)
     
    constexpr operator epu8 () const
     
    arrayas_array ()
     
    const arrayas_array () const
     
    const uint8_t & operator[] (uint64_t i) const
     
    uint8_t & operator[] (uint64_t i)
     
    size_t first_diff (const Vect16 &u, size_t bound=size()) const
     
    size_t last_diff (const Vect16 &u, size_t bound=size()) const
     
    size_t first_zero (size_t bound=size()) const
     
    size_t last_zero (size_t bound=size()) const
     
    size_t first_non_zero (size_t bound=size()) const
     
    size_t last_non_zero (size_t bound=size()) const
     
    const_iterator cbegin () const
     
    const_iterator cend () const
     
    iterator begin ()
     
    iterator end ()
     
    const_iterator begin () const
     
    const_iterator end () const
     
    bool operator== (const Vect16 &b) const
     
    bool operator!= (const Vect16 &b) const
     
    bool operator< (const Vect16 &b) const
     
    int8_t less_partial (const Vect16 &b, int k) const
     
    Vect16 permuted (const Vect16 &b) const
     
    uint8_t sum () const
     
    Vect16 partial_sums () const
     
    Vect16 eval16 () const
     
    bool is_permutation () const
     
    bool is_permutation (size_t k) const
     
    + + + + + + + + + + + + + +

    +Static Public Member Functions

    static constexpr Transf16 one ()
     The identity transformation. More...
     
    - Static Public Member Functions inherited from HPCombi::PTransf16
    static constexpr size_t size ()
     
    static constexpr PTransf16 one ()
     The identity partial transformation. More...
     
    - Static Public Member Functions inherited from HPCombi::Vect16
    static constexpr size_t size ()
     
    + + + + + + + + + + + + + + + + + + +

    +Additional Inherited Members

    - Public Types inherited from HPCombi::PTransf16
    using vect = HPCombi::Vect16
     
    using array = typename decltype(Epu8)::array
     
    - Public Types inherited from HPCombi::Vect16
    using array = typename decltype(Epu8)::array
     
    using value_type = uint8_t
     
    using iterator = typename array::iterator
     
    using const_iterator = typename array::const_iterator
     
    - Public Attributes inherited from HPCombi::Vect16
    epu8 v
     
    +

    Detailed Description

    +

    Full transformation of \(\{0\dots 15\}\).

    +

    Constructor & Destructor Documentation

    + +

    ◆ Transf16() [1/6]

    + +
    +
    + + + + + +
    + + + + + + + +
    HPCombi::Transf16::Transf16 ()
    +
    +default
    +
    + +
    +
    + +

    ◆ Transf16() [2/6]

    + +
    +
    + + + + + +
    + + + + + + + + +
    constexpr HPCombi::Transf16::Transf16 (const Transf16v)
    +
    +constexprdefault
    +
    + +
    +
    + +

    ◆ Transf16() [3/6]

    + +
    +
    + + + + + +
    + + + + + + + + +
    constexpr HPCombi::Transf16::Transf16 (const vect v)
    +
    +inlineconstexpr
    +
    + +
    +
    + +

    ◆ Transf16() [4/6]

    + +
    +
    + + + + + +
    + + + + + + + + +
    constexpr HPCombi::Transf16::Transf16 (const epu8 x)
    +
    +inlineconstexpr
    +
    + +
    +
    + +

    ◆ Transf16() [5/6]

    + +
    +
    + + + + + +
    + + + + + + + + +
    HPCombi::Transf16::Transf16 (std::initializer_list< uint8_t > il)
    +
    +inline
    +
    + +
    +
    + +

    ◆ Transf16() [6/6]

    + +
    +
    + + + + + +
    + + + + + + + + +
    HPCombi::Transf16::Transf16 (uint64_t compressed)
    +
    +inlineexplicit
    +
    + +

    Construct a transformation from its 64 bits compressed.

    + +
    +
    +

    Member Function Documentation

    + +

    ◆ one()

    + +
    +
    + + + + + +
    + + + + + + + +
    static constexpr Transf16 HPCombi::Transf16::one ()
    +
    +inlinestaticconstexpr
    +
    + +

    The identity transformation.

    + +
    +
    + +

    ◆ operator uint64_t()

    + +
    +
    + + + + + +
    + + + + + + + +
    HPCombi::Transf16::operator uint64_t () const
    +
    +inlineexplicit
    +
    + +

    The 64 bit compressed form of a transformation.

    + +
    +
    + +

    ◆ operator*()

    + +
    +
    + + + + + +
    + + + + + + + + +
    Transf16 HPCombi::Transf16::operator* (const Transf16p) const
    +
    +inline
    +
    + +

    The product of two transformations.

    + +
    +
    + +

    ◆ operator=()

    + +
    +
    + + + + + +
    + + + + + + + + +
    Transf16& HPCombi::Transf16::operator= (const Transf16)
    +
    +default
    +
    + +
    +
    + +

    ◆ validate()

    + +
    +
    + + + + + +
    + + + + + + + + +
    bool HPCombi::Transf16::validate (size_t k = 16) const
    +
    +inline
    +
    + +

    Return whether *this is a well constructed object.

    + +
    +
    +
    The documentation for this struct was generated from the following files: +
    + + + + diff --git a/docs/structHPCombi_1_1Transf16.png b/docs/structHPCombi_1_1Transf16.png new file mode 100644 index 00000000..cbc614de Binary files /dev/null and b/docs/structHPCombi_1_1Transf16.png differ diff --git a/docs/structHPCombi_1_1Vect16-members.html b/docs/structHPCombi_1_1Vect16-members.html new file mode 100644 index 00000000..2c41e277 --- /dev/null +++ b/docs/structHPCombi_1_1Vect16-members.html @@ -0,0 +1,125 @@ + + + + + + + +HPCombi: Member List + + + + + + + + + + + +
    +
    + + + + + + +
    +
    HPCombi +
    +
    High Performance Combinatorics in C++ using vector instructions v1.0.0
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    HPCombi::Vect16 Member List
    +
    +
    + +

    This is the complete list of members for HPCombi::Vect16, including all inherited members.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    array typedefHPCombi::Vect16
    as_array()HPCombi::Vect16inline
    as_array() constHPCombi::Vect16inline
    begin()HPCombi::Vect16inline
    begin() constHPCombi::Vect16inline
    cbegin() constHPCombi::Vect16inline
    cend() constHPCombi::Vect16inline
    const_iterator typedefHPCombi::Vect16
    end()HPCombi::Vect16inline
    end() constHPCombi::Vect16inline
    eval16() constHPCombi::Vect16inline
    first_diff(const Vect16 &u, size_t bound=size()) constHPCombi::Vect16inline
    first_non_zero(size_t bound=size()) constHPCombi::Vect16inline
    first_zero(size_t bound=size()) constHPCombi::Vect16inline
    is_permutation() constHPCombi::Vect16inline
    is_permutation(size_t k) constHPCombi::Vect16inline
    iterator typedefHPCombi::Vect16
    last_diff(const Vect16 &u, size_t bound=size()) constHPCombi::Vect16inline
    last_non_zero(size_t bound=size()) constHPCombi::Vect16inline
    last_zero(size_t bound=size()) constHPCombi::Vect16inline
    less_partial(const Vect16 &b, int k) constHPCombi::Vect16inline
    operator epu8() constHPCombi::Vect16inline
    operator!=(const Vect16 &b) constHPCombi::Vect16inline
    operator<(const Vect16 &b) constHPCombi::Vect16inline
    operator==(const Vect16 &b) constHPCombi::Vect16inline
    operator[](uint64_t i) constHPCombi::Vect16inline
    operator[](uint64_t i)HPCombi::Vect16inline
    partial_sums() constHPCombi::Vect16inline
    permuted(const Vect16 &b) constHPCombi::Vect16inline
    size()HPCombi::Vect16inlinestatic
    sum() constHPCombi::Vect16inline
    vHPCombi::Vect16
    value_type typedefHPCombi::Vect16
    Vect16()=defaultHPCombi::Vect16
    Vect16(epu8 x)HPCombi::Vect16inline
    Vect16(std::initializer_list< uint8_t > il, uint8_t def=0)HPCombi::Vect16inline
    + + + + diff --git a/docs/structHPCombi_1_1Vect16.html b/docs/structHPCombi_1_1Vect16.html new file mode 100644 index 00000000..26cf090b --- /dev/null +++ b/docs/structHPCombi_1_1Vect16.html @@ -0,0 +1,1099 @@ + + + + + + + +HPCombi: HPCombi::Vect16 Struct Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    HPCombi +
    +
    High Performance Combinatorics in C++ using vector instructions v1.0.0
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    + +
    + +

    #include <vect16.hpp>

    +
    +Inheritance diagram for HPCombi::Vect16:
    +
    +
    + + +HPCombi::PTransf16 +HPCombi::PPerm16 +HPCombi::Transf16 +HPCombi::Perm16 + +
    + + + + + + + + + + +

    +Public Types

    using array = typename decltype(Epu8)::array
     
    using value_type = uint8_t
     
    using iterator = typename array::iterator
     
    using const_iterator = typename array::const_iterator
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

     Vect16 ()=default
     
    constexpr Vect16 (epu8 x)
     
     Vect16 (std::initializer_list< uint8_t > il, uint8_t def=0)
     
    constexpr operator epu8 () const
     
    arrayas_array ()
     
    const arrayas_array () const
     
    const uint8_t & operator[] (uint64_t i) const
     
    uint8_t & operator[] (uint64_t i)
     
    size_t first_diff (const Vect16 &u, size_t bound=size()) const
     
    size_t last_diff (const Vect16 &u, size_t bound=size()) const
     
    size_t first_zero (size_t bound=size()) const
     
    size_t last_zero (size_t bound=size()) const
     
    size_t first_non_zero (size_t bound=size()) const
     
    size_t last_non_zero (size_t bound=size()) const
     
    const_iterator cbegin () const
     
    const_iterator cend () const
     
    iterator begin ()
     
    iterator end ()
     
    const_iterator begin () const
     
    const_iterator end () const
     
    bool operator== (const Vect16 &b) const
     
    bool operator!= (const Vect16 &b) const
     
    bool operator< (const Vect16 &b) const
     
    int8_t less_partial (const Vect16 &b, int k) const
     
    Vect16 permuted (const Vect16 &b) const
     
    uint8_t sum () const
     
    Vect16 partial_sums () const
     
    Vect16 eval16 () const
     
    bool is_permutation () const
     
    bool is_permutation (size_t k) const
     
    + + + +

    +Static Public Member Functions

    static constexpr size_t size ()
     
    + + + +

    +Public Attributes

    epu8 v
     
    +

    Member Typedef Documentation

    + +

    ◆ array

    + +
    +
    + + + + +
    using HPCombi::Vect16::array = typename decltype(Epu8)::array
    +
    + +
    +
    + +

    ◆ const_iterator

    + +
    +
    + + + + +
    using HPCombi::Vect16::const_iterator = typename array::const_iterator
    +
    + +
    +
    + +

    ◆ iterator

    + +
    +
    + + + + +
    using HPCombi::Vect16::iterator = typename array::iterator
    +
    + +
    +
    + +

    ◆ value_type

    + +
    +
    + + + + +
    using HPCombi::Vect16::value_type = uint8_t
    +
    + +
    +
    +

    Constructor & Destructor Documentation

    + +

    ◆ Vect16() [1/3]

    + +
    +
    + + + + + +
    + + + + + + + +
    HPCombi::Vect16::Vect16 ()
    +
    +default
    +
    + +
    +
    + +

    ◆ Vect16() [2/3]

    + +
    +
    + + + + + +
    + + + + + + + + +
    constexpr HPCombi::Vect16::Vect16 (epu8 x)
    +
    +inlineconstexpr
    +
    + +
    +
    + +

    ◆ Vect16() [3/3]

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    HPCombi::Vect16::Vect16 (std::initializer_list< uint8_t > il,
    uint8_t def = 0 
    )
    +
    +inline
    +
    + +
    +
    +

    Member Function Documentation

    + +

    ◆ as_array() [1/2]

    + +
    +
    + + + + + +
    + + + + + + + +
    array& HPCombi::Vect16::as_array ()
    +
    +inline
    +
    + +
    +
    + +

    ◆ as_array() [2/2]

    + +
    +
    + + + + + +
    + + + + + + + +
    const array& HPCombi::Vect16::as_array () const
    +
    +inline
    +
    + +
    +
    + +

    ◆ begin() [1/2]

    + +
    +
    + + + + + +
    + + + + + + + +
    iterator HPCombi::Vect16::begin ()
    +
    +inline
    +
    + +
    +
    + +

    ◆ begin() [2/2]

    + +
    +
    + + + + + +
    + + + + + + + +
    const_iterator HPCombi::Vect16::begin () const
    +
    +inline
    +
    + +
    +
    + +

    ◆ cbegin()

    + +
    +
    + + + + + +
    + + + + + + + +
    const_iterator HPCombi::Vect16::cbegin () const
    +
    +inline
    +
    + +
    +
    + +

    ◆ cend()

    + +
    +
    + + + + + +
    + + + + + + + +
    const_iterator HPCombi::Vect16::cend () const
    +
    +inline
    +
    + +
    +
    + +

    ◆ end() [1/2]

    + +
    +
    + + + + + +
    + + + + + + + +
    iterator HPCombi::Vect16::end ()
    +
    +inline
    +
    + +
    +
    + +

    ◆ end() [2/2]

    + +
    +
    + + + + + +
    + + + + + + + +
    const_iterator HPCombi::Vect16::end () const
    +
    +inline
    +
    + +
    +
    + +

    ◆ eval16()

    + +
    +
    + + + + + +
    + + + + + + + +
    Vect16 HPCombi::Vect16::eval16 () const
    +
    +inline
    +
    + +
    +
    + +

    ◆ first_diff()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    size_t HPCombi::Vect16::first_diff (const Vect16u,
    size_t bound = size() 
    ) const
    +
    +inline
    +
    + +
    +
    + +

    ◆ first_non_zero()

    + +
    +
    + + + + + +
    + + + + + + + + +
    size_t HPCombi::Vect16::first_non_zero (size_t bound = size()) const
    +
    +inline
    +
    + +
    +
    + +

    ◆ first_zero()

    + +
    +
    + + + + + +
    + + + + + + + + +
    size_t HPCombi::Vect16::first_zero (size_t bound = size()) const
    +
    +inline
    +
    + +
    +
    + +

    ◆ is_permutation() [1/2]

    + +
    +
    + + + + + +
    + + + + + + + +
    bool HPCombi::Vect16::is_permutation () const
    +
    +inline
    +
    + +
    +
    + +

    ◆ is_permutation() [2/2]

    + +
    +
    + + + + + +
    + + + + + + + + +
    bool HPCombi::Vect16::is_permutation (size_t k) const
    +
    +inline
    +
    + +
    +
    + +

    ◆ last_diff()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    size_t HPCombi::Vect16::last_diff (const Vect16u,
    size_t bound = size() 
    ) const
    +
    +inline
    +
    + +
    +
    + +

    ◆ last_non_zero()

    + +
    +
    + + + + + +
    + + + + + + + + +
    size_t HPCombi::Vect16::last_non_zero (size_t bound = size()) const
    +
    +inline
    +
    + +
    +
    + +

    ◆ last_zero()

    + +
    +
    + + + + + +
    + + + + + + + + +
    size_t HPCombi::Vect16::last_zero (size_t bound = size()) const
    +
    +inline
    +
    + +
    +
    + +

    ◆ less_partial()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    int8_t HPCombi::Vect16::less_partial (const Vect16b,
    int k 
    ) const
    +
    +inline
    +
    + +
    +
    + +

    ◆ operator epu8()

    + +
    +
    + + + + + +
    + + + + + + + +
    constexpr HPCombi::Vect16::operator epu8 () const
    +
    +inlineconstexpr
    +
    + +
    +
    + +

    ◆ operator!=()

    + +
    +
    + + + + + +
    + + + + + + + + +
    bool HPCombi::Vect16::operator!= (const Vect16b) const
    +
    +inline
    +
    + +
    +
    + +

    ◆ operator<()

    + +
    +
    + + + + + +
    + + + + + + + + +
    bool HPCombi::Vect16::operator< (const Vect16b) const
    +
    +inline
    +
    + +
    +
    + +

    ◆ operator==()

    + +
    +
    + + + + + +
    + + + + + + + + +
    bool HPCombi::Vect16::operator== (const Vect16b) const
    +
    +inline
    +
    + +
    +
    + +

    ◆ operator[]() [1/2]

    + +
    +
    + + + + + +
    + + + + + + + + +
    uint8_t& HPCombi::Vect16::operator[] (uint64_t i)
    +
    +inline
    +
    + +
    +
    + +

    ◆ operator[]() [2/2]

    + +
    +
    + + + + + +
    + + + + + + + + +
    const uint8_t& HPCombi::Vect16::operator[] (uint64_t i) const
    +
    +inline
    +
    + +
    +
    + +

    ◆ partial_sums()

    + +
    +
    + + + + + +
    + + + + + + + +
    Vect16 HPCombi::Vect16::partial_sums () const
    +
    +inline
    +
    + +
    +
    + +

    ◆ permuted()

    + +
    +
    + + + + + +
    + + + + + + + + +
    Vect16 HPCombi::Vect16::permuted (const Vect16b) const
    +
    +inline
    +
    + +
    +
    + +

    ◆ size()

    + +
    +
    + + + + + +
    + + + + + + + +
    static constexpr size_t HPCombi::Vect16::size ()
    +
    +inlinestaticconstexpr
    +
    + +
    +
    + +

    ◆ sum()

    + +
    +
    + + + + + +
    + + + + + + + +
    uint8_t HPCombi::Vect16::sum () const
    +
    +inline
    +
    + +
    +
    +

    Member Data Documentation

    + +

    ◆ v

    + +
    +
    + + + + +
    epu8 HPCombi::Vect16::v
    +
    + +
    +
    +
    The documentation for this struct was generated from the following file:
      +
    • /home/florent/src/HPCombi/include/hpcombi/vect16.hpp
    • +
    +
    + + + + diff --git a/docs/structHPCombi_1_1Vect16.png b/docs/structHPCombi_1_1Vect16.png new file mode 100644 index 00000000..71a1c855 Binary files /dev/null and b/docs/structHPCombi_1_1Vect16.png differ diff --git a/docs/structHPCombi_1_1VectGeneric-members.html b/docs/structHPCombi_1_1VectGeneric-members.html new file mode 100644 index 00000000..a25266ff --- /dev/null +++ b/docs/structHPCombi_1_1VectGeneric-members.html @@ -0,0 +1,127 @@ + + + + + + + +HPCombi: Member List + + + + + + + + + + + +
    +
    + + + + + + +
    +
    HPCombi +
    +
    High Performance Combinatorics in C++ using vector instructions v1.0.0
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    HPCombi::VectGeneric< Size, Expo > Member List
    +
    +
    + +

    This is the complete list of members for HPCombi::VectGeneric< Size, Expo >, including all inherited members.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    array typedefHPCombi::VectGeneric< Size, Expo >
    begin()HPCombi::VectGeneric< Size, Expo >inline
    begin() constHPCombi::VectGeneric< Size, Expo >inline
    const_iterator typedefHPCombi::VectGeneric< Size, Expo >
    end()HPCombi::VectGeneric< Size, Expo >inline
    end() constHPCombi::VectGeneric< Size, Expo >inline
    eval() constHPCombi::VectGeneric< Size, Expo >inline
    first_diff(const VectGeneric &u, size_t bound=Size) constHPCombi::VectGeneric< Size, Expo >inline
    first_non_zero(size_t bound=Size) constHPCombi::VectGeneric< Size, Expo >inline
    first_zero(size_t bound=Size) constHPCombi::VectGeneric< Size, Expo >inline
    horiz_max() constHPCombi::VectGeneric< Size, Expo >inline
    horiz_min() constHPCombi::VectGeneric< Size, Expo >inline
    horiz_sum() const noexceptHPCombi::VectGeneric< Size, Expo >inline
    is_permutation(const size_t k=Size) constHPCombi::VectGeneric< Size, Expo >inline
    is_sorted() constHPCombi::VectGeneric< Size, Expo >inline
    iterator typedefHPCombi::VectGeneric< Size, Expo >
    last_diff(const VectGeneric &u, size_t bound=Size) constHPCombi::VectGeneric< Size, Expo >inline
    last_non_zero(size_t bound=Size) constHPCombi::VectGeneric< Size, Expo >inline
    last_zero(size_t bound=Size) constHPCombi::VectGeneric< Size, Expo >inline
    less_partial(const VectGeneric &u, int k) constHPCombi::VectGeneric< Size, Expo >inline
    operator!=(const VectGeneric &u) constHPCombi::VectGeneric< Size, Expo >inline
    operator<(const VectGeneric &u) constHPCombi::VectGeneric< Size, Expo >inline
    operator==(const VectGeneric &u) constHPCombi::VectGeneric< Size, Expo >inline
    operator[](uint64_t i) constHPCombi::VectGeneric< Size, Expo >inline
    operator[](uint64_t i)HPCombi::VectGeneric< Size, Expo >inline
    partial_max_inplace()HPCombi::VectGeneric< Size, Expo >inline
    partial_min_inplace()HPCombi::VectGeneric< Size, Expo >inline
    partial_sums() const noexceptHPCombi::VectGeneric< Size, Expo >inline
    partial_sums_inplace()HPCombi::VectGeneric< Size, Expo >inline
    permuted(const VectGeneric &u) constHPCombi::VectGeneric< Size, Expo >inline
    random()HPCombi::VectGeneric< Size, Expo >inlinestatic
    size()HPCombi::VectGeneric< Size, Expo >inlinestatic
    sort()HPCombi::VectGeneric< Size, Expo >inline
    vHPCombi::VectGeneric< Size, Expo >
    value_type typedefHPCombi::VectGeneric< Size, Expo >
    VectGeneric()=defaultHPCombi::VectGeneric< Size, Expo >
    VectGeneric(const array &_v)HPCombi::VectGeneric< Size, Expo >inline
    VectGeneric(std::initializer_list< Expo > il, Expo def=0)HPCombi::VectGeneric< Size, Expo >inline
    + + + + diff --git a/docs/structHPCombi_1_1VectGeneric.html b/docs/structHPCombi_1_1VectGeneric.html new file mode 100644 index 00000000..70b9278b --- /dev/null +++ b/docs/structHPCombi_1_1VectGeneric.html @@ -0,0 +1,1225 @@ + + + + + + + +HPCombi: HPCombi::VectGeneric< Size, Expo > Struct Template Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    HPCombi +
    +
    High Performance Combinatorics in C++ using vector instructions v1.0.0
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    HPCombi::VectGeneric< Size, Expo > Struct Template Reference
    +
    +
    + +

    A generic class for combinatorial integer vectors. + More...

    + +

    #include <vect_generic.hpp>

    + + + + + + + + + + +

    +Public Types

    using array = std::array< Expo, Size >
     
    using value_type = Expo
     
    using iterator = typename array::iterator
     
    using const_iterator = typename array::const_iterator
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

     VectGeneric ()=default
     
     VectGeneric (const array &_v)
     
     VectGeneric (std::initializer_list< Expo > il, Expo def=0)
     
    Expo operator[] (uint64_t i) const
     
    Expo & operator[] (uint64_t i)
     
    size_t first_diff (const VectGeneric &u, size_t bound=Size) const
     
    size_t last_diff (const VectGeneric &u, size_t bound=Size) const
     
    iterator begin ()
     
    iterator end ()
     
    const_iterator begin () const
     
    const_iterator end () const
     
    bool operator== (const VectGeneric &u) const
     
    bool operator!= (const VectGeneric &u) const
     
    bool operator< (const VectGeneric &u) const
     
    int8_t less_partial (const VectGeneric &u, int k) const
     
    VectGeneric permuted (const VectGeneric &u) const
     
    void sort ()
     
    bool is_sorted () const
     
    uint64_t first_non_zero (size_t bound=Size) const
     
    uint64_t first_zero (size_t bound=Size) const
     
    uint64_t last_non_zero (size_t bound=Size) const
     
    uint64_t last_zero (size_t bound=Size) const
     
    bool is_permutation (const size_t k=Size) const
     
    uint64_t horiz_sum () const noexcept
     
    VectGeneric partial_sums () const noexcept
     
    void partial_sums_inplace ()
     
    Expo horiz_max () const
     
    void partial_max_inplace ()
     
    Expo horiz_min () const
     
    void partial_min_inplace ()
     
    VectGeneric eval () const
     
    + + + + + +

    +Static Public Member Functions

    static constexpr size_t size ()
     
    static VectGeneric random ()
     
    + + + +

    +Public Attributes

    array v
     
    +

    Detailed Description

    +

    template<size_t Size, typename Expo = uint8_t>
    +struct HPCombi::VectGeneric< Size, Expo >

    + +

    A generic class for combinatorial integer vectors.

    +

    Member Typedef Documentation

    + +

    ◆ array

    + +
    +
    +
    +template<size_t Size, typename Expo = uint8_t>
    + + + + +
    using HPCombi::VectGeneric< Size, Expo >::array = std::array<Expo, Size>
    +
    + +
    +
    + +

    ◆ const_iterator

    + +
    +
    +
    +template<size_t Size, typename Expo = uint8_t>
    + + + + +
    using HPCombi::VectGeneric< Size, Expo >::const_iterator = typename array::const_iterator
    +
    + +
    +
    + +

    ◆ iterator

    + +
    +
    +
    +template<size_t Size, typename Expo = uint8_t>
    + + + + +
    using HPCombi::VectGeneric< Size, Expo >::iterator = typename array::iterator
    +
    + +
    +
    + +

    ◆ value_type

    + +
    +
    +
    +template<size_t Size, typename Expo = uint8_t>
    + + + + +
    using HPCombi::VectGeneric< Size, Expo >::value_type = Expo
    +
    + +
    +
    +

    Constructor & Destructor Documentation

    + +

    ◆ VectGeneric() [1/3]

    + +
    +
    +
    +template<size_t Size, typename Expo = uint8_t>
    + + + + + +
    + + + + + + + +
    HPCombi::VectGeneric< Size, Expo >::VectGeneric ()
    +
    +default
    +
    + +
    +
    + +

    ◆ VectGeneric() [2/3]

    + +
    +
    +
    +template<size_t Size, typename Expo = uint8_t>
    + + + + + +
    + + + + + + + + +
    HPCombi::VectGeneric< Size, Expo >::VectGeneric (const array_v)
    +
    +inline
    +
    + +
    +
    + +

    ◆ VectGeneric() [3/3]

    + +
    +
    +
    +template<size_t Size, typename Expo = uint8_t>
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    HPCombi::VectGeneric< Size, Expo >::VectGeneric (std::initializer_list< Expo > il,
    Expo def = 0 
    )
    +
    +inline
    +
    + +
    +
    +

    Member Function Documentation

    + +

    ◆ begin() [1/2]

    + +
    +
    +
    +template<size_t Size, typename Expo = uint8_t>
    + + + + + +
    + + + + + + + +
    iterator HPCombi::VectGeneric< Size, Expo >::begin ()
    +
    +inline
    +
    + +
    +
    + +

    ◆ begin() [2/2]

    + +
    +
    +
    +template<size_t Size, typename Expo = uint8_t>
    + + + + + +
    + + + + + + + +
    const_iterator HPCombi::VectGeneric< Size, Expo >::begin () const
    +
    +inline
    +
    + +
    +
    + +

    ◆ end() [1/2]

    + +
    +
    +
    +template<size_t Size, typename Expo = uint8_t>
    + + + + + +
    + + + + + + + +
    iterator HPCombi::VectGeneric< Size, Expo >::end ()
    +
    +inline
    +
    + +
    +
    + +

    ◆ end() [2/2]

    + +
    +
    +
    +template<size_t Size, typename Expo = uint8_t>
    + + + + + +
    + + + + + + + +
    const_iterator HPCombi::VectGeneric< Size, Expo >::end () const
    +
    +inline
    +
    + +
    +
    + +

    ◆ eval()

    + +
    +
    +
    +template<size_t Size, typename Expo = uint8_t>
    + + + + + +
    + + + + + + + +
    VectGeneric HPCombi::VectGeneric< Size, Expo >::eval () const
    +
    +inline
    +
    + +
    +
    + +

    ◆ first_diff()

    + +
    +
    +
    +template<size_t Size, typename Expo = uint8_t>
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    size_t HPCombi::VectGeneric< Size, Expo >::first_diff (const VectGeneric< Size, Expo > & u,
    size_t bound = Size 
    ) const
    +
    +inline
    +
    + +
    +
    + +

    ◆ first_non_zero()

    + +
    +
    +
    +template<size_t Size, typename Expo = uint8_t>
    + + + + + +
    + + + + + + + + +
    uint64_t HPCombi::VectGeneric< Size, Expo >::first_non_zero (size_t bound = Size) const
    +
    +inline
    +
    + +
    +
    + +

    ◆ first_zero()

    + +
    +
    +
    +template<size_t Size, typename Expo = uint8_t>
    + + + + + +
    + + + + + + + + +
    uint64_t HPCombi::VectGeneric< Size, Expo >::first_zero (size_t bound = Size) const
    +
    +inline
    +
    + +
    +
    + +

    ◆ horiz_max()

    + +
    +
    +
    +template<size_t Size, typename Expo = uint8_t>
    + + + + + +
    + + + + + + + +
    Expo HPCombi::VectGeneric< Size, Expo >::horiz_max () const
    +
    +inline
    +
    + +
    +
    + +

    ◆ horiz_min()

    + +
    +
    +
    +template<size_t Size, typename Expo = uint8_t>
    + + + + + +
    + + + + + + + +
    Expo HPCombi::VectGeneric< Size, Expo >::horiz_min () const
    +
    +inline
    +
    + +
    +
    + +

    ◆ horiz_sum()

    + +
    +
    +
    +template<size_t Size, typename Expo = uint8_t>
    + + + + + +
    + + + + + + + +
    uint64_t HPCombi::VectGeneric< Size, Expo >::horiz_sum () const
    +
    +inlinenoexcept
    +
    + +
    +
    + +

    ◆ is_permutation()

    + +
    +
    +
    +template<size_t Size, typename Expo = uint8_t>
    + + + + + +
    + + + + + + + + +
    bool HPCombi::VectGeneric< Size, Expo >::is_permutation (const size_t k = Size) const
    +
    +inline
    +
    + +
    +
    + +

    ◆ is_sorted()

    + +
    +
    +
    +template<size_t Size, typename Expo = uint8_t>
    + + + + + +
    + + + + + + + +
    bool HPCombi::VectGeneric< Size, Expo >::is_sorted () const
    +
    +inline
    +
    + +
    +
    + +

    ◆ last_diff()

    + +
    +
    +
    +template<size_t Size, typename Expo = uint8_t>
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    size_t HPCombi::VectGeneric< Size, Expo >::last_diff (const VectGeneric< Size, Expo > & u,
    size_t bound = Size 
    ) const
    +
    +inline
    +
    + +
    +
    + +

    ◆ last_non_zero()

    + +
    +
    +
    +template<size_t Size, typename Expo = uint8_t>
    + + + + + +
    + + + + + + + + +
    uint64_t HPCombi::VectGeneric< Size, Expo >::last_non_zero (size_t bound = Size) const
    +
    +inline
    +
    + +
    +
    + +

    ◆ last_zero()

    + +
    +
    +
    +template<size_t Size, typename Expo = uint8_t>
    + + + + + +
    + + + + + + + + +
    uint64_t HPCombi::VectGeneric< Size, Expo >::last_zero (size_t bound = Size) const
    +
    +inline
    +
    + +
    +
    + +

    ◆ less_partial()

    + +
    +
    +
    +template<size_t Size, typename Expo = uint8_t>
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    int8_t HPCombi::VectGeneric< Size, Expo >::less_partial (const VectGeneric< Size, Expo > & u,
    int k 
    ) const
    +
    +inline
    +
    + +
    +
    + +

    ◆ operator!=()

    + +
    +
    +
    +template<size_t Size, typename Expo = uint8_t>
    + + + + + +
    + + + + + + + + +
    bool HPCombi::VectGeneric< Size, Expo >::operator!= (const VectGeneric< Size, Expo > & u) const
    +
    +inline
    +
    + +
    +
    + +

    ◆ operator<()

    + +
    +
    +
    +template<size_t Size, typename Expo = uint8_t>
    + + + + + +
    + + + + + + + + +
    bool HPCombi::VectGeneric< Size, Expo >::operator< (const VectGeneric< Size, Expo > & u) const
    +
    +inline
    +
    + +
    +
    + +

    ◆ operator==()

    + +
    +
    +
    +template<size_t Size, typename Expo = uint8_t>
    + + + + + +
    + + + + + + + + +
    bool HPCombi::VectGeneric< Size, Expo >::operator== (const VectGeneric< Size, Expo > & u) const
    +
    +inline
    +
    + +
    +
    + +

    ◆ operator[]() [1/2]

    + +
    +
    +
    +template<size_t Size, typename Expo = uint8_t>
    + + + + + +
    + + + + + + + + +
    Expo& HPCombi::VectGeneric< Size, Expo >::operator[] (uint64_t i)
    +
    +inline
    +
    + +
    +
    + +

    ◆ operator[]() [2/2]

    + +
    +
    +
    +template<size_t Size, typename Expo = uint8_t>
    + + + + + +
    + + + + + + + + +
    Expo HPCombi::VectGeneric< Size, Expo >::operator[] (uint64_t i) const
    +
    +inline
    +
    + +
    +
    + +

    ◆ partial_max_inplace()

    + +
    +
    +
    +template<size_t Size, typename Expo = uint8_t>
    + + + + + +
    + + + + + + + +
    void HPCombi::VectGeneric< Size, Expo >::partial_max_inplace ()
    +
    +inline
    +
    + +
    +
    + +

    ◆ partial_min_inplace()

    + +
    +
    +
    +template<size_t Size, typename Expo = uint8_t>
    + + + + + +
    + + + + + + + +
    void HPCombi::VectGeneric< Size, Expo >::partial_min_inplace ()
    +
    +inline
    +
    + +
    +
    + +

    ◆ partial_sums()

    + +
    +
    +
    +template<size_t Size, typename Expo = uint8_t>
    + + + + + +
    + + + + + + + +
    VectGeneric HPCombi::VectGeneric< Size, Expo >::partial_sums () const
    +
    +inlinenoexcept
    +
    + +
    +
    + +

    ◆ partial_sums_inplace()

    + +
    +
    +
    +template<size_t Size, typename Expo = uint8_t>
    + + + + + +
    + + + + + + + +
    void HPCombi::VectGeneric< Size, Expo >::partial_sums_inplace ()
    +
    +inline
    +
    + +
    +
    + +

    ◆ permuted()

    + +
    +
    +
    +template<size_t Size, typename Expo = uint8_t>
    + + + + + +
    + + + + + + + + +
    VectGeneric HPCombi::VectGeneric< Size, Expo >::permuted (const VectGeneric< Size, Expo > & u) const
    +
    +inline
    +
    + +
    +
    + +

    ◆ random()

    + +
    +
    +
    +template<size_t Size, typename Expo = uint8_t>
    + + + + + +
    + + + + + + + +
    static VectGeneric HPCombi::VectGeneric< Size, Expo >::random ()
    +
    +inlinestatic
    +
    + +
    +
    + +

    ◆ size()

    + +
    +
    +
    +template<size_t Size, typename Expo = uint8_t>
    + + + + + +
    + + + + + + + +
    static constexpr size_t HPCombi::VectGeneric< Size, Expo >::size ()
    +
    +inlinestaticconstexpr
    +
    + +
    +
    + +

    ◆ sort()

    + +
    +
    +
    +template<size_t Size, typename Expo = uint8_t>
    + + + + + +
    + + + + + + + +
    void HPCombi::VectGeneric< Size, Expo >::sort ()
    +
    +inline
    +
    + +
    +
    +

    Member Data Documentation

    + +

    ◆ v

    + +
    +
    +
    +template<size_t Size, typename Expo = uint8_t>
    + + + + +
    array HPCombi::VectGeneric< Size, Expo >::v
    +
    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/docs/structHPCombi_1_1power__helper_1_1Monoid-members.html b/docs/structHPCombi_1_1power__helper_1_1Monoid-members.html new file mode 100644 index 00000000..4134162d --- /dev/null +++ b/docs/structHPCombi_1_1power__helper_1_1Monoid-members.html @@ -0,0 +1,91 @@ + + + + + + + +HPCombi: Member List + + + + + + + + + + + +
    +
    + + + + + + +
    +
    HPCombi +
    +
    High Performance Combinatorics in C++ using vector instructions v1.0.0
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    HPCombi::power_helper::Monoid< T > Member List
    +
    +
    + +

    This is the complete list of members for HPCombi::power_helper::Monoid< T >, including all inherited members.

    + + + +
    one()HPCombi::power_helper::Monoid< T >inlinestatic
    prod(T a, T b)HPCombi::power_helper::Monoid< T >inlinestatic
    + + + + diff --git a/docs/structHPCombi_1_1power__helper_1_1Monoid.html b/docs/structHPCombi_1_1power__helper_1_1Monoid.html new file mode 100644 index 00000000..6386b57e --- /dev/null +++ b/docs/structHPCombi_1_1power__helper_1_1Monoid.html @@ -0,0 +1,199 @@ + + + + + + + +HPCombi: HPCombi::power_helper::Monoid< T > Struct Template Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    HPCombi +
    +
    High Performance Combinatorics in C++ using vector instructions v1.0.0
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    HPCombi::power_helper::Monoid< T > Struct Template Reference
    +
    +
    + +

    Algebraic monoid structure used by default for type T by the pow function and prod function. + More...

    + +

    #include <power.hpp>

    + + + + + + + + +

    +Static Public Member Functions

    static const T one ()
     The one of type T. More...
     
    static const T prod (T a, T b)
     the product of two elements of type T More...
     
    +

    Detailed Description

    +

    template<typename T>
    +struct HPCombi::power_helper::Monoid< T >

    + +

    Algebraic monoid structure used by default for type T by the pow function and prod function.

    +

    A Monoid structure is required to define two static members

      +
    • T one() : the unit of the monoid
    • +
    • T prod(T, T) : the product of two elements in the monoid
    • +
    +

    By default for any type T, one is constructed from the literal 1 and prod calls the operator *. One can change these default by specializing the template for some specific type T.

    +

    Member Function Documentation

    + +

    ◆ one()

    + +
    +
    +
    +template<typename T >
    + + + + + +
    + + + + + + + +
    static const T HPCombi::power_helper::Monoid< T >::one ()
    +
    +inlinestatic
    +
    + +

    The one of type T.

    +
    Examples
    stringmonoid.cpp.
    +
    + +
    +
    + +

    ◆ prod()

    + +
    +
    +
    +template<typename T >
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    static const T HPCombi::power_helper::Monoid< T >::prod (a,
    b 
    )
    +
    +inlinestatic
    +
    + +

    the product of two elements of type T

    +
    Parameters
    + + + +
    athe first element to be multiplied
    bthe second element to be multiplied
    +
    +
    +
    Returns
    the product a * b
    +
    Examples
    stringmonoid.cpp.
    +
    + +
    +
    +
    The documentation for this struct was generated from the following file:
      +
    • /home/florent/src/HPCombi/include/hpcombi/power.hpp
    • +
    +
    + + + + diff --git a/docs/structHPCombi_1_1power__helper_1_1Monoid_3_01Perm16_01_4-members.html b/docs/structHPCombi_1_1power__helper_1_1Monoid_3_01Perm16_01_4-members.html new file mode 100644 index 00000000..994a6544 --- /dev/null +++ b/docs/structHPCombi_1_1power__helper_1_1Monoid_3_01Perm16_01_4-members.html @@ -0,0 +1,91 @@ + + + + + + + +HPCombi: Member List + + + + + + + + + + + +
    +
    + + + + + + +
    +
    HPCombi +
    +
    High Performance Combinatorics in C++ using vector instructions v1.0.0
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    HPCombi::power_helper::Monoid< Perm16 > Member List
    +
    +
    + +

    This is the complete list of members for HPCombi::power_helper::Monoid< Perm16 >, including all inherited members.

    + + + +
    one()HPCombi::power_helper::Monoid< Perm16 >inlinestatic
    prod(Perm16 a, Perm16 b)HPCombi::power_helper::Monoid< Perm16 >inlinestatic
    + + + + diff --git a/docs/structHPCombi_1_1power__helper_1_1Monoid_3_01Perm16_01_4.html b/docs/structHPCombi_1_1power__helper_1_1Monoid_3_01Perm16_01_4.html new file mode 100644 index 00000000..8c9c1f95 --- /dev/null +++ b/docs/structHPCombi_1_1power__helper_1_1Monoid_3_01Perm16_01_4.html @@ -0,0 +1,164 @@ + + + + + + + +HPCombi: HPCombi::power_helper::Monoid< Perm16 > Struct Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    HPCombi +
    +
    High Performance Combinatorics in C++ using vector instructions v1.0.0
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    HPCombi::power_helper::Monoid< Perm16 > Struct Reference
    +
    +
    + +

    #include <perm16_impl.hpp>

    + + + + + + +

    +Static Public Member Functions

    static const Perm16 one ()
     
    static Perm16 prod (Perm16 a, Perm16 b)
     
    +

    Member Function Documentation

    + +

    ◆ one()

    + +
    +
    + + + + + +
    + + + + + + + +
    static const Perm16 HPCombi::power_helper::Monoid< Perm16 >::one ()
    +
    +inlinestatic
    +
    + +
    +
    + +

    ◆ prod()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    static Perm16 HPCombi::power_helper::Monoid< Perm16 >::prod (Perm16 a,
    Perm16 b 
    )
    +
    +inlinestatic
    +
    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/docs/structHPCombi_1_1power__helper_1_1Monoid_3_01std_1_1string_01_4-members.html b/docs/structHPCombi_1_1power__helper_1_1Monoid_3_01std_1_1string_01_4-members.html new file mode 100644 index 00000000..f78afbed --- /dev/null +++ b/docs/structHPCombi_1_1power__helper_1_1Monoid_3_01std_1_1string_01_4-members.html @@ -0,0 +1,91 @@ + + + + + + + +HPCombi: Member List + + + + + + + + + + + +
    +
    + + + + + + +
    +
    HPCombi +
    +
    High Performance Combinatorics in C++ using vector instructions v1.0.0
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    HPCombi::power_helper::Monoid< std::string > Member List
    +
    +
    + +

    This is the complete list of members for HPCombi::power_helper::Monoid< std::string >, including all inherited members.

    + + + +
    one()HPCombi::power_helper::Monoid< std::string >inlinestatic
    prod(std::string a, std::string b)HPCombi::power_helper::Monoid< std::string >inlinestatic
    + + + + diff --git a/docs/structHPCombi_1_1power__helper_1_1Monoid_3_01std_1_1string_01_4.html b/docs/structHPCombi_1_1power__helper_1_1Monoid_3_01std_1_1string_01_4.html new file mode 100644 index 00000000..bb236fbf --- /dev/null +++ b/docs/structHPCombi_1_1power__helper_1_1Monoid_3_01std_1_1string_01_4.html @@ -0,0 +1,162 @@ + + + + + + + +HPCombi: HPCombi::power_helper::Monoid< std::string > Struct Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    HPCombi +
    +
    High Performance Combinatorics in C++ using vector instructions v1.0.0
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    HPCombi::power_helper::Monoid< std::string > Struct Reference
    +
    +
    + + + + + + +

    +Static Public Member Functions

    static std::string one ()
     
    static std::string prod (std::string a, std::string b)
     
    +

    Member Function Documentation

    + +

    ◆ one()

    + +
    +
    + + + + + +
    + + + + + + + +
    static std::string HPCombi::power_helper::Monoid< std::string >::one ()
    +
    +inlinestatic
    +
    + +
    +
    + +

    ◆ prod()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    static std::string HPCombi::power_helper::Monoid< std::string >::prod (std::string a,
    std::string b 
    )
    +
    +inlinestatic
    +
    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/docs/structstd_1_1equal__to_3_01HPCombi_1_1epu8_01_4-members.html b/docs/structstd_1_1equal__to_3_01HPCombi_1_1epu8_01_4-members.html new file mode 100644 index 00000000..67ea8aa3 --- /dev/null +++ b/docs/structstd_1_1equal__to_3_01HPCombi_1_1epu8_01_4-members.html @@ -0,0 +1,90 @@ + + + + + + + +HPCombi: Member List + + + + + + + + + + + +
    +
    + + + + + + +
    +
    HPCombi +
    +
    High Performance Combinatorics in C++ using vector instructions v1.0.0
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    std::equal_to< HPCombi::epu8 > Member List
    +
    +
    + +

    This is the complete list of members for std::equal_to< HPCombi::epu8 >, including all inherited members.

    + + +
    operator()(const HPCombi::epu8 &lhs, const HPCombi::epu8 &rhs) const noexceptstd::equal_to< HPCombi::epu8 >inline
    + + + + diff --git a/docs/structstd_1_1equal__to_3_01HPCombi_1_1epu8_01_4.html b/docs/structstd_1_1equal__to_3_01HPCombi_1_1epu8_01_4.html new file mode 100644 index 00000000..89f6eefc --- /dev/null +++ b/docs/structstd_1_1equal__to_3_01HPCombi_1_1epu8_01_4.html @@ -0,0 +1,137 @@ + + + + + + + +HPCombi: std::equal_to< HPCombi::epu8 > Struct Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    HPCombi +
    +
    High Performance Combinatorics in C++ using vector instructions v1.0.0
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    std::equal_to< HPCombi::epu8 > Struct Reference
    +
    +
    + +

    #include <epu8_impl.hpp>

    + + + + +

    +Public Member Functions

    bool operator() (const HPCombi::epu8 &lhs, const HPCombi::epu8 &rhs) const noexcept
     
    +

    Member Function Documentation

    + +

    ◆ operator()()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    bool std::equal_to< HPCombi::epu8 >::operator() (const HPCombi::epu8lhs,
    const HPCombi::epu8rhs 
    ) const
    +
    +inlinenoexcept
    +
    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/docs/structstd_1_1hash_3_01HPCombi_1_1BMat8_01_4-members.html b/docs/structstd_1_1hash_3_01HPCombi_1_1BMat8_01_4-members.html new file mode 100644 index 00000000..1797ff93 --- /dev/null +++ b/docs/structstd_1_1hash_3_01HPCombi_1_1BMat8_01_4-members.html @@ -0,0 +1,90 @@ + + + + + + + +HPCombi: Member List + + + + + + + + + + + +
    +
    + + + + + + +
    +
    HPCombi +
    +
    High Performance Combinatorics in C++ using vector instructions v1.0.0
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    std::hash< HPCombi::BMat8 > Member List
    +
    +
    + +

    This is the complete list of members for std::hash< HPCombi::BMat8 >, including all inherited members.

    + + +
    operator()(HPCombi::BMat8 const &bm) conststd::hash< HPCombi::BMat8 >inline
    + + + + diff --git a/docs/structstd_1_1hash_3_01HPCombi_1_1BMat8_01_4.html b/docs/structstd_1_1hash_3_01HPCombi_1_1BMat8_01_4.html new file mode 100644 index 00000000..5f338ec8 --- /dev/null +++ b/docs/structstd_1_1hash_3_01HPCombi_1_1BMat8_01_4.html @@ -0,0 +1,127 @@ + + + + + + + +HPCombi: std::hash< HPCombi::BMat8 > Struct Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    HPCombi +
    +
    High Performance Combinatorics in C++ using vector instructions v1.0.0
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    std::hash< HPCombi::BMat8 > Struct Reference
    +
    +
    + +

    #include <bmat8.hpp>

    + + + + +

    +Public Member Functions

    size_t operator() (HPCombi::BMat8 const &bm) const
     
    +

    Member Function Documentation

    + +

    ◆ operator()()

    + +
    +
    + + + + + +
    + + + + + + + + +
    size_t std::hash< HPCombi::BMat8 >::operator() (HPCombi::BMat8 const & bm) const
    +
    +inline
    +
    + +
    +
    +
    The documentation for this struct was generated from the following file:
      +
    • /home/florent/src/HPCombi/include/hpcombi/bmat8.hpp
    • +
    +
    + + + + diff --git a/docs/structstd_1_1hash_3_01HPCombi_1_1PPerm16_01_4-members.html b/docs/structstd_1_1hash_3_01HPCombi_1_1PPerm16_01_4-members.html new file mode 100644 index 00000000..1d6bfbe8 --- /dev/null +++ b/docs/structstd_1_1hash_3_01HPCombi_1_1PPerm16_01_4-members.html @@ -0,0 +1,90 @@ + + + + + + + +HPCombi: Member List + + + + + + + + + + + +
    +
    + + + + + + +
    +
    HPCombi +
    +
    High Performance Combinatorics in C++ using vector instructions v1.0.0
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    std::hash< HPCombi::PPerm16 > Member List
    +
    +
    + +

    This is the complete list of members for std::hash< HPCombi::PPerm16 >, including all inherited members.

    + + +
    operator()(const HPCombi::PPerm16 &ar) conststd::hash< HPCombi::PPerm16 >inline
    + + + + diff --git a/docs/structstd_1_1hash_3_01HPCombi_1_1PPerm16_01_4.html b/docs/structstd_1_1hash_3_01HPCombi_1_1PPerm16_01_4.html new file mode 100644 index 00000000..e30f5a55 --- /dev/null +++ b/docs/structstd_1_1hash_3_01HPCombi_1_1PPerm16_01_4.html @@ -0,0 +1,130 @@ + + + + + + + +HPCombi: std::hash< HPCombi::PPerm16 > Struct Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    HPCombi +
    +
    High Performance Combinatorics in C++ using vector instructions v1.0.0
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    std::hash< HPCombi::PPerm16 > Struct Reference
    +
    +
    + +

    #include <perm16.hpp>

    + + + + + +

    +Public Member Functions

    size_t operator() (const HPCombi::PPerm16 &ar) const
     A hash operator for HPCombi::PPerm16. More...
     
    +

    Member Function Documentation

    + +

    ◆ operator()()

    + +
    +
    + + + + + +
    + + + + + + + + +
    size_t std::hash< HPCombi::PPerm16 >::operator() (const HPCombi::PPerm16ar) const
    +
    +inline
    +
    + +

    A hash operator for HPCombi::PPerm16.

    + +
    +
    +
    The documentation for this struct was generated from the following file:
      +
    • /home/florent/src/HPCombi/include/hpcombi/perm16.hpp
    • +
    +
    + + + + diff --git a/docs/structstd_1_1hash_3_01HPCombi_1_1PTransf16_01_4-members.html b/docs/structstd_1_1hash_3_01HPCombi_1_1PTransf16_01_4-members.html new file mode 100644 index 00000000..bc22144d --- /dev/null +++ b/docs/structstd_1_1hash_3_01HPCombi_1_1PTransf16_01_4-members.html @@ -0,0 +1,90 @@ + + + + + + + +HPCombi: Member List + + + + + + + + + + + +
    +
    + + + + + + +
    +
    HPCombi +
    +
    High Performance Combinatorics in C++ using vector instructions v1.0.0
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    std::hash< HPCombi::PTransf16 > Member List
    +
    +
    + +

    This is the complete list of members for std::hash< HPCombi::PTransf16 >, including all inherited members.

    + + +
    operator()(const HPCombi::PTransf16 &ar) conststd::hash< HPCombi::PTransf16 >inline
    + + + + diff --git a/docs/structstd_1_1hash_3_01HPCombi_1_1PTransf16_01_4.html b/docs/structstd_1_1hash_3_01HPCombi_1_1PTransf16_01_4.html new file mode 100644 index 00000000..57b1151f --- /dev/null +++ b/docs/structstd_1_1hash_3_01HPCombi_1_1PTransf16_01_4.html @@ -0,0 +1,130 @@ + + + + + + + +HPCombi: std::hash< HPCombi::PTransf16 > Struct Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    HPCombi +
    +
    High Performance Combinatorics in C++ using vector instructions v1.0.0
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    std::hash< HPCombi::PTransf16 > Struct Reference
    +
    +
    + +

    #include <perm16.hpp>

    + + + + + +

    +Public Member Functions

    size_t operator() (const HPCombi::PTransf16 &ar) const
     A hash operator for HPCombi::PTransf16. More...
     
    +

    Member Function Documentation

    + +

    ◆ operator()()

    + +
    +
    + + + + + +
    + + + + + + + + +
    size_t std::hash< HPCombi::PTransf16 >::operator() (const HPCombi::PTransf16ar) const
    +
    +inline
    +
    + +

    A hash operator for HPCombi::PTransf16.

    + +
    +
    +
    The documentation for this struct was generated from the following file:
      +
    • /home/florent/src/HPCombi/include/hpcombi/perm16.hpp
    • +
    +
    + + + + diff --git a/docs/structstd_1_1hash_3_01HPCombi_1_1Perm16_01_4-members.html b/docs/structstd_1_1hash_3_01HPCombi_1_1Perm16_01_4-members.html new file mode 100644 index 00000000..a8771907 --- /dev/null +++ b/docs/structstd_1_1hash_3_01HPCombi_1_1Perm16_01_4-members.html @@ -0,0 +1,90 @@ + + + + + + + +HPCombi: Member List + + + + + + + + + + + +
    +
    + + + + + + +
    +
    HPCombi +
    +
    High Performance Combinatorics in C++ using vector instructions v1.0.0
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    std::hash< HPCombi::Perm16 > Member List
    +
    +
    + +

    This is the complete list of members for std::hash< HPCombi::Perm16 >, including all inherited members.

    + + +
    operator()(const HPCombi::Perm16 &ar) conststd::hash< HPCombi::Perm16 >inline
    + + + + diff --git a/docs/structstd_1_1hash_3_01HPCombi_1_1Perm16_01_4.html b/docs/structstd_1_1hash_3_01HPCombi_1_1Perm16_01_4.html new file mode 100644 index 00000000..787b5380 --- /dev/null +++ b/docs/structstd_1_1hash_3_01HPCombi_1_1Perm16_01_4.html @@ -0,0 +1,130 @@ + + + + + + + +HPCombi: std::hash< HPCombi::Perm16 > Struct Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    HPCombi +
    +
    High Performance Combinatorics in C++ using vector instructions v1.0.0
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    std::hash< HPCombi::Perm16 > Struct Reference
    +
    +
    + +

    #include <perm16.hpp>

    + + + + + +

    +Public Member Functions

    size_t operator() (const HPCombi::Perm16 &ar) const
     A hash operator for HPCombi::Perm16. More...
     
    +

    Member Function Documentation

    + +

    ◆ operator()()

    + +
    +
    + + + + + +
    + + + + + + + + +
    size_t std::hash< HPCombi::Perm16 >::operator() (const HPCombi::Perm16ar) const
    +
    +inline
    +
    + +

    A hash operator for HPCombi::Perm16.

    + +
    +
    +
    The documentation for this struct was generated from the following file:
      +
    • /home/florent/src/HPCombi/include/hpcombi/perm16.hpp
    • +
    +
    + + + + diff --git a/docs/structstd_1_1hash_3_01HPCombi_1_1PermGeneric_3_01Size_00_01Expo_01_4_01_4-members.html b/docs/structstd_1_1hash_3_01HPCombi_1_1PermGeneric_3_01Size_00_01Expo_01_4_01_4-members.html new file mode 100644 index 00000000..f88deae6 --- /dev/null +++ b/docs/structstd_1_1hash_3_01HPCombi_1_1PermGeneric_3_01Size_00_01Expo_01_4_01_4-members.html @@ -0,0 +1,90 @@ + + + + + + + +HPCombi: Member List + + + + + + + + + + + +
    +
    + + + + + + +
    +
    HPCombi +
    +
    High Performance Combinatorics in C++ using vector instructions v1.0.0
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    std::hash< HPCombi::PermGeneric< Size, Expo > > Member List
    +
    +
    + +

    This is the complete list of members for std::hash< HPCombi::PermGeneric< Size, Expo > >, including all inherited members.

    + + +
    operator()(const HPCombi::PermGeneric< Size, Expo > &ar) conststd::hash< HPCombi::PermGeneric< Size, Expo > >inline
    + + + + diff --git a/docs/structstd_1_1hash_3_01HPCombi_1_1PermGeneric_3_01Size_00_01Expo_01_4_01_4.html b/docs/structstd_1_1hash_3_01HPCombi_1_1PermGeneric_3_01Size_00_01Expo_01_4_01_4.html new file mode 100644 index 00000000..d1d6a70c --- /dev/null +++ b/docs/structstd_1_1hash_3_01HPCombi_1_1PermGeneric_3_01Size_00_01Expo_01_4_01_4.html @@ -0,0 +1,129 @@ + + + + + + + +HPCombi: std::hash< HPCombi::PermGeneric< Size, Expo > > Struct Template Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    HPCombi +
    +
    High Performance Combinatorics in C++ using vector instructions v1.0.0
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    std::hash< HPCombi::PermGeneric< Size, Expo > > Struct Template Reference
    +
    +
    + +

    #include <perm_generic_impl.hpp>

    + + + + +

    +Public Member Functions

    size_t operator() (const HPCombi::PermGeneric< Size, Expo > &ar) const
     
    +

    Member Function Documentation

    + +

    ◆ operator()()

    + +
    +
    +
    +template<size_t Size, typename Expo >
    + + + + + +
    + + + + + + + + +
    size_t std::hash< HPCombi::PermGeneric< Size, Expo > >::operator() (const HPCombi::PermGeneric< Size, Expo > & ar) const
    +
    +inline
    +
    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/docs/structstd_1_1hash_3_01HPCombi_1_1Transf16_01_4-members.html b/docs/structstd_1_1hash_3_01HPCombi_1_1Transf16_01_4-members.html new file mode 100644 index 00000000..45f75ad2 --- /dev/null +++ b/docs/structstd_1_1hash_3_01HPCombi_1_1Transf16_01_4-members.html @@ -0,0 +1,90 @@ + + + + + + + +HPCombi: Member List + + + + + + + + + + + +
    +
    + + + + + + +
    +
    HPCombi +
    +
    High Performance Combinatorics in C++ using vector instructions v1.0.0
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    std::hash< HPCombi::Transf16 > Member List
    +
    +
    + +

    This is the complete list of members for std::hash< HPCombi::Transf16 >, including all inherited members.

    + + +
    operator()(const HPCombi::Transf16 &ar) conststd::hash< HPCombi::Transf16 >inline
    + + + + diff --git a/docs/structstd_1_1hash_3_01HPCombi_1_1Transf16_01_4.html b/docs/structstd_1_1hash_3_01HPCombi_1_1Transf16_01_4.html new file mode 100644 index 00000000..07016b75 --- /dev/null +++ b/docs/structstd_1_1hash_3_01HPCombi_1_1Transf16_01_4.html @@ -0,0 +1,130 @@ + + + + + + + +HPCombi: std::hash< HPCombi::Transf16 > Struct Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    HPCombi +
    +
    High Performance Combinatorics in C++ using vector instructions v1.0.0
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    std::hash< HPCombi::Transf16 > Struct Reference
    +
    +
    + +

    #include <perm16.hpp>

    + + + + + +

    +Public Member Functions

    size_t operator() (const HPCombi::Transf16 &ar) const
     A hash operator for HPCombi::Transf16. More...
     
    +

    Member Function Documentation

    + +

    ◆ operator()()

    + +
    +
    + + + + + +
    + + + + + + + + +
    size_t std::hash< HPCombi::Transf16 >::operator() (const HPCombi::Transf16ar) const
    +
    +inline
    +
    + +

    A hash operator for HPCombi::Transf16.

    + +
    +
    +
    The documentation for this struct was generated from the following file:
      +
    • /home/florent/src/HPCombi/include/hpcombi/perm16.hpp
    • +
    +
    + + + + diff --git a/docs/structstd_1_1hash_3_01HPCombi_1_1Vect16_01_4-members.html b/docs/structstd_1_1hash_3_01HPCombi_1_1Vect16_01_4-members.html new file mode 100644 index 00000000..1c62f964 --- /dev/null +++ b/docs/structstd_1_1hash_3_01HPCombi_1_1Vect16_01_4-members.html @@ -0,0 +1,90 @@ + + + + + + + +HPCombi: Member List + + + + + + + + + + + +
    +
    + + + + + + +
    +
    HPCombi +
    +
    High Performance Combinatorics in C++ using vector instructions v1.0.0
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    std::hash< HPCombi::Vect16 > Member List
    +
    +
    + +

    This is the complete list of members for std::hash< HPCombi::Vect16 >, including all inherited members.

    + + +
    operator()(const HPCombi::Vect16 &ar) conststd::hash< HPCombi::Vect16 >inline
    + + + + diff --git a/docs/structstd_1_1hash_3_01HPCombi_1_1Vect16_01_4.html b/docs/structstd_1_1hash_3_01HPCombi_1_1Vect16_01_4.html new file mode 100644 index 00000000..6fe4478c --- /dev/null +++ b/docs/structstd_1_1hash_3_01HPCombi_1_1Vect16_01_4.html @@ -0,0 +1,127 @@ + + + + + + + +HPCombi: std::hash< HPCombi::Vect16 > Struct Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    HPCombi +
    +
    High Performance Combinatorics in C++ using vector instructions v1.0.0
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    std::hash< HPCombi::Vect16 > Struct Reference
    +
    +
    + +

    #include <vect16.hpp>

    + + + + +

    +Public Member Functions

    size_t operator() (const HPCombi::Vect16 &ar) const
     
    +

    Member Function Documentation

    + +

    ◆ operator()()

    + +
    +
    + + + + + +
    + + + + + + + + +
    size_t std::hash< HPCombi::Vect16 >::operator() (const HPCombi::Vect16ar) const
    +
    +inline
    +
    + +
    +
    +
    The documentation for this struct was generated from the following file:
      +
    • /home/florent/src/HPCombi/include/hpcombi/vect16.hpp
    • +
    +
    + + + + diff --git a/docs/structstd_1_1hash_3_01HPCombi_1_1VectGeneric_3_01Size_00_01Expo_01_4_01_4-members.html b/docs/structstd_1_1hash_3_01HPCombi_1_1VectGeneric_3_01Size_00_01Expo_01_4_01_4-members.html new file mode 100644 index 00000000..84f08ada --- /dev/null +++ b/docs/structstd_1_1hash_3_01HPCombi_1_1VectGeneric_3_01Size_00_01Expo_01_4_01_4-members.html @@ -0,0 +1,90 @@ + + + + + + + +HPCombi: Member List + + + + + + + + + + + +
    +
    + + + + + + +
    +
    HPCombi +
    +
    High Performance Combinatorics in C++ using vector instructions v1.0.0
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    std::hash< HPCombi::VectGeneric< Size, Expo > > Member List
    +
    +
    + +

    This is the complete list of members for std::hash< HPCombi::VectGeneric< Size, Expo > >, including all inherited members.

    + + +
    operator()(const HPCombi::VectGeneric< Size, Expo > &ar) conststd::hash< HPCombi::VectGeneric< Size, Expo > >inline
    + + + + diff --git a/docs/structstd_1_1hash_3_01HPCombi_1_1VectGeneric_3_01Size_00_01Expo_01_4_01_4.html b/docs/structstd_1_1hash_3_01HPCombi_1_1VectGeneric_3_01Size_00_01Expo_01_4_01_4.html new file mode 100644 index 00000000..fb79d385 --- /dev/null +++ b/docs/structstd_1_1hash_3_01HPCombi_1_1VectGeneric_3_01Size_00_01Expo_01_4_01_4.html @@ -0,0 +1,129 @@ + + + + + + + +HPCombi: std::hash< HPCombi::VectGeneric< Size, Expo > > Struct Template Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    HPCombi +
    +
    High Performance Combinatorics in C++ using vector instructions v1.0.0
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    std::hash< HPCombi::VectGeneric< Size, Expo > > Struct Template Reference
    +
    +
    + +

    #include <vect_generic.hpp>

    + + + + +

    +Public Member Functions

    size_t operator() (const HPCombi::VectGeneric< Size, Expo > &ar) const
     
    +

    Member Function Documentation

    + +

    ◆ operator()()

    + +
    +
    +
    +template<size_t Size, typename Expo >
    + + + + + +
    + + + + + + + + +
    size_t std::hash< HPCombi::VectGeneric< Size, Expo > >::operator() (const HPCombi::VectGeneric< Size, Expo > & ar) const
    +
    +inline
    +
    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/docs/structstd_1_1hash_3_01HPCombi_1_1epu8_01_4-members.html b/docs/structstd_1_1hash_3_01HPCombi_1_1epu8_01_4-members.html new file mode 100644 index 00000000..664a27c1 --- /dev/null +++ b/docs/structstd_1_1hash_3_01HPCombi_1_1epu8_01_4-members.html @@ -0,0 +1,90 @@ + + + + + + + +HPCombi: Member List + + + + + + + + + + + +
    +
    + + + + + + +
    +
    HPCombi +
    +
    High Performance Combinatorics in C++ using vector instructions v1.0.0
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    std::hash< HPCombi::epu8 > Member List
    +
    +
    + +

    This is the complete list of members for std::hash< HPCombi::epu8 >, including all inherited members.

    + + +
    operator()(HPCombi::epu8 a) const noexceptstd::hash< HPCombi::epu8 >inline
    + + + + diff --git a/docs/structstd_1_1hash_3_01HPCombi_1_1epu8_01_4.html b/docs/structstd_1_1hash_3_01HPCombi_1_1epu8_01_4.html new file mode 100644 index 00000000..90dc5e80 --- /dev/null +++ b/docs/structstd_1_1hash_3_01HPCombi_1_1epu8_01_4.html @@ -0,0 +1,127 @@ + + + + + + + +HPCombi: std::hash< HPCombi::epu8 > Struct Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    HPCombi +
    +
    High Performance Combinatorics in C++ using vector instructions v1.0.0
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    std::hash< HPCombi::epu8 > Struct Reference
    +
    +
    + +

    #include <epu8_impl.hpp>

    + + + + +

    +Public Member Functions

    size_t operator() (HPCombi::epu8 a) const noexcept
     
    +

    Member Function Documentation

    + +

    ◆ operator()()

    + +
    +
    + + + + + +
    + + + + + + + + +
    size_t std::hash< HPCombi::epu8 >::operator() (HPCombi::epu8 a) const
    +
    +inlinenoexcept
    +
    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/docs/structstd_1_1less_3_01HPCombi_1_1epu8_01_4-members.html b/docs/structstd_1_1less_3_01HPCombi_1_1epu8_01_4-members.html new file mode 100644 index 00000000..873e0eae --- /dev/null +++ b/docs/structstd_1_1less_3_01HPCombi_1_1epu8_01_4-members.html @@ -0,0 +1,90 @@ + + + + + + + +HPCombi: Member List + + + + + + + + + + + +
    +
    + + + + + + +
    +
    HPCombi +
    +
    High Performance Combinatorics in C++ using vector instructions v1.0.0
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    std::less< HPCombi::epu8 > Member List
    +
    +
    + +

    This is the complete list of members for std::less< HPCombi::epu8 >, including all inherited members.

    + + +
    operator()(const HPCombi::epu8 &v1, const HPCombi::epu8 &v2) const noexceptstd::less< HPCombi::epu8 >inline
    + + + + diff --git a/docs/structstd_1_1less_3_01HPCombi_1_1epu8_01_4.html b/docs/structstd_1_1less_3_01HPCombi_1_1epu8_01_4.html new file mode 100644 index 00000000..32da1c31 --- /dev/null +++ b/docs/structstd_1_1less_3_01HPCombi_1_1epu8_01_4.html @@ -0,0 +1,137 @@ + + + + + + + +HPCombi: std::less< HPCombi::epu8 > Struct Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    HPCombi +
    +
    High Performance Combinatorics in C++ using vector instructions v1.0.0
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    std::less< HPCombi::epu8 > Struct Reference
    +
    +
    + +

    #include <epu8_impl.hpp>

    + + + + +

    +Public Member Functions

    size_t operator() (const HPCombi::epu8 &v1, const HPCombi::epu8 &v2) const noexcept
     
    +

    Member Function Documentation

    + +

    ◆ operator()()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    size_t std::less< HPCombi::epu8 >::operator() (const HPCombi::epu8v1,
    const HPCombi::epu8v2 
    ) const
    +
    +inlinenoexcept
    +
    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/docs/structstd_1_1not__equal__to_3_01HPCombi_1_1epu8_01_4-members.html b/docs/structstd_1_1not__equal__to_3_01HPCombi_1_1epu8_01_4-members.html new file mode 100644 index 00000000..30807f27 --- /dev/null +++ b/docs/structstd_1_1not__equal__to_3_01HPCombi_1_1epu8_01_4-members.html @@ -0,0 +1,90 @@ + + + + + + + +HPCombi: Member List + + + + + + + + + + + +
    +
    + + + + + + +
    +
    HPCombi +
    +
    High Performance Combinatorics in C++ using vector instructions v1.0.0
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    std::not_equal_to< HPCombi::epu8 > Member List
    +
    +
    + +

    This is the complete list of members for std::not_equal_to< HPCombi::epu8 >, including all inherited members.

    + + +
    operator()(const HPCombi::epu8 &lhs, const HPCombi::epu8 &rhs) const noexceptstd::not_equal_to< HPCombi::epu8 >inline
    + + + + diff --git a/docs/structstd_1_1not__equal__to_3_01HPCombi_1_1epu8_01_4.html b/docs/structstd_1_1not__equal__to_3_01HPCombi_1_1epu8_01_4.html new file mode 100644 index 00000000..13e66bdd --- /dev/null +++ b/docs/structstd_1_1not__equal__to_3_01HPCombi_1_1epu8_01_4.html @@ -0,0 +1,137 @@ + + + + + + + +HPCombi: std::not_equal_to< HPCombi::epu8 > Struct Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    HPCombi +
    +
    High Performance Combinatorics in C++ using vector instructions v1.0.0
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    std::not_equal_to< HPCombi::epu8 > Struct Reference
    +
    +
    + +

    #include <epu8_impl.hpp>

    + + + + +

    +Public Member Functions

    bool operator() (const HPCombi::epu8 &lhs, const HPCombi::epu8 &rhs) const noexcept
     
    +

    Member Function Documentation

    + +

    ◆ operator()()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    bool std::not_equal_to< HPCombi::epu8 >::operator() (const HPCombi::epu8lhs,
    const HPCombi::epu8rhs 
    ) const
    +
    +inlinenoexcept
    +
    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/docs/sync_off.png b/docs/sync_off.png new file mode 100644 index 00000000..3b443fc6 Binary files /dev/null and b/docs/sync_off.png differ diff --git a/docs/sync_on.png b/docs/sync_on.png new file mode 100644 index 00000000..e08320fb Binary files /dev/null and b/docs/sync_on.png differ diff --git a/docs/tab_a.png b/docs/tab_a.png new file mode 100644 index 00000000..3b725c41 Binary files /dev/null and b/docs/tab_a.png differ diff --git a/docs/tab_b.png b/docs/tab_b.png new file mode 100644 index 00000000..e2b4a863 Binary files /dev/null and b/docs/tab_b.png differ diff --git a/docs/tab_h.png b/docs/tab_h.png new file mode 100644 index 00000000..fd5cb705 Binary files /dev/null and b/docs/tab_h.png differ diff --git a/docs/tab_s.png b/docs/tab_s.png new file mode 100644 index 00000000..ab478c95 Binary files /dev/null and b/docs/tab_s.png differ diff --git a/docs/tabs.css b/docs/tabs.css new file mode 100644 index 00000000..7d45d36c --- /dev/null +++ b/docs/tabs.css @@ -0,0 +1 @@ +.sm{position:relative;z-index:9999}.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:rgba(0,0,0,0)}.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right}.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0px/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.sm-dox{background-image:url("tab_b.png")}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0px 12px;padding-right:43px;font-family:"Lucida Grande","Geneva","Helvetica",Arial,sans-serif;font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:0px 1px 1px rgba(255,255,255,0.9);color:#283A5D;outline:none}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox a.current{color:#D23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace !important;text-align:center;text-shadow:none;background:rgba(255,255,255,0.5);border-radius:5px}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{border-radius:0}.sm-dox ul{background:rgba(162,162,162,0.1)}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:white;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media (min-width: 768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:url("tab_b.png");line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:#283A5D transparent transparent transparent;background:transparent;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0px 12px;background-image:url("tab_s.png");background-repeat:no-repeat;background-position:right;border-radius:0 !important}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox a:hover span.sub-arrow{border-color:#fff transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent #fff transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:#fff;border-radius:5px !important;box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent #555;border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:#555;background-image:none;border:0 !important;color:#555;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent #fff}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:#fff;height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #D23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#D23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent #555 transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:#555 transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px !important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:url("tab_b.png")}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:#fff}} diff --git a/docs/timer_8h.html b/docs/timer_8h.html new file mode 100644 index 00000000..5ee1d1de --- /dev/null +++ b/docs/timer_8h.html @@ -0,0 +1,105 @@ + + + + + + + +HPCombi: /home/florent/src/HPCombi/examples/timer.h File Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    HPCombi +
    +
    High Performance Combinatorics in C++ using vector instructions v1.0.0
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    timer.h File Reference
    +
    +
    +
    #include <chrono>
    +#include <iostream>
    +#include <string>
    +
    +

    Go to the source code of this file.

    + + + + +

    +Classes

    class  libsemigroups::Timer
     
    + + + +

    +Namespaces

     libsemigroups
     
    +
    + + + + diff --git a/docs/timer_8h_source.html b/docs/timer_8h_source.html new file mode 100644 index 00000000..1c567fed --- /dev/null +++ b/docs/timer_8h_source.html @@ -0,0 +1,192 @@ + + + + + + + +HPCombi: /home/florent/src/HPCombi/examples/timer.h Source File + + + + + + + + + + + +
    +
    + + + + + + +
    +
    HPCombi +
    +
    High Performance Combinatorics in C++ using vector instructions v1.0.0
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    timer.h
    +
    +
    +Go to the documentation of this file.
    1 //
    +
    2 // libsemigroups - C++ library for semigroups and monoids
    +
    3 // Copyright (C) 2016 James D. Mitchell
    +
    4 //
    +
    5 // This program is free software: you can redistribute it and/or modify
    +
    6 // it under the terms of the GNU General Public License as published by
    +
    7 // the Free Software Foundation, either version 3 of the License, or
    +
    8 // (at your option) any later version.
    +
    9 //
    +
    10 // This program is distributed in the hope that it will be useful,
    +
    11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
    +
    12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    +
    13 // GNU General Public License for more details.
    +
    14 //
    +
    15 // You should have received a copy of the GNU General Public License
    +
    16 // along with this program. If not, see <http://www.gnu.org/licenses/>.
    +
    17 //
    +
    18 
    +
    19 #ifndef LIBSEMIGROUPS_SRC_TIMER_H_
    +
    20 #define LIBSEMIGROUPS_SRC_TIMER_H_
    +
    21 
    +
    22 #include <chrono>
    +
    23 #include <iostream>
    +
    24 #include <string>
    +
    25 
    +
    26 // #include "to_string.h"
    +
    27 
    +
    28 namespace libsemigroups {
    +
    29 
    +
    30 // This is a simple class which can be used to send timing information in a
    +
    31 // somewhat human readable format to the standard output.
    +
    32 class Timer {
    +
    33  public:
    +
    34  // Default constructor, timer starts when object is created
    +
    35  Timer() : _start(std::chrono::high_resolution_clock::now()) {}
    +
    36 
    +
    37  // Reset the timer (i.e. time from this point on)
    +
    38  void reset() { _start = std::chrono::high_resolution_clock::now(); }
    +
    39 
    +
    40  // The elapsed time in nanoseconds since last reset
    +
    41  std::chrono::nanoseconds elapsed() const {
    +
    42  return std::chrono::duration_cast<std::chrono::nanoseconds>(
    +
    43  std::chrono::high_resolution_clock::now() - _start);
    +
    44  }
    +
    45 
    +
    46  // String containing the somewhat human readable amount of time, this is
    +
    47  // primarily intended for testing purposes
    +
    48  std::string string(std::chrono::nanoseconds elapsed) const {
    +
    49  std::string out;
    +
    50  if (string_it<std::chrono::hours>(out, elapsed, "h ", 0)) {
    +
    51  string_it<std::chrono::minutes>(out, elapsed, "m", 0);
    +
    52  return out;
    +
    53  } else if (string_it<std::chrono::minutes>(out, elapsed, "m ", 0)) {
    +
    54  string_it<std::chrono::seconds>(out, elapsed, "s", 0);
    +
    55  return out;
    +
    56  } else if (string_it<std::chrono::milliseconds>(out, elapsed, "ms",
    +
    57  9)) {
    +
    58  return out;
    +
    59  } else if (string_it<std::chrono::microseconds>(out, elapsed, "\u03BCs",
    +
    60  9)) {
    +
    61  return out;
    +
    62  } else if (string_it<std::chrono::nanoseconds>(out, elapsed, "ns", 0)) {
    +
    63  return out;
    +
    64  }
    +
    65  return out;
    +
    66  }
    +
    67 
    +
    68  // String containing the somewhat human readable amount of time since the
    +
    69  // last reset
    +
    70  std::string string() const { return string(elapsed()); }
    +
    71 
    +
    72  // Left shift the string containing the somewhat human readable amount of
    +
    73  // time since last reset to an ostream
    +
    74  friend std::ostream &operator<<(std::ostream &os, Timer const &t) {
    +
    75  os << t.string();
    +
    76  return os;
    +
    77  }
    +
    78 
    +
    79  private:
    +
    80  std::chrono::high_resolution_clock::time_point _start;
    +
    81 
    +
    82  template <typename T>
    +
    83  bool string_it(std::string &str, std::chrono::nanoseconds &elapsed,
    +
    84  std::string unit, size_t threshold) const {
    +
    85  T x = std::chrono::duration_cast<T>(elapsed);
    +
    86  if (x > T(threshold)) {
    +
    87  str += std::to_string(x.count()) + unit;
    +
    88  elapsed -= x;
    +
    89  return true;
    +
    90  }
    +
    91  return false;
    +
    92  }
    +
    93 };
    +
    94 } // namespace libsemigroups
    +
    95 
    +
    96 #endif // LIBSEMIGROUPS_SRC_TIMER_H_
    +
    Definition: timer.h:32
    +
    void reset()
    Definition: timer.h:38
    +
    Timer()
    Definition: timer.h:35
    +
    std::string string() const
    Definition: timer.h:70
    +
    std::chrono::nanoseconds elapsed() const
    Definition: timer.h:41
    +
    friend std::ostream & operator<<(std::ostream &os, Timer const &t)
    Definition: timer.h:74
    +
    std::string string(std::chrono::nanoseconds elapsed) const
    Definition: timer.h:48
    +
    Definition: timer.h:28
    +
    Definition: bmat8.hpp:360
    +
    std::string to_string(HPCombi::epu8 const &a)
    Definition: epu8_impl.hpp:546
    +
    + + + + diff --git a/docs/vect16_8hpp.html b/docs/vect16_8hpp.html new file mode 100644 index 00000000..f6887b94 --- /dev/null +++ b/docs/vect16_8hpp.html @@ -0,0 +1,119 @@ + + + + + + + +HPCombi: /home/florent/src/HPCombi/include/hpcombi/vect16.hpp File Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    HPCombi +
    +
    High Performance Combinatorics in C++ using vector instructions v1.0.0
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    vect16.hpp File Reference
    +
    +
    +
    #include <cstddef>
    +#include <cstdint>
    +#include <initializer_list>
    +#include <iosfwd>
    +#include <memory>
    +#include <type_traits>
    +#include "epu8.hpp"
    +
    +

    Go to the source code of this file.

    + + + + + + +

    +Classes

    struct  HPCombi::Vect16
     
    struct  std::hash< HPCombi::Vect16 >
     
    + + + + + +

    +Namespaces

     HPCombi
     
     std
     
    + + + +

    +Functions

    std::ostream & std::operator<< (std::ostream &stream, const HPCombi::Vect16 &ar)
     
    +
    + + + + diff --git a/docs/vect16_8hpp_source.html b/docs/vect16_8hpp_source.html new file mode 100644 index 00000000..ab8c28f4 --- /dev/null +++ b/docs/vect16_8hpp_source.html @@ -0,0 +1,264 @@ + + + + + + + +HPCombi: /home/florent/src/HPCombi/include/hpcombi/vect16.hpp Source File + + + + + + + + + + + +
    +
    + + + + + + +
    +
    HPCombi +
    +
    High Performance Combinatorics in C++ using vector instructions v1.0.0
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    vect16.hpp
    +
    +
    +Go to the documentation of this file.
    1 // Copyright (C) 2016-2018 Florent Hivert <Florent.Hivert@lri.fr>, //
    +
    3 // //
    +
    4 // Distributed under the terms of the GNU General Public License (GPL) //
    +
    5 // //
    +
    6 // This code is distributed in the hope that it will be useful, //
    +
    7 // but WITHOUT ANY WARRANTY; without even the implied warranty of //
    +
    8 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU //
    +
    9 // General Public License for more details. //
    +
    10 // //
    +
    11 // The full text of the GPL is available at: //
    +
    12 // //
    +
    13 // http://www.gnu.org/licenses/ //
    +
    15 
    +
    16 #ifndef HPCOMBI_VECT16_HPP_
    +
    17 #define HPCOMBI_VECT16_HPP_
    +
    18 
    +
    19 #include <cstddef> // for size_t
    +
    20 #include <cstdint> // for uint8_t, uint64_t, int8_t
    +
    21 #include <initializer_list> // for initializer_list
    +
    22 #include <iosfwd> // for ostream
    +
    23 #include <memory> // for hash
    +
    24 #include <type_traits> // for is_trivial
    +
    25 
    +
    26 #include "epu8.hpp"
    +
    27 
    +
    28 namespace HPCombi {
    +
    29 
    +
    30 struct alignas(16) Vect16 {
    +
    31  static constexpr size_t size() { return 16; }
    +
    32  using array = typename decltype(Epu8)::array;
    + +
    34 
    +
    35  Vect16() = default;
    +
    36  constexpr Vect16(epu8 x) : v(x) {}
    +
    37  Vect16(std::initializer_list<uint8_t> il, uint8_t def = 0)
    +
    38  : v(Epu8(il, def)) {}
    +
    39  constexpr operator epu8() const { return v; }
    +
    40 
    + +
    42  const array &as_array() const { return HPCombi::as_array(v); }
    +
    43 
    +
    44  const uint8_t &operator[](uint64_t i) const { return as_array()[i]; }
    +
    45  uint8_t &operator[](uint64_t i) { return as_array()[i]; }
    +
    46 
    +
    47  size_t first_diff(const Vect16 &u, size_t bound = size()) const {
    +
    48  return HPCombi::first_diff(v, u.v, bound);
    +
    49  }
    +
    50  size_t last_diff(const Vect16 &u, size_t bound = size()) const {
    +
    51  return HPCombi::last_diff(v, u.v, bound);
    +
    52  }
    +
    53 
    +
    54  size_t first_zero(size_t bound = size()) const {
    +
    55  return HPCombi::first_zero(v, bound);
    +
    56  }
    +
    57  size_t last_zero(size_t bound = size()) const {
    +
    58  return HPCombi::last_zero(v, bound);
    +
    59  }
    +
    60  size_t first_non_zero(size_t bound = size()) const {
    +
    61  return HPCombi::first_non_zero(v, bound);
    +
    62  }
    +
    63  size_t last_non_zero(size_t bound = size()) const {
    +
    64  return HPCombi::last_non_zero(v, bound);
    +
    65  }
    +
    66 
    +
    67  using value_type = uint8_t;
    +
    68  using iterator = typename array::iterator;
    +
    69  using const_iterator = typename array::const_iterator;
    +
    70 
    +
    71  const_iterator cbegin() const { return as_array().begin(); }
    +
    72  const_iterator cend() const { return as_array().end(); }
    +
    73 
    +
    74  iterator begin() { return as_array().begin(); }
    +
    75  iterator end() { return as_array().end(); }
    +
    76 
    +
    77  const_iterator begin() const { return as_array().begin(); }
    +
    78  const_iterator end() const { return as_array().end(); }
    +
    79 
    +
    80  bool operator==(const Vect16 &b) const { return HPCombi::equal(v, b.v); }
    +
    81 
    +
    82  bool operator!=(const Vect16 &b) const {
    +
    83  return HPCombi::not_equal(v, b.v);
    +
    84  }
    +
    85 
    +
    86  bool operator<(const Vect16 &b) const { return less(v, b.v); }
    +
    87  int8_t less_partial(const Vect16 &b, int k) const {
    +
    88  return HPCombi::less_partial(v, b.v, k);
    +
    89  }
    +
    90  Vect16 permuted(const Vect16 &b) const { return HPCombi::permuted(v, b.v); }
    +
    91  uint8_t sum() const { return HPCombi::horiz_sum(v); }
    + +
    93  Vect16 eval16() const { return HPCombi::eval16(v); }
    +
    94 
    +
    95  bool is_permutation() const { return HPCombi::is_permutation(v); }
    +
    96  bool is_permutation(size_t k) const {
    +
    97  return HPCombi::is_permutation(v, k);
    +
    98  }
    +
    99 };
    +
    100 
    +
    101 static_assert(std::is_trivial<Vect16>(), "Vect16 is not a trivial class !");
    +
    102 
    +
    103 } // namespace HPCombi
    +
    104 
    +
    105 namespace std {
    +
    106 
    +
    107 inline std::ostream &operator<<(std::ostream &stream,
    +
    108  const HPCombi::Vect16 &ar) {
    +
    109  return operator<<(stream, ar.v);
    +
    110 }
    +
    111 
    +
    112 template <> struct hash<HPCombi::Vect16> {
    +
    113  size_t operator()(const HPCombi::Vect16 &ar) const {
    +
    114  return std::hash<HPCombi::epu8>{}(ar.v);
    +
    115  }
    +
    116 };
    +
    117 
    +
    118 } // namespace std
    +
    119 
    +
    120 #endif // HPCOMBI_VECT16_HPP_
    + +
    Definition: bmat8.hpp:37
    +
    uint64_t first_non_zero(epu8 v, int bnd) noexcept
    return the index of the first non zero entry or 16 if there are none Only index smaller than bound ar...
    Definition: epu8_impl.hpp:122
    +
    epu8 permuted(epu8 a, epu8 b) noexcept
    Permuting a HPCombi::epu8.
    Definition: epu8.hpp:68
    +
    epu8 partial_sums(epu8 v) noexcept
    Horizontal partial sum of a HPCombi::epu8.
    Definition: epu8.hpp:242
    +
    TPUBuild< TPU >::array & as_array(TPU &v) noexcept
    Cast a TPU to a c++ std::array.
    Definition: builder.hpp:135
    +
    bool is_permutation(epu8 v, const size_t k=16) noexcept
    Definition: epu8_impl.hpp:526
    +
    int8_t less_partial(epu8 a, epu8 b, int k) noexcept
    Partial lexicographic comparison between two HPCombi::epu8.
    Definition: epu8_impl.hpp:109
    +
    uint64_t last_zero(epu8 v, int bnd) noexcept
    return the index of the last zero entry or 16 if there are none Only index smaller than bound are tak...
    Definition: epu8_impl.hpp:119
    +
    bool equal(epu8 a, epu8 b) noexcept
    Equality of HPCombi::epu8.
    Definition: epu8.hpp:59
    +
    epu8 eval16(epu8 v) noexcept
    Evaluation of a HPCombi::epu8.
    Definition: epu8.hpp:404
    +
    uint8_t horiz_sum(epu8 v) noexcept
    Horizontal sum of a HPCombi::epu8.
    Definition: epu8.hpp:213
    +
    bool less(epu8 a, epu8 b) noexcept
    Lexicographic comparison between two HPCombi::epu8.
    Definition: epu8_impl.hpp:105
    +
    constexpr TPUBuild< epu8 > Epu8
    Factory object acting as a class constructor for type HPCombi::epu8.
    Definition: epu8.hpp:49
    +
    uint64_t first_zero(epu8 v, int bnd) noexcept
    return the index of the first zero entry or 16 if there are none Only index smaller than bound are ta...
    Definition: epu8_impl.hpp:116
    +
    uint8_t __attribute__((vector_size(16))) epu8
    SIMD vector of 16 unsigned bytes.
    Definition: epu8.hpp:41
    +
    uint64_t last_non_zero(epu8 v, int bnd) noexcept
    return the index of the last non zero entry or 16 if there are none Only index smaller than bound are...
    Definition: epu8_impl.hpp:125
    +
    uint64_t last_diff(epu8 a, epu8 b, size_t bound=16) noexcept
    The last difference between two HPCombi::epu8.
    Definition: epu8.hpp:482
    +
    uint64_t first_diff(epu8 a, epu8 b, size_t bound=16) noexcept
    The first difference between two HPCombi::epu8.
    Definition: epu8.hpp:442
    +
    bool not_equal(epu8 a, epu8 b) noexcept
    Non equality of HPCombi::epu8.
    Definition: epu8.hpp:63
    +
    Definition: bmat8.hpp:360
    +
    std::ostream & operator<<(std::ostream &os, HPCombi::BMat8 const &bm)
    Definition: bmat8_impl.hpp:504
    +
    Definition: vect16.hpp:30
    +
    bool operator==(const Vect16 &b) const
    Definition: vect16.hpp:80
    +
    const_iterator begin() const
    Definition: vect16.hpp:77
    +
    iterator end()
    Definition: vect16.hpp:75
    +
    Vect16(std::initializer_list< uint8_t > il, uint8_t def=0)
    Definition: vect16.hpp:37
    +
    size_t last_diff(const Vect16 &u, size_t bound=size()) const
    Definition: vect16.hpp:50
    +
    const uint8_t & operator[](uint64_t i) const
    Definition: vect16.hpp:44
    +
    size_t first_zero(size_t bound=size()) const
    Definition: vect16.hpp:54
    +
    typename array::const_iterator const_iterator
    Definition: vect16.hpp:69
    +
    const_iterator end() const
    Definition: vect16.hpp:78
    +
    int8_t less_partial(const Vect16 &b, int k) const
    Definition: vect16.hpp:87
    +
    size_t last_zero(size_t bound=size()) const
    Definition: vect16.hpp:57
    +
    bool is_permutation() const
    Definition: vect16.hpp:95
    +
    bool operator<(const Vect16 &b) const
    Definition: vect16.hpp:86
    +
    const_iterator cbegin() const
    Definition: vect16.hpp:71
    +
    static constexpr size_t size()
    Definition: vect16.hpp:31
    +
    Vect16()=default
    +
    size_t first_non_zero(size_t bound=size()) const
    Definition: vect16.hpp:60
    +
    uint8_t & operator[](uint64_t i)
    Definition: vect16.hpp:45
    +
    typename decltype(Epu8)::array array
    Definition: vect16.hpp:32
    +
    size_t first_diff(const Vect16 &u, size_t bound=size()) const
    Definition: vect16.hpp:47
    +
    iterator begin()
    Definition: vect16.hpp:74
    +
    bool is_permutation(size_t k) const
    Definition: vect16.hpp:96
    +
    epu8 v
    Definition: vect16.hpp:33
    +
    uint8_t value_type
    Definition: vect16.hpp:67
    +
    bool operator!=(const Vect16 &b) const
    Definition: vect16.hpp:82
    +
    uint8_t sum() const
    Definition: vect16.hpp:91
    +
    array & as_array()
    Definition: vect16.hpp:41
    +
    size_t last_non_zero(size_t bound=size()) const
    Definition: vect16.hpp:63
    +
    Vect16 permuted(const Vect16 &b) const
    Definition: vect16.hpp:90
    +
    const array & as_array() const
    Definition: vect16.hpp:42
    +
    constexpr Vect16(epu8 x)
    Definition: vect16.hpp:36
    +
    Vect16 eval16() const
    Definition: vect16.hpp:93
    +
    Vect16 partial_sums() const
    Definition: vect16.hpp:92
    +
    const_iterator cend() const
    Definition: vect16.hpp:72
    +
    typename array::iterator iterator
    Definition: vect16.hpp:68
    +
    size_t operator()(const HPCombi::Vect16 &ar) const
    Definition: vect16.hpp:113
    +
    Definition: epu8_impl.hpp:566
    +
    + + + + diff --git a/docs/vect__generic_8hpp.html b/docs/vect__generic_8hpp.html new file mode 100644 index 00000000..7ef869e8 --- /dev/null +++ b/docs/vect__generic_8hpp.html @@ -0,0 +1,130 @@ + + + + + + + +HPCombi: /home/florent/src/HPCombi/include/hpcombi/vect_generic.hpp File Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    HPCombi +
    +
    High Performance Combinatorics in C++ using vector instructions v1.0.0
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    vect_generic.hpp File Reference
    +
    +
    +
    #include <algorithm>
    +#include <array>
    +#include <cassert>
    +#include <cstddef>
    +#include <cstdint>
    +#include <functional>
    +#include <initializer_list>
    +#include <iomanip>
    +#include <memory>
    +#include <ostream>
    +#include <random>
    +#include <type_traits>
    +#include "debug.hpp"
    +
    +

    Go to the source code of this file.

    + + + + + + + +

    +Classes

    struct  HPCombi::VectGeneric< Size, Expo >
     A generic class for combinatorial integer vectors. More...
     
    struct  std::hash< HPCombi::VectGeneric< Size, Expo > >
     
    + + + + + +

    +Namespaces

     HPCombi
     
     std
     
    + + + + + + + +

    +Functions

    template<size_t Size, typename Expo = uint8_t>
    std::array< Expo, Size > HPCombi::sorted_vect (std::array< Expo, Size > v)
     
    template<size_t Size, typename Expo >
    std::ostream & std::operator<< (std::ostream &stream, const HPCombi::VectGeneric< Size, Expo > &v)
     
    +
    + + + + diff --git a/docs/vect__generic_8hpp_source.html b/docs/vect__generic_8hpp_source.html new file mode 100644 index 00000000..6b80dd68 --- /dev/null +++ b/docs/vect__generic_8hpp_source.html @@ -0,0 +1,378 @@ + + + + + + + +HPCombi: /home/florent/src/HPCombi/include/hpcombi/vect_generic.hpp Source File + + + + + + + + + + + +
    +
    + + + + + + +
    +
    HPCombi +
    +
    High Performance Combinatorics in C++ using vector instructions v1.0.0
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    vect_generic.hpp
    +
    +
    +Go to the documentation of this file.
    1 // Copyright (C) 2016 Florent Hivert <Florent.Hivert@lri.fr>, //
    +
    3 // //
    +
    4 // Distributed under the terms of the GNU General Public License (GPL) //
    +
    5 // //
    +
    6 // This code is distributed in the hope that it will be useful, //
    +
    7 // but WITHOUT ANY WARRANTY; without even the implied warranty of //
    +
    8 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU //
    +
    9 // General Public License for more details. //
    +
    10 // //
    +
    11 // The full text of the GPL is available at: //
    +
    12 // //
    +
    13 // http://www.gnu.org/licenses/ //
    +
    15 
    +
    16 #ifndef HPCOMBI_VECT_GENERIC_HPP_
    +
    17 #define HPCOMBI_VECT_GENERIC_HPP_
    +
    18 
    +
    19 #include <algorithm> // for max, min, shuffle, sort
    +
    20 #include <array> // for array
    +
    21 #include <cassert> // for assert
    +
    22 #include <cstddef> // for size_t
    +
    23 #include <cstdint> // for uint64_t, int8_t, int64_t
    +
    24 #include <functional> // for hash
    +
    25 #include <initializer_list> // for initializer_list
    +
    26 #include <iomanip> // for operator<<, setw
    +
    27 #include <memory> // for hash
    +
    28 #include <ostream> // for operator<<, basic_ostream
    +
    29 #include <random> // for mt19937, random_devide
    +
    30 #include <type_traits> // for is_trivial
    +
    31 
    +
    32 #include "debug.hpp" // for HPCOMBI_ASSERT
    +
    33 
    +
    34 namespace HPCombi {
    +
    35 
    +
    36 template <size_t Size, typename Expo = uint8_t>
    +
    37 std::array<Expo, Size> sorted_vect(std::array<Expo, Size> v) {
    +
    38  std::sort(v.begin(), v.end());
    +
    39  return v;
    +
    40 }
    +
    41 
    +
    44 template <size_t Size, typename Expo = uint8_t> struct VectGeneric {
    +
    45  static constexpr size_t size() { return Size; }
    +
    46  using array = std::array<Expo, Size>;
    + +
    48 
    +
    49  VectGeneric() = default;
    +
    50 
    +
    51  VectGeneric(const array &_v) : v(_v) {} // NOLINT
    +
    52  VectGeneric(std::initializer_list<Expo> il, Expo def = 0) {
    +
    53  HPCOMBI_ASSERT(il.size() <= Size);
    +
    54  std::copy(il.begin(), il.end(), v.begin());
    +
    55  std::fill(v.begin() + il.size(), v.end(), def);
    +
    56  }
    +
    57 
    +
    58  Expo operator[](uint64_t i) const { return v[i]; }
    +
    59  Expo &operator[](uint64_t i) { return v[i]; }
    +
    60 
    +
    61  size_t first_diff(const VectGeneric &u, size_t bound = Size) const {
    +
    62  for (size_t i = 0; i < bound; i++)
    +
    63  if (v[i] != u[i])
    +
    64  return i;
    +
    65  return Size;
    +
    66  }
    +
    67 
    +
    68  size_t last_diff(const VectGeneric &u, size_t bound = Size) const {
    +
    69  while (bound != 0) {
    +
    70  --bound;
    +
    71  if (u[bound] != v[bound])
    +
    72  return bound;
    +
    73  }
    +
    74  return Size;
    +
    75  }
    +
    76 
    +
    77  using value_type = Expo;
    +
    78  using iterator = typename array::iterator;
    +
    79  using const_iterator = typename array::const_iterator;
    +
    80  iterator begin() { return v.begin(); }
    +
    81  iterator end() { return v.end(); }
    +
    82  const_iterator begin() const { return v.begin(); }
    +
    83  const_iterator end() const { return v.end(); }
    +
    84 
    +
    85  bool operator==(const VectGeneric &u) const {
    +
    86  return first_diff(u) == Size;
    +
    87  }
    +
    88  bool operator!=(const VectGeneric &u) const {
    +
    89  return first_diff(u) != Size;
    +
    90  }
    +
    91 
    +
    92  bool operator<(const VectGeneric &u) const {
    +
    93  uint64_t diff = first_diff(u);
    +
    94  return (diff != Size) && v[diff] < u[diff];
    +
    95  }
    +
    96 
    +
    97  int8_t less_partial(const VectGeneric &u, int k) const {
    +
    98  uint64_t diff = first_diff(u, k);
    +
    99  return (diff == Size) ? 0 : int8_t(v[diff]) - int8_t(u[diff]);
    +
    100  }
    +
    101 
    +
    102  VectGeneric permuted(const VectGeneric &u) const {
    + +
    104  for (uint64_t i = 0; i < Size; i++) {
    +
    105  if (u[i] < Size)
    +
    106  res[i] = v[u[i]];
    +
    107  }
    +
    108  return res;
    +
    109  }
    +
    110 
    +
    111  void sort() { std::sort(v.begin(), v.end()); }
    +
    112 
    +
    113  bool is_sorted() const {
    +
    114  for (uint64_t i = 1; i < Size; i++)
    +
    115  if (v[i - 1] < v[i])
    +
    116  return false;
    +
    117  return true;
    +
    118  }
    +
    119 
    +
    120  static VectGeneric random() {
    +
    121  static std::random_device rd;
    +
    122  static std::mt19937 g(rd());
    +
    123 
    + +
    125  std::shuffle(res.begin(), res.end(), g);
    +
    126  return res;
    +
    127  }
    +
    128 
    +
    129  uint64_t first_non_zero(size_t bound = Size) const {
    +
    130  for (uint64_t i = 0; i < bound; i++)
    +
    131  if (v[i] != 0)
    +
    132  return i;
    +
    133  return Size;
    +
    134  }
    +
    135  uint64_t first_zero(size_t bound = Size) const {
    +
    136  for (uint64_t i = 0; i < bound; i++)
    +
    137  if (v[i] == 0)
    +
    138  return i;
    +
    139  return Size;
    +
    140  }
    +
    141  uint64_t last_non_zero(size_t bound = Size) const {
    +
    142  for (int64_t i = bound - 1; i >= 0; i--)
    +
    143  if (v[i] != 0)
    +
    144  return i;
    +
    145  return Size;
    +
    146  }
    +
    147  uint64_t last_zero(size_t bound = Size) const {
    +
    148  for (int64_t i = bound - 1; i >= 0; i--)
    +
    149  if (v[i] == 0)
    +
    150  return i;
    +
    151  return Size;
    +
    152  }
    +
    153 
    +
    154  bool is_permutation(const size_t k = Size) const {
    +
    155  auto temp = v;
    +
    156  std::sort(temp.begin(), temp.end());
    +
    157  for (uint64_t i = 0; i < Size; i++)
    +
    158  if (temp[i] != i)
    +
    159  return false;
    +
    160  for (uint64_t i = k; i < Size; i++)
    +
    161  if (v[i] != i)
    +
    162  return false;
    +
    163  return true;
    +
    164  }
    +
    165 
    +
    166  uint64_t horiz_sum() const noexcept {
    +
    167  Expo res = 0;
    +
    168  for (uint64_t i = 0; i < Size; i++)
    +
    169  res += v[i];
    +
    170  return res;
    +
    171  }
    +
    172 
    +
    173  VectGeneric partial_sums() const noexcept {
    +
    174  auto res = *this;
    +
    175  for (uint64_t i = 1; i < Size; i++)
    +
    176  res[i] += res[i - 1];
    +
    177  return res;
    +
    178  }
    +
    179 
    + +
    181  for (uint64_t i = 1; i < Size; i++)
    +
    182  v[i] += v[i - 1];
    +
    183  }
    +
    184 
    +
    185  Expo horiz_max() const {
    +
    186  Expo res = v[0];
    +
    187  for (uint64_t i = 1; i < Size; i++)
    +
    188  res = std::max(res, v[i]);
    +
    189  return res;
    +
    190  }
    +
    191 
    + +
    193  for (uint64_t i = 1; i < Size; i++)
    +
    194  v[i] = std::max(v[i], v[i - 1]);
    +
    195  }
    +
    196 
    +
    197  Expo horiz_min() const {
    +
    198  Expo res = v[0];
    +
    199  for (uint64_t i = 1; i < Size; i++)
    +
    200  res = std::min(res, v[i]);
    +
    201  return res;
    +
    202  }
    +
    203 
    + +
    205  for (uint64_t i = 1; i < Size; i++)
    +
    206  v[i] = std::min(v[i], v[i - 1]);
    +
    207  }
    +
    208 
    +
    209  VectGeneric eval() const {
    +
    210  VectGeneric res{};
    +
    211  for (size_t i = 0; i < Size; i++)
    +
    212  if (v[i] < Size)
    +
    213  res[v[i]]++;
    +
    214  return res;
    +
    215  }
    +
    216 };
    +
    217 
    +
    218 static_assert(std::is_trivial<VectGeneric<12>>(),
    +
    219  "VectGeneric is not a trivial class !");
    +
    220 
    +
    221 } // namespace HPCombi
    +
    222 
    +
    223 namespace std {
    +
    224 
    +
    225 template <size_t Size, typename Expo>
    +
    226 std::ostream &operator<<(std::ostream &stream,
    + +
    228  stream << "{" << std::setw(2) << unsigned(v[0]);
    +
    229  for (unsigned i = 1; i < Size; ++i)
    +
    230  stream << "," << std::setw(2) << unsigned(v[i]);
    +
    231  stream << "}";
    +
    232  return stream;
    +
    233 }
    +
    234 
    +
    235 template <size_t Size, typename Expo>
    +
    236 struct hash<HPCombi::VectGeneric<Size, Expo>> {
    + +
    238  size_t h = 0;
    +
    239  for (size_t i = 0; i < Size; i++)
    +
    240  h = hash<Expo>()(ar[i]) + (h << 6) + (h << 16) - h;
    +
    241  return h;
    +
    242  }
    +
    243 };
    +
    244 
    +
    245 } // namespace std
    +
    246 
    +
    247 #endif // HPCOMBI_VECT_GENERIC_HPP_
    + +
    #define HPCOMBI_ASSERT(x)
    Definition: debug.hpp:23
    +
    std::array< std::tuple< uint16_t, uint16_t, std::array< uint16_t, gens.size()> >, 65536 > res
    Definition: image.cpp:62
    +
    Definition: bmat8.hpp:37
    +
    epu8 max(epu8 a, epu8 b) noexcept
    Vector max between two HPCombi::epu8 0.
    Definition: epu8.hpp:87
    +
    std::array< Expo, Size > sorted_vect(std::array< Expo, Size > v)
    Definition: vect_generic.hpp:37
    +
    epu8 min(epu8 a, epu8 b) noexcept
    Vector min between two HPCombi::epu8 0.
    Definition: epu8.hpp:85
    +
    Definition: bmat8.hpp:360
    +
    std::ostream & operator<<(std::ostream &os, HPCombi::BMat8 const &bm)
    Definition: bmat8_impl.hpp:504
    +
    A generic class for combinatorial integer vectors.
    Definition: vect_generic.hpp:44
    +
    const_iterator end() const
    Definition: vect_generic.hpp:83
    +
    bool operator<(const VectGeneric &u) const
    Definition: vect_generic.hpp:92
    +
    Expo value_type
    Definition: vect_generic.hpp:77
    +
    bool operator==(const VectGeneric &u) const
    Definition: vect_generic.hpp:85
    +
    int8_t less_partial(const VectGeneric &u, int k) const
    Definition: vect_generic.hpp:97
    +
    uint64_t last_zero(size_t bound=Size) const
    Definition: vect_generic.hpp:147
    +
    void sort()
    Definition: vect_generic.hpp:111
    +
    array v
    Definition: vect_generic.hpp:47
    +
    uint64_t last_non_zero(size_t bound=Size) const
    Definition: vect_generic.hpp:141
    +
    uint64_t first_zero(size_t bound=Size) const
    Definition: vect_generic.hpp:135
    +
    Expo & operator[](uint64_t i)
    Definition: vect_generic.hpp:59
    +
    uint64_t first_non_zero(size_t bound=Size) const
    Definition: vect_generic.hpp:129
    +
    static VectGeneric random()
    Definition: vect_generic.hpp:120
    +
    bool is_sorted() const
    Definition: vect_generic.hpp:113
    +
    bool is_permutation(const size_t k=Size) const
    Definition: vect_generic.hpp:154
    +
    typename array::iterator iterator
    Definition: vect_generic.hpp:78
    +
    VectGeneric permuted(const VectGeneric &u) const
    Definition: vect_generic.hpp:102
    +
    static constexpr size_t size()
    Definition: vect_generic.hpp:45
    +
    uint64_t horiz_sum() const noexcept
    Definition: vect_generic.hpp:166
    +
    size_t first_diff(const VectGeneric &u, size_t bound=Size) const
    Definition: vect_generic.hpp:61
    +
    typename array::const_iterator const_iterator
    Definition: vect_generic.hpp:79
    +
    void partial_min_inplace()
    Definition: vect_generic.hpp:204
    +
    iterator begin()
    Definition: vect_generic.hpp:80
    +
    VectGeneric(const array &_v)
    Definition: vect_generic.hpp:51
    +
    iterator end()
    Definition: vect_generic.hpp:81
    +
    void partial_sums_inplace()
    Definition: vect_generic.hpp:180
    +
    size_t last_diff(const VectGeneric &u, size_t bound=Size) const
    Definition: vect_generic.hpp:68
    +
    void partial_max_inplace()
    Definition: vect_generic.hpp:192
    +
    Expo horiz_min() const
    Definition: vect_generic.hpp:197
    +
    std::array< Expo, Size > array
    Definition: vect_generic.hpp:46
    + +
    const_iterator begin() const
    Definition: vect_generic.hpp:82
    +
    VectGeneric eval() const
    Definition: vect_generic.hpp:209
    +
    bool operator!=(const VectGeneric &u) const
    Definition: vect_generic.hpp:88
    +
    VectGeneric partial_sums() const noexcept
    Definition: vect_generic.hpp:173
    +
    Expo operator[](uint64_t i) const
    Definition: vect_generic.hpp:58
    +
    VectGeneric(std::initializer_list< Expo > il, Expo def=0)
    Definition: vect_generic.hpp:52
    +
    Expo horiz_max() const
    Definition: vect_generic.hpp:185
    +
    size_t operator()(const HPCombi::VectGeneric< Size, Expo > &ar) const
    Definition: vect_generic.hpp:237
    +
    + + + +