From 0d53fd9c569f7b1d2c31d7da1f8bffff8bbddca7 Mon Sep 17 00:00:00 2001 From: Florent Hivert Date: Tue, 19 Dec 2023 17:13:15 +0100 Subject: [PATCH] Created branch docs --- docs/CF_8cpp.html | 123 + docs/RD_8cpp.html | 430 ++ docs/README_8md.html | 82 + docs/Renner_8cpp.html | 640 +++ docs/Trans_8cpp.html | 205 + docs/annotated.html | 135 + docs/arch_8hpp.html | 88 + docs/arch_8hpp_source.html | 111 + docs/bc_s.png | Bin 0 -> 676 bytes docs/bdwn.png | Bin 0 -> 147 bytes docs/bmat8_8hpp.html | 120 + docs/bmat8_8hpp_source.html | 324 ++ docs/bmat8__impl_8hpp.html | 141 + docs/bmat8__impl_8hpp_source.html | 640 +++ docs/classEqEpu8-members.html | 88 + docs/classEqEpu8.html | 187 + docs/classHPCombi_1_1BMat8-members.html | 137 + docs/classHPCombi_1_1BMat8.html | 1711 +++++++ docs/classcommon__eval16.html | 104 + docs/classcommon__first__diff.html | 105 + docs/classcommon__horiz__max.html | 97 + docs/classcommon__horiz__min.html | 97 + docs/classcommon__horiz__sum.html | 98 + docs/classcommon__inverse.html | 97 + docs/classcommon__inverse__pperm.html | 98 + docs/classcommon__is__permutation.html | 97 + docs/classcommon__last__diff.html | 105 + docs/classcommon__left__weak__leq.html | 96 + docs/classcommon__lehmer.html | 97 + docs/classcommon__length.html | 97 + docs/classcommon__merge.html | 99 + docs/classcommon__nb__cycles.html | 97 + docs/classcommon__nb__descent.html | 97 + docs/classcommon__partial__max.html | 97 + docs/classcommon__partial__min.html | 97 + docs/classcommon__partial__sums.html | 97 + docs/classcommon__permutation__of.html | 99 + docs/classes.html | 115 + docs/classlibsemigroups_1_1Timer-members.html | 95 + docs/classlibsemigroups_1_1Timer.html | 279 ++ docs/closed.png | Bin 0 -> 132 bytes docs/debug_8hpp.html | 115 + docs/debug_8hpp_source.html | 110 + .../dir_0a22e5c2a89343e7af7981e1b76abb37.html | 121 + .../dir_d28a4824dc47e487b107a5db32ef43c4.html | 107 + .../dir_d44c64559bbebec7f509842c48db8b23.html | 92 + docs/doc.png | Bin 0 -> 746 bytes docs/doxygen.css | 1793 ++++++++ docs/doxygen.svg | 26 + docs/dynsections.js | 121 + docs/epu8_8hpp.html | 356 ++ docs/epu8_8hpp_source.html | 356 ++ docs/epu8__impl_8hpp.html | 341 ++ docs/epu8__impl_8hpp_source.html | 744 ++++ docs/examples.html | 86 + docs/files.html | 112 + docs/folderclosed.png | Bin 0 -> 616 bytes docs/folderopen.png | Bin 0 -> 597 bytes docs/functions.html | 91 + docs/functions_b.html | 90 + docs/functions_c.html | 104 + docs/functions_d.html | 88 + docs/functions_e.html | 103 + docs/functions_f.html | 100 + docs/functions_func.html | 85 + docs/functions_func_b.html | 90 + docs/functions_func_c.html | 100 + docs/functions_func_d.html | 88 + docs/functions_func_e.html | 103 + docs/functions_func_f.html | 100 + docs/functions_func_h.html | 91 + docs/functions_func_i.html | 127 + docs/functions_func_l.html | 144 + docs/functions_func_m.html | 88 + docs/functions_func_n.html | 105 + docs/functions_func_o.html | 151 + docs/functions_func_p.html | 119 + docs/functions_func_r.html | 167 + docs/functions_func_s.html | 109 + docs/functions_func_t.html | 103 + docs/functions_func_u.html | 85 + docs/functions_func_v.html | 94 + docs/functions_func_w.html | 85 + docs/functions_func_~.html | 85 + docs/functions_h.html | 91 + docs/functions_i.html | 131 + docs/functions_l.html | 144 + docs/functions_m.html | 88 + docs/functions_n.html | 105 + docs/functions_o.html | 154 + docs/functions_p.html | 119 + docs/functions_r.html | 167 + docs/functions_rela.html | 83 + docs/functions_s.html | 113 + docs/functions_t.html | 106 + docs/functions_type.html | 105 + docs/functions_u.html | 85 + docs/functions_v.html | 106 + docs/functions_vars.html | 90 + docs/functions_w.html | 85 + docs/functions_~.html | 85 + docs/globals.html | 298 ++ docs/globals_defs.html | 87 + docs/globals_func.html | 129 + docs/globals_vars.html | 228 + docs/hierarchy.html | 132 + docs/hpcombi_8hpp.html | 96 + docs/hpcombi_8hpp_source.html | 120 + docs/image_8cpp.html | 322 ++ docs/index.html | 103 + docs/jquery.js | 35 + docs/menu.js | 51 + docs/menudata.js | 141 + docs/namespaceHPCombi.html | 3936 +++++++++++++++++ docs/namespaceHPCombi_1_1detail.html | 137 + docs/namespaceHPCombi_1_1power__helper.html | 120 + docs/namespacelibsemigroups.html | 90 + docs/namespacemembers.html | 433 ++ docs/namespacemembers_func.html | 397 ++ docs/namespacemembers_type.html | 89 + docs/namespacemembers_vars.html | 107 + docs/namespaces.html | 116 + docs/namespacestd.html | 292 ++ docs/nav_f.png | Bin 0 -> 153 bytes docs/nav_g.png | Bin 0 -> 95 bytes docs/nav_h.png | Bin 0 -> 98 bytes docs/open.png | Bin 0 -> 123 bytes docs/pattern_8cpp.html | 329 ++ docs/perm16_8hpp.html | 134 + docs/perm16_8hpp_source.html | 425 ++ docs/perm16__impl_8hpp.html | 110 + docs/perm16__impl_8hpp_source.html | 535 +++ docs/perm__generic_8hpp.html | 114 + docs/perm__generic_8hpp_source.html | 180 + docs/perm__generic__impl_8hpp.html | 104 + docs/perm__generic__impl_8hpp_source.html | 219 + docs/power_8hpp.html | 124 + docs/power_8hpp_source.html | 143 + docs/search/all_0.html | 37 + docs/search/all_0.js | 17 + docs/search/all_1.html | 37 + docs/search/all_1.js | 8 + docs/search/all_10.html | 37 + docs/search/all_10.js | 16 + docs/search/all_11.html | 37 + docs/search/all_11.js | 4 + docs/search/all_12.html | 37 + docs/search/all_12.js | 12 + docs/search/all_13.html | 37 + docs/search/all_13.js | 4 + docs/search/all_14.html | 37 + docs/search/all_14.js | 4 + docs/search/all_2.html | 37 + docs/search/all_2.js | 31 + docs/search/all_3.html | 37 + docs/search/all_3.js | 6 + docs/search/all_4.html | 37 + docs/search/all_4.js | 23 + docs/search/all_5.html | 37 + docs/search/all_5.js | 13 + docs/search/all_6.html | 37 + docs/search/all_6.js | 6 + docs/search/all_7.html | 37 + docs/search/all_7.js | 33 + docs/search/all_8.html | 37 + docs/search/all_8.js | 27 + docs/search/all_9.html | 37 + docs/search/all_9.js | 27 + docs/search/all_a.html | 37 + docs/search/all_a.js | 19 + docs/search/all_b.html | 37 + docs/search/all_b.js | 15 + docs/search/all_c.html | 37 + docs/search/all_c.js | 16 + docs/search/all_d.html | 37 + docs/search/all_d.js | 38 + docs/search/all_e.html | 37 + docs/search/all_e.js | 41 + docs/search/all_f.html | 37 + docs/search/all_f.js | 39 + docs/search/classes_0.html | 37 + docs/search/classes_0.js | 4 + docs/search/classes_1.html | 37 + docs/search/classes_1.js | 22 + docs/search/classes_2.html | 37 + docs/search/classes_2.js | 5 + docs/search/classes_3.html | 37 + docs/search/classes_3.js | 12 + docs/search/classes_4.html | 37 + docs/search/classes_4.js | 4 + docs/search/classes_5.html | 37 + docs/search/classes_5.js | 6 + docs/search/classes_6.html | 37 + docs/search/classes_6.js | 4 + docs/search/classes_7.html | 37 + docs/search/classes_7.js | 7 + docs/search/classes_8.html | 37 + docs/search/classes_8.js | 6 + docs/search/classes_9.html | 37 + docs/search/classes_9.js | 6 + docs/search/close.svg | 31 + docs/search/defines_0.html | 37 + docs/search/defines_0.js | 4 + docs/search/defines_1.html | 37 + docs/search/defines_1.js | 4 + docs/search/files_0.html | 37 + docs/search/files_0.js | 4 + docs/search/files_1.html | 37 + docs/search/files_1.js | 6 + docs/search/files_2.html | 37 + docs/search/files_2.js | 4 + docs/search/files_3.html | 37 + docs/search/files_3.js | 4 + docs/search/files_4.html | 37 + docs/search/files_4.js | 5 + docs/search/files_5.html | 37 + docs/search/files_5.js | 4 + docs/search/files_6.html | 37 + docs/search/files_6.js | 4 + docs/search/files_7.html | 37 + docs/search/files_7.js | 9 + docs/search/files_8.html | 37 + docs/search/files_8.js | 6 + docs/search/files_9.html | 37 + docs/search/files_9.js | 4 + docs/search/files_a.html | 37 + docs/search/files_a.js | 5 + docs/search/files_b.html | 37 + docs/search/files_b.js | 5 + docs/search/functions_0.html | 37 + docs/search/functions_0.js | 7 + docs/search/functions_1.html | 37 + docs/search/functions_1.js | 5 + docs/search/functions_10.html | 37 + docs/search/functions_10.js | 4 + docs/search/functions_11.html | 37 + docs/search/functions_11.js | 6 + docs/search/functions_12.html | 37 + docs/search/functions_12.js | 4 + docs/search/functions_13.html | 37 + docs/search/functions_13.js | 4 + docs/search/functions_2.html | 37 + docs/search/functions_2.js | 9 + docs/search/functions_3.html | 37 + docs/search/functions_3.js | 5 + docs/search/functions_4.html | 37 + docs/search/functions_4.js | 16 + docs/search/functions_5.html | 37 + docs/search/functions_5.js | 11 + docs/search/functions_6.html | 37 + docs/search/functions_6.js | 19 + docs/search/functions_7.html | 37 + docs/search/functions_7.js | 24 + docs/search/functions_8.html | 37 + docs/search/functions_8.js | 25 + docs/search/functions_9.html | 37 + docs/search/functions_9.js | 13 + docs/search/functions_a.html | 37 + docs/search/functions_a.js | 13 + docs/search/functions_b.html | 37 + docs/search/functions_b.js | 16 + docs/search/functions_c.html | 37 + docs/search/functions_c.js | 30 + docs/search/functions_d.html | 37 + docs/search/functions_d.js | 37 + docs/search/functions_e.html | 37 + docs/search/functions_e.js | 21 + docs/search/functions_f.html | 37 + docs/search/functions_f.js | 12 + docs/search/mag_sel.svg | 74 + docs/search/namespaces_0.html | 37 + docs/search/namespaces_0.js | 6 + docs/search/namespaces_1.html | 37 + docs/search/namespaces_1.js | 4 + docs/search/namespaces_2.html | 37 + docs/search/namespaces_2.js | 4 + docs/search/nomatches.html | 13 + docs/search/pages_0.html | 37 + docs/search/pages_0.js | 4 + docs/search/related_0.html | 37 + docs/search/related_0.js | 4 + docs/search/search.css | 257 ++ docs/search/search.js | 816 ++++ docs/search/search_l.png | Bin 0 -> 567 bytes docs/search/search_m.png | Bin 0 -> 158 bytes docs/search/search_r.png | Bin 0 -> 553 bytes docs/search/searchdata.js | 42 + docs/search/typedefs_0.html | 37 + docs/search/typedefs_0.js | 4 + docs/search/typedefs_1.html | 37 + docs/search/typedefs_1.js | 4 + docs/search/typedefs_2.html | 37 + docs/search/typedefs_2.js | 5 + docs/search/typedefs_3.html | 37 + docs/search/typedefs_3.js | 4 + docs/search/typedefs_4.html | 37 + docs/search/typedefs_4.js | 4 + docs/search/typedefs_5.html | 37 + docs/search/typedefs_5.js | 4 + docs/search/typedefs_6.html | 37 + docs/search/typedefs_6.js | 5 + docs/search/variables_0.html | 37 + docs/search/variables_0.js | 11 + docs/search/variables_1.html | 37 + docs/search/variables_1.js | 4 + docs/search/variables_2.html | 37 + docs/search/variables_2.js | 5 + docs/search/variables_3.html | 37 + docs/search/variables_3.js | 5 + docs/search/variables_4.html | 37 + docs/search/variables_4.js | 6 + docs/search/variables_5.html | 37 + docs/search/variables_5.js | 5 + docs/search/variables_6.html | 37 + docs/search/variables_6.js | 6 + docs/search/variables_7.html | 37 + docs/search/variables_7.js | 4 + docs/search/variables_8.html | 37 + docs/search/variables_8.js | 5 + docs/search/variables_9.html | 37 + docs/search/variables_9.js | 4 + docs/search/variables_a.html | 37 + docs/search/variables_a.js | 20 + docs/search/variables_b.html | 37 + docs/search/variables_b.js | 4 + docs/splitbar.png | Bin 0 -> 314 bytes docs/stringmonoid_8cpp-example.html | 133 + docs/stringmonoid_8cpp.html | 136 + docs/structHPCombi_1_1PPerm16-members.html | 161 + docs/structHPCombi_1_1PPerm16.html | 674 +++ docs/structHPCombi_1_1PPerm16.png | Bin 0 -> 744 bytes docs/structHPCombi_1_1PTransf16-members.html | 152 + docs/structHPCombi_1_1PTransf16.html | 1049 +++++ docs/structHPCombi_1_1PTransf16.png | Bin 0 -> 1364 bytes docs/structHPCombi_1_1Perm16-members.html | 194 + docs/structHPCombi_1_1Perm16.html | 1475 ++++++ docs/structHPCombi_1_1Perm16.png | Bin 0 -> 958 bytes .../structHPCombi_1_1PermGeneric-members.html | 140 + docs/structHPCombi_1_1PermGeneric.html | 557 +++ docs/structHPCombi_1_1PermGeneric.png | Bin 0 -> 897 bytes docs/structHPCombi_1_1TPUBuild-members.html | 107 + docs/structHPCombi_1_1TPUBuild.html | 703 +++ docs/structHPCombi_1_1Transf16-members.html | 161 + docs/structHPCombi_1_1Transf16.html | 601 +++ docs/structHPCombi_1_1Transf16.png | Bin 0 -> 960 bytes docs/structHPCombi_1_1Vect16-members.html | 125 + docs/structHPCombi_1_1Vect16.html | 1099 +++++ docs/structHPCombi_1_1Vect16.png | Bin 0 -> 1371 bytes .../structHPCombi_1_1VectGeneric-members.html | 127 + docs/structHPCombi_1_1VectGeneric.html | 1225 +++++ ...bi_1_1power__helper_1_1Monoid-members.html | 91 + ...uctHPCombi_1_1power__helper_1_1Monoid.html | 199 + ...per_1_1Monoid_3_01Perm16_01_4-members.html | 91 + ...wer__helper_1_1Monoid_3_01Perm16_01_4.html | 164 + ...Monoid_3_01std_1_1string_01_4-members.html | 91 + ...lper_1_1Monoid_3_01std_1_1string_01_4.html | 162 + ...__to_3_01HPCombi_1_1epu8_01_4-members.html | 90 + ...1_1equal__to_3_01HPCombi_1_1epu8_01_4.html | 137 + ...ash_3_01HPCombi_1_1BMat8_01_4-members.html | 90 + ...std_1_1hash_3_01HPCombi_1_1BMat8_01_4.html | 127 + ...h_3_01HPCombi_1_1PPerm16_01_4-members.html | 90 + ...d_1_1hash_3_01HPCombi_1_1PPerm16_01_4.html | 130 + ...3_01HPCombi_1_1PTransf16_01_4-members.html | 90 + ...1_1hash_3_01HPCombi_1_1PTransf16_01_4.html | 130 + ...sh_3_01HPCombi_1_1Perm16_01_4-members.html | 90 + ...td_1_1hash_3_01HPCombi_1_1Perm16_01_4.html | 130 + ..._3_01Size_00_01Expo_01_4_01_4-members.html | 90 + ...mGeneric_3_01Size_00_01Expo_01_4_01_4.html | 129 + ..._3_01HPCombi_1_1Transf16_01_4-members.html | 90 + ..._1_1hash_3_01HPCombi_1_1Transf16_01_4.html | 130 + ...sh_3_01HPCombi_1_1Vect16_01_4-members.html | 90 + ...td_1_1hash_3_01HPCombi_1_1Vect16_01_4.html | 127 + ..._3_01Size_00_01Expo_01_4_01_4-members.html | 90 + ...tGeneric_3_01Size_00_01Expo_01_4_01_4.html | 129 + ...hash_3_01HPCombi_1_1epu8_01_4-members.html | 90 + ...tstd_1_1hash_3_01HPCombi_1_1epu8_01_4.html | 127 + ...less_3_01HPCombi_1_1epu8_01_4-members.html | 90 + ...tstd_1_1less_3_01HPCombi_1_1epu8_01_4.html | 137 + ...__to_3_01HPCombi_1_1epu8_01_4-members.html | 90 + ...t__equal__to_3_01HPCombi_1_1epu8_01_4.html | 137 + docs/sync_off.png | Bin 0 -> 853 bytes docs/sync_on.png | Bin 0 -> 845 bytes docs/tab_a.png | Bin 0 -> 142 bytes docs/tab_b.png | Bin 0 -> 169 bytes docs/tab_h.png | Bin 0 -> 177 bytes docs/tab_s.png | Bin 0 -> 184 bytes docs/tabs.css | 1 + docs/timer_8h.html | 105 + docs/timer_8h_source.html | 192 + docs/vect16_8hpp.html | 119 + docs/vect16_8hpp_source.html | 264 ++ docs/vect__generic_8hpp.html | 130 + docs/vect__generic_8hpp_source.html | 378 ++ 393 files changed, 45367 insertions(+) create mode 100644 docs/CF_8cpp.html create mode 100644 docs/RD_8cpp.html create mode 100644 docs/README_8md.html create mode 100644 docs/Renner_8cpp.html create mode 100644 docs/Trans_8cpp.html create mode 100644 docs/annotated.html create mode 100644 docs/arch_8hpp.html create mode 100644 docs/arch_8hpp_source.html create mode 100644 docs/bc_s.png create mode 100644 docs/bdwn.png create mode 100644 docs/bmat8_8hpp.html create mode 100644 docs/bmat8_8hpp_source.html create mode 100644 docs/bmat8__impl_8hpp.html create mode 100644 docs/bmat8__impl_8hpp_source.html create mode 100644 docs/classEqEpu8-members.html create mode 100644 docs/classEqEpu8.html create mode 100644 docs/classHPCombi_1_1BMat8-members.html create mode 100644 docs/classHPCombi_1_1BMat8.html create mode 100644 docs/classcommon__eval16.html create mode 100644 docs/classcommon__first__diff.html create mode 100644 docs/classcommon__horiz__max.html create mode 100644 docs/classcommon__horiz__min.html create mode 100644 docs/classcommon__horiz__sum.html create mode 100644 docs/classcommon__inverse.html create mode 100644 docs/classcommon__inverse__pperm.html create mode 100644 docs/classcommon__is__permutation.html create mode 100644 docs/classcommon__last__diff.html create mode 100644 docs/classcommon__left__weak__leq.html create mode 100644 docs/classcommon__lehmer.html create mode 100644 docs/classcommon__length.html create mode 100644 docs/classcommon__merge.html create mode 100644 docs/classcommon__nb__cycles.html create mode 100644 docs/classcommon__nb__descent.html create mode 100644 docs/classcommon__partial__max.html create mode 100644 docs/classcommon__partial__min.html create mode 100644 docs/classcommon__partial__sums.html create mode 100644 docs/classcommon__permutation__of.html create mode 100644 docs/classes.html create mode 100644 docs/classlibsemigroups_1_1Timer-members.html create mode 100644 docs/classlibsemigroups_1_1Timer.html create mode 100644 docs/closed.png create mode 100644 docs/debug_8hpp.html create mode 100644 docs/debug_8hpp_source.html create mode 100644 docs/dir_0a22e5c2a89343e7af7981e1b76abb37.html create mode 100644 docs/dir_d28a4824dc47e487b107a5db32ef43c4.html create mode 100644 docs/dir_d44c64559bbebec7f509842c48db8b23.html create mode 100644 docs/doc.png create mode 100644 docs/doxygen.css create mode 100644 docs/doxygen.svg create mode 100644 docs/dynsections.js create mode 100644 docs/epu8_8hpp.html create mode 100644 docs/epu8_8hpp_source.html create mode 100644 docs/epu8__impl_8hpp.html create mode 100644 docs/epu8__impl_8hpp_source.html create mode 100644 docs/examples.html create mode 100644 docs/files.html create mode 100644 docs/folderclosed.png create mode 100644 docs/folderopen.png create mode 100644 docs/functions.html create mode 100644 docs/functions_b.html create mode 100644 docs/functions_c.html create mode 100644 docs/functions_d.html create mode 100644 docs/functions_e.html create mode 100644 docs/functions_f.html create mode 100644 docs/functions_func.html create mode 100644 docs/functions_func_b.html create mode 100644 docs/functions_func_c.html create mode 100644 docs/functions_func_d.html create mode 100644 docs/functions_func_e.html create mode 100644 docs/functions_func_f.html create mode 100644 docs/functions_func_h.html create mode 100644 docs/functions_func_i.html create mode 100644 docs/functions_func_l.html create mode 100644 docs/functions_func_m.html create mode 100644 docs/functions_func_n.html create mode 100644 docs/functions_func_o.html create mode 100644 docs/functions_func_p.html create mode 100644 docs/functions_func_r.html create mode 100644 docs/functions_func_s.html create mode 100644 docs/functions_func_t.html create mode 100644 docs/functions_func_u.html create mode 100644 docs/functions_func_v.html create mode 100644 docs/functions_func_w.html create mode 100644 docs/functions_func_~.html create mode 100644 docs/functions_h.html create mode 100644 docs/functions_i.html create mode 100644 docs/functions_l.html create mode 100644 docs/functions_m.html create mode 100644 docs/functions_n.html create mode 100644 docs/functions_o.html create mode 100644 docs/functions_p.html create mode 100644 docs/functions_r.html create mode 100644 docs/functions_rela.html create mode 100644 docs/functions_s.html create mode 100644 docs/functions_t.html create mode 100644 docs/functions_type.html create mode 100644 docs/functions_u.html create mode 100644 docs/functions_v.html create mode 100644 docs/functions_vars.html create mode 100644 docs/functions_w.html create mode 100644 docs/functions_~.html create mode 100644 docs/globals.html create mode 100644 docs/globals_defs.html create mode 100644 docs/globals_func.html create mode 100644 docs/globals_vars.html create mode 100644 docs/hierarchy.html create mode 100644 docs/hpcombi_8hpp.html create mode 100644 docs/hpcombi_8hpp_source.html create mode 100644 docs/image_8cpp.html create mode 100644 docs/index.html create mode 100644 docs/jquery.js create mode 100644 docs/menu.js create mode 100644 docs/menudata.js create mode 100644 docs/namespaceHPCombi.html create mode 100644 docs/namespaceHPCombi_1_1detail.html create mode 100644 docs/namespaceHPCombi_1_1power__helper.html create mode 100644 docs/namespacelibsemigroups.html create mode 100644 docs/namespacemembers.html create mode 100644 docs/namespacemembers_func.html create mode 100644 docs/namespacemembers_type.html create mode 100644 docs/namespacemembers_vars.html create mode 100644 docs/namespaces.html create mode 100644 docs/namespacestd.html create mode 100644 docs/nav_f.png create mode 100644 docs/nav_g.png create mode 100644 docs/nav_h.png create mode 100644 docs/open.png create mode 100644 docs/pattern_8cpp.html create mode 100644 docs/perm16_8hpp.html create mode 100644 docs/perm16_8hpp_source.html create mode 100644 docs/perm16__impl_8hpp.html create mode 100644 docs/perm16__impl_8hpp_source.html create mode 100644 docs/perm__generic_8hpp.html create mode 100644 docs/perm__generic_8hpp_source.html create mode 100644 docs/perm__generic__impl_8hpp.html create mode 100644 docs/perm__generic__impl_8hpp_source.html create mode 100644 docs/power_8hpp.html create mode 100644 docs/power_8hpp_source.html create mode 100644 docs/search/all_0.html create mode 100644 docs/search/all_0.js create mode 100644 docs/search/all_1.html create mode 100644 docs/search/all_1.js create mode 100644 docs/search/all_10.html create mode 100644 docs/search/all_10.js create mode 100644 docs/search/all_11.html create mode 100644 docs/search/all_11.js create mode 100644 docs/search/all_12.html create mode 100644 docs/search/all_12.js create mode 100644 docs/search/all_13.html create mode 100644 docs/search/all_13.js create mode 100644 docs/search/all_14.html create mode 100644 docs/search/all_14.js create mode 100644 docs/search/all_2.html create mode 100644 docs/search/all_2.js create mode 100644 docs/search/all_3.html create mode 100644 docs/search/all_3.js create mode 100644 docs/search/all_4.html create mode 100644 docs/search/all_4.js create mode 100644 docs/search/all_5.html create mode 100644 docs/search/all_5.js create mode 100644 docs/search/all_6.html create mode 100644 docs/search/all_6.js create mode 100644 docs/search/all_7.html create mode 100644 docs/search/all_7.js create mode 100644 docs/search/all_8.html create mode 100644 docs/search/all_8.js create mode 100644 docs/search/all_9.html create mode 100644 docs/search/all_9.js create mode 100644 docs/search/all_a.html create mode 100644 docs/search/all_a.js create mode 100644 docs/search/all_b.html create mode 100644 docs/search/all_b.js create mode 100644 docs/search/all_c.html create mode 100644 docs/search/all_c.js create mode 100644 docs/search/all_d.html create mode 100644 docs/search/all_d.js create mode 100644 docs/search/all_e.html create mode 100644 docs/search/all_e.js create mode 100644 docs/search/all_f.html create mode 100644 docs/search/all_f.js create mode 100644 docs/search/classes_0.html create mode 100644 docs/search/classes_0.js create mode 100644 docs/search/classes_1.html create mode 100644 docs/search/classes_1.js create mode 100644 docs/search/classes_2.html create mode 100644 docs/search/classes_2.js create mode 100644 docs/search/classes_3.html create mode 100644 docs/search/classes_3.js create mode 100644 docs/search/classes_4.html create mode 100644 docs/search/classes_4.js create mode 100644 docs/search/classes_5.html create mode 100644 docs/search/classes_5.js create mode 100644 docs/search/classes_6.html create mode 100644 docs/search/classes_6.js create mode 100644 docs/search/classes_7.html create mode 100644 docs/search/classes_7.js create mode 100644 docs/search/classes_8.html create mode 100644 docs/search/classes_8.js create mode 100644 docs/search/classes_9.html create mode 100644 docs/search/classes_9.js create mode 100644 docs/search/close.svg create mode 100644 docs/search/defines_0.html create mode 100644 docs/search/defines_0.js create mode 100644 docs/search/defines_1.html create mode 100644 docs/search/defines_1.js create mode 100644 docs/search/files_0.html create mode 100644 docs/search/files_0.js create mode 100644 docs/search/files_1.html create mode 100644 docs/search/files_1.js create mode 100644 docs/search/files_2.html create mode 100644 docs/search/files_2.js create mode 100644 docs/search/files_3.html create mode 100644 docs/search/files_3.js create mode 100644 docs/search/files_4.html create mode 100644 docs/search/files_4.js create mode 100644 docs/search/files_5.html create mode 100644 docs/search/files_5.js create mode 100644 docs/search/files_6.html create mode 100644 docs/search/files_6.js create mode 100644 docs/search/files_7.html create mode 100644 docs/search/files_7.js create mode 100644 docs/search/files_8.html create mode 100644 docs/search/files_8.js create mode 100644 docs/search/files_9.html create mode 100644 docs/search/files_9.js create mode 100644 docs/search/files_a.html create mode 100644 docs/search/files_a.js create mode 100644 docs/search/files_b.html create mode 100644 docs/search/files_b.js create mode 100644 docs/search/functions_0.html create mode 100644 docs/search/functions_0.js create mode 100644 docs/search/functions_1.html create mode 100644 docs/search/functions_1.js create mode 100644 docs/search/functions_10.html create mode 100644 docs/search/functions_10.js create mode 100644 docs/search/functions_11.html create mode 100644 docs/search/functions_11.js create mode 100644 docs/search/functions_12.html create mode 100644 docs/search/functions_12.js create mode 100644 docs/search/functions_13.html create mode 100644 docs/search/functions_13.js create mode 100644 docs/search/functions_2.html create mode 100644 docs/search/functions_2.js create mode 100644 docs/search/functions_3.html create mode 100644 docs/search/functions_3.js create mode 100644 docs/search/functions_4.html create mode 100644 docs/search/functions_4.js create mode 100644 docs/search/functions_5.html create mode 100644 docs/search/functions_5.js create mode 100644 docs/search/functions_6.html create mode 100644 docs/search/functions_6.js create mode 100644 docs/search/functions_7.html create mode 100644 docs/search/functions_7.js create mode 100644 docs/search/functions_8.html create mode 100644 docs/search/functions_8.js create mode 100644 docs/search/functions_9.html create mode 100644 docs/search/functions_9.js create mode 100644 docs/search/functions_a.html create mode 100644 docs/search/functions_a.js create mode 100644 docs/search/functions_b.html create mode 100644 docs/search/functions_b.js create mode 100644 docs/search/functions_c.html create mode 100644 docs/search/functions_c.js create mode 100644 docs/search/functions_d.html create mode 100644 docs/search/functions_d.js create mode 100644 docs/search/functions_e.html create mode 100644 docs/search/functions_e.js create mode 100644 docs/search/functions_f.html create mode 100644 docs/search/functions_f.js create mode 100644 docs/search/mag_sel.svg create mode 100644 docs/search/namespaces_0.html create mode 100644 docs/search/namespaces_0.js create mode 100644 docs/search/namespaces_1.html create mode 100644 docs/search/namespaces_1.js create mode 100644 docs/search/namespaces_2.html create mode 100644 docs/search/namespaces_2.js create mode 100644 docs/search/nomatches.html create mode 100644 docs/search/pages_0.html create mode 100644 docs/search/pages_0.js create mode 100644 docs/search/related_0.html create mode 100644 docs/search/related_0.js create mode 100644 docs/search/search.css create mode 100644 docs/search/search.js create mode 100644 docs/search/search_l.png create mode 100644 docs/search/search_m.png create mode 100644 docs/search/search_r.png create mode 100644 docs/search/searchdata.js create mode 100644 docs/search/typedefs_0.html create mode 100644 docs/search/typedefs_0.js create mode 100644 docs/search/typedefs_1.html create mode 100644 docs/search/typedefs_1.js create mode 100644 docs/search/typedefs_2.html create mode 100644 docs/search/typedefs_2.js create mode 100644 docs/search/typedefs_3.html create mode 100644 docs/search/typedefs_3.js create mode 100644 docs/search/typedefs_4.html create mode 100644 docs/search/typedefs_4.js create mode 100644 docs/search/typedefs_5.html create mode 100644 docs/search/typedefs_5.js create mode 100644 docs/search/typedefs_6.html create mode 100644 docs/search/typedefs_6.js create mode 100644 docs/search/variables_0.html create mode 100644 docs/search/variables_0.js create mode 100644 docs/search/variables_1.html create mode 100644 docs/search/variables_1.js create mode 100644 docs/search/variables_2.html create mode 100644 docs/search/variables_2.js create mode 100644 docs/search/variables_3.html create mode 100644 docs/search/variables_3.js create mode 100644 docs/search/variables_4.html create mode 100644 docs/search/variables_4.js create mode 100644 docs/search/variables_5.html create mode 100644 docs/search/variables_5.js create mode 100644 docs/search/variables_6.html create mode 100644 docs/search/variables_6.js create mode 100644 docs/search/variables_7.html create mode 100644 docs/search/variables_7.js create mode 100644 docs/search/variables_8.html create mode 100644 docs/search/variables_8.js create mode 100644 docs/search/variables_9.html create mode 100644 docs/search/variables_9.js create mode 100644 docs/search/variables_a.html create mode 100644 docs/search/variables_a.js create mode 100644 docs/search/variables_b.html create mode 100644 docs/search/variables_b.js create mode 100644 docs/splitbar.png create mode 100644 docs/stringmonoid_8cpp-example.html create mode 100644 docs/stringmonoid_8cpp.html create mode 100644 docs/structHPCombi_1_1PPerm16-members.html create mode 100644 docs/structHPCombi_1_1PPerm16.html create mode 100644 docs/structHPCombi_1_1PPerm16.png create mode 100644 docs/structHPCombi_1_1PTransf16-members.html create mode 100644 docs/structHPCombi_1_1PTransf16.html create mode 100644 docs/structHPCombi_1_1PTransf16.png create mode 100644 docs/structHPCombi_1_1Perm16-members.html create mode 100644 docs/structHPCombi_1_1Perm16.html create mode 100644 docs/structHPCombi_1_1Perm16.png create mode 100644 docs/structHPCombi_1_1PermGeneric-members.html create mode 100644 docs/structHPCombi_1_1PermGeneric.html create mode 100644 docs/structHPCombi_1_1PermGeneric.png create mode 100644 docs/structHPCombi_1_1TPUBuild-members.html create mode 100644 docs/structHPCombi_1_1TPUBuild.html create mode 100644 docs/structHPCombi_1_1Transf16-members.html create mode 100644 docs/structHPCombi_1_1Transf16.html create mode 100644 docs/structHPCombi_1_1Transf16.png create mode 100644 docs/structHPCombi_1_1Vect16-members.html create mode 100644 docs/structHPCombi_1_1Vect16.html create mode 100644 docs/structHPCombi_1_1Vect16.png create mode 100644 docs/structHPCombi_1_1VectGeneric-members.html create mode 100644 docs/structHPCombi_1_1VectGeneric.html create mode 100644 docs/structHPCombi_1_1power__helper_1_1Monoid-members.html create mode 100644 docs/structHPCombi_1_1power__helper_1_1Monoid.html create mode 100644 docs/structHPCombi_1_1power__helper_1_1Monoid_3_01Perm16_01_4-members.html create mode 100644 docs/structHPCombi_1_1power__helper_1_1Monoid_3_01Perm16_01_4.html create mode 100644 docs/structHPCombi_1_1power__helper_1_1Monoid_3_01std_1_1string_01_4-members.html create mode 100644 docs/structHPCombi_1_1power__helper_1_1Monoid_3_01std_1_1string_01_4.html create mode 100644 docs/structstd_1_1equal__to_3_01HPCombi_1_1epu8_01_4-members.html create mode 100644 docs/structstd_1_1equal__to_3_01HPCombi_1_1epu8_01_4.html create mode 100644 docs/structstd_1_1hash_3_01HPCombi_1_1BMat8_01_4-members.html create mode 100644 docs/structstd_1_1hash_3_01HPCombi_1_1BMat8_01_4.html create mode 100644 docs/structstd_1_1hash_3_01HPCombi_1_1PPerm16_01_4-members.html create mode 100644 docs/structstd_1_1hash_3_01HPCombi_1_1PPerm16_01_4.html create mode 100644 docs/structstd_1_1hash_3_01HPCombi_1_1PTransf16_01_4-members.html create mode 100644 docs/structstd_1_1hash_3_01HPCombi_1_1PTransf16_01_4.html create mode 100644 docs/structstd_1_1hash_3_01HPCombi_1_1Perm16_01_4-members.html create mode 100644 docs/structstd_1_1hash_3_01HPCombi_1_1Perm16_01_4.html create mode 100644 docs/structstd_1_1hash_3_01HPCombi_1_1PermGeneric_3_01Size_00_01Expo_01_4_01_4-members.html create mode 100644 docs/structstd_1_1hash_3_01HPCombi_1_1PermGeneric_3_01Size_00_01Expo_01_4_01_4.html create mode 100644 docs/structstd_1_1hash_3_01HPCombi_1_1Transf16_01_4-members.html create mode 100644 docs/structstd_1_1hash_3_01HPCombi_1_1Transf16_01_4.html create mode 100644 docs/structstd_1_1hash_3_01HPCombi_1_1Vect16_01_4-members.html create mode 100644 docs/structstd_1_1hash_3_01HPCombi_1_1Vect16_01_4.html create mode 100644 docs/structstd_1_1hash_3_01HPCombi_1_1VectGeneric_3_01Size_00_01Expo_01_4_01_4-members.html create mode 100644 docs/structstd_1_1hash_3_01HPCombi_1_1VectGeneric_3_01Size_00_01Expo_01_4_01_4.html create mode 100644 docs/structstd_1_1hash_3_01HPCombi_1_1epu8_01_4-members.html create mode 100644 docs/structstd_1_1hash_3_01HPCombi_1_1epu8_01_4.html create mode 100644 docs/structstd_1_1less_3_01HPCombi_1_1epu8_01_4-members.html create mode 100644 docs/structstd_1_1less_3_01HPCombi_1_1epu8_01_4.html create mode 100644 docs/structstd_1_1not__equal__to_3_01HPCombi_1_1epu8_01_4-members.html create mode 100644 docs/structstd_1_1not__equal__to_3_01HPCombi_1_1epu8_01_4.html create mode 100644 docs/sync_off.png create mode 100644 docs/sync_on.png create mode 100644 docs/tab_a.png create mode 100644 docs/tab_b.png create mode 100644 docs/tab_h.png create mode 100644 docs/tab_s.png create mode 100644 docs/tabs.css create mode 100644 docs/timer_8h.html create mode 100644 docs/timer_8h_source.html create mode 100644 docs/vect16_8hpp.html create mode 100644 docs/vect16_8hpp_source.html create mode 100644 docs/vect__generic_8hpp.html create mode 100644 docs/vect__generic_8hpp_source.html diff --git a/docs/CF_8cpp.html b/docs/CF_8cpp.html new file mode 100644 index 00000000..e305ebbc --- /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 v0.0.6
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
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..ab71aaba --- /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 v0.0.6
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
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..0144b9ce --- /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 v0.0.6
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+
/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..df502ead --- /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 v0.0.6
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
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..6835c9c3 --- /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 v0.0.6
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
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..d9db0ff0 --- /dev/null +++ b/docs/annotated.html @@ -0,0 +1,135 @@ + + + + + + + +HPCombi: Class List + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v0.0.6
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
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..68cf30de --- /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 v0.0.6
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
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..47f3b6ed --- /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 v0.0.6
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
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_INCLUDED
+
17 #define HPCOMBI_ARCH_HPP_INCLUDED
+
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_INCLUDED
+
+ + + + diff --git a/docs/bc_s.png b/docs/bc_s.png new file mode 100644 index 0000000000000000000000000000000000000000..224b29aa9847d5a4b3902efd602b7ddf7d33e6c2 GIT binary patch literal 676 zcmV;V0$crwP)y__>=_9%My z{n931IS})GlGUF8K#6VIbs%684A^L3@%PlP2>_sk`UWPq@f;rU*V%rPy_ekbhXT&s z(GN{DxFv}*vZp`F>S!r||M`I*nOwwKX+BC~3P5N3-)Y{65c;ywYiAh-1*hZcToLHK ztpl1xomJ+Yb}K(cfbJr2=GNOnT!UFA7Vy~fBz8?J>XHsbZoDad^8PxfSa0GDgENZS zuLCEqzb*xWX2CG*b&5IiO#NzrW*;`VC9455M`o1NBh+(k8~`XCEEoC1Ybwf;vr4K3 zg|EB<07?SOqHp9DhLpS&bzgo70I+ghB_#)K7H%AMU3v}xuyQq9&Bm~++VYhF09a+U zl7>n7Jjm$K#b*FONz~fj;I->Bf;ule1prFN9FovcDGBkpg>)O*-}eLnC{6oZHZ$o% zXKW$;0_{8hxHQ>l;_*HATI(`7t#^{$(zLe}h*mqwOc*nRY9=?Sx4OOeVIfI|0V(V2 zBrW#G7Ss9wvzr@>H*`r>zE z+e8bOBgqIgldUJlG(YUDviMB`9+DH8n-s9SXRLyJHO1!=wY^79WYZMTa(wiZ!zP66 zA~!21vmF3H2{ngD;+`6j#~6j;$*f*G_2ZD1E;9(yaw7d-QnSCpK(cR1zU3qU0000< KMNUMnLSTYoA~SLT literal 0 HcmV?d00001 diff --git a/docs/bdwn.png b/docs/bdwn.png new file mode 100644 index 0000000000000000000000000000000000000000..940a0b950443a0bb1b216ac03c45b8a16c955452 GIT binary patch literal 147 zcmeAS@N?(olHy`uVBq!ia0vp^>_E)H!3HEvS)PKZC{Gv1kP61Pb5HX&C2wk~_T + + + + + + +HPCombi: /home/florent/src/HPCombi/include/hpcombi/bmat8.hpp File Reference + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v0.0.6
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
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..b0be221d --- /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 v0.0.6
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
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_INCLUDED
+
21 #define HPCOMBI_BMAT8_HPP_INCLUDED
+
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_INCLUDED
+
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:309
+
BMat8 row_space_basis() const noexcept
Returns a canonical basis of the row space of this.
Definition: bmat8_impl.hpp:232
+
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:354
+
static void transpose2(BMat8 &, BMat8 &) noexcept
Transpose two matrices at once.
Definition: bmat8_impl.hpp:183
+
uint64_t row_space_size_bitset() const noexcept
Returns the cardinality of the row space of this.
Definition: bmat8_impl.hpp:284
+
static BMat8 row_permutation_matrix(Perm16 p) noexcept
Returns the matrix associated to the permutation p by rows.
Definition: bmat8_impl.hpp:429
+
BMat8 mult_transpose(BMat8 const &that) const noexcept
Returns the matrix product of this and the transpose of that.
Definition: bmat8_impl.hpp:203
+
BMat8(BMat8 const &) noexcept=default
A constructor.
+
BMat8 transpose_maskd() const noexcept
Returns the transpose of this.
Definition: bmat8_impl.hpp:169
+
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:325
+
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:146
+
static BMat8 col_permutation_matrix(Perm16 p) noexcept
Returns the matrix associated to the permutation p by columns.
Definition: bmat8_impl.hpp:433
+
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:344
+
BMat8 row_permuted(Perm16 p) const noexcept
Returns the matrix whose rows have been permuted according to p.
Definition: bmat8_impl.hpp:417
+
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:333
+
std::ostream & write(std::ostream &os) const
Write this on os.
Definition: bmat8_impl.hpp:477
+
void row_space_bitset(epu8 &res1, epu8 &res2) const noexcept
Returns the the row space of this as 256 bits.
Definition: bmat8_impl.hpp:269
+
Perm16 right_perm_action_on_basis(BMat8) const noexcept
Give the permutation whose right multiplication change *this to other.
Definition: bmat8_impl.hpp:468
+
std::bitset< 256 > row_space_bitset_ref() const
Returns the the row space of this.
Definition: bmat8_impl.hpp:368
+
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:425
+
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:396
+
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:157
+
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:400
+
size_t nr_rows() const noexcept
Returns the number of non-zero rows of this.
Definition: bmat8_impl.hpp:409
+
void set(size_t i, size_t j, bool val) noexcept
Sets the (i, j)th position to val.
Definition: bmat8_impl.hpp:104
+
static BMat8 random()
Returns a random BMat8.
Definition: bmat8_impl.hpp:128
+
bool operator()(size_t i, size_t j) const noexcept
Returns the entry in the (i, j)th position.
Definition: bmat8_impl.hpp:98
+
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:293
+
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:390
+
Perm16 right_perm_action_on_basis_ref(BMat8) const
Give the permutation whose right multiplication change *this to other.
Definition: bmat8_impl.hpp:437
+ +
#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..0f39596e --- /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 v0.0.6
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
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..39f48311 --- /dev/null +++ b/docs/bmat8__impl_8hpp_source.html @@ -0,0 +1,640 @@ + + + + + + + +HPCombi: /home/florent/src/HPCombi/include/hpcombi/bmat8_impl.hpp Source File + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v0.0.6
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
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 namespace HPCombi {
+
22 static_assert(std::is_trivial<BMat8>(), "BMat8 is not a trivial class!");
+
23 
+
24 static const constexpr std::array<uint64_t, 8> ROW_MASK = {
+
25  {0xff00000000000000, 0xff000000000000, 0xff0000000000, 0xff00000000,
+
26  0xff000000, 0xff0000, 0xff00, 0xff}};
+
27 
+
28 static const constexpr std::array<uint64_t, 8> COL_MASK = {
+
29  0x8080808080808080, 0x4040404040404040, 0x2020202020202020,
+
30  0x1010101010101010, 0x808080808080808, 0x404040404040404,
+
31  0x202020202020202, 0x101010101010101};
+
32 
+
33 static const constexpr std::array<uint64_t, 64> BIT_MASK = {{0x8000000000000000,
+
34  0x4000000000000000,
+
35  0x2000000000000000,
+
36  0x1000000000000000,
+
37  0x800000000000000,
+
38  0x400000000000000,
+
39  0x200000000000000,
+
40  0x100000000000000,
+
41  0x80000000000000,
+
42  0x40000000000000,
+
43  0x20000000000000,
+
44  0x10000000000000,
+
45  0x8000000000000,
+
46  0x4000000000000,
+
47  0x2000000000000,
+
48  0x1000000000000,
+
49  0x800000000000,
+
50  0x400000000000,
+
51  0x200000000000,
+
52  0x100000000000,
+
53  0x80000000000,
+
54  0x40000000000,
+
55  0x20000000000,
+
56  0x10000000000,
+
57  0x8000000000,
+
58  0x4000000000,
+
59  0x2000000000,
+
60  0x1000000000,
+
61  0x800000000,
+
62  0x400000000,
+
63  0x200000000,
+
64  0x100000000,
+
65  0x80000000,
+
66  0x40000000,
+
67  0x20000000,
+
68  0x10000000,
+
69  0x8000000,
+
70  0x4000000,
+
71  0x2000000,
+
72  0x1000000,
+
73  0x800000,
+
74  0x400000,
+
75  0x200000,
+
76  0x100000,
+
77  0x80000,
+
78  0x40000,
+
79  0x20000,
+
80  0x10000,
+
81  0x8000,
+
82  0x4000,
+
83  0x2000,
+
84  0x1000,
+
85  0x800,
+
86  0x400,
+
87  0x200,
+
88  0x100,
+
89  0x80,
+
90  0x40,
+
91  0x20,
+
92  0x10,
+
93  0x8,
+
94  0x4,
+
95  0x2,
+
96  0x1}};
+
97 
+
98 inline bool BMat8::operator()(size_t i, size_t j) const noexcept {
+
99  HPCOMBI_ASSERT(i < 8);
+
100  HPCOMBI_ASSERT(j < 8);
+
101  return (_data << (8 * i + j)) >> 63;
+
102 }
+
103 
+
104 inline void BMat8::set(size_t i, size_t j, bool val) noexcept {
+
105  HPCOMBI_ASSERT(i < 8);
+
106  HPCOMBI_ASSERT(j < 8);
+
107  _data ^= (-val ^ _data) & BIT_MASK[8 * i + j];
+
108 }
+
109 
+
110 inline BMat8::BMat8(std::vector<std::vector<bool>> const &mat) {
+
111  HPCOMBI_ASSERT(mat.size() <= 8);
+
112  HPCOMBI_ASSERT(0 < mat.size());
+
113  _data = 0;
+
114  uint64_t pow = 1;
+
115  pow = pow << 63;
+
116  for (auto const &row : mat) {
+
117  HPCOMBI_ASSERT(row.size() == mat.size());
+
118  for (auto entry : row) {
+
119  if (entry) {
+
120  _data ^= pow;
+
121  }
+
122  pow = pow >> 1;
+
123  }
+
124  pow = pow >> (8 - mat.size());
+
125  }
+
126 }
+
127 
+ +
129  static std::random_device _rd;
+
130  static std::mt19937 _gen(_rd());
+
131  static std::uniform_int_distribution<uint64_t> _dist(0, 0xffffffffffffffff);
+
132 
+
133  return BMat8(_dist(_gen));
+
134 }
+
135 
+
136 inline BMat8 BMat8::random(size_t const dim) {
+
137  HPCOMBI_ASSERT(0 < dim && dim <= 8);
+
138  BMat8 bm = BMat8::random();
+
139  for (size_t i = dim; i < 8; ++i) {
+
140  bm._data &= ~ROW_MASK[i];
+
141  bm._data &= ~COL_MASK[i];
+
142  }
+
143  return bm;
+
144 }
+
145 
+
146 inline BMat8 BMat8::transpose() const noexcept {
+
147  uint64_t x = _data;
+
148  uint64_t y = (x ^ (x >> 7)) & 0xAA00AA00AA00AA;
+
149  x = x ^ y ^ (y << 7);
+
150  y = (x ^ (x >> 14)) & 0xCCCC0000CCCC;
+
151  x = x ^ y ^ (y << 14);
+
152  y = (x ^ (x >> 28)) & 0xF0F0F0F0;
+
153  x = x ^ y ^ (y << 28);
+
154  return BMat8(x);
+
155 }
+
156 
+
157 inline BMat8 BMat8::transpose_mask() const noexcept {
+
158  epu8 x = simde_mm_set_epi64x(_data, _data << 1);
+
159  uint64_t res = simde_mm_movemask_epi8(x);
+
160  x = x << Epu8(2);
+
161  res = res << 16 | 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  return BMat8(res);
+
167 }
+
168 
+
169 inline BMat8 BMat8::transpose_maskd() const noexcept {
+
170  uint64_t res =
+
171  simde_mm_movemask_epi8(simde_mm_set_epi64x(_data, _data << 1));
+
172  res = res << 16 |
+
173  simde_mm_movemask_epi8(simde_mm_set_epi64x(_data << 2, _data << 3));
+
174  res = res << 16 |
+
175  simde_mm_movemask_epi8(simde_mm_set_epi64x(_data << 4, _data << 5));
+
176  res = res << 16 |
+
177  simde_mm_movemask_epi8(simde_mm_set_epi64x(_data << 6, _data << 7));
+
178  return BMat8(res);
+
179 }
+
180 
+
181 using epu64 = uint64_t __attribute__((__vector_size__(16), __may_alias__));
+
182 
+
183 inline void BMat8::transpose2(BMat8 &a, BMat8 &b) noexcept {
+
184  epu64 x = simde_mm_set_epi64x(a._data, b._data);
+
185  epu64 y = (x ^ (x >> 7)) & (epu64{0xAA00AA00AA00AA, 0xAA00AA00AA00AA});
+
186  x = x ^ y ^ (y << 7);
+
187  y = (x ^ (x >> 14)) & (epu64{0xCCCC0000CCCC, 0xCCCC0000CCCC});
+
188  x = x ^ y ^ (y << 14);
+
189  y = (x ^ (x >> 28)) & (epu64{0xF0F0F0F0, 0xF0F0F0F0});
+
190  x = x ^ y ^ (y << 28);
+
191  a._data = simde_mm_extract_epi64(x, 1);
+
192  b._data = simde_mm_extract_epi64(x, 0);
+
193 }
+
194 
+
195 static constexpr epu8 rotlow{7, 0, 1, 2, 3, 4, 5, 6};
+
196 static constexpr epu8 rothigh{0, 1, 2, 3, 4, 5, 6, 7,
+
197  15, 8, 9, 10, 11, 12, 13, 14};
+
198 static constexpr epu8 rotboth{7, 0, 1, 2, 3, 4, 5, 6,
+
199  15, 8, 9, 10, 11, 12, 13, 14};
+
200 static constexpr epu8 rot2{6, 7, 0, 1, 2, 3, 4, 5,
+
201  14, 15, 8, 9, 10, 11, 12, 13};
+
202 
+
203 inline BMat8 BMat8::mult_transpose(BMat8 const &that) const noexcept {
+
204  epu8 x = simde_mm_set_epi64x(_data, _data);
+
205  epu8 y = simde_mm_shuffle_epi8(simde_mm_set_epi64x(that._data, that._data),
+
206  rothigh);
+
207  epu8 data{};
+
208  epu8 diag{0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80,
+
209  0x80, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40};
+
210  for (int i = 0; i < 4; ++i) {
+
211  data |= ((x & y) != epu8{}) & diag;
+
212  y = simde_mm_shuffle_epi8(y, rot2);
+
213  diag = simde_mm_shuffle_epi8(diag, rot2);
+
214  }
+
215  return BMat8(simde_mm_extract_epi64(data, 0) |
+
216  simde_mm_extract_epi64(data, 1));
+
217 }
+
218 
+
219 inline epu8 BMat8::row_space_basis_internal() const noexcept {
+
220  epu8 res = remove_dups(revsorted8(simde_mm_set_epi64x(0, _data)));
+
221  epu8 rescy = res;
+
222  // We now compute the union of all the included different rows
+
223  epu8 orincl{};
+
224  for (int i = 0; i < 7; i++) {
+
225  rescy = permuted(rescy, rotlow);
+
226  orincl |= ((rescy | res) == res) & rescy;
+
227  }
+
228  res = (res != orincl) & res;
+
229  return res;
+
230 }
+
231 
+
232 inline BMat8 BMat8::row_space_basis() const noexcept {
+
233  return BMat8(
+
234  simde_mm_extract_epi64(sorted8(row_space_basis_internal()), 0));
+
235 }
+
236 
+
237 #if defined(FF)
+
238 #error FF is defined !
+
239 #endif // FF
+
240 #define FF 0xff
+
241 
+
242 constexpr std::array<epu8, 4> masks{
+
243  {// clang-format off
+
244  {FF, 0,FF, 0,FF, 0,FF, 0,FF, 0,FF, 0,FF, 0,FF, 0},
+
245  {FF,FF, 1, 1,FF,FF, 1, 1,FF,FF, 1, 1,FF,FF, 1, 1},
+
246  {FF,FF,FF,FF, 2, 2, 2, 2,FF,FF,FF,FF, 2, 2, 2, 2},
+
247  {FF,FF,FF,FF,FF,FF,FF,FF, 3, 3, 3, 3, 3, 3, 3, 3}
+
248  }};
+
249 #undef FF
+
250 
+
251 static const epu8 shiftres{1, 2, 4, 8, 0x10, 0x20, 0x40, 0x80};
+
252 
+
253 namespace detail {
+
254 
+
255 inline void row_space_update_bitset(epu8 block, epu8 &set0, epu8 &set1) noexcept {
+
256  static const epu8 bound08 = simde_mm_slli_epi32(
+
257  static_cast<simde__m128i>(Epu8.id()), 3); // shift for *8
+
258  static const epu8 bound18 = bound08 + Epu8(0x80);
+
259  for (size_t slice8 = 0; slice8 < 16; slice8++) {
+
260  epu8 bm5 = Epu8(0xf8) & block; /* 11111000 */
+
261  epu8 shft = simde_mm_shuffle_epi8(shiftres, block - bm5);
+
262  set0 |= (bm5 == bound08) & shft;
+
263  set1 |= (bm5 == bound18) & shft;
+
264  block = simde_mm_shuffle_epi8(block, Epu8.right_cycle());
+
265  }
+
266 }
+
267 }
+
268 
+
269 inline void BMat8::row_space_bitset(epu8 &res0, epu8 &res1) const noexcept {
+
270  epu8 in = simde_mm_set_epi64x(0, _data);
+
271  epu8 block0{}, block1{};
+
272  for (epu8 m : masks) {
+
273  block0 |= static_cast<epu8>(simde_mm_shuffle_epi8(in, m));
+
274  block1 |= static_cast<epu8>(simde_mm_shuffle_epi8(in, m | Epu8(4)));
+
275  }
+
276  res0 = epu8{};
+
277  res1 = epu8{};
+
278  for (size_t r = 0; r < 16; r++) {
+
279  detail::row_space_update_bitset(block0 | block1, res0, res1);
+
280  block1 = simde_mm_shuffle_epi8(block1, Epu8.right_cycle());
+
281  }
+
282 }
+
283 
+
284 inline uint64_t BMat8::row_space_size_bitset() const noexcept {
+
285  epu8 res0{}, res1{};
+
286  row_space_bitset(res0, res1);
+
287  return (__builtin_popcountll(simde_mm_extract_epi64(res0, 0)) +
+
288  __builtin_popcountll(simde_mm_extract_epi64(res1, 0)) +
+
289  __builtin_popcountll(simde_mm_extract_epi64(res0, 1)) +
+
290  __builtin_popcountll(simde_mm_extract_epi64(res1, 1)));
+
291 }
+
292 
+
293 inline uint64_t BMat8::row_space_size_incl1() const noexcept {
+
294  epu8 in = simde_mm_set_epi64x(_data, _data);
+
295  epu8 block = Epu8.id();
+
296  uint64_t res = 0;
+
297  for (size_t r = 0; r < 16; r++) {
+
298  epu8 orincl{};
+
299  for (int i = 0; i < 8; i++) {
+
300  orincl |= ((in | block) == block) & in;
+
301  in = permuted(in, rotboth);
+
302  }
+
303  res += __builtin_popcountll(simde_mm_movemask_epi8(block == orincl));
+
304  block += Epu8(16);
+
305  }
+
306  return res;
+
307 }
+
308 
+
309 inline uint64_t BMat8::row_space_size_incl() const noexcept {
+
310  epu8 in = simde_mm_set_epi64x(_data, _data);
+
311  epu8 block = Epu8.id();
+
312  uint64_t res = 0;
+
313  for (size_t r = 0; r < 16; r++) {
+
314  epu8 orincl = ((in | block) == block) & in;
+
315  for (int i = 0; i < 7; i++) { // Only rotating
+
316  in = permuted(in, rotboth);
+
317  orincl |= ((in | block) == block) & in;
+
318  }
+
319  res += __builtin_popcountll(simde_mm_movemask_epi8(block == orincl));
+
320  block += Epu8(16);
+
321  }
+
322  return res;
+
323 }
+
324 
+
325 inline bool BMat8::row_space_included_bitset(BMat8 other) const noexcept {
+
326  epu8 this0, this1, other0, other1;
+
327  this->row_space_bitset(this0, this1);
+
328  other.row_space_bitset(other0, other1);
+
329  // Double inclusion of bitsets
+
330  return equal(this0 | other0, other0) && equal(this1 | other1, other1);
+
331 }
+
332 
+
333 inline bool BMat8::row_space_included(BMat8 other) const noexcept {
+
334  epu8 in = simde_mm_set_epi64x(0, other._data);
+
335  epu8 block = simde_mm_set_epi64x(0, _data);
+
336  epu8 orincl = ((in | block) == block) & in;
+
337  for (int i = 0; i < 7; i++) { // Only rotating
+
338  in = permuted(in, rotlow);
+
339  orincl |= ((in | block) == block) & in;
+
340  }
+
341  return equal(block, orincl);
+
342 }
+
343 
+
344 inline epu8 BMat8::row_space_mask(epu8 block) const noexcept {
+
345  epu8 in = simde_mm_set_epi64x(_data, _data);
+
346  epu8 orincl = ((in | block) == block) & in;
+
347  for (int i = 0; i < 7; i++) { // Only rotating
+
348  in = permuted(in, rotboth);
+
349  orincl |= ((in | block) == block) & in;
+
350  }
+
351  return block == orincl;
+
352 }
+
353 
+
354 inline std::pair<bool, bool> BMat8::row_space_included2(BMat8 a0, BMat8 b0,
+
355  BMat8 a1, BMat8 b1) {
+
356  epu8 in = simde_mm_set_epi64x(b1._data, b0._data);
+
357  epu8 block = simde_mm_set_epi64x(a1._data, a0._data);
+
358  epu8 orincl = ((in | block) == block) & in;
+
359  for (int i = 0; i < 7; i++) { // Only rotating
+
360  in = permuted(in, rotboth);
+
361  orincl |= ((in | block) == block) & in;
+
362  }
+
363  epu8 res = (block == orincl);
+
364  return std::make_pair(simde_mm_extract_epi64(res, 0) == -1,
+
365  simde_mm_extract_epi64(res, 1) == -1);
+
366 }
+
367 
+
368 inline std::bitset<256> BMat8::row_space_bitset_ref() const {
+
369  std::bitset<256> lookup;
+
370  std::vector<uint8_t> row_vec = row_space_basis().rows();
+
371  auto last = std::remove(row_vec.begin(), row_vec.end(), 0);
+
372  row_vec.erase(last, row_vec.end());
+
373  for (uint8_t x : row_vec) {
+
374  lookup.set(x);
+
375  }
+
376  lookup.set(0);
+
377  std::vector<uint8_t> row_space(row_vec.begin(), row_vec.end());
+
378  for (size_t i = 0; i < row_space.size(); ++i) {
+
379  for (uint8_t row : row_vec) {
+
380  uint8_t x = row_space[i] | row;
+
381  if (!lookup[x]) {
+
382  row_space.push_back(x);
+
383  lookup.set(x);
+
384  }
+
385  }
+
386  }
+
387  return lookup;
+
388 }
+
389 
+
390 inline bool BMat8::row_space_included_ref(BMat8 other) const noexcept {
+
391  std::bitset<256> thisspace = row_space_bitset_ref();
+
392  std::bitset<256> otherspace = other.row_space_bitset_ref();
+
393  return (thisspace | otherspace) == otherspace;
+
394 }
+
395 
+
396 inline uint64_t BMat8::row_space_size_ref() const {
+
397  return row_space_bitset_ref().count();
+
398 }
+
399 
+
400 inline std::vector<uint8_t> BMat8::rows() const {
+
401  std::vector<uint8_t> rows;
+
402  for (size_t i = 0; i < 8; ++i) {
+
403  uint8_t row = static_cast<uint8_t>(_data << (8 * i) >> 56);
+
404  rows.push_back(row);
+
405  }
+
406  return rows;
+
407 }
+
408 
+
409 inline size_t BMat8::nr_rows() const noexcept {
+
410  epu8 x = simde_mm_set_epi64x(_data, 0);
+
411  return __builtin_popcountll(simde_mm_movemask_epi8(x != epu8{}));
+
412 }
+
413 
+
414 static constexpr epu8 rev8{7, 6, 5, 4, 3, 2, 1, 0,
+
415  8, 9, 10, 11, 12, 13, 14, 15};
+
416 
+
417 inline BMat8 BMat8::row_permuted(Perm16 p) const noexcept {
+
418  epu8 x = simde_mm_set_epi64x(0, _data);
+
419  x = permuted(x, rev8);
+
420  x = permuted(x, p);
+
421  x = permuted(x, rev8);
+
422  return BMat8(simde_mm_extract_epi64(x, 0));
+
423 }
+
424 
+
425 inline BMat8 BMat8::col_permuted(Perm16 p) const noexcept {
+
426  return transpose().row_permuted(p).transpose();
+
427 }
+
428 
+ +
430  return one().row_permuted(p);
+
431 }
+
432 
+ +
434  return one().row_permuted(p).transpose();
+
435 }
+
436 
+ +
438  HPCOMBI_ASSERT(bm.row_space_basis() == bm);
+
439  std::vector<uint8_t> rows = this->rows();
+
440  BMat8 product = *this * bm;
+
441  std::vector<uint8_t> prod_rows = product.rows();
+
442 
+
443  HPCOMBI_ASSERT(product.row_space_basis() == bm);
+
444 
+
445  std::vector<uint8_t> perm(8);
+
446  for (size_t i = 0; i < nr_rows(); ++i) {
+
447  uint8_t row = rows[i];
+
448  perm[i] =
+
449  std::distance(prod_rows.begin(),
+
450  std::find(prod_rows.begin(), prod_rows.end(), row));
+
451  }
+
452 
+
453 #ifndef __clang__
+
454 #pragma GCC diagnostic push
+
455 #pragma GCC diagnostic ignored "-Wstringop-overflow"
+
456 #endif
+
457  std::iota(perm.begin() + nr_rows(), perm.end(), nr_rows());
+
458 #ifndef __clang__
+
459 #pragma GCC diagnostic pop
+
460 #endif
+
461 
+
462  Perm16 res = Perm16::one();
+
463  for (size_t i = 0; i < 8; i++)
+
464  res[i] = perm[i];
+
465  return res;
+
466 }
+
467 
+
468 inline Perm16 BMat8::right_perm_action_on_basis(BMat8 other) const noexcept {
+
469  epu8 x = permuted(simde_mm_set_epi64x(_data, 0), Epu8.rev());
+
470  epu8 y = permuted(simde_mm_set_epi64x((*this * other)._data, 0), Epu8.rev());
+
471  // Vector ternary operator is not supported by clang.
+
472  // return (x != (epu8 {})) ? permutation_of(y, x) : Epu8.id();
+
473  return simde_mm_blendv_epi8(Epu8.id(), permutation_of(y, x), x != epu8{});
+
474 }
+
475 
+
476 // Not noexcept because std::ostream::operator<< isn't
+
477 inline std::ostream &BMat8::write(std::ostream &os) const {
+
478  uint64_t x = _data;
+
479  uint64_t pow = 1;
+
480  pow = pow << 63;
+
481  for (size_t i = 0; i < 8; ++i) {
+
482  for (size_t j = 0; j < 8; ++j) {
+
483  if (pow & x) {
+
484  os << "1";
+
485  } else {
+
486  os << "0";
+
487  }
+
488  x = x << 1;
+
489  }
+
490  os << "\n";
+
491  }
+
492  return os;
+
493 }
+
494 
+
495 } // namespace HPCombi
+
496 
+
497 namespace std {
+
498 
+
499 // Not noexcept because BMat8::write isn't
+
500 inline std::ostream &operator<<(std::ostream &os, HPCombi::BMat8 const &bm) {
+
501  return bm.write(os);
+
502 }
+
503 
+
504 } // namespace std
+
#define FF
Definition: bmat8_impl.hpp:240
+
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:309
+
BMat8 row_space_basis() const noexcept
Returns a canonical basis of the row space of this.
Definition: bmat8_impl.hpp:232
+
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:354
+
static void transpose2(BMat8 &, BMat8 &) noexcept
Transpose two matrices at once.
Definition: bmat8_impl.hpp:183
+
uint64_t row_space_size_bitset() const noexcept
Returns the cardinality of the row space of this.
Definition: bmat8_impl.hpp:284
+
static BMat8 row_permutation_matrix(Perm16 p) noexcept
Returns the matrix associated to the permutation p by rows.
Definition: bmat8_impl.hpp:429
+
BMat8 mult_transpose(BMat8 const &that) const noexcept
Returns the matrix product of this and the transpose of that.
Definition: bmat8_impl.hpp:203
+
BMat8 transpose_maskd() const noexcept
Returns the transpose of this.
Definition: bmat8_impl.hpp:169
+
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:325
+
BMat8 transpose() const noexcept
Returns the transpose of this.
Definition: bmat8_impl.hpp:146
+
static BMat8 col_permutation_matrix(Perm16 p) noexcept
Returns the matrix associated to the permutation p by columns.
Definition: bmat8_impl.hpp:433
+
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:344
+
BMat8 row_permuted(Perm16 p) const noexcept
Returns the matrix whose rows have been permuted according to p.
Definition: bmat8_impl.hpp:417
+
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:333
+
std::ostream & write(std::ostream &os) const
Write this on os.
Definition: bmat8_impl.hpp:477
+
void row_space_bitset(epu8 &res1, epu8 &res2) const noexcept
Returns the the row space of this as 256 bits.
Definition: bmat8_impl.hpp:269
+
Perm16 right_perm_action_on_basis(BMat8) const noexcept
Give the permutation whose right multiplication change *this to other.
Definition: bmat8_impl.hpp:468
+
std::bitset< 256 > row_space_bitset_ref() const
Returns the the row space of this.
Definition: bmat8_impl.hpp:368
+
BMat8 col_permuted(Perm16 p) const noexcept
Returns the matrix whose columns have been permuted according to p.
Definition: bmat8_impl.hpp:425
+
uint64_t row_space_size_ref() const
Returns the cardinality of the row space of this.
Definition: bmat8_impl.hpp:396
+
BMat8 transpose_mask() const noexcept
Returns the transpose of this.
Definition: bmat8_impl.hpp:157
+
std::vector< uint8_t > rows() const
Returns a std::vector for rows of this.
Definition: bmat8_impl.hpp:400
+
size_t nr_rows() const noexcept
Returns the number of non-zero rows of this.
Definition: bmat8_impl.hpp:409
+
void set(size_t i, size_t j, bool val) noexcept
Sets the (i, j)th position to val.
Definition: bmat8_impl.hpp:104
+
static BMat8 random()
Returns a random BMat8.
Definition: bmat8_impl.hpp:128
+
bool operator()(size_t i, size_t j) const noexcept
Returns the entry in the (i, j)th position.
Definition: bmat8_impl.hpp:98
+
uint64_t row_space_size_incl1() const noexcept
Returns the cardinality of the row space of this.
Definition: bmat8_impl.hpp:293
+
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:390
+
Perm16 right_perm_action_on_basis_ref(BMat8) const
Give the permutation whose right multiplication change *this to other.
Definition: bmat8_impl.hpp:437
+
#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:255
+
Definition: bmat8.hpp:37
+
epu8 permuted(epu8 a, epu8 b) noexcept
Permuting a HPCombi::epu8.
Definition: epu8.hpp:70
+
epu8 remove_dups(epu8 a, uint8_t repl=0) noexcept
Remove duplicates in a sorted HPCombi::epu8.
Definition: epu8_impl.hpp:252
+
epu8 revsorted8(epu8 a) noexcept
Return a HPCombi::epu8 with the two half reverse sorted.
Definition: epu8_impl.hpp:205
+
epu8 permutation_of(epu8 a, epu8 b) noexcept
Find if a vector is a permutation of one other.
Definition: epu8_impl.hpp:295
+
bool equal(epu8 a, epu8 b) noexcept
Equality of HPCombi::epu8.
Definition: epu8.hpp:61
+
epu8 sorted8(epu8 a) noexcept
Return a HPCombi::epu8 with the two half sorted.
Definition: epu8_impl.hpp:199
+
uint64_t __attribute__((__vector_size__(16), __may_alias__)) epu64
Definition: bmat8_impl.hpp:181
+
constexpr TPUBuild< epu8 > Epu8
Factory object acting as a class constructor for type HPCombi::epu8.
Definition: epu8.hpp:50
+
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:242
+
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:500
+
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..b4f132e6 --- /dev/null +++ b/docs/classEqEpu8-members.html @@ -0,0 +1,88 @@ + + + + + + + +HPCombi: Member List + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v0.0.6
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+
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..67afff54 --- /dev/null +++ b/docs/classEqEpu8.html @@ -0,0 +1,187 @@ + + + + + + + +HPCombi: EqEpu8 Class Reference + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v0.0.6
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+ +
+
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:
    +
  • /home/florent/src/HPCombi/examples/CF.cpp
  • +
+
+ + + + diff --git a/docs/classHPCombi_1_1BMat8-members.html b/docs/classHPCombi_1_1BMat8-members.html new file mode 100644 index 00000000..48c6994e --- /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 v0.0.6
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
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..9666a9e4 --- /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 v0.0.6
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
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..162274be --- /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 v0.0.6
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+
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:407
+
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:
    +
  • /home/florent/src/HPCombi/include/hpcombi/epu8.hpp
  • +
+
+ + + + diff --git a/docs/classcommon__first__diff.html b/docs/classcommon__first__diff.html new file mode 100644 index 00000000..1da2b4b2 --- /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 v0.0.6
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+
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:
    +
  • /home/florent/src/HPCombi/include/hpcombi/epu8.hpp
  • +
+
+ + + + diff --git a/docs/classcommon__horiz__max.html b/docs/classcommon__horiz__max.html new file mode 100644 index 00000000..cd371629 --- /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 v0.0.6
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+
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:279
+
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:
    +
  • /home/florent/src/HPCombi/include/hpcombi/epu8.hpp
  • +
+
+ + + + diff --git a/docs/classcommon__horiz__min.html b/docs/classcommon__horiz__min.html new file mode 100644 index 00000000..de7eb693 --- /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 v0.0.6
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+
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:342
+
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:
    +
  • /home/florent/src/HPCombi/include/hpcombi/epu8.hpp
  • +
+
+ + + + diff --git a/docs/classcommon__horiz__sum.html b/docs/classcommon__horiz__sum.html new file mode 100644 index 00000000..0cab82d7 --- /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 v0.0.6
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+
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:216
+
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:
    +
  • /home/florent/src/HPCombi/include/hpcombi/epu8.hpp
  • +
+
+ + + + diff --git a/docs/classcommon__inverse.html b/docs/classcommon__inverse.html new file mode 100644 index 00000000..f50c6e0b --- /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 v0.0.6
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+
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:234
+
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:
    +
  • /home/florent/src/HPCombi/include/hpcombi/perm16.hpp
  • +
+
+ + + + diff --git a/docs/classcommon__inverse__pperm.html b/docs/classcommon__inverse__pperm.html new file mode 100644 index 00000000..2ff46287 --- /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 v0.0.6
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+
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:234
+
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:
    +
  • /home/florent/src/HPCombi/include/hpcombi/perm16.hpp
  • +
+
+ + + + diff --git a/docs/classcommon__is__permutation.html b/docs/classcommon__is__permutation.html new file mode 100644 index 00000000..bc448619 --- /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 v0.0.6
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+
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:
    +
  • /home/florent/src/HPCombi/include/hpcombi/epu8.hpp
  • +
+
+ + + + diff --git a/docs/classcommon__last__diff.html b/docs/classcommon__last__diff.html new file mode 100644 index 00000000..32fa91c5 --- /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 v0.0.6
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+
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:
    +
  • /home/florent/src/HPCombi/include/hpcombi/epu8.hpp
  • +
+
+ + + + diff --git a/docs/classcommon__left__weak__leq.html b/docs/classcommon__left__weak__leq.html new file mode 100644 index 00000000..a6a53e79 --- /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 v0.0.6
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+
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:234
+
Returns
true 
+

The documentation for this class was generated from the following file:
    +
  • /home/florent/src/HPCombi/include/hpcombi/perm16.hpp
  • +
+
+ + + + diff --git a/docs/classcommon__lehmer.html b/docs/classcommon__lehmer.html new file mode 100644 index 00000000..6e1cf2a8 --- /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 v0.0.6
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+
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:234
+
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:
    +
  • /home/florent/src/HPCombi/include/hpcombi/perm16.hpp
  • +
+
+ + + + diff --git a/docs/classcommon__length.html b/docs/classcommon__length.html new file mode 100644 index 00000000..760bf66e --- /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 v0.0.6
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+
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:234
+
Returns
4 
+

The documentation for this class was generated from the following file:
    +
  • /home/florent/src/HPCombi/include/hpcombi/perm16.hpp
  • +
+
+ + + + diff --git a/docs/classcommon__merge.html b/docs/classcommon__merge.html new file mode 100644 index 00000000..d04a31ce --- /dev/null +++ b/docs/classcommon__merge.html @@ -0,0 +1,99 @@ + + + + + + + +HPCombi: common_merge Class Reference + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v0.0.6
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+
common_merge Class Reference
+
+
+ +

Merge two sorted epu8. + More...

+ +

#include <epu8.hpp>

+

Detailed Description

+

Merge two sorted epu8.

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

The documentation for this class was generated from the following file:
    +
  • /home/florent/src/HPCombi/include/hpcombi/epu8.hpp
  • +
+
+ + + + diff --git a/docs/classcommon__nb__cycles.html b/docs/classcommon__nb__cycles.html new file mode 100644 index 00000000..874af603 --- /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 v0.0.6
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+
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:234
+
Returns
10 
+

The documentation for this class was generated from the following file:
    +
  • /home/florent/src/HPCombi/include/hpcombi/perm16.hpp
  • +
+
+ + + + diff --git a/docs/classcommon__nb__descent.html b/docs/classcommon__nb__descent.html new file mode 100644 index 00000000..48bf0d94 --- /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 v0.0.6
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+
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:234
+
Returns
2 
+

The documentation for this class was generated from the following file:
    +
  • /home/florent/src/HPCombi/include/hpcombi/perm16.hpp
  • +
+
+ + + + diff --git a/docs/classcommon__partial__max.html b/docs/classcommon__partial__max.html new file mode 100644 index 00000000..db1fa88e --- /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 v0.0.6
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+
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:308
+
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:
    +
  • /home/florent/src/HPCombi/include/hpcombi/epu8.hpp
  • +
+
+ + + + diff --git a/docs/classcommon__partial__min.html b/docs/classcommon__partial__min.html new file mode 100644 index 00000000..06ca5e19 --- /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 v0.0.6
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+
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:371
+
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:
    +
  • /home/florent/src/HPCombi/include/hpcombi/epu8.hpp
  • +
+
+ + + + diff --git a/docs/classcommon__partial__sums.html b/docs/classcommon__partial__sums.html new file mode 100644 index 00000000..f0c803f0 --- /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 v0.0.6
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+
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:245
+
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:
    +
  • /home/florent/src/HPCombi/include/hpcombi/epu8.hpp
  • +
+
+ + + + diff --git a/docs/classcommon__permutation__of.html b/docs/classcommon__permutation__of.html new file mode 100644 index 00000000..9a594b11 --- /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 v0.0.6
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+
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:
    +
  • /home/florent/src/HPCombi/include/hpcombi/epu8.hpp
  • +
+
+ + + + diff --git a/docs/classes.html b/docs/classes.html new file mode 100644 index 00000000..29fb99f3 --- /dev/null +++ b/docs/classes.html @@ -0,0 +1,115 @@ + + + + + + + +HPCombi: Class Index + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v0.0.6
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
Class Index
+
+ + + + + diff --git a/docs/classlibsemigroups_1_1Timer-members.html b/docs/classlibsemigroups_1_1Timer-members.html new file mode 100644 index 00000000..dd45edbb --- /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 v0.0.6
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
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..d1df4b4e --- /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 v0.0.6
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
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:
    +
  • /home/florent/src/HPCombi/examples/timer.h
  • +
+
+ + + + diff --git a/docs/closed.png b/docs/closed.png new file mode 100644 index 0000000000000000000000000000000000000000..98cc2c909da37a6df914fbf67780eebd99c597f5 GIT binary patch literal 132 zcmeAS@N?(olHy`uVBq!ia0vp^oFL4>1|%O$WD@{V-kvUwAr*{o@8{^CZMh(5KoB^r_<4^zF@3)Cp&&t3hdujKf f*?bjBoY!V+E))@{xMcbjXe@)LtDnm{r-UW|*e5JT literal 0 HcmV?d00001 diff --git a/docs/debug_8hpp.html b/docs/debug_8hpp.html new file mode 100644 index 00000000..412d228d --- /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 v0.0.6
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
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..7bee0bc3 --- /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 v0.0.6
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
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..895faeec --- /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 v0.0.6
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
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..d0851404 --- /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 v0.0.6
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
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..1b0ff211 --- /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 v0.0.6
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
include Directory Reference
+
+
+ + + + +

+Directories

directory  hpcombi
 
+
+ + + + diff --git a/docs/doc.png b/docs/doc.png new file mode 100644 index 0000000000000000000000000000000000000000..17edabff95f7b8da13c9516a04efe05493c29501 GIT binary patch literal 746 zcmV7=@pnbNXRFEm&G8P!&WHG=d)>K?YZ1bzou)2{$)) zumDct!>4SyxL;zgaG>wy`^Hv*+}0kUfCrz~BCOViSb$_*&;{TGGn2^x9K*!Sf0=lV zpP=7O;GA0*Jm*tTYj$IoXvimpnV4S1Z5f$p*f$Db2iq2zrVGQUz~yq`ahn7ck(|CE z7Gz;%OP~J6)tEZWDzjhL9h2hdfoU2)Nd%T<5Kt;Y0XLt&<@6pQx!nw*5`@bq#?l*?3z{Hlzoc=Pr>oB5(9i6~_&-}A(4{Q$>c>%rV&E|a(r&;?i5cQB=} zYSDU5nXG)NS4HEs0it2AHe2>shCyr7`6@4*6{r@8fXRbTA?=IFVWAQJL&H5H{)DpM#{W(GL+Idzf^)uRV@oB8u$ z8v{MfJbTiiRg4bza<41NAzrl{=3fl_D+$t+^!xlQ8S}{UtY`e z;;&9UhyZqQRN%2pot{*Ei0*4~hSF_3AH2@fKU!$NSflS>{@tZpDT4`M2WRTTVH+D? z)GFlEGGHe?koB}i|1w45!BF}N_q&^HJ&-tyR{(afC6H7|aml|tBBbv}55C5DNP8p3 z)~jLEO4Z&2hZmP^i-e%(@d!(E|KRafiU8Q5u(wU((j8un3OR*Hvj+t literal 0 HcmV?d00001 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 v0.0.6
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
epu8.hpp File Reference
+
+
+
#include <array>
+#include <cstddef>
+#include <cstdint>
+#include <ostream>
+#include <string>
+#include "debug.hpp"
+#include "builder.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..4c136207 --- /dev/null +++ b/docs/epu8_8hpp_source.html @@ -0,0 +1,356 @@ + + + + + + + +HPCombi: /home/florent/src/HPCombi/include/hpcombi/epu8.hpp Source File + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v0.0.6
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
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_INCLUDED
+
17 #define HPCOMBI_EPU8_HPP_INCLUDED
+
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 "debug.hpp" // for HPCOMBI_ASSERT
+
26 #include "builder.hpp" // for TPUBuild
+
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 
+
46 
+
50 constexpr TPUBuild<epu8> Epu8 {};
+
51 
+
52 
+
54 inline bool is_all_zero(epu8 a) noexcept { return simde_mm_testz_si128(a, a); }
+
56 inline bool is_all_one(epu8 a) noexcept {
+
57  return simde_mm_testc_si128(a, Epu8(0xFF));
+
58 }
+
59 
+
61 inline bool equal(epu8 a, epu8 b) noexcept {
+
62  return is_all_zero(simde_mm_xor_si128(a, b));
+
63 }
+
65 inline bool not_equal(epu8 a, epu8 b) noexcept { return !equal(a, b); }
+
66 
+
68 inline epu8 permuted_ref(epu8 a, epu8 b) noexcept;
+
70 inline epu8 permuted(epu8 a, epu8 b) noexcept {
+
71  return simde_mm_shuffle_epi8(a, b);
+
72 }
+
76 inline epu8 shifted_right(epu8 a) noexcept {
+
77  return simde_mm_bslli_si128(a, 1);
+
78 }
+
82 inline epu8 shifted_left(epu8 a) noexcept { return simde_mm_bsrli_si128(a, 1); }
+
84 inline epu8 reverted(epu8 a) noexcept { return permuted(a, Epu8.rev()); }
+
85 
+
87 inline epu8 min(epu8 a, epu8 b) noexcept { return simde_mm_min_epu8(a, b); }
+
89 inline epu8 max(epu8 a, epu8 b) noexcept { return simde_mm_max_epu8(a, b); }
+
90 
+
92 inline bool is_sorted(epu8 a) noexcept;
+
98 inline epu8 sorted(epu8 a) noexcept;
+
103 inline epu8 sorted8(epu8 a) noexcept;
+
109 inline epu8 revsorted(epu8 a) noexcept;
+
114 inline epu8 revsorted8(epu8 a) noexcept;
+
115 
+
120 inline epu8 sort_perm(epu8 &a) noexcept;
+
125 inline epu8 sort8_perm(epu8 &a) noexcept;
+
126 
+
137 inline void merge(epu8 &a, epu8 &b) noexcept;
+
138 
+
147 #ifdef SIMDE_X86_SSE4_2_NATIVE
+
151 inline epu8 permutation_of_cmpestrm(epu8 a, epu8 b) noexcept;
+
152 #endif
+
156 inline epu8 permutation_of_ref(epu8 a, epu8 b) noexcept;
+
160 inline epu8 permutation_of(epu8 a, epu8 b) noexcept;
+
161 
+
163 constexpr uint64_t prime = 0x9e3779b97f4a7bb9;
+
164 
+
172 inline epu8 random_epu8(uint16_t bnd);
+
173 
+
181 inline epu8 remove_dups(epu8 a, uint8_t repl = 0) noexcept;
+
182 
+
198 inline uint8_t horiz_sum_ref(epu8) noexcept;
+
204 inline uint8_t horiz_sum_gen(epu8) noexcept;
+
209 inline uint8_t horiz_sum4(epu8) noexcept;
+
214 inline uint8_t horiz_sum3(epu8) noexcept;
+
216 inline uint8_t horiz_sum(epu8 v) noexcept { return horiz_sum3(v); }
+
217 
+
232 inline epu8 partial_sums_ref(epu8) noexcept;
+
238 inline epu8 partial_sums_gen(epu8) noexcept;
+
243 inline epu8 partial_sums_round(epu8) noexcept;
+
245 inline epu8 partial_sums(epu8 v) noexcept { return partial_sums_round(v); }
+
246 
+
261 inline uint8_t horiz_max_ref(epu8) noexcept;
+
267 inline uint8_t horiz_max_gen(epu8) noexcept;
+
272 inline uint8_t horiz_max4(epu8) noexcept;
+
277 inline uint8_t horiz_max3(epu8) noexcept;
+
279 inline uint8_t horiz_max(epu8 v) noexcept { return horiz_max4(v); }
+
280 
+
295 inline epu8 partial_max_ref(epu8) noexcept;
+
301 inline epu8 partial_max_gen(epu8) noexcept;
+
306 inline epu8 partial_max_round(epu8) noexcept;
+
308 inline epu8 partial_max(epu8 v) noexcept { return partial_max_round(v); }
+
309 
+
324 inline uint8_t horiz_min_ref(epu8) noexcept;
+
330 inline uint8_t horiz_min_gen(epu8) noexcept;
+
335 inline uint8_t horiz_min4(epu8) noexcept;
+
340 inline uint8_t horiz_min3(epu8) noexcept;
+
342 inline uint8_t horiz_min(epu8 v) noexcept { return horiz_min4(v); }
+
343 
+
358 inline epu8 partial_min_ref(epu8) noexcept;
+
364 inline epu8 partial_min_gen(epu8) noexcept;
+
369 inline epu8 partial_min_round(epu8) noexcept;
+
371 inline epu8 partial_min(epu8 v) noexcept { return partial_min_round(v); }
+
372 
+
390 inline epu8 eval16_ref(epu8 v) noexcept;
+
395 inline epu8 eval16_arr(epu8 v) noexcept;
+
400 inline epu8 eval16_cycle(epu8 v) noexcept;
+
405 inline epu8 eval16_popcount(epu8 v) noexcept;
+
407 inline epu8 eval16(epu8 v) noexcept { return eval16_cycle(v); }
+
408 
+
431 inline uint64_t first_diff_ref(epu8 a, epu8 b, size_t bound = 16) noexcept;
+
432 #ifdef SIMDE_X86_SSE4_2_NATIVE
+
437 inline uint64_t first_diff_cmpstr(epu8 a, epu8 b, size_t bound = 16) noexcept;
+
438 #endif
+
443 inline uint64_t first_diff_mask(epu8 a, epu8 b, size_t bound = 16) noexcept;
+
445 inline uint64_t first_diff(epu8 a, epu8 b, size_t bound = 16) noexcept {
+
446  return first_diff_mask(a, b, bound);
+
447 }
+
448 
+
471 inline uint64_t last_diff_ref(epu8 a, epu8 b, size_t bound = 16) noexcept;
+
472 #ifdef SIMDE_X86_SSE4_2_NATIVE
+
477 inline uint64_t last_diff_cmpstr(epu8 a, epu8 b, size_t bound = 16) noexcept;
+
478 #endif
+
483 inline uint64_t last_diff_mask(epu8 a, epu8 b, size_t bound = 16) noexcept;
+
485 inline uint64_t last_diff(epu8 a, epu8 b, size_t bound = 16) noexcept {
+
486  return last_diff_mask(a, b, bound);
+
487 }
+
488 
+
490 inline bool less(epu8 a, epu8 b) noexcept;
+
496 inline int8_t less_partial(epu8 a, epu8 b, int k) noexcept;
+
497 
+
501 inline uint64_t first_zero(epu8 v, int bnd) noexcept;
+
505 inline uint64_t last_zero(epu8 v, int bnd) noexcept;
+
509 inline uint64_t first_non_zero(epu8 v, int bnd) noexcept;
+
513 inline uint64_t last_non_zero(epu8 v, int bnd) noexcept;
+
514 
+
517 inline epu8 popcount16(epu8 v) noexcept;
+
518 
+
534 inline bool is_partial_transformation(epu8 v, const size_t k = 16) noexcept;
+
535 
+
551 inline bool is_transformation(epu8 v, const size_t k = 16) noexcept;
+
552 
+
569 inline bool is_partial_permutation(epu8 v, const size_t k = 16) noexcept;
+
570 
+
586 #ifdef SIMDE_X86_SSE4_2_NATIVE
+
590 inline bool is_permutation_cpmestri(epu8 v, const size_t k = 16) noexcept;
+
591 #endif
+
595 inline bool is_permutation_sort(epu8 v, const size_t k = 16) noexcept;
+
599 inline bool is_permutation_eval(epu8 v, const size_t k = 16) noexcept;
+
603 inline bool is_permutation(epu8 v, const size_t k = 16) noexcept;
+
604 
+
605 } // namespace HPCombi
+
606 
+
607 namespace std {
+
608 
+
609 inline std::ostream &operator<<(std::ostream &stream, HPCombi::epu8 const &a);
+
610 
+
611 inline std::string to_string(HPCombi::epu8 const &a);
+
612 
+
619 } // namespace std
+
620 
+
621 #include "epu8_impl.hpp"
+
622 
+
623 #endif // HPCOMBI_EPU8_HPP_INCLUDED
+ + + +
Definition: bmat8.hpp:37
+
uint8_t horiz_min4(epu8) noexcept
Horizontal sum of a HPCombi::epu8.
Definition: epu8_impl.hpp:410
+
epu8 max(epu8 a, epu8 b) noexcept
Vector max between two HPCombi::epu8 0.
Definition: epu8.hpp:89
+
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:85
+
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:119
+
uint8_t horiz_min_ref(epu8) noexcept
Horizontal sum of a HPCombi::epu8.
Definition: epu8_impl.hpp:401
+
epu8 eval16_arr(epu8 v) noexcept
Evaluation of a HPCombi::epu8.
Definition: epu8_impl.hpp:444
+
epu8 permuted(epu8 a, epu8 b) noexcept
Permuting a HPCombi::epu8.
Definition: epu8.hpp:70
+
epu8 sort8_perm(epu8 &a) noexcept
Sort this and return the sorting permutation.
Definition: epu8_impl.hpp:212
+
epu8 shifted_right(epu8 a) noexcept
Left shifted of a HPCombi::epu8 inserting a 0.
Definition: epu8.hpp:76
+
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:70
+
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:81
+
epu8 partial_sums_ref(epu8) noexcept
Horizontal partial sum of a HPCombi::epu8.
Definition: epu8_impl.hpp:349
+
epu8 partial_sums(epu8 v) noexcept
Horizontal partial sum of a HPCombi::epu8.
Definition: epu8.hpp:245
+
uint8_t horiz_min(epu8 v) noexcept
Horizontal sum of a HPCombi::epu8.
Definition: epu8.hpp:342
+
epu8 remove_dups(epu8 a, uint8_t repl=0) noexcept
Remove duplicates in a sorted HPCombi::epu8.
Definition: epu8_impl.hpp:252
+
epu8 revsorted8(epu8 a) noexcept
Return a HPCombi::epu8 with the two half reverse sorted.
Definition: epu8_impl.hpp:205
+
epu8 permutation_of(epu8 a, epu8 b) noexcept
Find if a vector is a permutation of one other.
Definition: epu8_impl.hpp:295
+
bool is_permutation(epu8 v, const size_t k=16) noexcept
Definition: epu8_impl.hpp:522
+
int8_t less_partial(epu8 a, epu8 b, int k) noexcept
Partial lexicographic comparison between two HPCombi::epu8.
Definition: epu8_impl.hpp:106
+
uint8_t horiz_max4(epu8) noexcept
Horizontal sum of a HPCombi::epu8.
Definition: epu8_impl.hpp:375
+
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:98
+
uint8_t horiz_max3(epu8) noexcept
Horizontal sum of a HPCombi::epu8.
Definition: epu8_impl.hpp:376
+
bool is_all_one(epu8 a) noexcept
Test whether all the entries of a HPCombi::epu8 are one.
Definition: epu8.hpp:56
+
constexpr uint64_t prime
A prime number good for hashing.
Definition: epu8.hpp:163
+
uint8_t horiz_min_gen(epu8) noexcept
Horizontal sum of a HPCombi::epu8.
Definition: epu8_impl.hpp:407
+
bool is_partial_permutation(epu8 v, const size_t k=16) noexcept
Test for partial permutations.
Definition: epu8_impl.hpp:491
+
bool is_permutation_sort(epu8 v, const size_t k=16) noexcept
Definition: epu8_impl.hpp:513
+
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:116
+
void merge(epu8 &a, epu8 &b) noexcept
Merge two sorted epu8.
Definition: epu8_impl.hpp:233
+
uint8_t horiz_sum4(epu8) noexcept
Horizontal sum of a HPCombi::epu8.
Definition: epu8_impl.hpp:340
+
epu8 popcount16(epu8 v) noexcept
a vector popcount function
Definition: epu8_impl.hpp:472
+
epu8 partial_sums_round(epu8) noexcept
Horizontal partial sum of a HPCombi::epu8.
Definition: epu8_impl.hpp:360
+
uint8_t horiz_sum3(epu8) noexcept
Horizontal sum of a HPCombi::epu8.
Definition: epu8_impl.hpp:341
+
uint8_t horiz_sum_ref(epu8) noexcept
Horizontal sum of a HPCombi::epu8.
Definition: epu8_impl.hpp:331
+
epu8 partial_sums_gen(epu8) noexcept
Horizontal partial sum of a HPCombi::epu8.
Definition: epu8_impl.hpp:356
+
bool equal(epu8 a, epu8 b) noexcept
Equality of HPCombi::epu8.
Definition: epu8.hpp:61
+
epu8 permutation_of_ref(epu8 a, epu8 b) noexcept
Find if a vector is a permutation of one other.
Definition: epu8_impl.hpp:286
+
epu8 min(epu8 a, epu8 b) noexcept
Vector min between two HPCombi::epu8 0.
Definition: epu8.hpp:87
+
epu8 partial_max_ref(epu8) noexcept
Horizontal partial sum of a HPCombi::epu8.
Definition: epu8_impl.hpp:384
+
epu8 sorted8(epu8 a) noexcept
Return a HPCombi::epu8 with the two half sorted.
Definition: epu8_impl.hpp:199
+
epu8 partial_max_round(epu8) noexcept
Horizontal partial sum of a HPCombi::epu8.
Definition: epu8_impl.hpp:395
+
epu8 eval16(epu8 v) noexcept
Evaluation of a HPCombi::epu8.
Definition: epu8.hpp:407
+
uint8_t horiz_sum(epu8 v) noexcept
Horizontal sum of a HPCombi::epu8.
Definition: epu8.hpp:216
+
uint8_t horiz_max(epu8 v) noexcept
Horizontal sum of a HPCombi::epu8.
Definition: epu8.hpp:279
+
epu8 reverted(epu8 a) noexcept
Reverting a HPCombi::epu8.
Definition: epu8.hpp:84
+
epu8 eval16_cycle(epu8 v) noexcept
Evaluation of a HPCombi::epu8.
Definition: epu8_impl.hpp:455
+
epu8 eval16_ref(epu8 v) noexcept
Evaluation of a HPCombi::epu8.
Definition: epu8_impl.hpp:436
+
epu8 partial_max_gen(epu8) noexcept
Horizontal partial sum of a HPCombi::epu8.
Definition: epu8_impl.hpp:391
+
bool less(epu8 a, epu8 b) noexcept
Lexicographic comparison between two HPCombi::epu8.
Definition: epu8_impl.hpp:102
+
uint8_t horiz_max_ref(epu8) noexcept
Horizontal sum of a HPCombi::epu8.
Definition: epu8_impl.hpp:366
+
epu8 sorted(epu8 a) noexcept
Return a sorted HPCombi::epu8.
Definition: epu8_impl.hpp:196
+
constexpr TPUBuild< epu8 > Epu8
Factory object acting as a class constructor for type HPCombi::epu8.
Definition: epu8.hpp:50
+
bool is_permutation_eval(epu8 v, const size_t k=16) noexcept
Definition: epu8_impl.hpp:517
+
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:113
+
bool is_all_zero(epu8 a) noexcept
Test whether all the entries of a HPCombi::epu8 are zero.
Definition: epu8.hpp:54
+
epu8 random_epu8(uint16_t bnd)
A random HPCombi::epu8.
Definition: epu8_impl.hpp:240
+
epu8 partial_min(epu8 v) noexcept
Horizontal partial sum of a HPCombi::epu8.
Definition: epu8.hpp:371
+
epu8 revsorted(epu8 a) noexcept
Return a reverse sorted HPCombi::epu8.
Definition: epu8_impl.hpp:202
+
epu8 partial_min_round(epu8) noexcept
Horizontal partial sum of a HPCombi::epu8.
Definition: epu8_impl.hpp:430
+
bool is_sorted(epu8 a) noexcept
Testing if a HPCombi::epu8 is sorted.
Definition: epu8_impl.hpp:193
+
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:122
+
uint64_t last_diff(epu8 a, epu8 b, size_t bound=16) noexcept
The last difference between two HPCombi::epu8.
Definition: epu8.hpp:485
+
epu8 eval16_popcount(epu8 v) noexcept
Evaluation of a HPCombi::epu8.
Definition: epu8_impl.hpp:463
+
epu8 sort_perm(epu8 &a) noexcept
Sort this and return the sorting permutation.
Definition: epu8_impl.hpp:209
+
epu8 partial_min_gen(epu8) noexcept
Horizontal partial sum of a HPCombi::epu8.
Definition: epu8_impl.hpp:426
+
epu8 partial_min_ref(epu8) noexcept
Horizontal partial sum of a HPCombi::epu8.
Definition: epu8_impl.hpp:419
+
uint8_t horiz_max_gen(epu8) noexcept
Horizontal sum of a HPCombi::epu8.
Definition: epu8_impl.hpp:372
+
epu8 shifted_left(epu8 a) noexcept
Right shifted of a HPCombi::epu8 inserting a 0.
Definition: epu8.hpp:82
+
bool is_transformation(epu8 v, const size_t k=16) noexcept
Test for transformation.
Definition: epu8_impl.hpp:485
+
uint64_t first_diff(epu8 a, epu8 b, size_t bound=16) noexcept
The first difference between two HPCombi::epu8.
Definition: epu8.hpp:445
+
bool is_partial_transformation(epu8 v, const size_t k=16) noexcept
Test for partial transformation.
Definition: epu8_impl.hpp:477
+
epu8 permuted_ref(epu8 a, epu8 b) noexcept
Permuting a HPCombi::epu8.
Definition: epu8_impl.hpp:53
+
epu8 partial_max(epu8 v) noexcept
Horizontal partial sum of a HPCombi::epu8.
Definition: epu8.hpp:308
+
uint8_t horiz_sum_gen(epu8) noexcept
Horizontal sum of a HPCombi::epu8.
Definition: epu8_impl.hpp:337
+
uint8_t horiz_min3(epu8) noexcept
Horizontal sum of a HPCombi::epu8.
Definition: epu8_impl.hpp:411
+
bool not_equal(epu8 a, epu8 b) noexcept
Non equality of HPCombi::epu8.
Definition: epu8.hpp:65
+
Definition: bmat8.hpp:360
+
std::ostream & operator<<(std::ostream &stream, HPCombi::epu8 const &a)
Definition: epu8_impl.hpp:534
+
std::string to_string(HPCombi::epu8 const &a)
Definition: epu8_impl.hpp:542
+
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..e6f36750 --- /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 v0.0.6
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
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..509dbe82 --- /dev/null +++ b/docs/epu8__impl_8hpp_source.html @@ -0,0 +1,744 @@ + + + + + + + +HPCombi: /home/florent/src/HPCombi/include/hpcombi/epu8_impl.hpp Source File + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v0.0.6
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
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 // This is the implementation part of epu8.hpp this should be seen as
+
17 // implementation details and should not be included directly.
+
18 
+
19 #include <initializer_list>
+
20 #include <iostream>
+
21 #include <random>
+
22 #include <sstream>
+
23 
+
24 #include "vect_generic.hpp"
+
25 
+
26 #ifdef SIMDE_X86_SSE4_2_NATIVE
+
27 // Comparison mode for _mm_cmpestri
+
28 #define FIRST_DIFF \
+
29  (SIMDE_SIDD_UBYTE_OPS | SIMDE_SIDD_CMP_EQUAL_EACH | \
+
30  SIMDE_SIDD_NEGATIVE_POLARITY)
+
31 #define LAST_DIFF \
+
32  (SIMDE_SIDD_UBYTE_OPS | SIMDE_SIDD_CMP_EQUAL_EACH | \
+
33  SIMDE_SIDD_NEGATIVE_POLARITY | SIMDE_SIDD_MOST_SIGNIFICANT)
+
34 #define FIRST_ZERO (SIMDE_SIDD_UBYTE_OPS | SIMDE_SIDD_CMP_EQUAL_ANY)
+
35 #define LAST_ZERO \
+
36  (SIMDE_SIDD_UBYTE_OPS | SIMDE_SIDD_CMP_EQUAL_ANY | \
+
37  SIMDE_SIDD_MOST_SIGNIFICANT)
+
38 #define FIRST_NON_ZERO \
+
39  (SIMDE_SIDD_UBYTE_OPS | SIMDE_SIDD_CMP_EQUAL_ANY | \
+
40  SIMDE_SIDD_MASKED_NEGATIVE_POLARITY)
+
41 #define LAST_NON_ZERO \
+
42  (SIMDE_SIDD_UBYTE_OPS | SIMDE_SIDD_CMP_EQUAL_ANY | \
+
43  SIMDE_SIDD_MASKED_NEGATIVE_POLARITY | SIMDE_SIDD_MOST_SIGNIFICANT)
+
44 #endif
+
45 
+
46 namespace HPCombi {
+
47 
+
51 
+
53 inline epu8 permuted_ref(epu8 a, epu8 b) noexcept {
+
54  epu8 res;
+
55  for (uint64_t i = 0; i < 16; i++)
+
56  res[i] = a[b[i] & 0xF];
+
57  return res;
+
58 }
+
59 
+
60 // Msk is supposed to be a boolean mask (i.e. each entry is either 0 or 255)
+
61 inline uint64_t first_mask(epu8 msk, size_t bound) {
+
62  uint64_t res = simde_mm_movemask_epi8(msk & (Epu8.id() < Epu8(bound)));
+
63  return res == 0 ? 16 : (__builtin_ffsll(res) - 1);
+
64 }
+
65 inline uint64_t last_mask(epu8 msk, size_t bound) {
+
66  auto res = simde_mm_movemask_epi8(msk & (Epu8.id() < Epu8(bound)));
+
67  return res == 0 ? 16 : (63 - __builtin_clzll(res));
+
68 }
+
69 
+
70 inline uint64_t first_diff_ref(epu8 a, epu8 b, size_t bound) noexcept {
+
71  for (size_t i = 0; i < bound; i++)
+
72  if (a[i] != b[i])
+
73  return i;
+
74  return 16;
+
75 }
+
76 #ifdef SIMDE_X86_SSE4_2_NATIVE
+
77 inline uint64_t first_diff_cmpstr(epu8 a, epu8 b, size_t bound) noexcept {
+
78  return unsigned(_mm_cmpestri(a, bound, b, bound, FIRST_DIFF));
+
79 }
+
80 #endif
+
81 inline uint64_t first_diff_mask(epu8 a, epu8 b, size_t bound) noexcept {
+
82  return first_mask(a != b, bound);
+
83 }
+
84 
+
85 inline uint64_t last_diff_ref(epu8 a, epu8 b, size_t bound) noexcept {
+
86  while (bound != 0) {
+
87  --bound;
+
88  if (a[bound] != b[bound])
+
89  return bound;
+
90  }
+
91  return 16;
+
92 }
+
93 #ifdef SIMDE_X86_SSE4_2_NATIVE
+
94 inline uint64_t last_diff_cmpstr(epu8 a, epu8 b, size_t bound) noexcept {
+
95  return unsigned(_mm_cmpestri(a, bound, b, bound, LAST_DIFF));
+
96 }
+
97 #endif
+
98 inline uint64_t last_diff_mask(epu8 a, epu8 b, size_t bound) noexcept {
+
99  return last_mask(a != b, bound);
+
100 }
+
101 
+
102 inline bool less(epu8 a, epu8 b) noexcept {
+
103  uint64_t diff = first_diff(a, b);
+
104  return (diff < 16) && (a[diff] < b[diff]);
+
105 }
+
106 inline int8_t less_partial(epu8 a, epu8 b, int k) noexcept {
+
107  uint64_t diff = first_diff(a, b, k);
+
108  return (diff == 16)
+
109  ? 0
+
110  : static_cast<int8_t>(a[diff]) - static_cast<int8_t>(b[diff]);
+
111 }
+
112 
+
113 inline uint64_t first_zero(epu8 v, int bnd) noexcept {
+
114  return first_mask(v == epu8{}, bnd);
+
115 }
+
116 inline uint64_t last_zero(epu8 v, int bnd) noexcept {
+
117  return last_mask(v == epu8{}, bnd);
+
118 }
+
119 inline uint64_t first_non_zero(epu8 v, int bnd) noexcept {
+
120  return first_mask(v != epu8{}, bnd);
+
121 }
+
122 inline uint64_t last_non_zero(epu8 v, int bnd) noexcept {
+
123  return last_mask(v != epu8{}, bnd);
+
124 }
+
125 
+
127 template <bool Increasing = true, size_t sz>
+
128 inline epu8 network_sort(epu8 res, std::array<epu8, sz> rounds) {
+
129  for (auto round : rounds) {
+
130  // This conditional should be optimized out by the compiler
+
131  epu8 mask = Increasing ? round < Epu8.id() : Epu8.id() < round;
+
132  epu8 b = permuted(res, round);
+
133  // res = mask ? min(res,b) : max(res,b); is not accepted by clang
+
134  res = simde_mm_blendv_epi8(min(res, b), max(res, b), mask);
+
135  }
+
136  return res;
+
137 }
+
138 
+
140 template <bool Increasing = true, size_t sz>
+
141 inline epu8 network_sort_perm(epu8 &v, std::array<epu8, sz> rounds) {
+
142  epu8 res = Epu8.id();
+
143  for (auto round : rounds) {
+
144  // This conditional should be optimized out by the compiler
+
145  epu8 mask = Increasing ? round < Epu8.id() : Epu8.id() < round;
+
146  epu8 b = permuted(v, round);
+
147  epu8 cmp = simde_mm_blendv_epi8(b < v, v < b, mask);
+
148  v = simde_mm_blendv_epi8(v, b, cmp);
+
149  res = simde_mm_blendv_epi8(res, permuted(res, round), cmp);
+
150  }
+
151  return res;
+
152 }
+
153 
+
160 constexpr std::array<epu8, 9> sorting_rounds
+
161  // 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
+
162  {{epu8{1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14},
+
163  epu8{2, 3, 0, 1, 6, 7, 4, 5, 10, 11, 8, 9, 14, 15, 12, 13},
+
164  epu8{4, 5, 6, 7, 0, 1, 2, 3, 12, 13, 14, 15, 8, 9, 10, 11},
+
165  epu8{8, 9, 10, 11, 12, 13, 14, 15, 0, 1, 2, 3, 4, 5, 6, 7},
+
166  epu8{0, 2, 1, 12, 8, 10, 9, 11, 4, 6, 5, 7, 3, 14, 13, 15},
+
167  epu8{0, 4, 8, 10, 1, 9, 12, 13, 2, 5, 3, 14, 6, 7, 11, 15},
+
168  epu8{0, 1, 4, 5, 2, 3, 8, 9, 6, 7, 12, 13, 10, 11, 14, 15},
+
169  epu8{0, 1, 2, 6, 4, 8, 3, 10, 5, 12, 7, 11, 9, 13, 14, 15},
+
170  epu8{0, 1, 2, 4, 3, 6, 5, 8, 7, 10, 9, 12, 11, 13, 14, 15}}};
+
171 
+
180 constexpr std::array<epu8, 6> sorting_rounds8
+
181  // clang-format off
+
182  // 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
+
183 {{
+
184  epu8 { 1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14},
+
185  epu8 { 2, 3, 0, 1, 6, 7, 4, 5, 10, 11, 8, 9, 14, 15, 12, 13},
+
186  epu8 { 0, 2, 1, 3, 4, 6, 5, 7, 8, 10, 9, 11, 12, 14, 13, 15},
+
187  epu8 { 4, 5, 6, 7, 0, 1, 2, 3, 12, 13, 14, 15, 8, 9, 10, 11},
+
188  epu8 { 0, 1, 4, 5, 2, 3, 6, 7, 8, 9, 12, 13, 10, 11, 14, 15},
+
189  epu8 { 0, 2, 1, 4, 3, 6, 5, 7, 8, 10, 9, 12, 11, 14, 13, 15}
+
190 }};
+
191 // clang-format on
+
192 
+
193 inline bool is_sorted(epu8 a) noexcept {
+
194  return simde_mm_movemask_epi8(shifted_right(a) > a) == 0;
+
195 }
+
196 inline epu8 sorted(epu8 a) noexcept {
+
197  return network_sort<true>(a, sorting_rounds);
+
198 }
+
199 inline epu8 sorted8(epu8 a) noexcept {
+
200  return network_sort<true>(a, sorting_rounds8);
+
201 }
+
202 inline epu8 revsorted(epu8 a) noexcept {
+
203  return network_sort<false>(a, sorting_rounds);
+
204 }
+
205 inline epu8 revsorted8(epu8 a) noexcept {
+
206  return network_sort<false>(a, sorting_rounds8);
+
207 }
+
208 
+
209 inline epu8 sort_perm(epu8 &a) noexcept {
+
210  return network_sort_perm<true>(a, sorting_rounds);
+
211 }
+
212 inline epu8 sort8_perm(epu8 &a) noexcept {
+
213  return network_sort_perm<true>(a, sorting_rounds8);
+
214 }
+
215 
+
216 constexpr std::array<epu8, 6> merge_rounds
+
217  // clang-format off
+
218  // 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
+
219 {{
+
220  epu8 { 8, 9, 10, 11, 12, 13, 14, 15, 0, 1, 2, 3, 4, 5, 6, 7},
+
221  epu8 { 4, 5, 6, 7, 0, 1, 2, 3, 12, 13, 14, 15, 8, 9, 10, 11},
+
222  epu8 { 2, 3, 0, 1, 6, 7, 4, 5, 10, 11, 8, 9, 14, 15, 12, 13},
+
223  epu8 { 1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14},
+
224 }};
+
225 // clang-format on
+
226 inline void merge_rev(epu8 &a, epu8 &b) noexcept {
+
227  epu8 mn = min(a, b);
+
228  b = max(a, b);
+
229  a = mn;
+
230  a = network_sort<true>(a, merge_rounds);
+
231  b = network_sort<true>(b, merge_rounds);
+
232 }
+
233 inline void merge(epu8 &a, epu8 &b) noexcept {
+
234  a = permuted(a, Epu8.rev());
+
235  merge_rev(a, b);
+
236 }
+
237 // TODO : AVX2 version.
+
238 // TODO : compute merge_rounds on the fly instead of loading those from memory
+
239 
+
240 inline epu8 random_epu8(uint16_t bnd) {
+
241  epu8 res;
+
242 
+
243  static std::random_device rd;
+
244  static std::default_random_engine e1(rd());
+
245  std::uniform_int_distribution<int> uniform_dist(0, bnd - 1);
+
246 
+
247  for (size_t i = 0; i < 16; i++)
+
248  res[i] = uniform_dist(e1);
+
249  return res;
+
250 }
+
251 
+
252 inline epu8 remove_dups(epu8 v, uint8_t repl) noexcept {
+
253  // Vector ternary operator is not supported by clang.
+
254  // return (v != shifted_right(v) ? v : Epu8(repl);
+
255  return simde_mm_blendv_epi8(Epu8(repl), v, v != shifted_right(v));
+
256 }
+
257 
+
258 // Gather at the front numbers with (3-i)-th bit not set.
+
259 constexpr std::array<epu8, 3> inverting_rounds{{
+
260  // clang-format off
+
261  // 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
+
262  epu8 { 0, 1, 2, 3, 8, 9, 10, 11, 4, 5, 6, 7, 12, 13, 14, 15},
+
263  epu8 { 0, 1, 4, 5, 8, 9, 12, 13, 2, 3, 6, 7, 10, 11, 14, 15},
+
264  epu8 { 0, 2, 4, 6, 8, 10, 12, 14, 1, 3, 5, 7, 9, 11, 13, 15}
+
265  // clang-format on
+
266 }};
+
267 
+
268 #ifdef SIMDE_X86_SSE4_2_NATIVE
+
269 #define FIND_IN_VECT \
+
270  (SIMDE_SIDD_UBYTE_OPS | SIMDE_SIDD_CMP_EQUAL_ANY | SIMDE_SIDD_UNIT_MASK | \
+
271  SIMDE_SIDD_NEGATIVE_POLARITY)
+
272 #define FIND_IN_VECT_COMPL \
+
273  (SIMDE_SIDD_UBYTE_OPS | SIMDE_SIDD_CMP_EQUAL_ANY | SIMDE_SIDD_UNIT_MASK)
+
274 
+
275 inline epu8 permutation_of_cmpestrm(epu8 a, epu8 b) noexcept {
+
276  epu8 res = -static_cast<epu8>(_mm_cmpestrm(a, 8, b, 16, FIND_IN_VECT));
+
277  for (epu8 round : inverting_rounds) {
+
278  a = permuted(a, round);
+
279  res <<= 1;
+
280  res -= static_cast<epu8>(_mm_cmpestrm(a, 8, b, 16, FIND_IN_VECT));
+
281  }
+
282  return res;
+
283 }
+
284 #endif
+
285 
+
286 inline epu8 permutation_of_ref(epu8 a, epu8 b) noexcept {
+
287  auto ar = as_array(a);
+
288  epu8 res{};
+
289  for (size_t i = 0; i < 16; i++) {
+
290  res[i] =
+
291  std::distance(ar.begin(), std::find(ar.begin(), ar.end(), b[i]));
+
292  }
+
293  return res;
+
294 }
+
295 inline epu8 permutation_of(epu8 a, epu8 b) noexcept {
+
296 #ifdef SIMDE_X86_SSE4_2_NATIVE
+
297  return permutation_of_cmpestrm(a, b);
+
298 #else
+
299  return permutation_of_ref(a, b);
+
300 #endif
+
301 }
+
302 
+
303 #if defined(FF)
+
304 #error FF is defined !
+
305 #endif /* FF */
+
306 #define FF 0xff
+
307 
+
309 constexpr std::array<epu8, 4> summing_rounds{{
+
310  // clang-format off
+
311  // 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
+
312  epu8 { FF, 0, FF, 2, FF, 4, FF, 6, FF, 8, FF, 10, FF, 12, FF, 14},
+
313  epu8 { FF, FF, 1, 1, FF, FF, 5, 5, FF, FF, 9, 9, FF, FF, 13, 13},
+
314  epu8 { FF, FF, FF, FF, 3, 3, 3, 3, FF, FF, FF, FF, 11, 11, 11, 11},
+
315  epu8 { FF, FF, FF, FF, FF, FF, FF, FF, 7, 7, 7, 7, 7, 7, 7, 7}
+
316  // clang-format on
+
317 }};
+
318 
+
319 constexpr std::array<epu8, 4> mining_rounds{{
+
320  // clang-format off
+
321  // 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
+
322  epu8 { 0, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14},
+
323  epu8 { 0, 1, 1, 1, 4, 5, 5, 5, 8, 9, 9, 9, 12, 13, 13, 13},
+
324  epu8 { 0, 1, 2, 3, 3, 3, 3, 3, 8, 9, 10, 11, 11, 11, 11, 11},
+
325  epu8 { 0, 1, 2, 3, 4, 5, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7}
+
326  // clang-format on
+
327 }};
+
328 
+
329 #undef FF
+
330 
+
331 inline uint8_t horiz_sum_ref(epu8 v) noexcept {
+
332  uint8_t res = 0;
+
333  for (size_t i = 0; i < 16; i++)
+
334  res += v[i];
+
335  return res;
+
336 }
+
337 inline uint8_t horiz_sum_gen(epu8 v) noexcept {
+
338  return as_VectGeneric(v).horiz_sum();
+
339 }
+
340 inline uint8_t horiz_sum4(epu8 v) noexcept { return partial_sums_round(v)[15]; }
+
341 inline uint8_t horiz_sum3(epu8 v) noexcept {
+
342  auto sr = summing_rounds;
+
343  v += permuted(v, sr[0]);
+
344  v += permuted(v, sr[1]);
+
345  v += permuted(v, sr[2]);
+
346  return v[7] + v[15];
+
347 }
+
348 
+
349 inline epu8 partial_sums_ref(epu8 v) noexcept {
+
350  epu8 res{};
+
351  res[0] = v[0];
+
352  for (size_t i = 1; i < 16; i++)
+
353  res[i] = res[i - 1] + v[i];
+
354  return res;
+
355 }
+
356 inline epu8 partial_sums_gen(epu8 v) noexcept {
+
357  as_VectGeneric(v).partial_sums_inplace();
+
358  return v;
+
359 }
+
360 inline epu8 partial_sums_round(epu8 v) noexcept {
+
361  for (epu8 round : summing_rounds)
+
362  v += permuted(v, round);
+
363  return v;
+
364 }
+
365 
+
366 inline uint8_t horiz_max_ref(epu8 v) noexcept {
+
367  uint8_t res = 0;
+
368  for (size_t i = 0; i < 16; i++)
+
369  res = std::max(res, v[i]);
+
370  return res;
+
371 }
+
372 inline uint8_t horiz_max_gen(epu8 v) noexcept {
+
373  return as_VectGeneric(v).horiz_max();
+
374 }
+
375 inline uint8_t horiz_max4(epu8 v) noexcept { return partial_max_round(v)[15]; }
+
376 inline uint8_t horiz_max3(epu8 v) noexcept {
+
377  auto sr = summing_rounds;
+
378  v = max(v, permuted(v, sr[0]));
+
379  v = max(v, permuted(v, sr[1]));
+
380  v = max(v, permuted(v, sr[2]));
+
381  return std::max(v[7], v[15]);
+
382 }
+
383 
+
384 inline epu8 partial_max_ref(epu8 v) noexcept {
+
385  epu8 res;
+
386  res[0] = v[0];
+
387  for (size_t i = 1; i < 16; i++)
+
388  res[i] = std::max(res[i - 1], v[i]);
+
389  return res;
+
390 }
+
391 inline epu8 partial_max_gen(epu8 v) noexcept {
+
392  as_VectGeneric(v).partial_max_inplace();
+
393  return v;
+
394 }
+
395 inline epu8 partial_max_round(epu8 v) noexcept {
+
396  for (epu8 round : summing_rounds)
+
397  v = max(v, permuted(v, round));
+
398  return v;
+
399 }
+
400 
+
401 inline uint8_t horiz_min_ref(epu8 v) noexcept {
+
402  uint8_t res = 255;
+
403  for (size_t i = 0; i < 16; i++)
+
404  res = std::min(res, v[i]);
+
405  return res;
+
406 }
+
407 inline uint8_t horiz_min_gen(epu8 v) noexcept {
+
408  return as_VectGeneric(v).horiz_min();
+
409 }
+
410 inline uint8_t horiz_min4(epu8 v) noexcept { return partial_min_round(v)[15]; }
+
411 inline uint8_t horiz_min3(epu8 v) noexcept {
+
412  auto sr = mining_rounds;
+
413  v = min(v, permuted(v, sr[0]));
+
414  v = min(v, permuted(v, sr[1]));
+
415  v = min(v, permuted(v, sr[2]));
+
416  return std::min(v[7], v[15]);
+
417 }
+
418 
+
419 inline epu8 partial_min_ref(epu8 v) noexcept {
+
420  epu8 res;
+
421  res[0] = v[0];
+
422  for (size_t i = 1; i < 16; i++)
+
423  res[i] = std::min(res[i - 1], v[i]);
+
424  return res;
+
425 }
+
426 inline epu8 partial_min_gen(epu8 v) noexcept {
+
427  as_VectGeneric(v).partial_min_inplace();
+
428  return v;
+
429 }
+
430 inline epu8 partial_min_round(epu8 v) noexcept {
+
431  for (epu8 round : mining_rounds)
+
432  v = min(v, permuted(v, round));
+
433  return v;
+
434 }
+
435 
+
436 inline epu8 eval16_ref(epu8 v) noexcept {
+
437  epu8 res{};
+
438  for (size_t i = 0; i < 16; i++)
+
439  if (v[i] < 16)
+
440  res[v[i]]++;
+
441  return res;
+
442 }
+
443 
+
444 inline epu8 eval16_arr(epu8 v8) noexcept {
+
445  decltype(Epu8)::array res{};
+
446  auto v = as_array(v8);
+
447  for (size_t i = 0; i < 16; i++)
+
448  if (v[i] < 16)
+
449  res[v[i]]++;
+
450  return Epu8(res);
+
451 }
+
452 inline epu8 eval16_gen(epu8 v) noexcept {
+
453  return Epu8(as_VectGeneric(v).eval().v);
+
454 }
+
455 inline epu8 eval16_cycle(epu8 v) noexcept {
+
456  epu8 res = -(Epu8.id() == v);
+
457  for (int i = 1; i < 16; i++) {
+
458  v = permuted(v, Epu8.left_cycle());
+
459  res -= (Epu8.id() == v);
+
460  }
+
461  return res;
+
462 }
+
463 inline epu8 eval16_popcount(epu8 v) noexcept {
+
464  epu8 res{};
+
465  for (size_t i = 0; i < 16; i++) {
+
466  res[i] =
+
467  __builtin_popcountl(simde_mm_movemask_epi8(v == Epu8(uint8_t(i))));
+
468  }
+
469  return res;
+
470 }
+
471 
+
472 inline epu8 popcount16(epu8 v) noexcept {
+
473  return (permuted(Epu8.popcount(), v & Epu8(0x0f)) +
+
474  permuted(Epu8.popcount(), v >> 4));
+
475 }
+
476 
+
477 inline bool is_partial_transformation(epu8 v, const size_t k) noexcept {
+
478  uint64_t diff = last_diff(v, Epu8.id(), 16);
+
479  // (forall x in v, x + 1 <= 16) and
+
480  // (v = Perm16::one() or last diff index < 16)
+
481  return (simde_mm_movemask_epi8(v + Epu8(1) <= Epu8(0x10)) == 0xffff) &&
+
482  (diff == 16 || diff < k);
+
483 }
+
484 
+
485 inline bool is_transformation(epu8 v, const size_t k) noexcept {
+
486  uint64_t diff = last_diff(v, Epu8.id(), 16);
+
487  return (simde_mm_movemask_epi8(v < Epu8(0x10)) == 0xffff) &&
+
488  (diff == 16 || diff < k);
+
489 }
+
490 
+
491 inline bool is_partial_permutation(epu8 v, const size_t k) noexcept {
+
492  uint64_t diff = last_diff(v, Epu8.id(), 16);
+
493  // (forall x in v, x <= 15) and
+
494  // (forall x < 15, multiplicity x v <= 1
+
495  // (v = Perm16::one() or last diff index < 16)
+
496  return (simde_mm_movemask_epi8(v + Epu8(1) <= Epu8(0x10)) == 0xffff) &&
+
497  (simde_mm_movemask_epi8(eval16(v) <= Epu8(1)) == 0xffff) &&
+
498  (diff == 16 || diff < k);
+
499 }
+
500 
+
501 #ifdef SIMDE_X86_SSE4_2_NATIVE
+
502 inline bool is_permutation_cmpestri(epu8 v, const size_t k) noexcept {
+
503  uint64_t diff = last_diff(v, Epu8.id(), 16);
+
504  // (forall x in v, x in Perm16::one()) and
+
505  // (forall x in Perm16::one(), x in v) and
+
506  // (v = Perm16::one() or last diff index < 16)
+
507  return _mm_cmpestri(Epu8.id(), 16, v, 16, FIRST_NON_ZERO) == 16 &&
+
508  _mm_cmpestri(v, 16, Epu8.id(), 16, FIRST_NON_ZERO) == 16 &&
+
509  (diff == 16 || diff < k);
+
510 }
+
511 #endif
+
512 
+
513 inline bool is_permutation_sort(epu8 v, const size_t k) noexcept {
+
514  uint64_t diff = last_diff(v, Epu8.id(), 16);
+
515  return equal(sorted(v), Epu8.id()) && (diff == 16 || diff < k);
+
516 }
+
517 inline bool is_permutation_eval(epu8 v, const size_t k) noexcept {
+
518  uint64_t diff = last_diff(v, Epu8.id(), 16);
+
519  return equal(eval16(v), Epu8({}, 1)) && (diff == 16 || diff < k);
+
520 }
+
521 
+
522 inline bool is_permutation(epu8 v, const size_t k) noexcept {
+
523 #ifdef SIMDE_X86_SSE4_2_NATIVE
+
524  return is_permutation_cmpestri(v, k);
+
525 #else
+
526  return is_permutation_sort(v, k);
+
527 #endif
+
528 }
+
529 
+
530 } // namespace HPCombi
+
531 
+
532 namespace std {
+
533 
+
534 inline std::ostream &operator<<(std::ostream &stream, HPCombi::epu8 const &a) {
+
535  stream << "{" << std::setw(2) << unsigned(a[0]);
+
536  for (unsigned i = 1; i < 16; ++i)
+
537  stream << "," << std::setw(2) << unsigned(a[i]);
+
538  stream << "}";
+
539  return stream;
+
540 }
+
541 
+
542 inline std::string to_string(HPCombi::epu8 const &a) {
+
543  std::ostringstream ss;
+
544  ss << a;
+
545  return ss.str();
+
546 }
+
547 
+
548 template <> struct equal_to<HPCombi::epu8> {
+
549  bool operator()(const HPCombi::epu8 &lhs,
+
550  const HPCombi::epu8 &rhs) const noexcept {
+
551  return HPCombi::equal(lhs, rhs);
+
552  }
+
553 };
+
554 
+
555 template <> struct not_equal_to<HPCombi::epu8> {
+
556  bool operator()(const HPCombi::epu8 &lhs,
+
557  const HPCombi::epu8 &rhs) const noexcept {
+
558  return HPCombi::not_equal(lhs, rhs);
+
559  }
+
560 };
+
561 
+
562 template <> struct hash<HPCombi::epu8> {
+
563  inline size_t operator()(HPCombi::epu8 a) const noexcept {
+
564  unsigned __int128 v0 = simde_mm_extract_epi64(a, 0);
+
565  unsigned __int128 v1 = simde_mm_extract_epi64(a, 1);
+
566  return ((v1 * HPCombi::prime + v0) * HPCombi::prime) >> 64;
+
567 
+
568  /* The following is extremely slow on Renner benchmark
+
569  uint64_t v0 = simde_mm_extract_epi64(ar.v, 0);
+
570  uint64_t v1 = simde_mm_extract_epi64(ar.v, 1);
+
571  size_t seed = v0 + 0x9e3779b9;
+
572  seed ^= v1 + 0x9e3779b9 + (seed<<6) + (seed>>2);
+
573  return seed;
+
574  */
+
575  }
+
576 };
+
577 
+
578 template <> struct less<HPCombi::epu8> {
+
579  // WARNING: due to endianness this is not lexicographic comparison,
+
580  // but we don't care when using in std::set.
+
581  // 10% faster than calling the lexicographic comparison operator !
+
582  inline size_t operator()(const HPCombi::epu8 &v1,
+
583  const HPCombi::epu8 &v2) const noexcept {
+
584  simde__m128 v1v = simde__m128(v1), v2v = simde__m128(v2);
+
585  return v1v[0] == v2v[0] ? v1v[1] < v2v[1] : v1v[0] < v2v[0];
+
586  }
+
587 };
+
588 
+
589 } // namespace std
+
#define FF
Definition: epu8_impl.hpp:306
+
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:410
+
epu8 max(epu8 a, epu8 b) noexcept
Vector max between two HPCombi::epu8 0.
Definition: epu8.hpp:89
+
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:85
+
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:119
+
uint8_t horiz_min_ref(epu8) noexcept
Horizontal sum of a HPCombi::epu8.
Definition: epu8_impl.hpp:401
+
epu8 eval16_arr(epu8 v) noexcept
Evaluation of a HPCombi::epu8.
Definition: epu8_impl.hpp:444
+
epu8 permuted(epu8 a, epu8 b) noexcept
Permuting a HPCombi::epu8.
Definition: epu8.hpp:70
+
epu8 sort8_perm(epu8 &a) noexcept
Sort this and return the sorting permutation.
Definition: epu8_impl.hpp:212
+
epu8 shifted_right(epu8 a) noexcept
Left shifted of a HPCombi::epu8 inserting a 0.
Definition: epu8.hpp:76
+
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:70
+
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:81
+
epu8 partial_sums_ref(epu8) noexcept
Horizontal partial sum of a HPCombi::epu8.
Definition: epu8_impl.hpp:349
+
epu8 eval16_gen(epu8 v) noexcept
Definition: epu8_impl.hpp:452
+
epu8 network_sort(epu8 res, std::array< epu8, sz > rounds)
Apply a sorting network.
Definition: epu8_impl.hpp:128
+
epu8 remove_dups(epu8 a, uint8_t repl=0) noexcept
Remove duplicates in a sorted HPCombi::epu8.
Definition: epu8_impl.hpp:252
+
epu8 revsorted8(epu8 a) noexcept
Return a HPCombi::epu8 with the two half reverse sorted.
Definition: epu8_impl.hpp:205
+
epu8 permutation_of(epu8 a, epu8 b) noexcept
Find if a vector is a permutation of one other.
Definition: epu8_impl.hpp:295
+
TPUBuild< TPU >::array & as_array(TPU &v) noexcept
Cast a TPU to a c++ std::array.
Definition: builder.hpp:134
+
bool is_permutation(epu8 v, const size_t k=16) noexcept
Definition: epu8_impl.hpp:522
+
void merge_rev(epu8 &a, epu8 &b) noexcept
Definition: epu8_impl.hpp:226
+
constexpr std::array< epu8, 4 > summing_rounds
Permutation Round for partial and horizontal sums.
Definition: epu8_impl.hpp:309
+
int8_t less_partial(epu8 a, epu8 b, int k) noexcept
Partial lexicographic comparison between two HPCombi::epu8.
Definition: epu8_impl.hpp:106
+
uint8_t horiz_max4(epu8) noexcept
Horizontal sum of a HPCombi::epu8.
Definition: epu8_impl.hpp:375
+
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:98
+
uint8_t horiz_max3(epu8) noexcept
Horizontal sum of a HPCombi::epu8.
Definition: epu8_impl.hpp:376
+
constexpr uint64_t prime
A prime number good for hashing.
Definition: epu8.hpp:163
+
uint8_t horiz_min_gen(epu8) noexcept
Horizontal sum of a HPCombi::epu8.
Definition: epu8_impl.hpp:407
+
bool is_partial_permutation(epu8 v, const size_t k=16) noexcept
Test for partial permutations.
Definition: epu8_impl.hpp:491
+
bool is_permutation_sort(epu8 v, const size_t k=16) noexcept
Definition: epu8_impl.hpp:513
+
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:116
+
VectGeneric< TPUBuild< TPU >::size > & as_VectGeneric(TPU &v)
Cast a HPCombi::epu8 to a c++ HPCombi::VectGeneric.
Definition: builder.hpp:151
+
void merge(epu8 &a, epu8 &b) noexcept
Merge two sorted epu8.
Definition: epu8_impl.hpp:233
+
uint8_t horiz_sum4(epu8) noexcept
Horizontal sum of a HPCombi::epu8.
Definition: epu8_impl.hpp:340
+
epu8 popcount16(epu8 v) noexcept
a vector popcount function
Definition: epu8_impl.hpp:472
+
epu8 partial_sums_round(epu8) noexcept
Horizontal partial sum of a HPCombi::epu8.
Definition: epu8_impl.hpp:360
+
uint8_t horiz_sum3(epu8) noexcept
Horizontal sum of a HPCombi::epu8.
Definition: epu8_impl.hpp:341
+
uint8_t horiz_sum_ref(epu8) noexcept
Horizontal sum of a HPCombi::epu8.
Definition: epu8_impl.hpp:331
+
epu8 partial_sums_gen(epu8) noexcept
Horizontal partial sum of a HPCombi::epu8.
Definition: epu8_impl.hpp:356
+
bool equal(epu8 a, epu8 b) noexcept
Equality of HPCombi::epu8.
Definition: epu8.hpp:61
+
epu8 permutation_of_ref(epu8 a, epu8 b) noexcept
Find if a vector is a permutation of one other.
Definition: epu8_impl.hpp:286
+
epu8 min(epu8 a, epu8 b) noexcept
Vector min between two HPCombi::epu8 0.
Definition: epu8.hpp:87
+
uint64_t first_mask(epu8 msk, size_t bound)
Definition: epu8_impl.hpp:61
+
epu8 partial_max_ref(epu8) noexcept
Horizontal partial sum of a HPCombi::epu8.
Definition: epu8_impl.hpp:384
+
epu8 sorted8(epu8 a) noexcept
Return a HPCombi::epu8 with the two half sorted.
Definition: epu8_impl.hpp:199
+
epu8 partial_max_round(epu8) noexcept
Horizontal partial sum of a HPCombi::epu8.
Definition: epu8_impl.hpp:395
+
epu8 eval16(epu8 v) noexcept
Evaluation of a HPCombi::epu8.
Definition: epu8.hpp:407
+
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:141
+
constexpr std::array< epu8, 6 > sorting_rounds8
A duplicated 8-way sorting network.
Definition: epu8_impl.hpp:183
+
epu8 eval16_cycle(epu8 v) noexcept
Evaluation of a HPCombi::epu8.
Definition: epu8_impl.hpp:455
+
constexpr std::array< epu8, 9 > sorting_rounds
A 16-way sorting network.
Definition: epu8_impl.hpp:162
+
epu8 eval16_ref(epu8 v) noexcept
Evaluation of a HPCombi::epu8.
Definition: epu8_impl.hpp:436
+
epu8 partial_max_gen(epu8) noexcept
Horizontal partial sum of a HPCombi::epu8.
Definition: epu8_impl.hpp:391
+
bool less(epu8 a, epu8 b) noexcept
Lexicographic comparison between two HPCombi::epu8.
Definition: epu8_impl.hpp:102
+
uint8_t horiz_max_ref(epu8) noexcept
Horizontal sum of a HPCombi::epu8.
Definition: epu8_impl.hpp:366
+
epu8 sorted(epu8 a) noexcept
Return a sorted HPCombi::epu8.
Definition: epu8_impl.hpp:196
+
uint64_t last_mask(epu8 msk, size_t bound)
Definition: epu8_impl.hpp:65
+
constexpr std::array< epu8, 4 > mining_rounds
Definition: epu8_impl.hpp:319
+
constexpr TPUBuild< epu8 > Epu8
Factory object acting as a class constructor for type HPCombi::epu8.
Definition: epu8.hpp:50
+
bool is_permutation_eval(epu8 v, const size_t k=16) noexcept
Definition: epu8_impl.hpp:517
+
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:113
+
epu8 random_epu8(uint16_t bnd)
A random HPCombi::epu8.
Definition: epu8_impl.hpp:240
+
epu8 revsorted(epu8 a) noexcept
Return a reverse sorted HPCombi::epu8.
Definition: epu8_impl.hpp:202
+
epu8 partial_min_round(epu8) noexcept
Horizontal partial sum of a HPCombi::epu8.
Definition: epu8_impl.hpp:430
+
bool is_sorted(epu8 a) noexcept
Testing if a HPCombi::epu8 is sorted.
Definition: epu8_impl.hpp:193
+
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:259
+
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:122
+
uint64_t last_diff(epu8 a, epu8 b, size_t bound=16) noexcept
The last difference between two HPCombi::epu8.
Definition: epu8.hpp:485
+
epu8 eval16_popcount(epu8 v) noexcept
Evaluation of a HPCombi::epu8.
Definition: epu8_impl.hpp:463
+
epu8 sort_perm(epu8 &a) noexcept
Sort this and return the sorting permutation.
Definition: epu8_impl.hpp:209
+
epu8 partial_min_gen(epu8) noexcept
Horizontal partial sum of a HPCombi::epu8.
Definition: epu8_impl.hpp:426
+
epu8 partial_min_ref(epu8) noexcept
Horizontal partial sum of a HPCombi::epu8.
Definition: epu8_impl.hpp:419
+
uint8_t horiz_max_gen(epu8) noexcept
Horizontal sum of a HPCombi::epu8.
Definition: epu8_impl.hpp:372
+
bool is_transformation(epu8 v, const size_t k=16) noexcept
Test for transformation.
Definition: epu8_impl.hpp:485
+
uint64_t first_diff(epu8 a, epu8 b, size_t bound=16) noexcept
The first difference between two HPCombi::epu8.
Definition: epu8.hpp:445
+
bool is_partial_transformation(epu8 v, const size_t k=16) noexcept
Test for partial transformation.
Definition: epu8_impl.hpp:477
+
epu8 permuted_ref(epu8 a, epu8 b) noexcept
Permuting a HPCombi::epu8.
Definition: epu8_impl.hpp:53
+
constexpr std::array< epu8, 6 > merge_rounds
Definition: epu8_impl.hpp:219
+
uint8_t horiz_sum_gen(epu8) noexcept
Horizontal sum of a HPCombi::epu8.
Definition: epu8_impl.hpp:337
+
uint8_t horiz_min3(epu8) noexcept
Horizontal sum of a HPCombi::epu8.
Definition: epu8_impl.hpp:411
+
bool not_equal(epu8 a, epu8 b) noexcept
Non equality of HPCombi::epu8.
Definition: epu8.hpp:65
+
Definition: bmat8.hpp:360
+
std::ostream & operator<<(std::ostream &os, HPCombi::BMat8 const &bm)
Definition: bmat8_impl.hpp:500
+
std::string to_string(HPCombi::epu8 const &a)
Definition: epu8_impl.hpp:542
+
bool operator()(const HPCombi::epu8 &lhs, const HPCombi::epu8 &rhs) const noexcept
Definition: epu8_impl.hpp:549
+
size_t operator()(HPCombi::epu8 a) const noexcept
Definition: epu8_impl.hpp:563
+
size_t operator()(const HPCombi::epu8 &v1, const HPCombi::epu8 &v2) const noexcept
Definition: epu8_impl.hpp:582
+
bool operator()(const HPCombi::epu8 &lhs, const HPCombi::epu8 &rhs) const noexcept
Definition: epu8_impl.hpp:556
+ +
+ + + + diff --git a/docs/examples.html b/docs/examples.html new file mode 100644 index 00000000..2196465c --- /dev/null +++ b/docs/examples.html @@ -0,0 +1,86 @@ + + + + + + + +HPCombi: Examples + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v0.0.6
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
Examples
+
+
+
Here is a list of all examples:
+
+ + + + diff --git a/docs/files.html b/docs/files.html new file mode 100644 index 00000000..d1d5ff4d --- /dev/null +++ b/docs/files.html @@ -0,0 +1,112 @@ + + + + + + + +HPCombi: File List + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v0.0.6
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
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 0000000000000000000000000000000000000000..bb8ab35edce8e97554e360005ee9fc5bffb36e66 GIT binary patch literal 616 zcmV-u0+;=XP)a9#ETzayK)T~Jw&MMH>OIr#&;dC}is*2Mqdf&akCc=O@`qC+4i z5Iu3w#1M@KqXCz8TIZd1wli&kkl2HVcAiZ8PUn5z_kG@-y;?yK06=cA0U%H0PH+kU zl6dp}OR(|r8-RG+YLu`zbI}5TlOU6ToR41{9=uz^?dGTNL;wIMf|V3`d1Wj3y!#6` zBLZ?xpKR~^2x}?~zA(_NUu3IaDB$tKma*XUdOZN~c=dLt_h_k!dbxm_*ibDM zlFX`g{k$X}yIe%$N)cn1LNu=q9_CS)*>A zsX_mM4L@`(cSNQKMFc$RtYbx{79#j-J7hk*>*+ZZhM4Hw?I?rsXCi#mRWJ=-0LGV5a-WR0Qgt<|Nqf)C-@80`5gIz45^_20000IqP)X=#(TiCT&PiIIVc55T}TU}EUh*{q$|`3@{d>{Tc9Bo>e= zfmF3!f>fbI9#GoEHh0f`i5)wkLpva0ztf%HpZneK?w-7AK@b4Itw{y|Zd3k!fH?q2 zlhckHd_V2M_X7+)U&_Xcfvtw60l;--DgZmLSw-Y?S>)zIqMyJ1#FwLU*%bl38ok+! zh78H87n`ZTS;uhzAR$M`zZ`bVhq=+%u9^$5jDplgxd44}9;IRqUH1YHH|@6oFe%z( zo4)_>E$F&^P-f(#)>(TrnbE>Pefs9~@iN=|)Rz|V`sGfHNrJ)0gJb8xx+SBmRf@1l zvuzt=vGfI)<-F9!o&3l?>9~0QbUDT(wFdnQPv%xdD)m*g%!20>Bc9iYmGAp<9YAa( z0QgYgTWqf1qN++Gqp z8@AYPTB3E|6s=WLG?xw0tm|U!o=&zd+H0oRYE;Dbx+Na9s^STqX|Gnq%H8s(nGDGJ j8vwW|`Ts`)fSK|Kx=IK@RG@g200000NkvXXu0mjfauFEA literal 0 HcmV?d00001 diff --git a/docs/functions.html b/docs/functions.html new file mode 100644 index 00000000..8478055f --- /dev/null +++ b/docs/functions.html @@ -0,0 +1,91 @@ + + + + + + + +HPCombi: Class Members + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v0.0.6
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
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..2812f4eb --- /dev/null +++ b/docs/functions_b.html @@ -0,0 +1,90 @@ + + + + + + + +HPCombi: Class Members + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v0.0.6
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
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..a6c6dc31 --- /dev/null +++ b/docs/functions_c.html @@ -0,0 +1,104 @@ + + + + + + + +HPCombi: Class Members + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v0.0.6
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
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..83b2675c --- /dev/null +++ b/docs/functions_d.html @@ -0,0 +1,88 @@ + + + + + + + +HPCombi: Class Members + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v0.0.6
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
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..d9e495f2 --- /dev/null +++ b/docs/functions_e.html @@ -0,0 +1,103 @@ + + + + + + + +HPCombi: Class Members + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v0.0.6
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
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..72425f19 --- /dev/null +++ b/docs/functions_f.html @@ -0,0 +1,100 @@ + + + + + + + +HPCombi: Class Members + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v0.0.6
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
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..3f0642b8 --- /dev/null +++ b/docs/functions_func.html @@ -0,0 +1,85 @@ + + + + + + + +HPCombi: Class Members - Functions + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v0.0.6
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- a -

+
+ + + + diff --git a/docs/functions_func_b.html b/docs/functions_func_b.html new file mode 100644 index 00000000..62f2315f --- /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 v0.0.6
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- b -

+
+ + + + diff --git a/docs/functions_func_c.html b/docs/functions_func_c.html new file mode 100644 index 00000000..2a72bb06 --- /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 v0.0.6
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- c -

+
+ + + + diff --git a/docs/functions_func_d.html b/docs/functions_func_d.html new file mode 100644 index 00000000..7af57677 --- /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 v0.0.6
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- d -

+
+ + + + diff --git a/docs/functions_func_e.html b/docs/functions_func_e.html new file mode 100644 index 00000000..6e997a40 --- /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 v0.0.6
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- e -

+
+ + + + diff --git a/docs/functions_func_f.html b/docs/functions_func_f.html new file mode 100644 index 00000000..4424dc43 --- /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 v0.0.6
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- f -

+
+ + + + diff --git a/docs/functions_func_h.html b/docs/functions_func_h.html new file mode 100644 index 00000000..1084b91b --- /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 v0.0.6
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- h -

+
+ + + + diff --git a/docs/functions_func_i.html b/docs/functions_func_i.html new file mode 100644 index 00000000..541640f5 --- /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 v0.0.6
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- i -

+
+ + + + diff --git a/docs/functions_func_l.html b/docs/functions_func_l.html new file mode 100644 index 00000000..409d0d3a --- /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 v0.0.6
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- l -

+
+ + + + diff --git a/docs/functions_func_m.html b/docs/functions_func_m.html new file mode 100644 index 00000000..8062a245 --- /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 v0.0.6
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- m -

+
+ + + + diff --git a/docs/functions_func_n.html b/docs/functions_func_n.html new file mode 100644 index 00000000..4bf32be6 --- /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 v0.0.6
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- n -

+
+ + + + diff --git a/docs/functions_func_o.html b/docs/functions_func_o.html new file mode 100644 index 00000000..f3d9e58a --- /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 v0.0.6
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ + + + + + diff --git a/docs/functions_func_p.html b/docs/functions_func_p.html new file mode 100644 index 00000000..fdf0c0e0 --- /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 v0.0.6
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ + + + + + diff --git a/docs/functions_func_r.html b/docs/functions_func_r.html new file mode 100644 index 00000000..625d57c3 --- /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 v0.0.6
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- r -

+
+ + + + diff --git a/docs/functions_func_s.html b/docs/functions_func_s.html new file mode 100644 index 00000000..7a846d2d --- /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 v0.0.6
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- s -

+
+ + + + diff --git a/docs/functions_func_t.html b/docs/functions_func_t.html new file mode 100644 index 00000000..731811d8 --- /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 v0.0.6
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- t -

+
+ + + + diff --git a/docs/functions_func_u.html b/docs/functions_func_u.html new file mode 100644 index 00000000..4990e3db --- /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 v0.0.6
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- u -

+
+ + + + diff --git a/docs/functions_func_v.html b/docs/functions_func_v.html new file mode 100644 index 00000000..36c99f65 --- /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 v0.0.6
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- v -

+
+ + + + diff --git a/docs/functions_func_w.html b/docs/functions_func_w.html new file mode 100644 index 00000000..6781bbdc --- /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 v0.0.6
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- w -

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

- ~ -

+
+ + + + diff --git a/docs/functions_h.html b/docs/functions_h.html new file mode 100644 index 00000000..2d18333a --- /dev/null +++ b/docs/functions_h.html @@ -0,0 +1,91 @@ + + + + + + + +HPCombi: Class Members + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v0.0.6
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
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..e9353e61 --- /dev/null +++ b/docs/functions_i.html @@ -0,0 +1,131 @@ + + + + + + + +HPCombi: Class Members + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v0.0.6
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
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..7d29e5d6 --- /dev/null +++ b/docs/functions_l.html @@ -0,0 +1,144 @@ + + + + + + + +HPCombi: Class Members + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v0.0.6
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
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..0acc26cc --- /dev/null +++ b/docs/functions_m.html @@ -0,0 +1,88 @@ + + + + + + + +HPCombi: Class Members + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v0.0.6
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
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..d22d8bf7 --- /dev/null +++ b/docs/functions_n.html @@ -0,0 +1,105 @@ + + + + + + + +HPCombi: Class Members + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v0.0.6
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
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..7b4f579a --- /dev/null +++ b/docs/functions_o.html @@ -0,0 +1,154 @@ + + + + + + + +HPCombi: Class Members + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v0.0.6
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
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..1a9e4ce6 --- /dev/null +++ b/docs/functions_p.html @@ -0,0 +1,119 @@ + + + + + + + +HPCombi: Class Members + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v0.0.6
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
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..14b4681a --- /dev/null +++ b/docs/functions_r.html @@ -0,0 +1,167 @@ + + + + + + + +HPCombi: Class Members + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v0.0.6
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
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..315809ae --- /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 v0.0.6
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ + + + diff --git a/docs/functions_s.html b/docs/functions_s.html new file mode 100644 index 00000000..3d7c3880 --- /dev/null +++ b/docs/functions_s.html @@ -0,0 +1,113 @@ + + + + + + + +HPCombi: Class Members + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v0.0.6
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
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..74a11c64 --- /dev/null +++ b/docs/functions_t.html @@ -0,0 +1,106 @@ + + + + + + + +HPCombi: Class Members + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v0.0.6
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
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..9189752f --- /dev/null +++ b/docs/functions_type.html @@ -0,0 +1,105 @@ + + + + + + + +HPCombi: Class Members - Typedefs + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v0.0.6
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ + + + + + diff --git a/docs/functions_u.html b/docs/functions_u.html new file mode 100644 index 00000000..f583c4c1 --- /dev/null +++ b/docs/functions_u.html @@ -0,0 +1,85 @@ + + + + + + + +HPCombi: Class Members + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v0.0.6
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
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..bd9788e8 --- /dev/null +++ b/docs/functions_v.html @@ -0,0 +1,106 @@ + + + + + + + +HPCombi: Class Members + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v0.0.6
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
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..3e9236a0 --- /dev/null +++ b/docs/functions_vars.html @@ -0,0 +1,90 @@ + + + + + + + +HPCombi: Class Members - Variables + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v0.0.6
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ + + + + + diff --git a/docs/functions_w.html b/docs/functions_w.html new file mode 100644 index 00000000..a76239fc --- /dev/null +++ b/docs/functions_w.html @@ -0,0 +1,85 @@ + + + + + + + +HPCombi: Class Members + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v0.0.6
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
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..2fe2dc0d --- /dev/null +++ b/docs/functions_~.html @@ -0,0 +1,85 @@ + + + + + + + +HPCombi: Class Members + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v0.0.6
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
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..1262662b --- /dev/null +++ b/docs/globals.html @@ -0,0 +1,298 @@ + + + + + + + +HPCombi: File Members + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v0.0.6
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
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..14df6dfb --- /dev/null +++ b/docs/globals_defs.html @@ -0,0 +1,87 @@ + + + + + + + +HPCombi: File Members + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v0.0.6
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ + + + diff --git a/docs/globals_func.html b/docs/globals_func.html new file mode 100644 index 00000000..88255a85 --- /dev/null +++ b/docs/globals_func.html @@ -0,0 +1,129 @@ + + + + + + + +HPCombi: File Members + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v0.0.6
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ + + + diff --git a/docs/globals_vars.html b/docs/globals_vars.html new file mode 100644 index 00000000..8e0410db --- /dev/null +++ b/docs/globals_vars.html @@ -0,0 +1,228 @@ + + + + + + + +HPCombi: File Members + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v0.0.6
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- 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..0a364b3a --- /dev/null +++ b/docs/hierarchy.html @@ -0,0 +1,132 @@ + + + + + + + +HPCombi: Class Hierarchy + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v0.0.6
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
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..46796b25 --- /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 v0.0.6
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
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..23e329f1 --- /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 v0.0.6
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
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_INCLUDED
+
17 #define HPCOMBI_HPCOMBI_HPP_INCLUDED
+
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_INCLUDED
+ + + + + +
Generic compile time power.
+ + +
+ + + + diff --git a/docs/image_8cpp.html b/docs/image_8cpp.html new file mode 100644 index 00000000..5186a5c0 --- /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 v0.0.6
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
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..9fdfb0c9 --- /dev/null +++ b/docs/index.html @@ -0,0 +1,103 @@ + + + + + + + +HPCombi: HPCombi + + + + + + + + + + + +
+
+ + + + + + +
+
HPCombi +
+
High Performance Combinatorics in C++ using vector instructions v0.0.6
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+ +
+
+

High Performance Combinatorics in C++ using vector instructions v0.0.8

+

SSE and AVX instruction sets allows for very fast manipulation of combinatorial objects such as transformations, permutations, boolean matrices of small size. The goal of this project is to implement various new algorithms and benchmark them on various compiler and architecture.

+

+Authors

+ +

+Contributors

+
    +
  • Finn Smith : discussions + BMat8 reference code
  • +
  • Viviane Pons : algorithms discussions
  • +
  • Reinis Cirpons : CI
  • +
+

+Acknowledgments

+
    +
  • This development is funded by the OpenDreamKit Horizon 2020 European Research Infrastructure project (#676541).
  • +
+
+
+ + + + 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..fbdc21a2 --- /dev/null +++ b/docs/namespaceHPCombi.html @@ -0,0 +1,3936 @@ + + + + + + + +HPCombi: HPCombi Namespace Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    HPCombi +
    +
    High Performance Combinatorics in C++ using vector instructions v0.0.6
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + +
    +
    + +
    +
    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:407
    +
    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:279
    +
    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:342
    +
    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:216
    +
    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
    +
    +
    +
    Returns
    void 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:308
    +
    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:371
    +
    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:245
    +
    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.

    +

    Implementation part for inline functions //////////////////////////////////.

    +

    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:240
    +
    +
    +
    + +

    ◆ 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

    +

    odd–even mergesort"

    + +
    +
    + +

    ◆ 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:306
    +
    +

    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..6b774c07 --- /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 v0.0.6
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    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..f40f08ec --- /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 v0.0.6
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    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..142dd832 --- /dev/null +++ b/docs/namespacelibsemigroups.html @@ -0,0 +1,90 @@ + + + + + + + +HPCombi: libsemigroups Namespace Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    HPCombi +
    +
    High Performance Combinatorics in C++ using vector instructions v0.0.6
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + +
    +
    + +
    +
    libsemigroups Namespace Reference
    +
    +
    + + + + +

    +Classes

    class  Timer
     
    +
    + + + + diff --git a/docs/namespacemembers.html b/docs/namespacemembers.html new file mode 100644 index 00000000..468d9c25 --- /dev/null +++ b/docs/namespacemembers.html @@ -0,0 +1,433 @@ + + + + + + + +HPCombi: Namespace Members + + + + + + + + + + + +
    +
    + + + + + + +
    +
    HPCombi +
    +
    High Performance Combinatorics in C++ using vector instructions v0.0.6
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    + +
    + +
    +
    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..17bb3704 --- /dev/null +++ b/docs/namespacemembers_func.html @@ -0,0 +1,397 @@ + + + + + + + +HPCombi: Namespace Members + + + + + + + + + + + +
    +
    + + + + + + +
    +
    HPCombi +
    +
    High Performance Combinatorics in C++ using vector instructions v0.0.6
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    + +
    + +
    +  + +

    - 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..339ca01c --- /dev/null +++ b/docs/namespacemembers_type.html @@ -0,0 +1,89 @@ + + + + + + + +HPCombi: Namespace Members + + + + + + + + + + + +
    +
    + + + + + + +
    +
    HPCombi +
    +
    High Performance Combinatorics in C++ using vector instructions v0.0.6
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    + +
    + +
    +
    + + + + diff --git a/docs/namespacemembers_vars.html b/docs/namespacemembers_vars.html new file mode 100644 index 00000000..bffcc3b9 --- /dev/null +++ b/docs/namespacemembers_vars.html @@ -0,0 +1,107 @@ + + + + + + + +HPCombi: Namespace Members + + + + + + + + + + + +
    +
    + + + + + + +
    +
    HPCombi +
    +
    High Performance Combinatorics in C++ using vector instructions v0.0.6
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    + +
    + +
    +
    + + + + diff --git a/docs/namespaces.html b/docs/namespaces.html new file mode 100644 index 00000000..9a5d6df3 --- /dev/null +++ b/docs/namespaces.html @@ -0,0 +1,116 @@ + + + + + + + +HPCombi: Namespace List + + + + + + + + + + + +
    +
    + + + + + + +
    +
    HPCombi +
    +
    High Performance Combinatorics in C++ using vector instructions v0.0.6
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    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..cc42ac7a --- /dev/null +++ b/docs/namespacestd.html @@ -0,0 +1,292 @@ + + + + + + + +HPCombi: std Namespace Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    HPCombi +
    +
    High Performance Combinatorics in C++ using vector instructions v0.0.6
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + +
    +
    + +
    +
    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 0000000000000000000000000000000000000000..72a58a529ed3a9ed6aa0c51a79cf207e026deee2 GIT binary patch literal 153 zcmeAS@N?(olHy`uVBq!ia0vp^j6iI`!2~2XGqLUlQVE_ejv*C{Z|{2ZH7M}7UYxc) zn!W8uqtnIQ>_z8U literal 0 HcmV?d00001 diff --git a/docs/nav_g.png b/docs/nav_g.png new file mode 100644 index 0000000000000000000000000000000000000000..2093a237a94f6c83e19ec6e5fd42f7ddabdafa81 GIT binary patch literal 95 zcmeAS@N?(olHy`uVBq!ia0vp^j6lrB!3HFm1ilyoDK$?Q$B+ufw|5PB85lU25BhtE tr?otc=hd~V+ws&_A@j8Fiv!KF$B+ufw|5=67#uj90@pIL wZ=Q8~_Ju`#59=RjDrmm`tMD@M=!-l18IR?&vFVdQ&MBb@0HFXL1|%O$WD@{VPM$7~Ar*{o?;hlAFyLXmaDC0y znK1_#cQqJWPES%4Uujug^TE?jMft$}Eq^WaR~)%f)vSNs&gek&x%A9X9sM + + + + + + +HPCombi: /home/florent/src/HPCombi/examples/pattern.cpp File Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    HPCombi +
    +
    High Performance Combinatorics in C++ using vector instructions v0.0.6
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    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..ecd618a4 --- /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 v0.0.6
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    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..ff98e806 --- /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 v0.0.6
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    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_INCLUDED
    +
    17 #define HPCOMBI_PERM16_HPP_INCLUDED
    +
    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_INCLUDED
    + +
    Perm16 Perm16
    Definition: perm16_impl.hpp:234
    +
    Definition: bmat8.hpp:37
    +
    epu8 permuted(epu8 a, epu8 b) noexcept
    Permuting a HPCombi::epu8.
    Definition: epu8.hpp:70
    +
    epu8 permutation_of(epu8 a, epu8 b) noexcept
    Find if a vector is a permutation of one other.
    Definition: epu8_impl.hpp:295
    +
    bool is_permutation(epu8 v, const size_t k=16) noexcept
    Definition: epu8_impl.hpp:522
    +
    bool is_partial_permutation(epu8 v, const size_t k=16) noexcept
    Test for partial permutations.
    Definition: epu8_impl.hpp:491
    +
    constexpr TPUBuild< epu8 > Epu8
    Factory object acting as a class constructor for type HPCombi::epu8.
    Definition: epu8.hpp:50
    +
    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:485
    +
    bool is_partial_transformation(epu8 v, const size_t k=16) noexcept
    Test for partial transformation.
    Definition: epu8_impl.hpp:477
    +
    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:140
    +
    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:115
    +
    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:93
    +
    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:110
    +
    uint32_t domain_bitset(bool complement=false) const
    Returns a bit mask for the domain of *this.
    Definition: perm16_impl.hpp:42
    +
    PTransf16 left_one() const
    Returns the partial left identity for *this.
    Definition: perm16_impl.hpp:66
    +
    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:69
    +
    PTransf16 right_one() const
    Returns the partial right identity for *this.
    Definition: perm16_impl.hpp:45
    +
    uint32_t image_bitset(bool complement=false) const
    Returns a bit mask for the image of *this.
    Definition: perm16_impl.hpp:63
    +
    epu8 fix_points_mask(bool complement=false) const
    Returns a mask for the fix point of *this.
    Definition: perm16_impl.hpp:90
    +
    uint8_t smallest_fix_point() const
    Returns the smallest fix point of *this.
    Definition: perm16_impl.hpp:97
    + +
    uint32_t rank_cmpestrm() const
    Returns the size of the image of *this.
    Definition: perm16_impl.hpp:78
    +
    epu8 domain_mask(bool complement=false) const
    Returns a mask for the domain of *this.
    Definition: perm16_impl.hpp:39
    +
    uint32_t rank() const
    Returns the size of the image of *this.
    Definition: perm16_impl.hpp:82
    +
    epu8 image_mask_ref(bool complement=false) const
    Returns a mask for the image of *this.
    Definition: perm16_impl.hpp:55
    +
    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:105
    +
    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:101
    +
    Permutations of .
    Definition: perm16.hpp:204
    +
    Perm16 inverse_cycl() const
    The inverse permutation.
    Definition: perm16_impl.hpp:243
    +
    Perm16 inverse() const
    The inverse permutation.
    Definition: perm16.hpp:279
    +
    epu8 lehmer() const
    The Lehmer code of a permutation.
    Definition: perm16_impl.hpp:284
    +
    uint8_t length_ref() const
    The Coxeter length (ie: number of inversion) of a permutation.
    Definition: perm16_impl.hpp:293
    +
    epu8 cycles_partition() const
    The set partition of the cycles of a permutation.
    Definition: perm16_impl.hpp:338
    +
    bool left_weak_leq_ref(Perm16 other) const
    Compare two permutations for the left weak order.
    Definition: perm16_impl.hpp:356
    +
    uint8_t nb_descents_ref() const
    The number of descent of a permutation.
    Definition: perm16_impl.hpp:314
    +
    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:219
    +
    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:265
    +
    bool left_weak_leq_length(Perm16 other) const
    Compare two permutations for the left weak order.
    Definition: perm16_impl.hpp:379
    +
    uint8_t length() const
    The Coxeter length (ie: number of inversion) of a permutation.
    Definition: perm16_impl.hpp:312
    +
    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:203
    +
    Perm16 & operator=(const Perm16 &)=default
    +
    uint8_t nb_descents() const
    The number of descent of a permutation.
    Definition: perm16_impl.hpp:321
    +
    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:325
    +
    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:195
    +
    epu8 lehmer_arr() const
    The Lehmer code of a permutation.
    Definition: perm16_impl.hpp:274
    +
    static Perm16 unrankSJT(int n, int r)
    The r -th permutation of size n for the Steinhaus–Johnson–Trotter order.
    Definition: perm16_impl.hpp:167
    +
    bool left_weak_leq(Perm16 other) const
    Compare two permutations for the left weak order.
    Definition: perm16_impl.hpp:366
    +
    uint8_t nb_cycles_unroll() const
    The number of cycles of a permutation.
    Definition: perm16_impl.hpp:351
    +
    Perm16()=default
    +
    Perm16 inverse_pow() const
    The inverse permutation.
    Definition: perm16_impl.hpp:261
    +
    uint8_t length_arr() const
    The Coxeter length (ie: number of inversion) of a permutation.
    Definition: perm16_impl.hpp:302
    +
    Perm16 inverse_arr() const
    The inverse permutation.
    Definition: perm16_impl.hpp:210
    +
    static Perm16 random(uint64_t n=16)
    A random permutation of size .
    Definition: perm16_impl.hpp:155
    +
    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:562
    + +
    + + + + diff --git a/docs/perm16__impl_8hpp.html b/docs/perm16__impl_8hpp.html new file mode 100644 index 00000000..21799f64 --- /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 v0.0.6
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    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..d30c68fc --- /dev/null +++ b/docs/perm16__impl_8hpp_source.html @@ -0,0 +1,535 @@ + + + + + + + +HPCombi: /home/florent/src/HPCombi/include/hpcombi/perm16_impl.hpp Source File + + + + + + + + + + + +
    +
    + + + + + + +
    +
    HPCombi +
    +
    High Performance Combinatorics in C++ using vector instructions v0.0.6
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    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 namespace HPCombi {
    +
    17 
    +
    19 // Implementation part for inline functions //////////////////////////////////
    +
    21 
    +
    22 inline PTransf16::PTransf16(std::initializer_list<uint8_t> il)
    +
    23  : Vect16(Epu8.id()) {
    +
    24  HPCOMBI_ASSERT(il.size() <= 16);
    +
    25  std::copy(il.begin(), il.end(), HPCombi::as_array(v).begin());
    +
    26 }
    +
    27 
    +
    28 inline PTransf16::PTransf16(std::vector<uint8_t> dom, std::vector<uint8_t> rng,
    +
    29  size_t /*unused */)
    +
    30  : Vect16(Epu8(0xFF)) {
    +
    31  HPCOMBI_ASSERT(dom.size() == rng.size());
    +
    32  HPCOMBI_ASSERT(dom.size() <= 16);
    +
    33  for (size_t i = 0; i < dom.size(); ++i) {
    +
    34  HPCOMBI_ASSERT(dom[i] < 16);
    +
    35  v[dom[i]] = rng[i];
    +
    36  }
    +
    37 }
    +
    38 
    +
    39 inline epu8 PTransf16::domain_mask(bool complement) const {
    +
    40  return complement ? v == Epu8(0xFF) : v != Epu8(0xFF);
    +
    41 }
    +
    42 inline uint32_t PTransf16::domain_bitset(bool complement) const {
    +
    43  return simde_mm_movemask_epi8(domain_mask(complement));
    +
    44 }
    + +
    46  return domain_mask(true) | Epu8.id();
    +
    47 }
    +
    48 
    +
    49 #ifdef SIMDE_X86_SSE4_2_NATIVE
    +
    50 inline epu8 PTransf16::image_mask_cmpestrm(bool complement) const {
    +
    51  return complement ? _mm_cmpestrm(v, 16, one().v, 16, FIND_IN_VECT)
    +
    52  : _mm_cmpestrm(v, 16, one().v, 16, FIND_IN_VECT_COMPL);
    +
    53 }
    +
    54 #endif
    +
    55 inline epu8 PTransf16::image_mask_ref(bool complement) const {
    +
    56  epu8 res{};
    +
    57  for (auto x : *this)
    +
    58  if (x != 0xFF)
    +
    59  res[x] = 0xFF;
    +
    60  return complement ? static_cast<epu8>(!res) : res;
    +
    61 }
    +
    62 
    +
    63 inline uint32_t PTransf16::image_bitset(bool complement) const {
    +
    64  return simde_mm_movemask_epi8(image_mask(complement));
    +
    65 }
    + +
    67  return image_mask(true) | Epu8.id();
    +
    68 }
    +
    69 inline uint32_t PTransf16::rank_ref() const {
    +
    70  decltype(Epu8)::array tmp{};
    +
    71  static_assert(decltype(Epu8)::size == 16, "Wrong size of EPU8 array");
    +
    72  for (auto x : *this)
    +
    73  if (x != 0xFF)
    +
    74  tmp[x] = 1;
    +
    75  return std::accumulate(tmp.begin(), tmp.end(), uint8_t(0));
    +
    76 }
    +
    77 
    +
    78 inline uint32_t PTransf16::rank_cmpestrm() const {
    +
    79  return __builtin_popcountl(image_bitset());
    +
    80 }
    +
    81 
    +
    82 inline uint32_t PTransf16::rank() const {
    +
    83 #ifdef SIMDE_X86_SSE4_2_NATIVE
    +
    84  return rank_cmpestrm();
    +
    85 #else
    +
    86  return rank_ref();
    +
    87 #endif
    +
    88 }
    +
    89 
    +
    90 inline epu8 PTransf16::fix_points_mask(bool complement) const {
    +
    91  return complement ? v != one().v : v == one().v;
    +
    92 }
    +
    93 inline uint32_t PTransf16::fix_points_bitset(bool complement) const {
    +
    94  return simde_mm_movemask_epi8(fix_points_mask(complement));
    +
    95 }
    +
    96 
    +
    97 inline uint8_t PTransf16::smallest_fix_point() const {
    +
    98  return __builtin_ffs(fix_points_bitset(false)) - 1;
    +
    99 }
    +
    101 inline uint8_t PTransf16::smallest_moved_point() const {
    +
    102  return __builtin_ffs(fix_points_bitset(true)) - 1;
    +
    103 }
    +
    105 inline uint8_t PTransf16::largest_fix_point() const {
    +
    106  uint32_t res = fix_points_bitset(false);
    +
    107  return res == 0 ? 0xFF : 31 - __builtin_clz(res);
    +
    108 }
    +
    110 inline uint8_t PTransf16::largest_moved_point() const {
    +
    111  uint32_t res = fix_points_bitset(true);
    +
    112  return res == 0 ? 0xFF : 31 - __builtin_clz(res);
    +
    113 }
    +
    115 inline uint8_t PTransf16::nb_fix_points() const {
    +
    116  return __builtin_popcountl(fix_points_bitset());
    +
    117 }
    +
    118 
    +
    119 inline static constexpr uint8_t hilo_exchng_fun(uint8_t i) {
    +
    120  return i < 8 ? i + 8 : i - 8;
    +
    121 }
    +
    122 static constexpr epu8 hilo_exchng = Epu8(hilo_exchng_fun);
    +
    123 inline static constexpr uint8_t hilo_mask_fun(uint8_t i) {
    +
    124  return i < 8 ? 0x0 : 0xFF;
    +
    125 }
    +
    126 static constexpr epu8 hilo_mask = Epu8(hilo_mask_fun);
    +
    127 
    +
    128 inline Transf16::Transf16(uint64_t compressed) {
    +
    129  epu8 res = simde_mm_set_epi64x(compressed, compressed);
    +
    130  v = simde_mm_blendv_epi8(res & Epu8(0x0F), res >> 4, hilo_mask);
    +
    131 }
    +
    132 
    +
    133 inline Transf16::operator uint64_t() const {
    +
    134  epu8 res =
    +
    135  static_cast<epu8>(simde_mm_slli_epi32(static_cast<simde__m128i>(v), 4));
    +
    136  res = HPCombi::permuted(res, hilo_exchng) + v;
    +
    137  return simde_mm_extract_epi64(res, 0);
    +
    138 }
    +
    139 
    + +
    141  epu8 res = Epu8(0xFF);
    +
    142  for (size_t i = 0; i < 16; ++i)
    +
    143  if (v[i] < 16)
    +
    144  res[v[i]] = i;
    +
    145  return res;
    +
    146 }
    +
    147 
    +
    148 #ifdef SIMDE_X86_SSE4_2_NATIVE
    +
    149 inline PPerm16 PPerm16::inverse_find() const {
    +
    150  epu8 mask = _mm_cmpestrm(v, 16, one(), 16, FIND_IN_VECT);
    +
    151  return permutation_of(v, one()) | mask;
    +
    152 }
    +
    153 #endif
    +
    154 
    +
    155 inline Perm16 Perm16::random(uint64_t n) {
    +
    156  static std::random_device rd;
    +
    157  static std::mt19937 g(rd());
    +
    158 
    +
    159  Perm16 res = one();
    +
    160  auto ar = res.as_array();
    +
    161 
    +
    162  std::shuffle(ar.begin(), ar.begin() + n, g);
    +
    163  return res;
    +
    164 }
    +
    165 
    +
    166 // From Ruskey : Combinatorial Generation page 138
    +
    167 inline Perm16 Perm16::unrankSJT(int n, int r) {
    +
    168  int j;
    +
    169  std::array<int, 16> dir;
    +
    170  epu8 res{};
    +
    171  for (j = 0; j < n; ++j)
    +
    172  res[j] = 0xFF;
    +
    173  for (j = n - 1; j >= 0; --j) {
    +
    174  int k, rem, c;
    +
    175  rem = r % (j + 1);
    +
    176  r = r / (j + 1);
    +
    177  if ((r & 1) != 0) {
    +
    178  k = -1;
    +
    179  dir[j] = +1;
    +
    180  } else {
    +
    181  k = n;
    +
    182  dir[j] = -1;
    +
    183  }
    +
    184  c = -1;
    +
    185  do {
    +
    186  k = k + dir[j];
    +
    187  if (res[k] == 0xFF)
    +
    188  ++c;
    +
    189  } while (c < rem);
    +
    190  res[k] = j;
    +
    191  }
    +
    192  return res;
    +
    193 }
    +
    194 
    + +
    196  HPCOMBI_ASSERT(i < 16);
    +
    197  epu8 res = one();
    +
    198  res[i] = i + 1;
    +
    199  res[i + 1] = i;
    +
    200  return res;
    +
    201 }
    +
    202 
    +
    203 inline Perm16 Perm16::inverse_ref() const {
    +
    204  epu8 res;
    +
    205  for (size_t i = 0; i < 16; ++i)
    +
    206  res[v[i]] = i;
    +
    207  return res;
    +
    208 }
    +
    209 
    +
    210 inline Perm16 Perm16::inverse_arr() const {
    +
    211  epu8 res;
    +
    212  auto &arres = HPCombi::as_array(res);
    +
    213  auto self = as_array();
    +
    214  for (size_t i = 0; i < 16; ++i)
    +
    215  arres[self[i]] = i;
    +
    216  return res;
    +
    217 }
    +
    218 
    +
    219 inline Perm16 Perm16::inverse_sort() const {
    +
    220  // G++-7 compile this shift by 3 additions.
    +
    221  // epu8 res = (v << 4) + one().v;
    +
    222  // I call directly the shift intrinsic
    +
    223  epu8 res = static_cast<epu8>(
    +
    224  simde_mm_slli_epi32(static_cast<simde__m128i>(v), 4)) +
    +
    225  one().v;
    +
    226  res = sorted(res) & Epu8(0x0F);
    +
    227  return res;
    +
    228 }
    +
    229 
    +
    230 // We declare PERM16 as a correct Monoid
    +
    231 namespace power_helper {
    +
    232 
    +
    233 // TODO required?
    +
    234 using Perm16 = Perm16;
    +
    235 
    +
    236 template <> struct Monoid<Perm16> {
    +
    237  static const Perm16 one() { return Perm16::one(); }
    +
    238  static Perm16 prod(Perm16 a, Perm16 b) { return a * b; }
    +
    239 };
    +
    240 
    +
    241 } // namespace power_helper
    +
    242 
    +
    243 inline Perm16 Perm16::inverse_cycl() const {
    +
    244  Perm16 res = one();
    +
    245  Perm16 newpow = pow<8>(*this);
    +
    246  for (int i = 9; i <= 16; i++) {
    +
    247  Perm16 oldpow = newpow;
    +
    248  newpow = oldpow * *this;
    +
    249  res.v = simde_mm_blendv_epi8(res, oldpow, newpow.v == one().v);
    +
    250  }
    +
    251  return res;
    +
    252 }
    +
    253 
    +
    254 static constexpr uint32_t lcm_range(uint8_t n) {
    +
    255  uint32_t res = 1;
    +
    256  for (uint8_t i = 1; i <= n; ++i)
    +
    257  res = std::lcm(res, i);
    +
    258  return res;
    +
    259 }
    +
    260 
    +
    261 inline Perm16 Perm16::inverse_pow() const {
    +
    262  return pow<lcm_range(16) - 1>(*this);
    +
    263 }
    +
    264 
    +
    265 inline epu8 Perm16::lehmer_ref() const {
    +
    266  epu8 res{};
    +
    267  for (size_t i = 0; i < 16; i++)
    +
    268  for (size_t j = i + 1; j < 16; j++)
    +
    269  if (v[i] > v[j])
    +
    270  res[i]++;
    +
    271  return res;
    +
    272 }
    +
    273 
    +
    274 inline epu8 Perm16::lehmer_arr() const {
    +
    275  decltype(Epu8)::array res{};
    +
    276  decltype(Epu8)::array ar = as_array();
    +
    277  for (size_t i = 0; i < 16; i++)
    +
    278  for (size_t j = i + 1; j < 16; j++)
    +
    279  if (ar[i] > ar[j])
    +
    280  res[i]++;
    +
    281  return Epu8(res);
    +
    282 }
    +
    283 
    +
    284 inline epu8 Perm16::lehmer() const {
    +
    285  epu8 vsh = v, res = -one().v;
    +
    286  for (int i = 1; i < 16; i++) {
    +
    287  vsh = shifted_left(vsh);
    +
    288  res -= (v >= vsh);
    +
    289  }
    +
    290  return res;
    +
    291 }
    +
    292 
    +
    293 inline uint8_t Perm16::length_ref() const {
    +
    294  uint8_t res = 0;
    +
    295  for (size_t i = 0; i < 16; i++)
    +
    296  for (size_t j = i + 1; j < 16; j++)
    +
    297  if (v[i] > v[j])
    +
    298  res++;
    +
    299  return res;
    +
    300 }
    +
    301 
    +
    302 inline uint8_t Perm16::length_arr() const {
    +
    303  uint8_t res = 0;
    +
    304  decltype(Epu8)::array ar = as_array();
    +
    305  for (size_t i = 0; i < 16; i++)
    +
    306  for (size_t j = i + 1; j < 16; j++)
    +
    307  if (ar[i] > ar[j])
    +
    308  res++;
    +
    309  return res;
    +
    310 }
    +
    311 
    +
    312 inline uint8_t Perm16::length() const { return horiz_sum(lehmer()); }
    +
    313 
    +
    314 inline uint8_t Perm16::nb_descents_ref() const {
    +
    315  uint8_t res = 0;
    +
    316  for (size_t i = 0; i < 16 - 1; i++)
    +
    317  if (v[i] > v[i + 1])
    +
    318  res++;
    +
    319  return res;
    +
    320 }
    +
    321 inline uint8_t Perm16::nb_descents() const {
    +
    322  return __builtin_popcountl(simde_mm_movemask_epi8(v < shifted_right(v)));
    +
    323 }
    +
    324 
    +
    325 inline uint8_t Perm16::nb_cycles_ref() const {
    +
    326  std::array<bool, 16> b{};
    +
    327  uint8_t c = 0;
    +
    328  for (size_t i = 0; i < 16; i++) {
    +
    329  if (!b[i]) {
    +
    330  for (size_t j = i; !b[j]; j = v[j])
    +
    331  b[j] = true;
    +
    332  c++;
    +
    333  }
    +
    334  }
    +
    335  return c;
    +
    336 }
    +
    337 
    + +
    339  epu8 x0, x1 = one();
    +
    340  Perm16 p = *this;
    +
    341  x0 = simde_mm_min_epi8(x1, HPCombi::permuted(x1, p));
    +
    342  p = p * p;
    +
    343  x1 = simde_mm_min_epi8(x0, HPCombi::permuted(x0, p));
    +
    344  p = p * p;
    +
    345  x0 = simde_mm_min_epi8(x1, HPCombi::permuted(x1, p));
    +
    346  p = p * p;
    +
    347  x1 = simde_mm_min_epi8(x0, HPCombi::permuted(x0, p));
    +
    348  return x1;
    +
    349 }
    +
    350 
    +
    351 inline uint8_t Perm16::nb_cycles_unroll() const {
    +
    352  epu8 res = (Epu8.id() == cycles_partition());
    +
    353  return __builtin_popcountl(simde_mm_movemask_epi8(res));
    +
    354 }
    +
    355 
    +
    356 inline bool Perm16::left_weak_leq_ref(Perm16 other) const {
    +
    357  for (size_t i = 0; i < 16; i++) {
    +
    358  for (size_t j = i + 1; j < 16; j++) {
    +
    359  if ((v[i] > v[j]) && (other[i] < other[j]))
    +
    360  return false;
    +
    361  }
    +
    362  }
    +
    363  return true;
    +
    364 }
    +
    365 
    +
    366 inline bool Perm16::left_weak_leq(Perm16 other) const {
    +
    367  epu8 srot = v, orot = other;
    +
    368  for (size_t i = 0; i < 15; i++) {
    +
    369  srot = shifted_right(srot);
    +
    370  orot = shifted_right(orot);
    +
    371  uint64_t sinv = simde_mm_movemask_epi8(v < srot);
    +
    372  uint64_t oinv = simde_mm_movemask_epi8(other.v < orot);
    +
    373  if ((sinv & oinv) != sinv)
    +
    374  return false;
    +
    375  }
    +
    376  return true;
    +
    377 }
    +
    378 
    +
    379 inline bool Perm16::left_weak_leq_length(Perm16 other) const {
    +
    380  Perm16 prod = *this * other.inverse();
    +
    381  return other.length() == length() + prod.length();
    +
    382 }
    +
    383 
    +
    384 } // 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:234
    +
    Definition: bmat8.hpp:37
    +
    epu8 permuted(epu8 a, epu8 b) noexcept
    Permuting a HPCombi::epu8.
    Definition: epu8.hpp:70
    +
    epu8 shifted_right(epu8 a) noexcept
    Left shifted of a HPCombi::epu8 inserting a 0.
    Definition: epu8.hpp:76
    +
    epu8 permutation_of(epu8 a, epu8 b) noexcept
    Find if a vector is a permutation of one other.
    Definition: epu8_impl.hpp:295
    +
    TPUBuild< TPU >::array & as_array(TPU &v) noexcept
    Cast a TPU to a c++ std::array.
    Definition: builder.hpp:134
    +
    uint8_t horiz_sum(epu8 v) noexcept
    Horizontal sum of a HPCombi::epu8.
    Definition: epu8.hpp:216
    +
    epu8 sorted(epu8 a) noexcept
    Return a sorted HPCombi::epu8.
    Definition: epu8_impl.hpp:196
    +
    constexpr TPUBuild< epu8 > Epu8
    Factory object acting as a class constructor for type HPCombi::epu8.
    Definition: epu8.hpp:50
    +
    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:82
    +
    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:140
    +
    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:115
    +
    uint32_t fix_points_bitset(bool complement=false) const
    Returns a bit mask for the fix point of *this.
    Definition: perm16_impl.hpp:93
    +
    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:110
    +
    uint32_t domain_bitset(bool complement=false) const
    Returns a bit mask for the domain of *this.
    Definition: perm16_impl.hpp:42
    +
    PTransf16 left_one() const
    Returns the partial left identity for *this.
    Definition: perm16_impl.hpp:66
    +
    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:69
    +
    PTransf16 right_one() const
    Returns the partial right identity for *this.
    Definition: perm16_impl.hpp:45
    +
    uint32_t image_bitset(bool complement=false) const
    Returns a bit mask for the image of *this.
    Definition: perm16_impl.hpp:63
    +
    epu8 fix_points_mask(bool complement=false) const
    Returns a mask for the fix point of *this.
    Definition: perm16_impl.hpp:90
    +
    uint8_t smallest_fix_point() const
    Returns the smallest fix point of *this.
    Definition: perm16_impl.hpp:97
    + +
    uint32_t rank_cmpestrm() const
    Returns the size of the image of *this.
    Definition: perm16_impl.hpp:78
    +
    epu8 domain_mask(bool complement=false) const
    Returns a mask for the domain of *this.
    Definition: perm16_impl.hpp:39
    +
    uint32_t rank() const
    Returns the size of the image of *this.
    Definition: perm16_impl.hpp:82
    +
    epu8 image_mask_ref(bool complement=false) const
    Returns a mask for the image of *this.
    Definition: perm16_impl.hpp:55
    +
    uint8_t largest_fix_point() const
    Returns the largest fix point of *this.
    Definition: perm16_impl.hpp:105
    +
    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:101
    +
    Permutations of .
    Definition: perm16.hpp:204
    +
    Perm16 inverse_cycl() const
    The inverse permutation.
    Definition: perm16_impl.hpp:243
    +
    Perm16 inverse() const
    The inverse permutation.
    Definition: perm16.hpp:279
    +
    epu8 lehmer() const
    The Lehmer code of a permutation.
    Definition: perm16_impl.hpp:284
    +
    uint8_t length_ref() const
    The Coxeter length (ie: number of inversion) of a permutation.
    Definition: perm16_impl.hpp:293
    +
    epu8 cycles_partition() const
    The set partition of the cycles of a permutation.
    Definition: perm16_impl.hpp:338
    +
    bool left_weak_leq_ref(Perm16 other) const
    Compare two permutations for the left weak order.
    Definition: perm16_impl.hpp:356
    +
    uint8_t nb_descents_ref() const
    The number of descent of a permutation.
    Definition: perm16_impl.hpp:314
    +
    Perm16 inverse_sort() const
    The inverse permutation.
    Definition: perm16_impl.hpp:219
    +
    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:265
    +
    bool left_weak_leq_length(Perm16 other) const
    Compare two permutations for the left weak order.
    Definition: perm16_impl.hpp:379
    +
    uint8_t length() const
    The Coxeter length (ie: number of inversion) of a permutation.
    Definition: perm16_impl.hpp:312
    +
    Perm16 inverse_ref() const
    The inverse permutation.
    Definition: perm16_impl.hpp:203
    +
    uint8_t nb_descents() const
    The number of descent of a permutation.
    Definition: perm16_impl.hpp:321
    +
    uint8_t nb_cycles_ref() const
    The number of cycles of a permutation.
    Definition: perm16_impl.hpp:325
    +
    static Perm16 elementary_transposition(uint64_t i)
    The elementary transposition exchanging and .
    Definition: perm16_impl.hpp:195
    +
    epu8 lehmer_arr() const
    The Lehmer code of a permutation.
    Definition: perm16_impl.hpp:274
    +
    static Perm16 unrankSJT(int n, int r)
    The r -th permutation of size n for the Steinhaus–Johnson–Trotter order.
    Definition: perm16_impl.hpp:167
    +
    bool left_weak_leq(Perm16 other) const
    Compare two permutations for the left weak order.
    Definition: perm16_impl.hpp:366
    +
    uint8_t nb_cycles_unroll() const
    The number of cycles of a permutation.
    Definition: perm16_impl.hpp:351
    +
    Perm16 inverse_pow() const
    The inverse permutation.
    Definition: perm16_impl.hpp:261
    +
    uint8_t length_arr() const
    The Coxeter length (ie: number of inversion) of a permutation.
    Definition: perm16_impl.hpp:302
    +
    Perm16 inverse_arr() const
    The inverse permutation.
    Definition: perm16_impl.hpp:210
    +
    static Perm16 random(uint64_t n=16)
    A random permutation of size .
    Definition: perm16_impl.hpp:155
    +
    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:237
    +
    static Perm16 prod(Perm16 a, Perm16 b)
    Definition: perm16_impl.hpp:238
    +
    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..d942a841 --- /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 v0.0.6
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    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..3485982a --- /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 v0.0.6
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    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:65
    +
    PermGeneric(const vect v)
    Definition: perm_generic.hpp:41
    +
    bool left_weak_leq(PermGeneric other) const
    Definition: perm_generic_impl.hpp:98
    +
    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:28
    +
    static PermGeneric random()
    Definition: perm_generic_impl.hpp:45
    +
    static constexpr size_t size()
    Definition: perm_generic.hpp:38
    +
    PermGeneric inverse() const
    Definition: perm_generic_impl.hpp:37
    +
    uint64_t nb_cycles() const
    Definition: perm_generic_impl.hpp:84
    +
    vect lehmer() const
    Definition: perm_generic_impl.hpp:55
    +
    static PermGeneric one()
    Definition: perm_generic.hpp:49
    +
    uint64_t nb_descents() const
    Definition: perm_generic_impl.hpp:75
    +
    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..8c86e00d --- /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 v0.0.6
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    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..bad3de77 --- /dev/null +++ b/docs/perm__generic__impl_8hpp_source.html @@ -0,0 +1,219 @@ + + + + + + + +HPCombi: /home/florent/src/HPCombi/include/hpcombi/perm_generic_impl.hpp Source File + + + + + + + + + + + +
    +
    + + + + + + +
    +
    HPCombi +
    +
    High Performance Combinatorics in C++ using vector instructions v0.0.6
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    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 namespace HPCombi {
    +
    17 
    +
    18 template <size_t Size, typename Expo>
    +
    19 PermGeneric<Size, Expo>::PermGeneric(std::initializer_list<Expo> il) {
    +
    20  HPCOMBI_ASSERT(il.size() <= Size);
    +
    21  std::copy(il.begin(), il.end(), this->v.begin());
    +
    22  for (Expo i = il.size(); i < Size; i++)
    +
    23  this->v[i] = i;
    +
    24 }
    +
    25 
    +
    26 template <size_t Size, typename Expo>
    + + +
    29  HPCOMBI_ASSERT(i < Size);
    +
    30  PermGeneric res{{}};
    +
    31  res[i] = i + 1;
    +
    32  res[i + 1] = i;
    +
    33  return res;
    +
    34 }
    +
    35 
    +
    36 template <size_t Size, typename Expo>
    + + +
    39  for (uint64_t i = 0; i < Size; i++)
    +
    40  res[this->v[i]] = i;
    +
    41  return res;
    +
    42 }
    +
    43 
    +
    44 template <size_t Size, typename Expo>
    + +
    46  static std::random_device rd;
    +
    47  static std::mt19937 g(rd());
    +
    48 
    +
    49  PermGeneric res{{}};
    +
    50  std::shuffle(res.v.begin(), res.v.end(), g);
    +
    51  return res;
    +
    52 }
    +
    53 
    +
    54 template <size_t Size, typename Expo>
    + +
    56  vect res{};
    +
    57  for (size_t i = 0; i < Size; i++)
    +
    58  for (size_t j = i + 1; j < Size; j++)
    +
    59  if (this->v[i] > this->v[j])
    +
    60  res[i]++;
    +
    61  return res;
    +
    62 }
    +
    63 
    +
    64 template <size_t Size, typename Expo>
    + +
    66  uint64_t res = 0;
    +
    67  for (size_t i = 0; i < Size; i++)
    +
    68  for (size_t j = i + 1; j < Size; j++)
    +
    69  if (this->v[i] > this->v[j])
    +
    70  res++;
    +
    71  return res;
    +
    72 }
    +
    73 
    +
    74 template <size_t Size, typename Expo>
    + +
    76  uint64_t res = 0;
    +
    77  for (size_t i = 0; i < Size - 1; i++)
    +
    78  if (this->v[i] > this->v[i + 1])
    +
    79  res++;
    +
    80  return res;
    +
    81 }
    +
    82 
    +
    83 template <size_t Size, typename Expo>
    + +
    85  std::array<bool, Size> b{};
    +
    86  uint64_t c = 0;
    +
    87  for (size_t i = 0; i < Size; i++) {
    +
    88  if (!b[i]) {
    +
    89  for (size_t j = i; !b[j]; j = this->v[j])
    +
    90  b[j] = true;
    +
    91  c++;
    +
    92  }
    +
    93  }
    +
    94  return c;
    +
    95 }
    +
    96 
    +
    97 template <size_t Size, typename Expo>
    + +
    99  for (size_t i = 0; i < Size; i++) {
    +
    100  for (size_t j = i + 1; j < Size; j++) {
    +
    101  if ((this->v[i] > this->v[j]) && (other[i] < other[j]))
    +
    102  return false;
    +
    103  }
    +
    104  }
    +
    105  return true;
    +
    106 }
    +
    107 
    +
    108 }; // namespace HPCombi
    +
    109 
    +
    110 namespace std {
    +
    111 
    +
    112 template <size_t Size, typename Expo>
    +
    113 struct hash<HPCombi::PermGeneric<Size, Expo>> {
    + +
    115  return hash<HPCombi::VectGeneric<Size, Expo>>()(ar);
    +
    116  }
    +
    117 };
    +
    118 
    +
    119 } // 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:65
    +
    bool left_weak_leq(PermGeneric other) const
    Definition: perm_generic_impl.hpp:98
    + +
    static PermGeneric elementary_transposition(uint64_t i)
    Definition: perm_generic_impl.hpp:28
    +
    static PermGeneric random()
    Definition: perm_generic_impl.hpp:45
    +
    PermGeneric inverse() const
    Definition: perm_generic_impl.hpp:37
    +
    uint64_t nb_cycles() const
    Definition: perm_generic_impl.hpp:84
    +
    vect lehmer() const
    Definition: perm_generic_impl.hpp:55
    +
    uint64_t nb_descents() const
    Definition: perm_generic_impl.hpp:75
    +
    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:114
    +
    + + + + diff --git a/docs/power_8hpp.html b/docs/power_8hpp.html new file mode 100644 index 00000000..d71fe607 --- /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 v0.0.6
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    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..0d4d0614 --- /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 v0.0.6
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    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_INCLUDED
    +
    36 #define HPCOMBI_POWER_HPP_INCLUDED
    +
    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_INCLUDED
    +
    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(R!W8j_r#qQ#gnr4kAxdU#F0+OBry$Z+ z_0PMi;P|#{d%mw(dnw=jM%@$onTJa%@6Nm3`;2S#nwtVFJI#`U@2Q@@JCCctagvF- z8H=anvo~dTmJ2YA%wA6IHRv%{vxvUm|R)kgZeo zmX%Zb;mpflGZdXCTAgit`||AFzkI#z&(3d4(htA?U2FOL4WF6wY&TB#n3n*I4+hl| z*NBpo#FA92vEu822WQ%mvv4FO#qs` BFGc_W literal 0 HcmV?d00001 diff --git a/docs/search/search_r.png b/docs/search/search_r.png new file mode 100644 index 0000000000000000000000000000000000000000..1af5d21ee13e070d7600f1c4657fde843b953a69 GIT binary patch literal 553 zcmeAS@N?(olHy`uVBq!ia0vp^LO?9c!2%@BXHTsJQY`6?zK#qG8~eHcB(ehe3dtTp zz6=bxGZ+|(`xqD=STHa&U1eaXVrO7DwS|Gf*oA>XrmV$GYcEhOQT(QLuS{~ooZ2P@v=Xc@RKW@Irliv8_;wroU0*)0O?temdsA~70jrdux+`@W7 z-N(<(C)L?hOO?KV{>8(jC{hpKsws)#Fh zvsO>IB+gb@b+rGWaO&!a9Z{!U+fV*s7TS>fdt&j$L%^U@Epd$~Nl7e8wMs5Z1yT$~ z28I^8hDN#u<{^fLRz?<9hUVG^237_Jy7tbuQ8eV{r(~v8;?@w8^gA7>fx*+&&t;uc GLK6VEQpiUD literal 0 HcmV?d00001 diff --git a/docs/search/searchdata.js b/docs/search/searchdata.js new file mode 100644 index 00000000..8fa7cd15 --- /dev/null +++ b/docs/search/searchdata.js @@ -0,0 +1,42 @@ +var indexSectionsWithContent = +{ + 0: "abcdefghilmnoprstuvw~", + 1: "bcehlmnptv", + 2: "hls", + 3: "abcdehiprstv", + 4: "abcdefhilmnoprstuvw~", + 5: "acefgimnprsv", + 6: "aceiptv", + 7: "o", + 8: "fh", + 9: "h" +}; + +var indexSectionNames = +{ + 0: "all", + 1: "classes", + 2: "namespaces", + 3: "files", + 4: "functions", + 5: "variables", + 6: "typedefs", + 7: "related", + 8: "defines", + 9: "pages" +}; + +var indexSectionLabels = +{ + 0: "All", + 1: "Classes", + 2: "Namespaces", + 3: "Files", + 4: "Functions", + 5: "Variables", + 6: "Typedefs", + 7: "Friends", + 8: "Macros", + 9: "Pages" +}; + diff --git a/docs/search/typedefs_0.html b/docs/search/typedefs_0.html new file mode 100644 index 00000000..a4684c4a --- /dev/null +++ b/docs/search/typedefs_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    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 0000000000000000000000000000000000000000..fe895f2c58179b471a22d8320b39a4bd7312ec8e GIT binary patch literal 314 zcmeAS@N?(olHy`uVBq!ia0vp^Yzz!63>-{AmhX=Jf(#6djGiuzAr*{o?=JLmPLyc> z_*`QK&+BH@jWrYJ7>r6%keRM@)Qyv8R=enp0jiI>aWlGyB58O zFVR20d+y`K7vDw(hJF3;>dD*3-?v=<8M)@x|EEGLnJsniYK!2U1 Y!`|5biEc?d1`HDhPgg&ebxsLQ02F6;9RL6T literal 0 HcmV?d00001 diff --git a/docs/stringmonoid_8cpp-example.html b/docs/stringmonoid_8cpp-example.html new file mode 100644 index 00000000..747f3b16 --- /dev/null +++ b/docs/stringmonoid_8cpp-example.html @@ -0,0 +1,133 @@ + + + + + + + +HPCombi: stringmonoid.cpp + + + + + + + + + + + +
    +
    + + + + + + +
    +
    HPCombi +
    +
    High Performance Combinatorics in C++ using vector instructions v0.0.6
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    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..86b4a574 --- /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 v0.0.6
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    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..ddd1e24a --- /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 v0.0.6
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    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..99f47b15 --- /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 v0.0.6
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    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:234
    +
    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 0000000000000000000000000000000000000000..3700578e48ec5d963dadefd4c263e4715d729aa3 GIT binary patch literal 744 zcmeAS@N?(olHy`uVBq!ia0vp^4M5z%!3-oNHVaPyQ2{<7uK)l42Qpv0`C8h4XabN0 z#s>}@VC}pk59D%`1o;Is02P72)l(rx3=B-=o-U3d6^w7^X7?Rd;Av@hJoUGKkLN*t zg}2Lkx2y~Ed)qSo?fM%Zq_WNxv2@KJE_XZw$04&_^{ZJu0ASa@>H zJLUD>ni>694=@=VjVVuxvw?`SqHj;KEyr`y z50VY{n4^T1lJEb0nYj1p-V*)^Pvot$`Wz%A~bBUKh$y6%gb`$3!#&171 zvOHv{+oxy4IANZdN7c;soV%-E z+)d}sQPF2O6TMl>XovZnX3+(@BD2jFDs#VNZIH{|Zoi~jxqGspgX8q2+dinUPI5Z= zgz14SZ$p@gbJw$_atGebe{&$3A-MF5K%R2jr`=)9<&1Y`o%~qZuuy_4^HFdW=Yu6| z>lj|xE-+Oz`hGt6Lf_#`u5<4gC-q!l@n~TA!PXF!%^Sk7W2rQQOP0xjZLGpB%x^v> za~@*+Bm(q23OZ2Fps{p{hbv=)g>M7P2Zps<_eYnW5@c-f{5`|3vr&@iz@k^5!x>&? zGB-@G^tfgl{hoRCeQt)lRev2N??^Y#XLV@aI)7)}k9CY+GLEmk_(wEh($m`(b0+%P z`#bKRrL)wyf!~6`&(z@MggJcwfAj5OHK=!=Aow7Q_YRZA=HCnn=T>%p{-yMxmSHb@ ziM#8we^rJyw;RR3Gcf$w2@GtN1Lh1|WB4a+vf87rVLC8bGI+ZBxvX + + + + + + +HPCombi: Member List + + + + + + + + + + + +
    +
    + + + + + + +
    +
    HPCombi +
    +
    High Performance Combinatorics in C++ using vector instructions v0.0.6
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    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..c8aa79e9 --- /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 v0.0.6
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    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 0000000000000000000000000000000000000000..5657756b9f61731cd6291f7b12d4ad9a3f71119a GIT binary patch literal 1364 zcmeAS@N?(olHy`uVBq!ia0y~yU<9!ba4-YO(}H*B0x5|ApAgso|NjG-FW!7D?LRaD z$O7X72M(}y-jN4#IZA^3f*F8{K;Y`B5F-W#mdBnhjv*C{Z|}aI)T|-V@^JdHQ@{5= zF%9ICf0bi&Q`YpVs^G;5a&irj*IT~#j^XGR}EL_a7_5HVy zJ+2$i%(a!_l^Cv_-D*Ud{^2;~D zwqBge^Vi`SheRfcBy$CO1ode8D0&($+o9%q&T_s)gZ@dD2Q!pBe6|^|UYH(vNNgDc zhhd8*Ly}J-R|C*zObW+DmN9e~wh|?D)I4a(luI)icX;@{>(=yP6ad=Da3p3z($87j zb0h5|?jPoTDjIU%g@L^?ZjJB##zit$Wf$l_UK#fOd7|y@7>-#dbv2^or~g}CRCMoU z+oq)vTGOhhaeqB?>`j=+>mAQ0+MKe|^N8&fnVJ*4HFVDx7R}(jXMXUy+AndqDmL9< z$HpxGi|_XT3H~T{^uiUZ8}A-+a6h|yt;=6?mzDG3@+BPIZcSmoR{j?{dM>I^zw4`F zetvV*vB!ToH|_B%Q}?Kx8#9^dK@Tvb7z~#gusQ$(3h05ZY><~a8GlUjVd&FrI+DU2 z%uqX1H3t|x0?t^1r$+LqiSK1srh>F}pZQG*1>3X7^PbH4tUj~o+|TBi73z_b&UyPQ zqNJ;;u8?gnKSuJM>RYmI>1Fi=1}{PBL4W`%nAm`rV(_{129YCe?0xbFqedse4fT zvEZfm0{{MNkM@sSRIy$A`2PFrt@y=A032iE8O%=XQ%`lWRAbZq8# zz4IZfKiw(gx;<}?)5d={?wnb?rq^qw_U!krOLnh}tIKZMb9?Hy58q3tUOAQMZ`EaV z{?!%v`u+L(U-Bcg+gkjl+5PkR_tOgyrt^ zk~ypX+aJAGTkn4{R$8iNcG8^RYrlMcH{*f*l8T+$$3?8Ok4lStO^uuXJ?PlukM-hl z;g6fXz1#HDFZ>uJW=8GXse6GPJvuj3go~}3Dsa@*cReI;M zh5XZQiIwz^ ZF + + + + + + +HPCombi: Member List + + + + + + + + + + + +
    +
    + + + + + + +
    +
    HPCombi +
    +
    High Performance Combinatorics in C++ using vector instructions v0.0.6
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    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..1edf9235 --- /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 v0.0.6
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    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 0000000000000000000000000000000000000000..9b0fca557973f674c1edb6fe72fae8b558b360c3 GIT binary patch literal 958 zcmeAS@N?(olHy`uVBq!ia0vp^4M2Q=gBeKv-Z6VBkdg@S332`Z|38rV;?396{zDUh zEHFNB-~emq9eE&^qa?^Lm;tB=1g@S6F=Aj~_Vsje45?szJNI_qXDy!Avreae+kf)o zvU8a6$8)#oIyddD!hFa6b@5&g%3eEDOO)Z$6b2RxW|7+Ik27U+88|K-&p8#w#PLbW zz@33@C)0(v4-5xV<$g&nU^h!Y&rsv}Ik==CzejKGHg+4kT^WDXWvSXC!TF9VxuF#I- zHBjWhJI2+VQ#Z>0`;zd!F#j$y!-sA!1}1?A(hON^O#@wB>@NAbs043j+@?EIK{}y- zzV`&a1HleJ6%7n53Ji=KAm#&ohAUCo%e+_{Y*ZN-c^16bE#v<>gV|w%U0QJM!PlE( z9<<3F=MiVPwVAC!v@mj$gLA#UQYx z|K*j_b(tC5eV)ZX^BLYoGCNH9d?ED9yVa~^lcX8)ZiI=;-jSZH9DDoQdEdDA0@Z4J zIe|W_<9iv`{NtNjw8##N1Fl>qQ)gWib||rU6TtJZIQa#i!Mfcy8n-k4n!n+S|K{!4 z4`Le(%q?s9Al}N-XB0F2zyggi`{fH{+f%vLy<=qfkqZoVjt{&HTd&Ppp`;}LQcY>n z%9{+gr}<3a-EjQ8st5Z6O;}t(qwRw@gO{di@Y0TsCz^~L2FzRT{mT + + + + + + +HPCombi: Member List + + + + + + + + + + + +
    +
    + + + + + + +
    +
    HPCombi +
    +
    High Performance Combinatorics in C++ using vector instructions v0.0.6
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    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..5fca9596 --- /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 v0.0.6
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    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 0000000000000000000000000000000000000000..30e53c5854162a1a67f1255b3300ba966391abb5 GIT binary patch literal 897 zcmeAS@N?(olHy`uVBq!ia0vp^uYov#gBeJkzgZLrq$C1-LR|m<{|{uoc=NTi|Ih>= z3ycpOIKbL@M;^%KC<*clW&kPzfvcxNj2IZ01w36GLn;{G&V60tfz(XpQi4;B@wDWxr`yk7kE_vNVdS7+Wz)D312{X<(}ZP$ksCZDf=KfjMVS-kdE%?yX&nOn^=PZqzpnzga?)l0VQZ`D=3 z;zCRK^kv;2A3C#f`$tE#qg)Rhh1t7kceS`1x$%6^FAwXT`r@m=*it#_JWI z=34qQht*$|ds<_8;arzCeTLfOe-pcpJX-)i!(+Aca+4bAtK+ml;44*SMGXa%z z8O%4+K2SqYpnjErQ-ljkgX)$@#%Gt)SZDapGL5VKdu-X%*(MFa!05Tk$cyjSZO%CDrKEq}^%;jq2b&AXM{7p`yrEca_qO6dAaY|Go@#nTSIes(0cPFm~n zF>jMg+n#P~o}{&Q>&2&~yDru-u6eg{*@XM?k2?eo^nS8Gwxl;&zjy7usZv>X9#(p1 z7n(1A?6Es5qWJIgLshE zg#)-(-Eh1`Rnto)+XD|zh)No@vY;VEBUe4z9bf>2pv3Z$MZq( zRr?>^6Y87zF0&OZ>_4OJuzG3)quy3nSiR>j;84_AXrI$#D1IbF%oUhl7(8A5T-G@y GGywonaJfYQ literal 0 HcmV?d00001 diff --git a/docs/structHPCombi_1_1TPUBuild-members.html b/docs/structHPCombi_1_1TPUBuild-members.html new file mode 100644 index 00000000..e73b4cb7 --- /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 v0.0.6
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    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..0a1e9a8e --- /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 v0.0.6
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    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..a25ae9fb --- /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 v0.0.6
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    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..fc9f608f --- /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 v0.0.6
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    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 0000000000000000000000000000000000000000..cbc614de25cdd203df6cc3ad253ae89983c83100 GIT binary patch literal 960 zcmeAS@N?(olHy`uVBq!ia0vp^4M2Q=gBeKv-Z6VBkdg@S332`Z|38rV;?396{zDUh zEHFNB-~emq9eE&^qa?^Lm;tB=1g@S6F=Aj~_V;vg45?szJNIVaYXgq9kNs1=*FTwj zCGF!SpGz{lS35+6^dkCO@=(x<{(IC0t#BLe?w;s$5lg*X|?-FX5e7(Vn z>B33LhA(s28PpzMsBRF8n0uFbgX&fPi3j&y+--78?8A=}i@wg^!FoaFEgyfSX+VO} zs^2GG2XVbhHZ@@6F?=rjLS4ooy*8IUkMYVIjbA(;9C>Tl4CYT#XNWZvIdH_{S@VW< zjprG@$X%Ev@bdRN|MG8Q-!IuRFzjE!Ie~%m124mwGmTy@Up&l}7J2lt-Po4Ul+j>Y zr{iehFs}*dWEAv+8>o7s7Y{?>EC$X646gT{R%E$LG0fRwI5&$sZvImy<1H3hI~XR+ zGh?WbY(Mi(r|NSgv-C;MhRW5eyLjI5K2Km<(Y9%s--{D2Rg4Qb<(6MurWOMLe`r7YjF(-*`KLKe4#>1)IUT>fOxp%v&ivUZ#Owg_UJpv#ZDM6GSow?T z!Bg9YFIyN7oVNIK?i_nqy*a~~eO8)AJIt->#T=Wi&fgjHDV9CsV%hulJyIGkT=q{r zEcyD&dCe95OG}tOFj_loKd|!rGKcv4jnNF*6XYJ`@z$_x*i_G8@a)==%6OK4^+4ae zIM>zl_vysf40?B%89uBArlJW9_ZbeHky-JdK}Es$qow2LWx(vl;OXk;vd$@?2>_7X Bk2e4S literal 0 HcmV?d00001 diff --git a/docs/structHPCombi_1_1Vect16-members.html b/docs/structHPCombi_1_1Vect16-members.html new file mode 100644 index 00000000..ebcc140d --- /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 v0.0.6
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    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..db0d3ef2 --- /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 v0.0.6
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    + +
    + +

    #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 0000000000000000000000000000000000000000..71a1c855f34a100f2eab458e84c3f9fa36c3c9f9 GIT binary patch literal 1371 zcmeAS@N?(olHy`uVBq!ia0y~yU<9!ba4-YO(}H*B0x5|ApAgso|NjG-FW!7D?LRaD z$O7X72M(}y-jN4#IZA^3f*F8{K;Y`B5F-W#mRFuGjv*C{Z|}aH)MO#j@^HGJ==b`Q z-Ad>d@!#JThwX3rJ*PGYB z4?69?veo&mkHVC6*WCgWPT6X_ij&~JaQfj)2aU~HyKcm4Ry9|;IIo>!_UXZ{+eTlG zhugkPxbb~SM4Jik+rW9!JYP2X{a7V$K3n1Q>h+@1T~}XhFL$*Q&tqy;F;p( zig}uOd&BQ3U4OpQrs++2MciF>>vsMJ1=68_Z6d{otIpLdxSDe&&vj!@ zwbaSQI*%u{1sJ(1-!^&6t8eT0DrCKJowH#3loh`oO;WqCD|5+<=kfp6Rdgq9?b2!H zHFu9Pc)u;I#!K+l8oe5KP>2QT7rxr>vT<|Ro$jQaCx2gFF!k%de=IZQRd)+7vGZH! zspy%01mtj;;2BPnihL5eJWm-OHP!Uee0qeT#?y`AxQJ)cmR8M%2sO^=8B7XC1(q?K z0D6}Jq_hF3iAmwONW7b2-{Xpj40C3_{Q7upKP6vI zl}p{Z!lY%>&v~wgJl}qZ7JhPf-Iv+++paE%tm?$Eua}tG6aiy>jx_ z@%fr{cc+@%_;UQnufOwTK#6tDeq+yN74>U>m>xYO`R?M^kiY*mzn%MC-BplNdT_hu zwc`ELE#CKW{&Vh{zPrc=7#({YFUmc8Tem)S@BV-9FFnrMyI}9`oPC$4euczM%H_!y z7(IWzeiQ6*DIT1%kR!--iN?|?!onIP#S)f?!y`z=B9o>R$965O-S={%ly?5D&pFr zBMa466*zg!$)5VYul#7V$ZwUIkM?CBU9a)&Rz2&{D&7~WJ;m)0q&4T2*VHs^*>vxI xZGl=>)f+L9Nne&DvL7^%3Vne&)Y9-j1Lvg7i4VWLa{`ux44$rjF6*2UngA8Hbb|l@ literal 0 HcmV?d00001 diff --git a/docs/structHPCombi_1_1VectGeneric-members.html b/docs/structHPCombi_1_1VectGeneric-members.html new file mode 100644 index 00000000..48f8f5e1 --- /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 v0.0.6
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    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..36c613fc --- /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 v0.0.6
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    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..03df27d5 --- /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 v0.0.6
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    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..7751b55d --- /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 v0.0.6
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    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..edf2c216 --- /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 v0.0.6
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    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..0e38f77e --- /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 v0.0.6
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    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..a2972552 --- /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 v0.0.6
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    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..abb61da4 --- /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 v0.0.6
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    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..d1bfec9b --- /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 v0.0.6
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    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..620e9308 --- /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 v0.0.6
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    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..210413f9 --- /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 v0.0.6
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    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..121c33e0 --- /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 v0.0.6
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    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..c96dd6f8 --- /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 v0.0.6
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    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..13e98072 --- /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 v0.0.6
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    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..c5b172b2 --- /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 v0.0.6
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    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..6c3f3391 --- /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 v0.0.6
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    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..559ca161 --- /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 v0.0.6
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    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..34b3685c --- /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 v0.0.6
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    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..4f43aa3d --- /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 v0.0.6
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    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..cc0b5694 --- /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 v0.0.6
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    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..b51f26f3 --- /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 v0.0.6
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    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..a4f17036 --- /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 v0.0.6
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    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..33c79c0d --- /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 v0.0.6
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    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..150eab74 --- /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 v0.0.6
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    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..06273eb3 --- /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 v0.0.6
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    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..e997ba17 --- /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 v0.0.6
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    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..288f679c --- /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 v0.0.6
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    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..630384de --- /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 v0.0.6
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    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..9719dd1a --- /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 v0.0.6
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    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..8bf6f34e --- /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 v0.0.6
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    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..f3d47aed --- /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 v0.0.6
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    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..96bbec14 --- /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 v0.0.6
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    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 0000000000000000000000000000000000000000..3b443fc62892114406e3d399421b2a881b897acc GIT binary patch literal 853 zcmV-b1FHOqP)oT|#XixUYy%lpuf3i8{fX!o zUyDD0jOrAiT^tq>fLSOOABs-#u{dV^F$b{L9&!2=9&RmV;;8s^x&UqB$PCj4FdKbh zoB1WTskPUPu05XzFbA}=KZ-GP1fPpAfSs>6AHb12UlR%-i&uOlTpFNS7{jm@mkU1V zh`nrXr~+^lsV-s1dkZOaI|kYyVj3WBpPCY{n~yd%u%e+d=f%`N0FItMPtdgBb@py; zq@v6NVArhyTC7)ULw-Jy8y42S1~4n(3LkrW8mW(F-4oXUP3E`e#g**YyqI7h-J2zK zK{m9##m4ri!7N>CqQqCcnI3hqo1I;Yh&QLNY4T`*ptiQGozK>FF$!$+84Z`xwmeMh zJ0WT+OH$WYFALEaGj2_l+#DC3t7_S`vHpSivNeFbP6+r50cO8iu)`7i%Z4BTPh@_m3Tk!nAm^)5Bqnr%Ov|Baunj#&RPtRuK& z4RGz|D5HNrW83-#ydk}tVKJrNmyYt-sTxLGlJY5nc&Re zU4SgHNPx8~Yxwr$bsju?4q&%T1874xxzq+_%?h8_ofw~(bld=o3iC)LUNR*BY%c0y zWd_jX{Y8`l%z+ol1$@Qa?Cy!(0CVIEeYpKZ`(9{z>3$CIe;pJDQk$m3p}$>xBm4lb zKo{4S)`wdU9Ba9jJbVJ0C=SOefZe%d$8=2r={nu<_^a3~>c#t_U6dye5)JrR(_a^E f@}b6j1K9lwFJq@>o)+Ry00000NkvXXu0mjfWa5j* literal 0 HcmV?d00001 diff --git a/docs/sync_on.png b/docs/sync_on.png new file mode 100644 index 0000000000000000000000000000000000000000..e08320fb64e6fa33b573005ed6d8fe294e19db76 GIT binary patch literal 845 zcmV-T1G4;yP)Y;xxyHF2B5Wzm| zOOGupOTn@c(JmBOl)e;XMNnZuiTJP>rM8<|Q`7I_))aP?*T)ow&n59{}X4$3Goat zgjs?*aasfbrokzG5cT4K=uG`E14xZl@z)F={P0Y^?$4t z>v!teRnNZym<6h{7sLyF1V0HsfEl+l6TrZpsfr1}luH~F7L}ktXu|*uVX^RG$L0`K zWs3j|0tIvVe(N%_?2{(iCPFGf#B6Hjy6o&}D$A%W%jfO8_W%ZO#-mh}EM$LMn7joJ z05dHr!5Y92g+31l<%i1(=L1a1pXX+OYnalY>31V4K}BjyRe3)9n#;-cCVRD_IG1fT zOKGeNY8q;TL@K{dj@D^scf&VCs*-Jb>8b>|`b*osv52-!A?BpbYtTQBns5EAU**$m zSnVSm(teh>tQi*S*A>#ySc=n;`BHz`DuG4&g4Kf8lLhca+zvZ7t7RflD6-i-mcK=M z!=^P$*u2)bkY5asG4gsss!Hn%u~>}kIW`vMs%lJLH+u*9<4PaV_c6U`KqWXQH%+Nu zTv41O(^ZVi@qhjQdG!fbZw&y+2o!iYymO^?ud3{P*HdoX83YV*Uu_HB=?U&W9%AU# z80}k1SS-CXTU7dcQlsm<^oYLxVSseqY6NO}dc`Nj?8vrhNuCdm@^{a3AQ_>6myOj+ z`1RsLUXF|dm|3k7s2jD(B{rzE>WI2scH8i1;=O5Cc9xB3^aJk%fQjqsu+kH#0=_5a z0nCE8@dbQa-|YIuUVvG0L_IwHMEhOj$Mj4Uq05 X8=0q~qBNan00000NkvXXu0mjfptF>5 literal 0 HcmV?d00001 diff --git a/docs/tab_a.png b/docs/tab_a.png new file mode 100644 index 0000000000000000000000000000000000000000..3b725c41c5a527a3a3e40097077d0e206a681247 GIT binary patch literal 142 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QlXwMjv*C{Z|8b*H5dputLHD# z=<0|*y7z(Vor?d;H&?EG&cXR}?!j-Lm&u1OOI7AIF5&c)RFE;&p0MYK>*Kl@eiymD r@|NpwKX@^z+;{u_Z~trSBfrMKa%3`zocFjEXaR$#tDnm{r-UW|TZ1%4 literal 0 HcmV?d00001 diff --git a/docs/tab_b.png b/docs/tab_b.png new file mode 100644 index 0000000000000000000000000000000000000000..e2b4a8638cb3496a016eaed9e16ffc12846dea18 GIT binary patch literal 169 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QU#tajv*C{Z}0l@H7kg?K0Lnr z!j&C6_(~HV9oQ0Pa6x{-v0AGV_E?vLn=ZI-;YrdjIl`U`uzuDWSP?o#Dmo{%SgM#oan kX~E1%D-|#H#QbHoIja2U-MgvsK&LQxy85}Sb4q9e0Efg%P5=M^ literal 0 HcmV?d00001 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..1cbf9493 --- /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 v0.0.6
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    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..462b892e --- /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 v0.0.6
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    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:542
    +
    + + + + diff --git a/docs/vect16_8hpp.html b/docs/vect16_8hpp.html new file mode 100644 index 00000000..dd8d6954 --- /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 v0.0.6
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    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..5482df3a --- /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 v0.0.6
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    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_INCLUDED
    +
    17 #define HPCOMBI_VECT16_HPP_INCLUDED
    +
    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_INCLUDED
    + +
    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:119
    +
    epu8 permuted(epu8 a, epu8 b) noexcept
    Permuting a HPCombi::epu8.
    Definition: epu8.hpp:70
    +
    epu8 partial_sums(epu8 v) noexcept
    Horizontal partial sum of a HPCombi::epu8.
    Definition: epu8.hpp:245
    +
    TPUBuild< TPU >::array & as_array(TPU &v) noexcept
    Cast a TPU to a c++ std::array.
    Definition: builder.hpp:134
    +
    bool is_permutation(epu8 v, const size_t k=16) noexcept
    Definition: epu8_impl.hpp:522
    +
    int8_t less_partial(epu8 a, epu8 b, int k) noexcept
    Partial lexicographic comparison between two HPCombi::epu8.
    Definition: epu8_impl.hpp:106
    +
    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:116
    +
    bool equal(epu8 a, epu8 b) noexcept
    Equality of HPCombi::epu8.
    Definition: epu8.hpp:61
    +
    epu8 eval16(epu8 v) noexcept
    Evaluation of a HPCombi::epu8.
    Definition: epu8.hpp:407
    +
    uint8_t horiz_sum(epu8 v) noexcept
    Horizontal sum of a HPCombi::epu8.
    Definition: epu8.hpp:216
    +
    bool less(epu8 a, epu8 b) noexcept
    Lexicographic comparison between two HPCombi::epu8.
    Definition: epu8_impl.hpp:102
    +
    constexpr TPUBuild< epu8 > Epu8
    Factory object acting as a class constructor for type HPCombi::epu8.
    Definition: epu8.hpp:50
    +
    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:113
    +
    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:122
    +
    uint64_t last_diff(epu8 a, epu8 b, size_t bound=16) noexcept
    The last difference between two HPCombi::epu8.
    Definition: epu8.hpp:485
    +
    uint64_t first_diff(epu8 a, epu8 b, size_t bound=16) noexcept
    The first difference between two HPCombi::epu8.
    Definition: epu8.hpp:445
    +
    bool not_equal(epu8 a, epu8 b) noexcept
    Non equality of HPCombi::epu8.
    Definition: epu8.hpp:65
    +
    Definition: bmat8.hpp:360
    +
    std::ostream & operator<<(std::ostream &os, HPCombi::BMat8 const &bm)
    Definition: bmat8_impl.hpp:500
    +
    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:562
    +
    + + + + diff --git a/docs/vect__generic_8hpp.html b/docs/vect__generic_8hpp.html new file mode 100644 index 00000000..95dacc41 --- /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 v0.0.6
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    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..8a004b43 --- /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 v0.0.6
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    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:89
    +
    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:87
    +
    Definition: bmat8.hpp:360
    +
    std::ostream & operator<<(std::ostream &os, HPCombi::BMat8 const &bm)
    Definition: bmat8_impl.hpp:500
    +
    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
    +
    + + + +