From ef2c4af3839ad54845ab8735617faf5401366ec1 Mon Sep 17 00:00:00 2001 From: Steven Ross Date: Tue, 13 Jan 2015 21:56:11 -0500 Subject: [PATCH] Adding the new boost sort library. --- Jamfile.v2 | 42 + LICENSE_1_0.txt | 23 + README.md | 28 +- doc/4_threaded.png | Bin 0 -> 27991 bytes doc/AutoDoxywarnings.log | 0 doc/Jamfile.v2 | 160 ++ doc/acknowledgments.html | 69 + doc/autodoc.xml | 400 +++ doc/bibliography.html | 76 + doc/bits_per_byte.png | Bin 0 -> 23496 bytes doc/constants.html | 152 + doc/definitions.html | 91 + doc/doxygen/boost-no-inspect | 0 doc/doxygen/doxywarnings.log | 0 .../html/_2example_2sample_8cpp-example.html | 136 + doc/doxygen/html/alrbreaker_8cpp.html | 290 ++ doc/doxygen/html/alreadysorted_8cpp.html | 164 ++ doc/doxygen/html/annotated.html | 109 + doc/doxygen/html/arrowdown.png | Bin 0 -> 246 bytes doc/doxygen/html/arrowright.png | Bin 0 -> 229 bytes doc/doxygen/html/bc_s.png | Bin 0 -> 676 bytes doc/doxygen/html/bdwn.png | Bin 0 -> 147 bytes doc/doxygen/html/binaryalrbreaker_8cpp.html | 306 +++ doc/doxygen/html/boostrandomgen_8cpp.html | 142 + doc/doxygen/html/caseinsensitive_8cpp.html | 157 ++ doc/doxygen/html/charstringsample_8cpp.html | 154 ++ doc/doxygen/html/classes.html | 114 + doc/doxygen/html/closed.png | Bin 0 -> 132 bytes doc/doxygen/html/constants_8hpp.html | 132 + doc/doxygen/html/constants_8hpp_source.html | 153 ++ .../html/detail_2float__sort_8hpp.html | 185 ++ .../html/detail_2float__sort_8hpp_source.html | 922 +++++++ .../html/detail_2integer__sort_8hpp.html | 111 + .../detail_2integer__sort_8hpp_source.html | 608 ++++ .../html/detail_2string__sort_8hpp.html | 159 ++ .../detail_2string__sort_8hpp_source.html | 939 +++++++ .../dir_0dcad0da4f36218cbabb216021de9867.html | 105 + .../dir_1878a3f4746a95c6aad317458cc7ef80.html | 100 + .../dir_1b6f0a484b3a75c2ed43dc394e95eff6.html | 108 + .../dir_4aa236a92b75d6f514e733718a475329.html | 106 + .../dir_cfafba98a580ce4b62f8a6fa96d7cbb0.html | 151 + .../dir_d44c64559bbebec7f509842c48db8b23.html | 100 + doc/doxygen/html/doc.png | Bin 0 -> 746 bytes doc/doxygen/html/double_8cpp.html | 177 ++ doc/doxygen/html/doxygen.css | 1449 ++++++++++ doc/doxygen/html/doxygen.png | Bin 0 -> 3779 bytes doc/doxygen/html/dynsections.js | 97 + doc/doxygen/html/examples.html | 95 + doc/doxygen/html/files.html | 135 + doc/doxygen/html/float__sort_8hpp.html | 139 + doc/doxygen/html/float__sort_8hpp_source.html | 244 ++ doc/doxygen/html/floatfunctorsample_8cpp.html | 188 ++ doc/doxygen/html/floatsample_8cpp.html | 177 ++ doc/doxygen/html/folderclosed.png | Bin 0 -> 616 bytes doc/doxygen/html/folderopen.png | Bin 0 -> 597 bytes doc/doxygen/html/ftv2blank.png | Bin 0 -> 86 bytes doc/doxygen/html/ftv2doc.png | Bin 0 -> 746 bytes doc/doxygen/html/ftv2folderclosed.png | Bin 0 -> 616 bytes doc/doxygen/html/ftv2folderopen.png | Bin 0 -> 597 bytes doc/doxygen/html/ftv2lastnode.png | Bin 0 -> 86 bytes doc/doxygen/html/ftv2link.png | Bin 0 -> 746 bytes doc/doxygen/html/ftv2mlastnode.png | Bin 0 -> 246 bytes doc/doxygen/html/ftv2mnode.png | Bin 0 -> 246 bytes doc/doxygen/html/ftv2node.png | Bin 0 -> 86 bytes doc/doxygen/html/ftv2plastnode.png | Bin 0 -> 229 bytes doc/doxygen/html/ftv2pnode.png | Bin 0 -> 229 bytes doc/doxygen/html/ftv2splitbar.png | Bin 0 -> 314 bytes doc/doxygen/html/ftv2vertline.png | Bin 0 -> 86 bytes doc/doxygen/html/functions.html | 134 + doc/doxygen/html/functions_func.html | 113 + doc/doxygen/html/functions_vars.html | 123 + doc/doxygen/html/generalizedstruct_8cpp.html | 157 ++ doc/doxygen/html/globals.html | 255 ++ doc/doxygen/html/globals_defs.html | 133 + doc/doxygen/html/globals_func.html | 170 ++ doc/doxygen/html/globals_vars.html | 121 + doc/doxygen/html/index.html | 90 + doc/doxygen/html/int64_8cpp.html | 164 ++ doc/doxygen/html/integer__sort_8hpp.html | 135 + .../html/integer__sort_8hpp_source.html | 300 ++ doc/doxygen/html/jquery.js | 68 + doc/doxygen/html/keyplusdatasample_8cpp.html | 155 ++ doc/doxygen/html/mostlysorted_8cpp.html | 182 ++ doc/doxygen/html/namespaceboost.html | 104 + doc/doxygen/html/namespaceboost_1_1sort.html | 1534 +++++++++++ .../namespaceboost_1_1sort_1_1detail.html | 1774 ++++++++++++ doc/doxygen/html/namespacemembers.html | 118 + doc/doxygen/html/namespacemembers_eval.html | 128 + doc/doxygen/html/namespacemembers_func.html | 118 + doc/doxygen/html/namespaces.html | 102 + doc/doxygen/html/nav_f.png | Bin 0 -> 153 bytes doc/doxygen/html/nav_g.png | Bin 0 -> 95 bytes doc/doxygen/html/nav_h.png | Bin 0 -> 98 bytes doc/doxygen/html/open.png | Bin 0 -> 123 bytes doc/doxygen/html/parallelint_8cpp.html | 217 ++ doc/doxygen/html/parallelstring_8cpp.html | 166 ++ doc/doxygen/html/randomgen_8cpp.html | 141 + doc/doxygen/html/reverseintsample_8cpp.html | 175 ++ .../html/reversestringfunctorsample_8cpp.html | 156 ++ .../html/reversestringsample_8cpp.html | 163 ++ doc/doxygen/html/rightshiftsample_8cpp.html | 174 ++ doc/doxygen/html/sample_8cpp.html | 164 ++ doc/doxygen/html/search/all_0.html | 26 + doc/doxygen/html/search/all_0.js | 7 + doc/doxygen/html/search/all_1.html | 26 + doc/doxygen/html/search/all_1.js | 10 + doc/doxygen/html/search/all_10.html | 26 + doc/doxygen/html/search/all_10.js | 4 + doc/doxygen/html/search/all_2.html | 26 + doc/doxygen/html/search/all_2.js | 6 + doc/doxygen/html/search/all_3.html | 26 + doc/doxygen/html/search/all_3.js | 6 + doc/doxygen/html/search/all_4.html | 26 + doc/doxygen/html/search/all_4.js | 10 + doc/doxygen/html/search/all_5.html | 26 + doc/doxygen/html/search/all_5.js | 7 + doc/doxygen/html/search/all_6.html | 26 + doc/doxygen/html/search/all_6.js | 7 + doc/doxygen/html/search/all_7.html | 26 + doc/doxygen/html/search/all_7.js | 6 + doc/doxygen/html/search/all_8.html | 26 + doc/doxygen/html/search/all_8.js | 5 + doc/doxygen/html/search/all_9.html | 26 + doc/doxygen/html/search/all_9.js | 6 + doc/doxygen/html/search/all_a.html | 26 + doc/doxygen/html/search/all_a.js | 5 + doc/doxygen/html/search/all_b.html | 26 + doc/doxygen/html/search/all_b.js | 5 + doc/doxygen/html/search/all_c.html | 26 + doc/doxygen/html/search/all_c.js | 5 + doc/doxygen/html/search/all_d.html | 26 + doc/doxygen/html/search/all_d.js | 11 + doc/doxygen/html/search/all_e.html | 26 + doc/doxygen/html/search/all_e.js | 13 + doc/doxygen/html/search/all_f.html | 26 + doc/doxygen/html/search/all_f.js | 5 + doc/doxygen/html/search/classes_0.html | 26 + doc/doxygen/html/search/classes_0.js | 4 + doc/doxygen/html/search/classes_1.html | 26 + doc/doxygen/html/search/classes_1.js | 4 + doc/doxygen/html/search/classes_2.html | 26 + doc/doxygen/html/search/classes_2.js | 5 + doc/doxygen/html/search/classes_3.html | 26 + doc/doxygen/html/search/classes_3.js | 4 + doc/doxygen/html/search/classes_4.html | 26 + doc/doxygen/html/search/classes_4.js | 4 + doc/doxygen/html/search/classes_5.html | 26 + doc/doxygen/html/search/classes_5.js | 4 + doc/doxygen/html/search/close.png | Bin 0 -> 273 bytes doc/doxygen/html/search/defines_0.html | 26 + doc/doxygen/html/search/defines_0.js | 4 + doc/doxygen/html/search/defines_1.html | 26 + doc/doxygen/html/search/defines_1.js | 4 + doc/doxygen/html/search/defines_2.html | 26 + doc/doxygen/html/search/defines_2.js | 4 + doc/doxygen/html/search/defines_3.html | 26 + doc/doxygen/html/search/defines_3.js | 4 + doc/doxygen/html/search/enumvalues_0.html | 26 + doc/doxygen/html/search/enumvalues_0.js | 6 + doc/doxygen/html/search/enumvalues_1.html | 26 + doc/doxygen/html/search/enumvalues_1.js | 6 + doc/doxygen/html/search/enumvalues_2.html | 26 + doc/doxygen/html/search/enumvalues_2.js | 6 + doc/doxygen/html/search/files_0.html | 26 + doc/doxygen/html/search/files_0.js | 5 + doc/doxygen/html/search/files_1.html | 26 + doc/doxygen/html/search/files_1.js | 5 + doc/doxygen/html/search/files_2.html | 26 + doc/doxygen/html/search/files_2.js | 5 + doc/doxygen/html/search/files_3.html | 26 + doc/doxygen/html/search/files_3.js | 4 + doc/doxygen/html/search/files_4.html | 26 + doc/doxygen/html/search/files_4.js | 6 + doc/doxygen/html/search/files_5.html | 26 + doc/doxygen/html/search/files_5.js | 4 + doc/doxygen/html/search/files_6.html | 26 + doc/doxygen/html/search/files_6.js | 5 + doc/doxygen/html/search/files_7.html | 26 + doc/doxygen/html/search/files_7.js | 4 + doc/doxygen/html/search/files_8.html | 26 + doc/doxygen/html/search/files_8.js | 4 + doc/doxygen/html/search/files_9.html | 26 + doc/doxygen/html/search/files_9.js | 5 + doc/doxygen/html/search/files_a.html | 26 + doc/doxygen/html/search/files_a.js | 8 + doc/doxygen/html/search/files_b.html | 26 + doc/doxygen/html/search/files_b.js | 10 + doc/doxygen/html/search/files_c.html | 26 + doc/doxygen/html/search/files_c.js | 4 + doc/doxygen/html/search/functions_0.html | 26 + doc/doxygen/html/search/functions_0.js | 6 + doc/doxygen/html/search/functions_1.html | 26 + doc/doxygen/html/search/functions_1.js | 4 + doc/doxygen/html/search/functions_2.html | 26 + doc/doxygen/html/search/functions_2.js | 5 + doc/doxygen/html/search/functions_3.html | 26 + doc/doxygen/html/search/functions_3.js | 4 + doc/doxygen/html/search/functions_4.html | 26 + doc/doxygen/html/search/functions_4.js | 5 + doc/doxygen/html/search/functions_5.html | 26 + doc/doxygen/html/search/functions_5.js | 4 + doc/doxygen/html/search/functions_6.html | 26 + doc/doxygen/html/search/functions_6.js | 6 + doc/doxygen/html/search/functions_7.html | 26 + doc/doxygen/html/search/functions_7.js | 6 + doc/doxygen/html/search/functions_8.html | 26 + doc/doxygen/html/search/functions_8.js | 7 + doc/doxygen/html/search/functions_9.html | 26 + doc/doxygen/html/search/functions_9.js | 4 + doc/doxygen/html/search/mag_sel.png | Bin 0 -> 563 bytes doc/doxygen/html/search/namespaces_0.html | 26 + doc/doxygen/html/search/namespaces_0.js | 5 + doc/doxygen/html/search/nomatches.html | 12 + doc/doxygen/html/search/search.css | 271 ++ doc/doxygen/html/search/search.js | 791 ++++++ doc/doxygen/html/search/search_l.png | Bin 0 -> 604 bytes doc/doxygen/html/search/search_m.png | Bin 0 -> 158 bytes doc/doxygen/html/search/search_r.png | Bin 0 -> 612 bytes doc/doxygen/html/search/searchdata.js | 33 + doc/doxygen/html/search/variables_0.html | 26 + doc/doxygen/html/search/variables_0.js | 4 + doc/doxygen/html/search/variables_1.html | 26 + doc/doxygen/html/search/variables_1.js | 5 + doc/doxygen/html/search/variables_2.html | 26 + doc/doxygen/html/search/variables_2.js | 4 + doc/doxygen/html/search/variables_3.html | 26 + doc/doxygen/html/search/variables_3.js | 4 + doc/doxygen/html/search/variables_4.html | 26 + doc/doxygen/html/search/variables_4.js | 4 + doc/doxygen/html/search/variables_5.html | 26 + doc/doxygen/html/search/variables_5.js | 4 + doc/doxygen/html/search/variables_6.html | 26 + doc/doxygen/html/search/variables_6.js | 4 + doc/doxygen/html/search/variables_7.html | 26 + doc/doxygen/html/search/variables_7.js | 4 + doc/doxygen/html/search/variables_8.html | 26 + doc/doxygen/html/search/variables_8.js | 4 + doc/doxygen/html/search/variables_9.html | 26 + doc/doxygen/html/search/variables_9.js | 5 + doc/doxygen/html/shiftfloatsample_8cpp.html | 183 ++ doc/doxygen/html/sort_8hpp.html | 103 + doc/doxygen/html/sort_8hpp_source.html | 120 + doc/doxygen/html/splitbar.png | Bin 0 -> 314 bytes doc/doxygen/html/spreadsort_8hpp.html | 137 + doc/doxygen/html/spreadsort_8hpp_source.html | 230 ++ doc/doxygen/html/spreadsort__common_8hpp.html | 135 + .../html/spreadsort__common_8hpp_source.html | 228 ++ doc/doxygen/html/string__sort_8hpp.html | 152 + .../html/string__sort_8hpp_source.html | 574 ++++ .../html/stringfunctorsample_8cpp.html | 161 ++ doc/doxygen/html/stringsample_8cpp.html | 163 ++ .../struct_d_a_t_a___t_y_p_e-members.html | 109 + .../html/struct_d_a_t_a___t_y_p_e.html | 257 ++ ...l_1_1offset__char__less__than-members.html | 109 + ...1_1detail_1_1offset__char__less__than.html | 234 ++ ...tail_1_1offset__greater__than-members.html | 107 + ...rt_1_1detail_1_1offset__greater__than.html | 202 ++ ...1detail_1_1offset__less__than-members.html | 107 + ...1sort_1_1detail_1_1offset__less__than.html | 202 ++ doc/doxygen/html/structbracket-members.html | 105 + doc/doxygen/html/structbracket.html | 292 ++ doc/doxygen/html/structgetsize-members.html | 105 + doc/doxygen/html/structgetsize.html | 242 ++ .../html/structgreaterthan-members.html | 101 + doc/doxygen/html/structgreaterthan.html | 144 + doc/doxygen/html/structlessthan-members.html | 105 + doc/doxygen/html/structlessthan.html | 292 ++ .../html/structnegrightshift-members.html | 101 + doc/doxygen/html/structnegrightshift.html | 144 + .../html/structrightshift-members.html | 104 + doc/doxygen/html/structrightshift.html | 255 ++ doc/doxygen/html/sync_off.png | Bin 0 -> 853 bytes doc/doxygen/html/sync_on.png | Bin 0 -> 845 bytes doc/doxygen/html/tab_a.png | Bin 0 -> 142 bytes doc/doxygen/html/tab_b.png | Bin 0 -> 169 bytes doc/doxygen/html/tab_h.png | Bin 0 -> 177 bytes doc/doxygen/html/tab_s.png | Bin 0 -> 184 bytes doc/doxygen/html/tabs.css | 60 + doc/doxygen/html/wstringsample_8cpp.html | 163 ++ doc/doxygen/index.html | 15 + doc/doxygen/sort_doxyfile.txt | 2434 +++++++++++++++++ doc/entropy.png | Bin 0 -> 19269 bytes doc/equation/Thumbs.db | Bin 0 -> 103936 bytes doc/equation/asymptote.png | Bin 0 -> 9660 bytes doc/equation/bigm.png | Bin 0 -> 3713 bytes doc/equation/bin_limit.png | Bin 0 -> 3676 bytes doc/equation/bins.png | Bin 0 -> 2175 bytes doc/equation/comp_sub.png | Bin 0 -> 11289 bytes doc/equation/compare_asymptote.png | Bin 0 -> 12885 bytes doc/equation/compare_combined.png | Bin 0 -> 6811 bytes doc/equation/compare_simplified.png | Bin 0 -> 6858 bytes doc/equation/fallback.png | Bin 0 -> 4005 bytes doc/equation/gt_smin.png | Bin 0 -> 2261 bytes doc/equation/gte_2k.png | Bin 0 -> 2018 bytes doc/equation/incr_compare.png | Bin 0 -> 6837 bytes doc/equation/introsort.png | Bin 0 -> 4812 bytes doc/equation/iter_combined.png | Bin 0 -> 12885 bytes doc/equation/k1.png | Bin 0 -> 4005 bytes doc/equation/k_1.png | Bin 0 -> 9310 bytes doc/equation/k_2.png | Bin 0 -> 7764 bytes doc/equation/k_m.png | Bin 0 -> 16875 bytes doc/equation/k_remaining.png | Bin 0 -> 8493 bytes doc/equation/k_smax.png | Bin 0 -> 15632 bytes doc/equation/k_smax_final.png | Bin 0 -> 12591 bytes doc/equation/k_start.png | Bin 0 -> 4678 bytes doc/equation/kincr.png | Bin 0 -> 5828 bytes doc/equation/km.png | Bin 0 -> 1047 bytes doc/equation/ktop.png | Bin 0 -> 4726 bytes doc/equation/lsd.png | Bin 0 -> 4159 bytes doc/equation/lsd_offset.png | Bin 0 -> 5922 bytes doc/equation/lt_smin.png | Bin 0 -> 2282 bytes doc/equation/lte_smin.png | Bin 0 -> 2460 bytes doc/equation/m_limit.png | Bin 0 -> 11892 bytes doc/equation/min1_comparison.png | Bin 0 -> 6806 bytes doc/equation/min_comparison.png | Bin 0 -> 5720 bytes doc/equation/min_n.png | Bin 0 -> 3705 bytes doc/equation/min_n_orig.png | Bin 0 -> 6605 bytes doc/equation/mrange.png | Bin 0 -> 3895 bytes doc/equation/msum.png | Bin 0 -> 3761 bytes doc/equation/n_gt_smin.png | Bin 0 -> 3790 bytes doc/equation/nincr.png | Bin 0 -> 4134 bytes doc/equation/radix_iters.png | Bin 0 -> 5915 bytes doc/equation/s_diff.png | Bin 0 -> 2704 bytes doc/equation/s_max.png | Bin 0 -> 1187 bytes doc/equation/s_max_iters.png | Bin 0 -> 3427 bytes doc/equation/s_min.png | Bin 0 -> 1291 bytes doc/equation/smax_total_iters.png | Bin 0 -> 5922 bytes doc/equation/smean.png | Bin 0 -> 4191 bytes doc/equation/smin1.png | Bin 0 -> 2273 bytes doc/equation/smin_lbs.png | Bin 0 -> 2514 bytes doc/equation/sminlbs1.png | Bin 0 -> 5343 bytes doc/equation/srange.png | Bin 0 -> 3980 bytes doc/equation/string_sort.png | Bin 0 -> 12397 bytes doc/equation/worst.png | Bin 0 -> 6070 bytes doc/equation/worst1.png | Bin 0 -> 14960 bytes doc/equation/x2plus1.png | Bin 0 -> 4005 bytes doc/faq.html | 69 + doc/fasterbzip2-1.0.5.zip | Bin 0 -> 1229469 bytes doc/float_sort.html | 269 ++ doc/graph/boost-no-inspect | 0 doc/graph/osx_float_sort.htm | 358 +++ doc/graph/osx_float_sort_files/chart001.htm | 316 +++ doc/graph/osx_float_sort_files/chart002.htm | 318 +++ doc/graph/osx_float_sort_files/filelist.xml | 12 + doc/graph/osx_float_sort_files/image001.gif | Bin 0 -> 9056 bytes doc/graph/osx_float_sort_files/image002.gif | Bin 0 -> 7171 bytes doc/graph/osx_float_sort_files/sheet001.htm | 283 ++ doc/graph/osx_float_sort_files/sheet002.htm | 160 ++ doc/graph/osx_float_sort_files/stylesheet.css | 49 + doc/graph/osx_float_sort_files/tabstrip.htm | 35 + doc/graph/osx_integer_sort.htm | 358 +++ doc/graph/osx_integer_sort_files/chart001.htm | 316 +++ doc/graph/osx_integer_sort_files/chart002.htm | 318 +++ doc/graph/osx_integer_sort_files/filelist.xml | 12 + doc/graph/osx_integer_sort_files/image001.gif | Bin 0 -> 8822 bytes doc/graph/osx_integer_sort_files/image002.gif | Bin 0 -> 7183 bytes doc/graph/osx_integer_sort_files/sheet001.htm | 283 ++ doc/graph/osx_integer_sort_files/sheet002.htm | 160 ++ .../osx_integer_sort_files/stylesheet.css | 49 + doc/graph/osx_integer_sort_files/tabstrip.htm | 35 + doc/graph/osx_string_sort.htm | 346 +++ doc/graph/osx_string_sort_files/chart001.htm | 314 +++ doc/graph/osx_string_sort_files/filelist.xml | 9 + doc/graph/osx_string_sort_files/image001.gif | Bin 0 -> 7113 bytes doc/graph/osx_string_sort_files/sheet001.htm | 155 ++ .../osx_string_sort_files/stylesheet.css | 49 + doc/graph/osx_string_sort_files/tabstrip.htm | 33 + doc/graph/windows_float_sort.htm | 358 +++ .../windows_float_sort_files/chart001.htm | 316 +++ .../windows_float_sort_files/chart002.htm | 313 +++ .../windows_float_sort_files/filelist.xml | 12 + .../windows_float_sort_files/image001.gif | Bin 0 -> 9158 bytes .../windows_float_sort_files/image002.gif | Bin 0 -> 7216 bytes .../windows_float_sort_files/sheet001.htm | 283 ++ .../windows_float_sort_files/sheet002.htm | 160 ++ .../windows_float_sort_files/stylesheet.css | 49 + .../windows_float_sort_files/tabstrip.htm | 35 + doc/graph/windows_integer_sort.htm | 359 +++ .../windows_integer_sort_files/chart001.htm | 315 +++ .../windows_integer_sort_files/chart002.htm | 319 +++ .../windows_integer_sort_files/filelist.xml | 12 + .../windows_integer_sort_files/image001.gif | Bin 0 -> 9155 bytes .../windows_integer_sort_files/image002.gif | Bin 0 -> 7245 bytes .../windows_integer_sort_files/sheet001.htm | 283 ++ .../windows_integer_sort_files/sheet002.htm | 160 ++ .../windows_integer_sort_files/stylesheet.css | 49 + .../windows_integer_sort_files/tabstrip.htm | 35 + doc/graph/windows_string_sort.htm | 345 +++ .../windows_string_sort_files/chart001.htm | 320 +++ .../windows_string_sort_files/filelist.xml | 9 + .../windows_string_sort_files/image001.gif | Bin 0 -> 7178 bytes .../windows_string_sort_files/sheet001.htm | 145 + .../windows_string_sort_files/stylesheet.css | 49 + .../windows_string_sort_files/tabstrip.htm | 33 + doc/html/boost/sort/float_mem_cast.html | 91 + doc/html/boost/sort/float_sort_id241772.html | 112 + doc/html/boost/sort/float_sort_id241854.html | 108 + doc/html/boost/sort/float_sort_id241896.html | 112 + doc/html/boost/sort/float_sort_id241915.html | 112 + doc/html/boost/sort/float_sort_id241982.html | 108 + doc/html/boost/sort/float_sort_id242040.html | 112 + doc/html/boost/sort/float_sort_id242510.html | 112 + doc/html/boost/sort/float_sort_id242601.html | 108 + doc/html/boost/sort/float_sort_id242661.html | 112 + doc/html/boost/sort/float_sort_id242669.html | 112 + doc/html/boost/sort/float_sort_id242926.html | 112 + doc/html/boost/sort/float_sort_id243011.html | 108 + doc/html/boost/sort/float_sort_id243020.html | 112 + doc/html/boost/sort/float_sort_id243084.html | 112 + doc/html/boost/sort/float_sort_id243091.html | 108 + doc/html/boost/sort/float_sort_id243155.html | 112 + doc/html/boost/sort/float_sort_id244711.html | 112 + doc/html/boost/sort/float_sort_id244800.html | 108 + doc/html/boost/sort/float_sort_id246270.html | 112 + doc/html/boost/sort/float_sort_id246334.html | 108 + doc/html/boost/sort/float_sort_id246442.html | 112 + doc/html/boost/sort/float_sort_id248980.html | 112 + doc/html/boost/sort/float_sort_id249051.html | 108 + doc/html/boost/sort/float_sort_id249135.html | 112 + doc/html/boost/sort/float_sort_id249783.html | 112 + doc/html/boost/sort/float_sort_id249857.html | 108 + doc/html/boost/sort/float_sort_id249876.html | 112 + doc/html/boost/sort/float_sort_id250721.html | 112 + doc/html/boost/sort/float_sort_id250758.html | 108 + doc/html/boost/sort/float_sort_id250809.html | 112 + doc/html/boost/sort/float_sort_id251169.html | 112 + doc/html/boost/sort/float_sort_id251223.html | 108 + doc/html/boost/sort/float_sort_id251266.html | 112 + doc/html/boost/sort/float_sort_id253248.html | 112 + doc/html/boost/sort/float_sort_id253307.html | 108 + doc/html/boost/sort/float_sort_id253371.html | 112 + doc/html/boost/sort/float_sort_id253628.html | 112 + doc/html/boost/sort/float_sort_id253733.html | 108 + doc/html/boost/sort/float_sort_id253786.html | 112 + doc/html/boost/sort/float_sort_id253968.html | 112 + doc/html/boost/sort/float_sort_id254049.html | 108 + doc/html/boost/sort/float_sort_id254132.html | 112 + doc/html/boost/sort/float_sort_id254894.html | 112 + doc/html/boost/sort/float_sort_id254973.html | 108 + doc/html/boost/sort/float_sort_id255034.html | 112 + doc/html/boost/sort/float_sort_id255187.html | 112 + doc/html/boost/sort/float_sort_id255271.html | 108 + doc/html/boost/sort/float_sort_id255313.html | 112 + doc/html/boost/sort/float_sort_id256587.html | 112 + doc/html/boost/sort/float_sort_id256694.html | 108 + doc/html/boost/sort/float_sort_id256749.html | 112 + doc/html/boost/sort/float_sort_id256758.html | 108 + doc/html/boost/sort/float_sort_id256794.html | 112 + doc/html/boost/sort/float_sort_id258422.html | 112 + doc/html/boost/sort/float_sort_id258460.html | 108 + doc/html/boost/sort/float_sort_id258574.html | 112 + doc/html/boost/sort/float_sort_id258858.html | 112 + doc/html/boost/sort/float_sort_id258932.html | 112 + doc/html/boost/sort/float_sort_id258991.html | 104 + doc/html/boost/sort/float_sort_id259045.html | 108 + doc/html/boost/sort/float_sort_id259437.html | 112 + doc/html/boost/sort/float_sort_id259521.html | 108 + doc/html/boost/sort/float_sort_id259566.html | 112 + doc/html/boost/sort/float_sort_id259926.html | 112 + doc/html/boost/sort/float_sort_id260014.html | 104 + doc/html/boost/sort/float_sort_id260031.html | 108 + doc/html/boost/sort/float_sort_id260246.html | 112 + doc/html/boost/sort/float_sort_id260345.html | 108 + doc/html/boost/sort/float_sort_id260405.html | 112 + doc/html/boost/sort/float_sort_id260626.html | 112 + doc/html/boost/sort/float_sort_id260709.html | 108 + doc/html/boost/sort/float_sort_id260776.html | 112 + doc/html/boost/sort/float_sort_id261479.html | 112 + doc/html/boost/sort/float_sort_id261583.html | 108 + doc/html/boost/sort/float_sort_id261640.html | 112 + doc/html/boost/sort/float_sort_id265686.html | 112 + doc/html/boost/sort/float_sort_id265755.html | 108 + doc/html/boost/sort/float_sort_id265827.html | 112 + doc/html/boost/sort/float_sort_id267154.html | 112 + doc/html/boost/sort/float_sort_id267205.html | 108 + doc/html/boost/sort/float_sort_id267303.html | 112 + doc/html/boost/sort/float_sort_id268056.html | 112 + doc/html/boost/sort/float_sort_id268136.html | 108 + doc/html/boost/sort/float_sort_id268220.html | 112 + .../boost/sort/integer_sort_id242030.html | 172 ++ .../boost/sort/integer_sort_id242118.html | 172 ++ .../boost/sort/integer_sort_id242222.html | 192 ++ .../boost/sort/integer_sort_id242375.html | 192 ++ .../boost/sort/integer_sort_id242431.html | 185 ++ .../boost/sort/integer_sort_id242570.html | 185 ++ .../boost/sort/integer_sort_id242742.html | 172 ++ .../boost/sort/integer_sort_id243137.html | 172 ++ .../boost/sort/integer_sort_id243260.html | 172 ++ .../boost/sort/integer_sort_id243346.html | 192 ++ .../boost/sort/integer_sort_id243434.html | 192 ++ .../boost/sort/integer_sort_id243615.html | 185 ++ .../boost/sort/integer_sort_id243728.html | 185 ++ .../boost/sort/integer_sort_id245129.html | 172 ++ .../boost/sort/integer_sort_id245154.html | 192 ++ .../boost/sort/integer_sort_id245316.html | 192 ++ .../boost/sort/integer_sort_id245371.html | 185 ++ .../boost/sort/integer_sort_id245575.html | 185 ++ .../boost/sort/integer_sort_id246515.html | 172 ++ .../boost/sort/integer_sort_id246686.html | 192 ++ .../boost/sort/integer_sort_id247510.html | 185 ++ .../boost/sort/integer_sort_id249225.html | 172 ++ .../boost/sort/integer_sort_id249445.html | 192 ++ .../boost/sort/integer_sort_id249987.html | 172 ++ .../boost/sort/integer_sort_id250121.html | 185 ++ .../boost/sort/integer_sort_id250200.html | 192 ++ .../boost/sort/integer_sort_id250453.html | 185 ++ .../boost/sort/integer_sort_id250887.html | 172 ++ .../boost/sort/integer_sort_id251142.html | 192 ++ .../boost/sort/integer_sort_id251351.html | 185 ++ .../boost/sort/integer_sort_id251377.html | 172 ++ .../boost/sort/integer_sort_id251569.html | 192 ++ .../boost/sort/integer_sort_id253490.html | 172 ++ .../boost/sort/integer_sort_id253662.html | 192 ++ .../boost/sort/integer_sort_id253869.html | 172 ++ .../boost/sort/integer_sort_id253939.html | 185 ++ .../boost/sort/integer_sort_id254224.html | 172 ++ .../boost/sort/integer_sort_id254399.html | 192 ++ .../boost/sort/integer_sort_id255128.html | 172 ++ .../boost/sort/integer_sort_id255302.html | 192 ++ .../boost/sort/integer_sort_id255439.html | 172 ++ .../boost/sort/integer_sort_id255564.html | 185 ++ .../boost/sort/integer_sort_id255629.html | 192 ++ .../boost/sort/integer_sort_id255890.html | 192 ++ .../boost/sort/integer_sort_id256124.html | 185 ++ .../boost/sort/integer_sort_id256842.html | 172 ++ .../boost/sort/integer_sort_id256878.html | 172 ++ .../boost/sort/integer_sort_id257079.html | 192 ++ .../boost/sort/integer_sort_id257095.html | 192 ++ .../boost/sort/integer_sort_id257312.html | 185 ++ .../boost/sort/integer_sort_id257350.html | 185 ++ .../boost/sort/integer_sort_id258076.html | 153 ++ .../boost/sort/integer_sort_id258264.html | 149 + .../boost/sort/integer_sort_id258572.html | 185 ++ .../boost/sort/integer_sort_id258617.html | 172 ++ .../boost/sort/integer_sort_id258723.html | 185 ++ .../boost/sort/integer_sort_id258805.html | 185 ++ .../boost/sort/integer_sort_id258880.html | 192 ++ .../boost/sort/integer_sort_id259098.html | 138 + .../boost/sort/integer_sort_id259146.html | 185 ++ .../boost/sort/integer_sort_id259302.html | 153 ++ .../boost/sort/integer_sort_id259488.html | 149 + .../boost/sort/integer_sort_id259677.html | 172 ++ .../boost/sort/integer_sort_id259855.html | 192 ++ .../boost/sort/integer_sort_id260103.html | 138 + .../boost/sort/integer_sort_id260143.html | 185 ++ .../boost/sort/integer_sort_id260473.html | 172 ++ .../boost/sort/integer_sort_id260881.html | 172 ++ .../boost/sort/integer_sort_id261102.html | 192 ++ .../boost/sort/integer_sort_id261703.html | 172 ++ .../boost/sort/integer_sort_id261838.html | 185 ++ .../boost/sort/integer_sort_id261916.html | 192 ++ .../boost/sort/integer_sort_id262668.html | 192 ++ .../boost/sort/integer_sort_id262943.html | 183 ++ .../boost/sort/integer_sort_id264805.html | 185 ++ .../boost/sort/integer_sort_id265912.html | 172 ++ .../boost/sort/integer_sort_id266089.html | 192 ++ .../boost/sort/integer_sort_id266351.html | 185 ++ .../boost/sort/integer_sort_id267391.html | 172 ++ .../boost/sort/integer_sort_id268312.html | 172 ++ .../boost/sort/integer_sort_id269657.html | 192 ++ .../boost/sort/integer_sort_id269897.html | 183 ++ .../boost/sort/integer_sort_id271562.html | 192 ++ .../boost/sort/integer_sort_id271830.html | 185 ++ .../sort/reverse_string_so_id243624.html | 194 ++ .../sort/reverse_string_so_id243867.html | 183 ++ .../sort/reverse_string_so_id243976.html | 194 ++ .../sort/reverse_string_so_id244222.html | 183 ++ .../sort/reverse_string_so_id244254.html | 194 ++ .../sort/reverse_string_so_id244479.html | 197 ++ .../sort/reverse_string_so_id244501.html | 183 ++ .../sort/reverse_string_so_id244510.html | 183 ++ .../sort/reverse_string_so_id244603.html | 196 ++ .../sort/reverse_string_so_id244958.html | 197 ++ .../sort/reverse_string_so_id245247.html | 197 ++ .../sort/reverse_string_so_id245755.html | 194 ++ .../sort/reverse_string_so_id245971.html | 183 ++ .../sort/reverse_string_so_id246500.html | 194 ++ .../sort/reverse_string_so_id246701.html | 194 ++ .../sort/reverse_string_so_id246904.html | 183 ++ .../sort/reverse_string_so_id247892.html | 197 ++ .../sort/reverse_string_so_id248976.html | 194 ++ .../sort/reverse_string_so_id249246.html | 183 ++ .../sort/reverse_string_so_id249319.html | 196 ++ .../sort/reverse_string_so_id249929.html | 197 ++ .../sort/reverse_string_so_id249970.html | 197 ++ .../sort/reverse_string_so_id251193.html | 194 ++ .../sort/reverse_string_so_id251424.html | 183 ++ .../sort/reverse_string_so_id251508.html | 197 ++ .../sort/reverse_string_so_id252800.html | 194 ++ .../sort/reverse_string_so_id253006.html | 183 ++ .../sort/reverse_string_so_id253040.html | 197 ++ .../sort/reverse_string_so_id254339.html | 194 ++ .../sort/reverse_string_so_id254458.html | 194 ++ .../sort/reverse_string_so_id254544.html | 183 ++ .../sort/reverse_string_so_id254694.html | 183 ++ .../sort/reverse_string_so_id254992.html | 194 ++ .../sort/reverse_string_so_id255162.html | 194 ++ .../sort/reverse_string_so_id255227.html | 183 ++ .../sort/reverse_string_so_id255417.html | 183 ++ .../sort/reverse_string_so_id255458.html | 197 ++ .../sort/reverse_string_so_id256165.html | 197 ++ .../sort/reverse_string_so_id256241.html | 194 ++ .../sort/reverse_string_so_id256484.html | 183 ++ .../sort/reverse_string_so_id257476.html | 194 ++ .../sort/reverse_string_so_id257608.html | 194 ++ .../sort/reverse_string_so_id257695.html | 183 ++ .../sort/reverse_string_so_id257830.html | 183 ++ .../sort/reverse_string_so_id258417.html | 197 ++ .../sort/reverse_string_so_id258544.html | 197 ++ .../sort/reverse_string_so_id258557.html | 196 ++ .../sort/reverse_string_so_id258653.html | 197 ++ .../sort/reverse_string_so_id258683.html | 197 ++ .../sort/reverse_string_so_id259501.html | 194 ++ .../sort/reverse_string_so_id259714.html | 183 ++ .../sort/reverse_string_so_id259909.html | 194 ++ .../sort/reverse_string_so_id260173.html | 183 ++ .../sort/reverse_string_so_id260490.html | 197 ++ .../sort/reverse_string_so_id260702.html | 183 ++ .../sort/reverse_string_so_id260724.html | 194 ++ .../sort/reverse_string_so_id260961.html | 183 ++ .../sort/reverse_string_so_id261221.html | 151 + .../sort/reverse_string_so_id261336.html | 151 + .../sort/reverse_string_so_id261368.html | 197 ++ .../sort/reverse_string_so_id261432.html | 144 + .../sort/reverse_string_so_id261483.html | 197 ++ .../sort/reverse_string_so_id261529.html | 144 + .../sort/reverse_string_so_id261693.html | 197 ++ .../sort/reverse_string_so_id261782.html | 194 ++ .../sort/reverse_string_so_id262034.html | 183 ++ .../sort/reverse_string_so_id262038.html | 158 ++ .../sort/reverse_string_so_id262125.html | 158 ++ .../sort/reverse_string_so_id262656.html | 194 ++ .../sort/reverse_string_so_id262750.html | 194 ++ .../sort/reverse_string_so_id262872.html | 183 ++ .../sort/reverse_string_so_id263670.html | 194 ++ .../sort/reverse_string_so_id263906.html | 183 ++ .../sort/reverse_string_so_id264231.html | 196 ++ .../sort/reverse_string_so_id264645.html | 197 ++ .../sort/reverse_string_so_id267448.html | 197 ++ .../sort/reverse_string_so_id268721.html | 194 ++ .../sort/reverse_string_so_id268757.html | 194 ++ .../sort/reverse_string_so_id268930.html | 183 ++ .../sort/reverse_string_so_id268972.html | 183 ++ .../sort/reverse_string_so_id270701.html | 194 ++ .../sort/reverse_string_so_id270935.html | 183 ++ .../sort/reverse_string_so_id272170.html | 196 ++ .../sort/reverse_string_so_id273926.html | 197 ++ doc/html/boost/sort/spreadsort_id244864.html | 132 + doc/html/boost/sort/spreadsort_id245000.html | 132 + doc/html/boost/sort/spreadsort_id245010.html | 132 + doc/html/boost/sort/spreadsort_id245105.html | 132 + doc/html/boost/sort/spreadsort_id245143.html | 132 + doc/html/boost/sort/spreadsort_id245296.html | 132 + doc/html/boost/sort/spreadsort_id245338.html | 132 + doc/html/boost/sort/spreadsort_id245513.html | 132 + doc/html/boost/sort/spreadsort_id245619.html | 132 + doc/html/boost/sort/spreadsort_id245626.html | 132 + doc/html/boost/sort/spreadsort_id245643.html | 132 + doc/html/boost/sort/spreadsort_id245754.html | 132 + doc/html/boost/sort/spreadsort_id245799.html | 132 + doc/html/boost/sort/spreadsort_id245816.html | 132 + doc/html/boost/sort/spreadsort_id245905.html | 132 + doc/html/boost/sort/spreadsort_id245950.html | 132 + doc/html/boost/sort/spreadsort_id246083.html | 132 + doc/html/boost/sort/spreadsort_id250292.html | 132 + doc/html/boost/sort/spreadsort_id250354.html | 132 + doc/html/boost/sort/spreadsort_id250467.html | 132 + doc/html/boost/sort/spreadsort_id250517.html | 132 + doc/html/boost/sort/spreadsort_id250557.html | 132 + doc/html/boost/sort/spreadsort_id250650.html | 132 + doc/html/boost/sort/spreadsort_id251916.html | 132 + doc/html/boost/sort/spreadsort_id252059.html | 132 + doc/html/boost/sort/spreadsort_id252171.html | 132 + doc/html/boost/sort/spreadsort_id253492.html | 132 + doc/html/boost/sort/spreadsort_id253578.html | 132 + doc/html/boost/sort/spreadsort_id253746.html | 132 + doc/html/boost/sort/spreadsort_id254381.html | 132 + doc/html/boost/sort/spreadsort_id255624.html | 132 + doc/html/boost/sort/spreadsort_id255842.html | 132 + doc/html/boost/sort/spreadsort_id255938.html | 132 + doc/html/boost/sort/spreadsort_id256105.html | 132 + doc/html/boost/sort/spreadsort_id256385.html | 132 + doc/html/boost/sort/spreadsort_id256510.html | 132 + doc/html/boost/sort/spreadsort_id256549.html | 132 + doc/html/boost/sort/spreadsort_id256686.html | 132 + doc/html/boost/sort/spreadsort_id256725.html | 132 + doc/html/boost/sort/spreadsort_id256815.html | 132 + doc/html/boost/sort/spreadsort_id256849.html | 132 + doc/html/boost/sort/spreadsort_id256976.html | 132 + doc/html/boost/sort/spreadsort_id257594.html | 132 + doc/html/boost/sort/spreadsort_id257734.html | 132 + doc/html/boost/sort/spreadsort_id258452.html | 132 + doc/html/boost/sort/spreadsort_id258614.html | 132 + doc/html/boost/sort/spreadsort_id258751.html | 132 + doc/html/boost/sort/spreadsort_id258843.html | 132 + doc/html/boost/sort/spreadsort_id258972.html | 132 + doc/html/boost/sort/spreadsort_id259061.html | 132 + doc/html/boost/sort/spreadsort_id259102.html | 132 + doc/html/boost/sort/spreadsort_id259216.html | 132 + doc/html/boost/sort/spreadsort_id259349.html | 132 + doc/html/boost/sort/spreadsort_id260727.html | 132 + doc/html/boost/sort/spreadsort_id260884.html | 132 + doc/html/boost/sort/spreadsort_id260999.html | 132 + doc/html/boost/sort/spreadsort_id261146.html | 132 + doc/html/boost/sort/spreadsort_id261821.html | 132 + doc/html/boost/sort/spreadsort_id261864.html | 132 + doc/html/boost/sort/spreadsort_id261906.html | 132 + doc/html/boost/sort/spreadsort_id261970.html | 132 + doc/html/boost/sort/spreadsort_id262059.html | 132 + doc/html/boost/sort/spreadsort_id262107.html | 132 + doc/html/boost/sort/spreadsort_id262123.html | 132 + doc/html/boost/sort/spreadsort_id262244.html | 132 + doc/html/boost/sort/spreadsort_id262387.html | 132 + doc/html/boost/sort/spreadsort_id262724.html | 132 + doc/html/boost/sort/spreadsort_id262840.html | 132 + doc/html/boost/sort/spreadsort_id263163.html | 132 + doc/html/boost/sort/spreadsort_id263303.html | 132 + doc/html/boost/sort/spreadsort_id263426.html | 132 + doc/html/boost/sort/spreadsort_id265061.html | 132 + doc/html/boost/sort/spreadsort_id265185.html | 132 + doc/html/boost/sort/spreadsort_id265305.html | 132 + doc/html/boost/sort/spreadsort_id267825.html | 132 + doc/html/boost/sort/spreadsort_id267982.html | 132 + doc/html/boost/sort/spreadsort_id268089.html | 132 + doc/html/boost/sort/spreadsort_id269811.html | 132 + doc/html/boost/sort/spreadsort_id269968.html | 132 + doc/html/boost/sort/spreadsort_id270110.html | 132 + doc/html/boost/sort/spreadsort_id270144.html | 132 + doc/html/boost/sort/spreadsort_id270290.html | 132 + doc/html/boost/sort/spreadsort_id270414.html | 132 + doc/html/boost/sort/string_sort_id243412.html | 172 ++ doc/html/boost/sort/string_sort_id243545.html | 186 ++ doc/html/boost/sort/string_sort_id243767.html | 172 ++ doc/html/boost/sort/string_sort_id244069.html | 172 ++ doc/html/boost/sort/string_sort_id244100.html | 197 ++ doc/html/boost/sort/string_sort_id244211.html | 197 ++ doc/html/boost/sort/string_sort_id244369.html | 197 ++ doc/html/boost/sort/string_sort_id244455.html | 197 ++ doc/html/boost/sort/string_sort_id244725.html | 197 ++ doc/html/boost/sort/string_sort_id244728.html | 197 ++ doc/html/boost/sort/string_sort_id244752.html | 197 ++ doc/html/boost/sort/string_sort_id245001.html | 197 ++ doc/html/boost/sort/string_sort_id245030.html | 197 ++ doc/html/boost/sort/string_sort_id245272.html | 186 ++ doc/html/boost/sort/string_sort_id245464.html | 186 ++ doc/html/boost/sort/string_sort_id245509.html | 172 ++ doc/html/boost/sort/string_sort_id246050.html | 186 ++ doc/html/boost/sort/string_sort_id246080.html | 186 ++ doc/html/boost/sort/string_sort_id246179.html | 197 ++ doc/html/boost/sort/string_sort_id246248.html | 186 ++ doc/html/boost/sort/string_sort_id246303.html | 172 ++ doc/html/boost/sort/string_sort_id246448.html | 172 ++ doc/html/boost/sort/string_sort_id247153.html | 197 ++ doc/html/boost/sort/string_sort_id248559.html | 186 ++ doc/html/boost/sort/string_sort_id248776.html | 172 ++ doc/html/boost/sort/string_sort_id249054.html | 197 ++ doc/html/boost/sort/string_sort_id249486.html | 197 ++ doc/html/boost/sort/string_sort_id249638.html | 197 ++ doc/html/boost/sort/string_sort_id249718.html | 197 ++ doc/html/boost/sort/string_sort_id250742.html | 186 ++ doc/html/boost/sort/string_sort_id250950.html | 172 ++ doc/html/boost/sort/string_sort_id251657.html | 197 ++ doc/html/boost/sort/string_sort_id252315.html | 186 ++ doc/html/boost/sort/string_sort_id252569.html | 172 ++ doc/html/boost/sort/string_sort_id252815.html | 197 ++ doc/html/boost/sort/string_sort_id253251.html | 197 ++ doc/html/boost/sort/string_sort_id253517.html | 197 ++ doc/html/boost/sort/string_sort_id253905.html | 186 ++ doc/html/boost/sort/string_sort_id254112.html | 172 ++ doc/html/boost/sort/string_sort_id254237.html | 172 ++ doc/html/boost/sort/string_sort_id254543.html | 186 ++ doc/html/boost/sort/string_sort_id254771.html | 172 ++ doc/html/boost/sort/string_sort_id254810.html | 197 ++ doc/html/boost/sort/string_sort_id254902.html | 197 ++ doc/html/boost/sort/string_sort_id254982.html | 172 ++ doc/html/boost/sort/string_sort_id255197.html | 197 ++ doc/html/boost/sort/string_sort_id255449.html | 197 ++ doc/html/boost/sort/string_sort_id255626.html | 197 ++ doc/html/boost/sort/string_sort_id255712.html | 197 ++ doc/html/boost/sort/string_sort_id255804.html | 186 ++ doc/html/boost/sort/string_sort_id255918.html | 197 ++ doc/html/boost/sort/string_sort_id256024.html | 172 ++ doc/html/boost/sort/string_sort_id256272.html | 186 ++ doc/html/boost/sort/string_sort_id256699.html | 197 ++ doc/html/boost/sort/string_sort_id256992.html | 186 ++ doc/html/boost/sort/string_sort_id256995.html | 186 ++ doc/html/boost/sort/string_sort_id257141.html | 186 ++ doc/html/boost/sort/string_sort_id257227.html | 172 ++ doc/html/boost/sort/string_sort_id257380.html | 172 ++ doc/html/boost/sort/string_sort_id257950.html | 197 ++ doc/html/boost/sort/string_sort_id258060.html | 197 ++ doc/html/boost/sort/string_sort_id258202.html | 197 ++ doc/html/boost/sort/string_sort_id258348.html | 197 ++ doc/html/boost/sort/string_sort_id258437.html | 197 ++ doc/html/boost/sort/string_sort_id259046.html | 186 ++ doc/html/boost/sort/string_sort_id259268.html | 172 ++ doc/html/boost/sort/string_sort_id259510.html | 186 ++ doc/html/boost/sort/string_sort_id259726.html | 172 ++ doc/html/boost/sort/string_sort_id259958.html | 197 ++ doc/html/boost/sort/string_sort_id260222.html | 197 ++ doc/html/boost/sort/string_sort_id260400.html | 197 ++ doc/html/boost/sort/string_sort_id260480.html | 172 ++ doc/html/boost/sort/string_sort_id260919.html | 197 ++ doc/html/boost/sort/string_sort_id260940.html | 140 + doc/html/boost/sort/string_sort_id261032.html | 140 + doc/html/boost/sort/string_sort_id261068.html | 133 + doc/html/boost/sort/string_sort_id261185.html | 133 + doc/html/boost/sort/string_sort_id261193.html | 197 ++ doc/html/boost/sort/string_sort_id261214.html | 197 ++ doc/html/boost/sort/string_sort_id261444.html | 197 ++ doc/html/boost/sort/string_sort_id261588.html | 172 ++ doc/html/boost/sort/string_sort_id261630.html | 158 ++ doc/html/boost/sort/string_sort_id261715.html | 158 ++ doc/html/boost/sort/string_sort_id261810.html | 158 ++ doc/html/boost/sort/string_sort_id261893.html | 158 ++ doc/html/boost/sort/string_sort_id262230.html | 186 ++ doc/html/boost/sort/string_sort_id262262.html | 186 ++ doc/html/boost/sort/string_sort_id262274.html | 197 ++ doc/html/boost/sort/string_sort_id262449.html | 172 ++ doc/html/boost/sort/string_sort_id262514.html | 197 ++ doc/html/boost/sort/string_sort_id262527.html | 172 ++ doc/html/boost/sort/string_sort_id262530.html | 186 ++ doc/html/boost/sort/string_sort_id263164.html | 197 ++ doc/html/boost/sort/string_sort_id263387.html | 197 ++ doc/html/boost/sort/string_sort_id263465.html | 172 ++ doc/html/boost/sort/string_sort_id263576.html | 186 ++ doc/html/boost/sort/string_sort_id264141.html | 197 ++ doc/html/boost/sort/string_sort_id264380.html | 197 ++ doc/html/boost/sort/string_sort_id265488.html | 186 ++ doc/html/boost/sort/string_sort_id266962.html | 197 ++ doc/html/boost/sort/string_sort_id267161.html | 197 ++ doc/html/boost/sort/string_sort_id268254.html | 186 ++ doc/html/boost/sort/string_sort_id268468.html | 172 ++ doc/html/boost/sort/string_sort_id269208.html | 197 ++ doc/html/boost/sort/string_sort_id269501.html | 197 ++ doc/html/boost/sort/string_sort_id270279.html | 186 ++ doc/html/boost/sort/string_sort_id270491.html | 172 ++ doc/html/boost/sort/string_sort_id270561.html | 186 ++ doc/html/boost/sort/string_sort_id270797.html | 172 ++ doc/html/boost/sort/string_sort_id271154.html | 197 ++ doc/html/boost/sort/string_sort_id273679.html | 197 ++ doc/html/boost_sort_c___reference.html | 70 + .../sort/spreadsort/integer_sort_hpp.html | 54 + .../boost/sort/spreadsort/spreadsort_hpp.html | 55 + .../sort/spreadsort/string_sort_hpp.html | 68 + doc/html/index.html | 661 +++++ doc/html/index/s09.html | 104 + doc/html/index/s10.html | 488 ++++ doc/html/index/s11.html | 104 + doc/html/index/s12.html | 104 + doc/html/index/s13.html | 488 ++++ doc/html/inspec12jan.htm | 82 + doc/html/sort/acks.html | 67 + doc/html/sort/bibliog.html | 122 + doc/html/sort/definitions.html | 55 + doc/html/sort/faq.html | 46 + doc/html/sort/header_spreadsort.html | 92 + doc/html/sort/history.html | 52 + doc/html/sort/integer_sort.html | 75 + .../integer_sort/integersort_examples.html | 48 + doc/html/sort/rationale.html | 63 + doc/html/sort/rationale/hybrid_radix.html | 102 + doc/html/sort/rationale/lookup.html | 55 + doc/html/sort/rationale/optimization.html | 52 + doc/html/sort/rationale/unstable_sort.html | 54 + doc/html/sort/rationale/why_spreadsort.html | 151 + doc/html/sort/sort_hpp.html | 110 + doc/html/sort/sort_hpp/acks.html | 67 + doc/html/sort/sort_hpp/bibliog.html | 105 + doc/html/sort/sort_hpp/definitions.html | 55 + doc/html/sort/sort_hpp/faq.html | 46 + doc/html/sort/sort_hpp/history.html | 52 + doc/html/sort/sort_hpp/integer_sort.html | 73 + doc/html/sort/sort_hpp/rationale.html | 56 + .../sort/sort_hpp/rationale/hybrid_radix.html | 104 + doc/html/sort/sort_hpp/rationale/lookup.html | 55 + .../sort/sort_hpp/rationale/optimization.html | 54 + .../sort_hpp/rationale/unstable_sort.html | 54 + .../sort_hpp/rationale/why_spreadsort.html | 151 + doc/html/sort/sort_hpp/s11.html | 104 + doc/html/sort/sort_hpp/s12.html | 488 ++++ .../sort/sort_hpp/spreadsort_examples.html | 117 + doc/html/sort/spreadsort_examples.html | 118 + doc/html/standalone_HTML.manifest | 38 + doc/html4_symbols.qbk | 226 ++ doc/images/4_threaded.png | Bin 0 -> 27991 bytes doc/images/Thumbs.db | Bin 0 -> 60928 bytes doc/images/bits_per_byte.png | Bin 0 -> 23496 bytes doc/images/entropy.png | Bin 0 -> 19269 bytes doc/images/single_threaded.png | Bin 0 -> 27876 bytes doc/index.html | 95 + doc/integer_sort.html | 222 ++ doc/overview.html | 328 +++ doc/papers/original_spreadsort06_2002.pdf | Bin 0 -> 183513 bytes doc/rationale.html | 212 ++ doc/single_threaded.png | Bin 0 -> 27876 bytes doc/sort.html | 62 + doc/sort.idx | 37 + doc/sort.log | 835 ++++++ doc/sort.pdf | Bin 0 -> 537071 bytes doc/sort.qbk | 838 ++++++ doc/sort12jan.log | 595 ++++ doc/sort12janpdf.log | 830 ++++++ doc/sorting.html | 90 + doc/sortpdf.log | 604 ++++ doc/spreadsort.html | 138 + doc/string_sort.html | 342 +++ example/alrbreaker.cpp | 78 + example/alreadysorted.cpp | 91 + example/binaryalrbreaker.cpp | 108 + example/boostrandomgen.cpp | 69 + example/caseinsensitive.cpp | 101 + example/charstringsample.cpp | 100 + example/double.cpp | 105 + example/floatfunctorsample.cpp | 138 + example/floatsample.cpp | 100 + example/generalizedstruct.cpp | 184 ++ example/int64.cpp | 93 + example/keyplusdatasample.cpp | 107 + example/mostlysorted.cpp | 100 + example/parallelint.cpp | 115 + example/parallelstring.cpp | 143 + example/randomgen.cpp | 69 + example/reverseintsample.cpp | 101 + example/reversestringfunctorsample.cpp | 112 + example/reversestringsample.cpp | 98 + example/rightshiftsample.cpp | 99 + example/sample.cpp | 88 + example/shiftfloatsample.cpp | 107 + example/stringfunctorsample.cpp | 124 + example/stringsample.cpp | 85 + example/wstringsample.cpp | 96 + include/boost/sort/sort.hpp | 19 + .../sort/spreadsort/detail/constants.hpp | 46 + .../sort/spreadsort/detail/float_sort.hpp | 806 ++++++ .../sort/spreadsort/detail/integer_sort.hpp | 494 ++++ .../spreadsort/detail/spreadsort_common.hpp | 124 + .../sort/spreadsort/detail/string_sort.hpp | 819 ++++++ include/boost/sort/spreadsort/float_sort.hpp | 141 + .../boost/sort/spreadsort/integer_sort.hpp | 199 ++ include/boost/sort/spreadsort/spreadsort.hpp | 124 + include/boost/sort/spreadsort/string_sort.hpp | 471 ++++ index.html | 14 + oldgraph/osx_float_sort.htm | 358 +++ oldgraph/osx_float_sort_files/chart001.htm | 316 +++ oldgraph/osx_float_sort_files/chart002.htm | 318 +++ oldgraph/osx_float_sort_files/filelist.xml | 12 + oldgraph/osx_float_sort_files/image001.gif | Bin 0 -> 9056 bytes oldgraph/osx_float_sort_files/image002.gif | Bin 0 -> 7171 bytes oldgraph/osx_float_sort_files/sheet001.htm | 283 ++ oldgraph/osx_float_sort_files/sheet002.htm | 160 ++ oldgraph/osx_float_sort_files/stylesheet.css | 49 + oldgraph/osx_float_sort_files/tabstrip.htm | 35 + oldgraph/osx_integer_sort.htm | 358 +++ oldgraph/osx_integer_sort_files/chart001.htm | 316 +++ oldgraph/osx_integer_sort_files/chart002.htm | 318 +++ oldgraph/osx_integer_sort_files/filelist.xml | 12 + oldgraph/osx_integer_sort_files/image001.gif | Bin 0 -> 8822 bytes oldgraph/osx_integer_sort_files/image002.gif | Bin 0 -> 7183 bytes oldgraph/osx_integer_sort_files/sheet001.htm | 283 ++ oldgraph/osx_integer_sort_files/sheet002.htm | 160 ++ .../osx_integer_sort_files/stylesheet.css | 49 + oldgraph/osx_integer_sort_files/tabstrip.htm | 35 + oldgraph/osx_string_sort.htm | 346 +++ oldgraph/osx_string_sort_files/chart001.htm | 314 +++ oldgraph/osx_string_sort_files/filelist.xml | 9 + oldgraph/osx_string_sort_files/image001.gif | Bin 0 -> 7113 bytes oldgraph/osx_string_sort_files/sheet001.htm | 155 ++ oldgraph/osx_string_sort_files/stylesheet.css | 49 + oldgraph/osx_string_sort_files/tabstrip.htm | 33 + oldgraph/windows_float_sort.htm | 358 +++ .../windows_float_sort_files/chart001.htm | 316 +++ .../windows_float_sort_files/chart002.htm | 313 +++ .../windows_float_sort_files/filelist.xml | 12 + .../windows_float_sort_files/image001.gif | Bin 0 -> 9158 bytes .../windows_float_sort_files/image002.gif | Bin 0 -> 7216 bytes .../windows_float_sort_files/sheet001.htm | 283 ++ .../windows_float_sort_files/sheet002.htm | 160 ++ .../windows_float_sort_files/stylesheet.css | 49 + .../windows_float_sort_files/tabstrip.htm | 35 + oldgraph/windows_integer_sort.htm | 359 +++ .../windows_integer_sort_files/chart001.htm | 315 +++ .../windows_integer_sort_files/chart002.htm | 319 +++ .../windows_integer_sort_files/filelist.xml | 12 + .../windows_integer_sort_files/image001.gif | Bin 0 -> 9155 bytes .../windows_integer_sort_files/image002.gif | Bin 0 -> 7245 bytes .../windows_integer_sort_files/sheet001.htm | 283 ++ .../windows_integer_sort_files/sheet002.htm | 160 ++ .../windows_integer_sort_files/stylesheet.css | 49 + .../windows_integer_sort_files/tabstrip.htm | 35 + oldgraph/windows_string_sort.htm | 345 +++ .../windows_string_sort_files/chart001.htm | 320 +++ .../windows_string_sort_files/filelist.xml | 9 + .../windows_string_sort_files/image001.gif | Bin 0 -> 7178 bytes .../windows_string_sort_files/sheet001.htm | 145 + .../windows_string_sort_files/stylesheet.css | 49 + .../windows_string_sort_files/tabstrip.htm | 33 + test/Jamfile.v2 | 25 + test/float_sort_test.cpp | 126 + test/integer_sort_test.cpp | 131 + test/sort_detail_test.cpp | 294 ++ test/string_sort_test.cpp | 150 + test/test.log | 37 + tune.pl | 359 +++ 1004 files changed, 133646 insertions(+), 1 deletion(-) create mode 100644 Jamfile.v2 create mode 100644 LICENSE_1_0.txt create mode 100644 doc/4_threaded.png create mode 100644 doc/AutoDoxywarnings.log create mode 100644 doc/Jamfile.v2 create mode 100644 doc/acknowledgments.html create mode 100644 doc/autodoc.xml create mode 100644 doc/bibliography.html create mode 100644 doc/bits_per_byte.png create mode 100644 doc/constants.html create mode 100644 doc/definitions.html create mode 100644 doc/doxygen/boost-no-inspect create mode 100644 doc/doxygen/doxywarnings.log create mode 100644 doc/doxygen/html/_2example_2sample_8cpp-example.html create mode 100644 doc/doxygen/html/alrbreaker_8cpp.html create mode 100644 doc/doxygen/html/alreadysorted_8cpp.html create mode 100644 doc/doxygen/html/annotated.html create mode 100644 doc/doxygen/html/arrowdown.png create mode 100644 doc/doxygen/html/arrowright.png create mode 100644 doc/doxygen/html/bc_s.png create mode 100644 doc/doxygen/html/bdwn.png create mode 100644 doc/doxygen/html/binaryalrbreaker_8cpp.html create mode 100644 doc/doxygen/html/boostrandomgen_8cpp.html create mode 100644 doc/doxygen/html/caseinsensitive_8cpp.html create mode 100644 doc/doxygen/html/charstringsample_8cpp.html create mode 100644 doc/doxygen/html/classes.html create mode 100644 doc/doxygen/html/closed.png create mode 100644 doc/doxygen/html/constants_8hpp.html create mode 100644 doc/doxygen/html/constants_8hpp_source.html create mode 100644 doc/doxygen/html/detail_2float__sort_8hpp.html create mode 100644 doc/doxygen/html/detail_2float__sort_8hpp_source.html create mode 100644 doc/doxygen/html/detail_2integer__sort_8hpp.html create mode 100644 doc/doxygen/html/detail_2integer__sort_8hpp_source.html create mode 100644 doc/doxygen/html/detail_2string__sort_8hpp.html create mode 100644 doc/doxygen/html/detail_2string__sort_8hpp_source.html create mode 100644 doc/doxygen/html/dir_0dcad0da4f36218cbabb216021de9867.html create mode 100644 doc/doxygen/html/dir_1878a3f4746a95c6aad317458cc7ef80.html create mode 100644 doc/doxygen/html/dir_1b6f0a484b3a75c2ed43dc394e95eff6.html create mode 100644 doc/doxygen/html/dir_4aa236a92b75d6f514e733718a475329.html create mode 100644 doc/doxygen/html/dir_cfafba98a580ce4b62f8a6fa96d7cbb0.html create mode 100644 doc/doxygen/html/dir_d44c64559bbebec7f509842c48db8b23.html create mode 100644 doc/doxygen/html/doc.png create mode 100644 doc/doxygen/html/double_8cpp.html create mode 100644 doc/doxygen/html/doxygen.css create mode 100644 doc/doxygen/html/doxygen.png create mode 100644 doc/doxygen/html/dynsections.js create mode 100644 doc/doxygen/html/examples.html create mode 100644 doc/doxygen/html/files.html create mode 100644 doc/doxygen/html/float__sort_8hpp.html create mode 100644 doc/doxygen/html/float__sort_8hpp_source.html create mode 100644 doc/doxygen/html/floatfunctorsample_8cpp.html create mode 100644 doc/doxygen/html/floatsample_8cpp.html create mode 100644 doc/doxygen/html/folderclosed.png create mode 100644 doc/doxygen/html/folderopen.png create mode 100644 doc/doxygen/html/ftv2blank.png create mode 100644 doc/doxygen/html/ftv2doc.png create mode 100644 doc/doxygen/html/ftv2folderclosed.png create mode 100644 doc/doxygen/html/ftv2folderopen.png create mode 100644 doc/doxygen/html/ftv2lastnode.png create mode 100644 doc/doxygen/html/ftv2link.png create mode 100644 doc/doxygen/html/ftv2mlastnode.png create mode 100644 doc/doxygen/html/ftv2mnode.png create mode 100644 doc/doxygen/html/ftv2node.png create mode 100644 doc/doxygen/html/ftv2plastnode.png create mode 100644 doc/doxygen/html/ftv2pnode.png create mode 100644 doc/doxygen/html/ftv2splitbar.png create mode 100644 doc/doxygen/html/ftv2vertline.png create mode 100644 doc/doxygen/html/functions.html create mode 100644 doc/doxygen/html/functions_func.html create mode 100644 doc/doxygen/html/functions_vars.html create mode 100644 doc/doxygen/html/generalizedstruct_8cpp.html create mode 100644 doc/doxygen/html/globals.html create mode 100644 doc/doxygen/html/globals_defs.html create mode 100644 doc/doxygen/html/globals_func.html create mode 100644 doc/doxygen/html/globals_vars.html create mode 100644 doc/doxygen/html/index.html create mode 100644 doc/doxygen/html/int64_8cpp.html create mode 100644 doc/doxygen/html/integer__sort_8hpp.html create mode 100644 doc/doxygen/html/integer__sort_8hpp_source.html create mode 100644 doc/doxygen/html/jquery.js create mode 100644 doc/doxygen/html/keyplusdatasample_8cpp.html create mode 100644 doc/doxygen/html/mostlysorted_8cpp.html create mode 100644 doc/doxygen/html/namespaceboost.html create mode 100644 doc/doxygen/html/namespaceboost_1_1sort.html create mode 100644 doc/doxygen/html/namespaceboost_1_1sort_1_1detail.html create mode 100644 doc/doxygen/html/namespacemembers.html create mode 100644 doc/doxygen/html/namespacemembers_eval.html create mode 100644 doc/doxygen/html/namespacemembers_func.html create mode 100644 doc/doxygen/html/namespaces.html create mode 100644 doc/doxygen/html/nav_f.png create mode 100644 doc/doxygen/html/nav_g.png create mode 100644 doc/doxygen/html/nav_h.png create mode 100644 doc/doxygen/html/open.png create mode 100644 doc/doxygen/html/parallelint_8cpp.html create mode 100644 doc/doxygen/html/parallelstring_8cpp.html create mode 100644 doc/doxygen/html/randomgen_8cpp.html create mode 100644 doc/doxygen/html/reverseintsample_8cpp.html create mode 100644 doc/doxygen/html/reversestringfunctorsample_8cpp.html create mode 100644 doc/doxygen/html/reversestringsample_8cpp.html create mode 100644 doc/doxygen/html/rightshiftsample_8cpp.html create mode 100644 doc/doxygen/html/sample_8cpp.html create mode 100644 doc/doxygen/html/search/all_0.html create mode 100644 doc/doxygen/html/search/all_0.js create mode 100644 doc/doxygen/html/search/all_1.html create mode 100644 doc/doxygen/html/search/all_1.js create mode 100644 doc/doxygen/html/search/all_10.html create mode 100644 doc/doxygen/html/search/all_10.js create mode 100644 doc/doxygen/html/search/all_2.html create mode 100644 doc/doxygen/html/search/all_2.js create mode 100644 doc/doxygen/html/search/all_3.html create mode 100644 doc/doxygen/html/search/all_3.js create mode 100644 doc/doxygen/html/search/all_4.html create mode 100644 doc/doxygen/html/search/all_4.js create mode 100644 doc/doxygen/html/search/all_5.html create mode 100644 doc/doxygen/html/search/all_5.js create mode 100644 doc/doxygen/html/search/all_6.html create mode 100644 doc/doxygen/html/search/all_6.js create mode 100644 doc/doxygen/html/search/all_7.html create mode 100644 doc/doxygen/html/search/all_7.js create mode 100644 doc/doxygen/html/search/all_8.html create mode 100644 doc/doxygen/html/search/all_8.js create mode 100644 doc/doxygen/html/search/all_9.html create mode 100644 doc/doxygen/html/search/all_9.js create mode 100644 doc/doxygen/html/search/all_a.html create mode 100644 doc/doxygen/html/search/all_a.js create mode 100644 doc/doxygen/html/search/all_b.html create mode 100644 doc/doxygen/html/search/all_b.js create mode 100644 doc/doxygen/html/search/all_c.html create mode 100644 doc/doxygen/html/search/all_c.js create mode 100644 doc/doxygen/html/search/all_d.html create mode 100644 doc/doxygen/html/search/all_d.js create mode 100644 doc/doxygen/html/search/all_e.html create mode 100644 doc/doxygen/html/search/all_e.js create mode 100644 doc/doxygen/html/search/all_f.html create mode 100644 doc/doxygen/html/search/all_f.js create mode 100644 doc/doxygen/html/search/classes_0.html create mode 100644 doc/doxygen/html/search/classes_0.js create mode 100644 doc/doxygen/html/search/classes_1.html create mode 100644 doc/doxygen/html/search/classes_1.js create mode 100644 doc/doxygen/html/search/classes_2.html create mode 100644 doc/doxygen/html/search/classes_2.js create mode 100644 doc/doxygen/html/search/classes_3.html create mode 100644 doc/doxygen/html/search/classes_3.js create mode 100644 doc/doxygen/html/search/classes_4.html create mode 100644 doc/doxygen/html/search/classes_4.js create mode 100644 doc/doxygen/html/search/classes_5.html create mode 100644 doc/doxygen/html/search/classes_5.js create mode 100644 doc/doxygen/html/search/close.png create mode 100644 doc/doxygen/html/search/defines_0.html create mode 100644 doc/doxygen/html/search/defines_0.js create mode 100644 doc/doxygen/html/search/defines_1.html create mode 100644 doc/doxygen/html/search/defines_1.js create mode 100644 doc/doxygen/html/search/defines_2.html create mode 100644 doc/doxygen/html/search/defines_2.js create mode 100644 doc/doxygen/html/search/defines_3.html create mode 100644 doc/doxygen/html/search/defines_3.js create mode 100644 doc/doxygen/html/search/enumvalues_0.html create mode 100644 doc/doxygen/html/search/enumvalues_0.js create mode 100644 doc/doxygen/html/search/enumvalues_1.html create mode 100644 doc/doxygen/html/search/enumvalues_1.js create mode 100644 doc/doxygen/html/search/enumvalues_2.html create mode 100644 doc/doxygen/html/search/enumvalues_2.js create mode 100644 doc/doxygen/html/search/files_0.html create mode 100644 doc/doxygen/html/search/files_0.js create mode 100644 doc/doxygen/html/search/files_1.html create mode 100644 doc/doxygen/html/search/files_1.js create mode 100644 doc/doxygen/html/search/files_2.html create mode 100644 doc/doxygen/html/search/files_2.js create mode 100644 doc/doxygen/html/search/files_3.html create mode 100644 doc/doxygen/html/search/files_3.js create mode 100644 doc/doxygen/html/search/files_4.html create mode 100644 doc/doxygen/html/search/files_4.js create mode 100644 doc/doxygen/html/search/files_5.html create mode 100644 doc/doxygen/html/search/files_5.js create mode 100644 doc/doxygen/html/search/files_6.html create mode 100644 doc/doxygen/html/search/files_6.js create mode 100644 doc/doxygen/html/search/files_7.html create mode 100644 doc/doxygen/html/search/files_7.js create mode 100644 doc/doxygen/html/search/files_8.html create mode 100644 doc/doxygen/html/search/files_8.js create mode 100644 doc/doxygen/html/search/files_9.html create mode 100644 doc/doxygen/html/search/files_9.js create mode 100644 doc/doxygen/html/search/files_a.html create mode 100644 doc/doxygen/html/search/files_a.js create mode 100644 doc/doxygen/html/search/files_b.html create mode 100644 doc/doxygen/html/search/files_b.js create mode 100644 doc/doxygen/html/search/files_c.html create mode 100644 doc/doxygen/html/search/files_c.js create mode 100644 doc/doxygen/html/search/functions_0.html create mode 100644 doc/doxygen/html/search/functions_0.js create mode 100644 doc/doxygen/html/search/functions_1.html create mode 100644 doc/doxygen/html/search/functions_1.js create mode 100644 doc/doxygen/html/search/functions_2.html create mode 100644 doc/doxygen/html/search/functions_2.js create mode 100644 doc/doxygen/html/search/functions_3.html create mode 100644 doc/doxygen/html/search/functions_3.js create mode 100644 doc/doxygen/html/search/functions_4.html create mode 100644 doc/doxygen/html/search/functions_4.js create mode 100644 doc/doxygen/html/search/functions_5.html create mode 100644 doc/doxygen/html/search/functions_5.js create mode 100644 doc/doxygen/html/search/functions_6.html create mode 100644 doc/doxygen/html/search/functions_6.js create mode 100644 doc/doxygen/html/search/functions_7.html create mode 100644 doc/doxygen/html/search/functions_7.js create mode 100644 doc/doxygen/html/search/functions_8.html create mode 100644 doc/doxygen/html/search/functions_8.js create mode 100644 doc/doxygen/html/search/functions_9.html create mode 100644 doc/doxygen/html/search/functions_9.js create mode 100644 doc/doxygen/html/search/mag_sel.png create mode 100644 doc/doxygen/html/search/namespaces_0.html create mode 100644 doc/doxygen/html/search/namespaces_0.js create mode 100644 doc/doxygen/html/search/nomatches.html create mode 100644 doc/doxygen/html/search/search.css create mode 100644 doc/doxygen/html/search/search.js create mode 100644 doc/doxygen/html/search/search_l.png create mode 100644 doc/doxygen/html/search/search_m.png create mode 100644 doc/doxygen/html/search/search_r.png create mode 100644 doc/doxygen/html/search/searchdata.js create mode 100644 doc/doxygen/html/search/variables_0.html create mode 100644 doc/doxygen/html/search/variables_0.js create mode 100644 doc/doxygen/html/search/variables_1.html create mode 100644 doc/doxygen/html/search/variables_1.js create mode 100644 doc/doxygen/html/search/variables_2.html create mode 100644 doc/doxygen/html/search/variables_2.js create mode 100644 doc/doxygen/html/search/variables_3.html create mode 100644 doc/doxygen/html/search/variables_3.js create mode 100644 doc/doxygen/html/search/variables_4.html create mode 100644 doc/doxygen/html/search/variables_4.js create mode 100644 doc/doxygen/html/search/variables_5.html create mode 100644 doc/doxygen/html/search/variables_5.js create mode 100644 doc/doxygen/html/search/variables_6.html create mode 100644 doc/doxygen/html/search/variables_6.js create mode 100644 doc/doxygen/html/search/variables_7.html create mode 100644 doc/doxygen/html/search/variables_7.js create mode 100644 doc/doxygen/html/search/variables_8.html create mode 100644 doc/doxygen/html/search/variables_8.js create mode 100644 doc/doxygen/html/search/variables_9.html create mode 100644 doc/doxygen/html/search/variables_9.js create mode 100644 doc/doxygen/html/shiftfloatsample_8cpp.html create mode 100644 doc/doxygen/html/sort_8hpp.html create mode 100644 doc/doxygen/html/sort_8hpp_source.html create mode 100644 doc/doxygen/html/splitbar.png create mode 100644 doc/doxygen/html/spreadsort_8hpp.html create mode 100644 doc/doxygen/html/spreadsort_8hpp_source.html create mode 100644 doc/doxygen/html/spreadsort__common_8hpp.html create mode 100644 doc/doxygen/html/spreadsort__common_8hpp_source.html create mode 100644 doc/doxygen/html/string__sort_8hpp.html create mode 100644 doc/doxygen/html/string__sort_8hpp_source.html create mode 100644 doc/doxygen/html/stringfunctorsample_8cpp.html create mode 100644 doc/doxygen/html/stringsample_8cpp.html create mode 100644 doc/doxygen/html/struct_d_a_t_a___t_y_p_e-members.html create mode 100644 doc/doxygen/html/struct_d_a_t_a___t_y_p_e.html create mode 100644 doc/doxygen/html/structboost_1_1sort_1_1detail_1_1offset__char__less__than-members.html create mode 100644 doc/doxygen/html/structboost_1_1sort_1_1detail_1_1offset__char__less__than.html create mode 100644 doc/doxygen/html/structboost_1_1sort_1_1detail_1_1offset__greater__than-members.html create mode 100644 doc/doxygen/html/structboost_1_1sort_1_1detail_1_1offset__greater__than.html create mode 100644 doc/doxygen/html/structboost_1_1sort_1_1detail_1_1offset__less__than-members.html create mode 100644 doc/doxygen/html/structboost_1_1sort_1_1detail_1_1offset__less__than.html create mode 100644 doc/doxygen/html/structbracket-members.html create mode 100644 doc/doxygen/html/structbracket.html create mode 100644 doc/doxygen/html/structgetsize-members.html create mode 100644 doc/doxygen/html/structgetsize.html create mode 100644 doc/doxygen/html/structgreaterthan-members.html create mode 100644 doc/doxygen/html/structgreaterthan.html create mode 100644 doc/doxygen/html/structlessthan-members.html create mode 100644 doc/doxygen/html/structlessthan.html create mode 100644 doc/doxygen/html/structnegrightshift-members.html create mode 100644 doc/doxygen/html/structnegrightshift.html create mode 100644 doc/doxygen/html/structrightshift-members.html create mode 100644 doc/doxygen/html/structrightshift.html create mode 100644 doc/doxygen/html/sync_off.png create mode 100644 doc/doxygen/html/sync_on.png create mode 100644 doc/doxygen/html/tab_a.png create mode 100644 doc/doxygen/html/tab_b.png create mode 100644 doc/doxygen/html/tab_h.png create mode 100644 doc/doxygen/html/tab_s.png create mode 100644 doc/doxygen/html/tabs.css create mode 100644 doc/doxygen/html/wstringsample_8cpp.html create mode 100644 doc/doxygen/index.html create mode 100644 doc/doxygen/sort_doxyfile.txt create mode 100644 doc/entropy.png create mode 100644 doc/equation/Thumbs.db create mode 100644 doc/equation/asymptote.png create mode 100644 doc/equation/bigm.png create mode 100644 doc/equation/bin_limit.png create mode 100644 doc/equation/bins.png create mode 100644 doc/equation/comp_sub.png create mode 100644 doc/equation/compare_asymptote.png create mode 100644 doc/equation/compare_combined.png create mode 100644 doc/equation/compare_simplified.png create mode 100644 doc/equation/fallback.png create mode 100644 doc/equation/gt_smin.png create mode 100644 doc/equation/gte_2k.png create mode 100644 doc/equation/incr_compare.png create mode 100644 doc/equation/introsort.png create mode 100644 doc/equation/iter_combined.png create mode 100644 doc/equation/k1.png create mode 100644 doc/equation/k_1.png create mode 100644 doc/equation/k_2.png create mode 100644 doc/equation/k_m.png create mode 100644 doc/equation/k_remaining.png create mode 100644 doc/equation/k_smax.png create mode 100644 doc/equation/k_smax_final.png create mode 100644 doc/equation/k_start.png create mode 100644 doc/equation/kincr.png create mode 100644 doc/equation/km.png create mode 100644 doc/equation/ktop.png create mode 100644 doc/equation/lsd.png create mode 100644 doc/equation/lsd_offset.png create mode 100644 doc/equation/lt_smin.png create mode 100644 doc/equation/lte_smin.png create mode 100644 doc/equation/m_limit.png create mode 100644 doc/equation/min1_comparison.png create mode 100644 doc/equation/min_comparison.png create mode 100644 doc/equation/min_n.png create mode 100644 doc/equation/min_n_orig.png create mode 100644 doc/equation/mrange.png create mode 100644 doc/equation/msum.png create mode 100644 doc/equation/n_gt_smin.png create mode 100644 doc/equation/nincr.png create mode 100644 doc/equation/radix_iters.png create mode 100644 doc/equation/s_diff.png create mode 100644 doc/equation/s_max.png create mode 100644 doc/equation/s_max_iters.png create mode 100644 doc/equation/s_min.png create mode 100644 doc/equation/smax_total_iters.png create mode 100644 doc/equation/smean.png create mode 100644 doc/equation/smin1.png create mode 100644 doc/equation/smin_lbs.png create mode 100644 doc/equation/sminlbs1.png create mode 100644 doc/equation/srange.png create mode 100644 doc/equation/string_sort.png create mode 100644 doc/equation/worst.png create mode 100644 doc/equation/worst1.png create mode 100644 doc/equation/x2plus1.png create mode 100644 doc/faq.html create mode 100644 doc/fasterbzip2-1.0.5.zip create mode 100644 doc/float_sort.html create mode 100644 doc/graph/boost-no-inspect create mode 100644 doc/graph/osx_float_sort.htm create mode 100644 doc/graph/osx_float_sort_files/chart001.htm create mode 100644 doc/graph/osx_float_sort_files/chart002.htm create mode 100644 doc/graph/osx_float_sort_files/filelist.xml create mode 100644 doc/graph/osx_float_sort_files/image001.gif create mode 100644 doc/graph/osx_float_sort_files/image002.gif create mode 100644 doc/graph/osx_float_sort_files/sheet001.htm create mode 100644 doc/graph/osx_float_sort_files/sheet002.htm create mode 100644 doc/graph/osx_float_sort_files/stylesheet.css create mode 100644 doc/graph/osx_float_sort_files/tabstrip.htm create mode 100644 doc/graph/osx_integer_sort.htm create mode 100644 doc/graph/osx_integer_sort_files/chart001.htm create mode 100644 doc/graph/osx_integer_sort_files/chart002.htm create mode 100644 doc/graph/osx_integer_sort_files/filelist.xml create mode 100644 doc/graph/osx_integer_sort_files/image001.gif create mode 100644 doc/graph/osx_integer_sort_files/image002.gif create mode 100644 doc/graph/osx_integer_sort_files/sheet001.htm create mode 100644 doc/graph/osx_integer_sort_files/sheet002.htm create mode 100644 doc/graph/osx_integer_sort_files/stylesheet.css create mode 100644 doc/graph/osx_integer_sort_files/tabstrip.htm create mode 100644 doc/graph/osx_string_sort.htm create mode 100644 doc/graph/osx_string_sort_files/chart001.htm create mode 100644 doc/graph/osx_string_sort_files/filelist.xml create mode 100644 doc/graph/osx_string_sort_files/image001.gif create mode 100644 doc/graph/osx_string_sort_files/sheet001.htm create mode 100644 doc/graph/osx_string_sort_files/stylesheet.css create mode 100644 doc/graph/osx_string_sort_files/tabstrip.htm create mode 100644 doc/graph/windows_float_sort.htm create mode 100644 doc/graph/windows_float_sort_files/chart001.htm create mode 100644 doc/graph/windows_float_sort_files/chart002.htm create mode 100644 doc/graph/windows_float_sort_files/filelist.xml create mode 100644 doc/graph/windows_float_sort_files/image001.gif create mode 100644 doc/graph/windows_float_sort_files/image002.gif create mode 100644 doc/graph/windows_float_sort_files/sheet001.htm create mode 100644 doc/graph/windows_float_sort_files/sheet002.htm create mode 100644 doc/graph/windows_float_sort_files/stylesheet.css create mode 100644 doc/graph/windows_float_sort_files/tabstrip.htm create mode 100644 doc/graph/windows_integer_sort.htm create mode 100644 doc/graph/windows_integer_sort_files/chart001.htm create mode 100644 doc/graph/windows_integer_sort_files/chart002.htm create mode 100644 doc/graph/windows_integer_sort_files/filelist.xml create mode 100644 doc/graph/windows_integer_sort_files/image001.gif create mode 100644 doc/graph/windows_integer_sort_files/image002.gif create mode 100644 doc/graph/windows_integer_sort_files/sheet001.htm create mode 100644 doc/graph/windows_integer_sort_files/sheet002.htm create mode 100644 doc/graph/windows_integer_sort_files/stylesheet.css create mode 100644 doc/graph/windows_integer_sort_files/tabstrip.htm create mode 100644 doc/graph/windows_string_sort.htm create mode 100644 doc/graph/windows_string_sort_files/chart001.htm create mode 100644 doc/graph/windows_string_sort_files/filelist.xml create mode 100644 doc/graph/windows_string_sort_files/image001.gif create mode 100644 doc/graph/windows_string_sort_files/sheet001.htm create mode 100644 doc/graph/windows_string_sort_files/stylesheet.css create mode 100644 doc/graph/windows_string_sort_files/tabstrip.htm create mode 100644 doc/html/boost/sort/float_mem_cast.html create mode 100644 doc/html/boost/sort/float_sort_id241772.html create mode 100644 doc/html/boost/sort/float_sort_id241854.html create mode 100644 doc/html/boost/sort/float_sort_id241896.html create mode 100644 doc/html/boost/sort/float_sort_id241915.html create mode 100644 doc/html/boost/sort/float_sort_id241982.html create mode 100644 doc/html/boost/sort/float_sort_id242040.html create mode 100644 doc/html/boost/sort/float_sort_id242510.html create mode 100644 doc/html/boost/sort/float_sort_id242601.html create mode 100644 doc/html/boost/sort/float_sort_id242661.html create mode 100644 doc/html/boost/sort/float_sort_id242669.html create mode 100644 doc/html/boost/sort/float_sort_id242926.html create mode 100644 doc/html/boost/sort/float_sort_id243011.html create mode 100644 doc/html/boost/sort/float_sort_id243020.html create mode 100644 doc/html/boost/sort/float_sort_id243084.html create mode 100644 doc/html/boost/sort/float_sort_id243091.html create mode 100644 doc/html/boost/sort/float_sort_id243155.html create mode 100644 doc/html/boost/sort/float_sort_id244711.html create mode 100644 doc/html/boost/sort/float_sort_id244800.html create mode 100644 doc/html/boost/sort/float_sort_id246270.html create mode 100644 doc/html/boost/sort/float_sort_id246334.html create mode 100644 doc/html/boost/sort/float_sort_id246442.html create mode 100644 doc/html/boost/sort/float_sort_id248980.html create mode 100644 doc/html/boost/sort/float_sort_id249051.html create mode 100644 doc/html/boost/sort/float_sort_id249135.html create mode 100644 doc/html/boost/sort/float_sort_id249783.html create mode 100644 doc/html/boost/sort/float_sort_id249857.html create mode 100644 doc/html/boost/sort/float_sort_id249876.html create mode 100644 doc/html/boost/sort/float_sort_id250721.html create mode 100644 doc/html/boost/sort/float_sort_id250758.html create mode 100644 doc/html/boost/sort/float_sort_id250809.html create mode 100644 doc/html/boost/sort/float_sort_id251169.html create mode 100644 doc/html/boost/sort/float_sort_id251223.html create mode 100644 doc/html/boost/sort/float_sort_id251266.html create mode 100644 doc/html/boost/sort/float_sort_id253248.html create mode 100644 doc/html/boost/sort/float_sort_id253307.html create mode 100644 doc/html/boost/sort/float_sort_id253371.html create mode 100644 doc/html/boost/sort/float_sort_id253628.html create mode 100644 doc/html/boost/sort/float_sort_id253733.html create mode 100644 doc/html/boost/sort/float_sort_id253786.html create mode 100644 doc/html/boost/sort/float_sort_id253968.html create mode 100644 doc/html/boost/sort/float_sort_id254049.html create mode 100644 doc/html/boost/sort/float_sort_id254132.html create mode 100644 doc/html/boost/sort/float_sort_id254894.html create mode 100644 doc/html/boost/sort/float_sort_id254973.html create mode 100644 doc/html/boost/sort/float_sort_id255034.html create mode 100644 doc/html/boost/sort/float_sort_id255187.html create mode 100644 doc/html/boost/sort/float_sort_id255271.html create mode 100644 doc/html/boost/sort/float_sort_id255313.html create mode 100644 doc/html/boost/sort/float_sort_id256587.html create mode 100644 doc/html/boost/sort/float_sort_id256694.html create mode 100644 doc/html/boost/sort/float_sort_id256749.html create mode 100644 doc/html/boost/sort/float_sort_id256758.html create mode 100644 doc/html/boost/sort/float_sort_id256794.html create mode 100644 doc/html/boost/sort/float_sort_id258422.html create mode 100644 doc/html/boost/sort/float_sort_id258460.html create mode 100644 doc/html/boost/sort/float_sort_id258574.html create mode 100644 doc/html/boost/sort/float_sort_id258858.html create mode 100644 doc/html/boost/sort/float_sort_id258932.html create mode 100644 doc/html/boost/sort/float_sort_id258991.html create mode 100644 doc/html/boost/sort/float_sort_id259045.html create mode 100644 doc/html/boost/sort/float_sort_id259437.html create mode 100644 doc/html/boost/sort/float_sort_id259521.html create mode 100644 doc/html/boost/sort/float_sort_id259566.html create mode 100644 doc/html/boost/sort/float_sort_id259926.html create mode 100644 doc/html/boost/sort/float_sort_id260014.html create mode 100644 doc/html/boost/sort/float_sort_id260031.html create mode 100644 doc/html/boost/sort/float_sort_id260246.html create mode 100644 doc/html/boost/sort/float_sort_id260345.html create mode 100644 doc/html/boost/sort/float_sort_id260405.html create mode 100644 doc/html/boost/sort/float_sort_id260626.html create mode 100644 doc/html/boost/sort/float_sort_id260709.html create mode 100644 doc/html/boost/sort/float_sort_id260776.html create mode 100644 doc/html/boost/sort/float_sort_id261479.html create mode 100644 doc/html/boost/sort/float_sort_id261583.html create mode 100644 doc/html/boost/sort/float_sort_id261640.html create mode 100644 doc/html/boost/sort/float_sort_id265686.html create mode 100644 doc/html/boost/sort/float_sort_id265755.html create mode 100644 doc/html/boost/sort/float_sort_id265827.html create mode 100644 doc/html/boost/sort/float_sort_id267154.html create mode 100644 doc/html/boost/sort/float_sort_id267205.html create mode 100644 doc/html/boost/sort/float_sort_id267303.html create mode 100644 doc/html/boost/sort/float_sort_id268056.html create mode 100644 doc/html/boost/sort/float_sort_id268136.html create mode 100644 doc/html/boost/sort/float_sort_id268220.html create mode 100644 doc/html/boost/sort/integer_sort_id242030.html create mode 100644 doc/html/boost/sort/integer_sort_id242118.html create mode 100644 doc/html/boost/sort/integer_sort_id242222.html create mode 100644 doc/html/boost/sort/integer_sort_id242375.html create mode 100644 doc/html/boost/sort/integer_sort_id242431.html create mode 100644 doc/html/boost/sort/integer_sort_id242570.html create mode 100644 doc/html/boost/sort/integer_sort_id242742.html create mode 100644 doc/html/boost/sort/integer_sort_id243137.html create mode 100644 doc/html/boost/sort/integer_sort_id243260.html create mode 100644 doc/html/boost/sort/integer_sort_id243346.html create mode 100644 doc/html/boost/sort/integer_sort_id243434.html create mode 100644 doc/html/boost/sort/integer_sort_id243615.html create mode 100644 doc/html/boost/sort/integer_sort_id243728.html create mode 100644 doc/html/boost/sort/integer_sort_id245129.html create mode 100644 doc/html/boost/sort/integer_sort_id245154.html create mode 100644 doc/html/boost/sort/integer_sort_id245316.html create mode 100644 doc/html/boost/sort/integer_sort_id245371.html create mode 100644 doc/html/boost/sort/integer_sort_id245575.html create mode 100644 doc/html/boost/sort/integer_sort_id246515.html create mode 100644 doc/html/boost/sort/integer_sort_id246686.html create mode 100644 doc/html/boost/sort/integer_sort_id247510.html create mode 100644 doc/html/boost/sort/integer_sort_id249225.html create mode 100644 doc/html/boost/sort/integer_sort_id249445.html create mode 100644 doc/html/boost/sort/integer_sort_id249987.html create mode 100644 doc/html/boost/sort/integer_sort_id250121.html create mode 100644 doc/html/boost/sort/integer_sort_id250200.html create mode 100644 doc/html/boost/sort/integer_sort_id250453.html create mode 100644 doc/html/boost/sort/integer_sort_id250887.html create mode 100644 doc/html/boost/sort/integer_sort_id251142.html create mode 100644 doc/html/boost/sort/integer_sort_id251351.html create mode 100644 doc/html/boost/sort/integer_sort_id251377.html create mode 100644 doc/html/boost/sort/integer_sort_id251569.html create mode 100644 doc/html/boost/sort/integer_sort_id253490.html create mode 100644 doc/html/boost/sort/integer_sort_id253662.html create mode 100644 doc/html/boost/sort/integer_sort_id253869.html create mode 100644 doc/html/boost/sort/integer_sort_id253939.html create mode 100644 doc/html/boost/sort/integer_sort_id254224.html create mode 100644 doc/html/boost/sort/integer_sort_id254399.html create mode 100644 doc/html/boost/sort/integer_sort_id255128.html create mode 100644 doc/html/boost/sort/integer_sort_id255302.html create mode 100644 doc/html/boost/sort/integer_sort_id255439.html create mode 100644 doc/html/boost/sort/integer_sort_id255564.html create mode 100644 doc/html/boost/sort/integer_sort_id255629.html create mode 100644 doc/html/boost/sort/integer_sort_id255890.html create mode 100644 doc/html/boost/sort/integer_sort_id256124.html create mode 100644 doc/html/boost/sort/integer_sort_id256842.html create mode 100644 doc/html/boost/sort/integer_sort_id256878.html create mode 100644 doc/html/boost/sort/integer_sort_id257079.html create mode 100644 doc/html/boost/sort/integer_sort_id257095.html create mode 100644 doc/html/boost/sort/integer_sort_id257312.html create mode 100644 doc/html/boost/sort/integer_sort_id257350.html create mode 100644 doc/html/boost/sort/integer_sort_id258076.html create mode 100644 doc/html/boost/sort/integer_sort_id258264.html create mode 100644 doc/html/boost/sort/integer_sort_id258572.html create mode 100644 doc/html/boost/sort/integer_sort_id258617.html create mode 100644 doc/html/boost/sort/integer_sort_id258723.html create mode 100644 doc/html/boost/sort/integer_sort_id258805.html create mode 100644 doc/html/boost/sort/integer_sort_id258880.html create mode 100644 doc/html/boost/sort/integer_sort_id259098.html create mode 100644 doc/html/boost/sort/integer_sort_id259146.html create mode 100644 doc/html/boost/sort/integer_sort_id259302.html create mode 100644 doc/html/boost/sort/integer_sort_id259488.html create mode 100644 doc/html/boost/sort/integer_sort_id259677.html create mode 100644 doc/html/boost/sort/integer_sort_id259855.html create mode 100644 doc/html/boost/sort/integer_sort_id260103.html create mode 100644 doc/html/boost/sort/integer_sort_id260143.html create mode 100644 doc/html/boost/sort/integer_sort_id260473.html create mode 100644 doc/html/boost/sort/integer_sort_id260881.html create mode 100644 doc/html/boost/sort/integer_sort_id261102.html create mode 100644 doc/html/boost/sort/integer_sort_id261703.html create mode 100644 doc/html/boost/sort/integer_sort_id261838.html create mode 100644 doc/html/boost/sort/integer_sort_id261916.html create mode 100644 doc/html/boost/sort/integer_sort_id262668.html create mode 100644 doc/html/boost/sort/integer_sort_id262943.html create mode 100644 doc/html/boost/sort/integer_sort_id264805.html create mode 100644 doc/html/boost/sort/integer_sort_id265912.html create mode 100644 doc/html/boost/sort/integer_sort_id266089.html create mode 100644 doc/html/boost/sort/integer_sort_id266351.html create mode 100644 doc/html/boost/sort/integer_sort_id267391.html create mode 100644 doc/html/boost/sort/integer_sort_id268312.html create mode 100644 doc/html/boost/sort/integer_sort_id269657.html create mode 100644 doc/html/boost/sort/integer_sort_id269897.html create mode 100644 doc/html/boost/sort/integer_sort_id271562.html create mode 100644 doc/html/boost/sort/integer_sort_id271830.html create mode 100644 doc/html/boost/sort/reverse_string_so_id243624.html create mode 100644 doc/html/boost/sort/reverse_string_so_id243867.html create mode 100644 doc/html/boost/sort/reverse_string_so_id243976.html create mode 100644 doc/html/boost/sort/reverse_string_so_id244222.html create mode 100644 doc/html/boost/sort/reverse_string_so_id244254.html create mode 100644 doc/html/boost/sort/reverse_string_so_id244479.html create mode 100644 doc/html/boost/sort/reverse_string_so_id244501.html create mode 100644 doc/html/boost/sort/reverse_string_so_id244510.html create mode 100644 doc/html/boost/sort/reverse_string_so_id244603.html create mode 100644 doc/html/boost/sort/reverse_string_so_id244958.html create mode 100644 doc/html/boost/sort/reverse_string_so_id245247.html create mode 100644 doc/html/boost/sort/reverse_string_so_id245755.html create mode 100644 doc/html/boost/sort/reverse_string_so_id245971.html create mode 100644 doc/html/boost/sort/reverse_string_so_id246500.html create mode 100644 doc/html/boost/sort/reverse_string_so_id246701.html create mode 100644 doc/html/boost/sort/reverse_string_so_id246904.html create mode 100644 doc/html/boost/sort/reverse_string_so_id247892.html create mode 100644 doc/html/boost/sort/reverse_string_so_id248976.html create mode 100644 doc/html/boost/sort/reverse_string_so_id249246.html create mode 100644 doc/html/boost/sort/reverse_string_so_id249319.html create mode 100644 doc/html/boost/sort/reverse_string_so_id249929.html create mode 100644 doc/html/boost/sort/reverse_string_so_id249970.html create mode 100644 doc/html/boost/sort/reverse_string_so_id251193.html create mode 100644 doc/html/boost/sort/reverse_string_so_id251424.html create mode 100644 doc/html/boost/sort/reverse_string_so_id251508.html create mode 100644 doc/html/boost/sort/reverse_string_so_id252800.html create mode 100644 doc/html/boost/sort/reverse_string_so_id253006.html create mode 100644 doc/html/boost/sort/reverse_string_so_id253040.html create mode 100644 doc/html/boost/sort/reverse_string_so_id254339.html create mode 100644 doc/html/boost/sort/reverse_string_so_id254458.html create mode 100644 doc/html/boost/sort/reverse_string_so_id254544.html create mode 100644 doc/html/boost/sort/reverse_string_so_id254694.html create mode 100644 doc/html/boost/sort/reverse_string_so_id254992.html create mode 100644 doc/html/boost/sort/reverse_string_so_id255162.html create mode 100644 doc/html/boost/sort/reverse_string_so_id255227.html create mode 100644 doc/html/boost/sort/reverse_string_so_id255417.html create mode 100644 doc/html/boost/sort/reverse_string_so_id255458.html create mode 100644 doc/html/boost/sort/reverse_string_so_id256165.html create mode 100644 doc/html/boost/sort/reverse_string_so_id256241.html create mode 100644 doc/html/boost/sort/reverse_string_so_id256484.html create mode 100644 doc/html/boost/sort/reverse_string_so_id257476.html create mode 100644 doc/html/boost/sort/reverse_string_so_id257608.html create mode 100644 doc/html/boost/sort/reverse_string_so_id257695.html create mode 100644 doc/html/boost/sort/reverse_string_so_id257830.html create mode 100644 doc/html/boost/sort/reverse_string_so_id258417.html create mode 100644 doc/html/boost/sort/reverse_string_so_id258544.html create mode 100644 doc/html/boost/sort/reverse_string_so_id258557.html create mode 100644 doc/html/boost/sort/reverse_string_so_id258653.html create mode 100644 doc/html/boost/sort/reverse_string_so_id258683.html create mode 100644 doc/html/boost/sort/reverse_string_so_id259501.html create mode 100644 doc/html/boost/sort/reverse_string_so_id259714.html create mode 100644 doc/html/boost/sort/reverse_string_so_id259909.html create mode 100644 doc/html/boost/sort/reverse_string_so_id260173.html create mode 100644 doc/html/boost/sort/reverse_string_so_id260490.html create mode 100644 doc/html/boost/sort/reverse_string_so_id260702.html create mode 100644 doc/html/boost/sort/reverse_string_so_id260724.html create mode 100644 doc/html/boost/sort/reverse_string_so_id260961.html create mode 100644 doc/html/boost/sort/reverse_string_so_id261221.html create mode 100644 doc/html/boost/sort/reverse_string_so_id261336.html create mode 100644 doc/html/boost/sort/reverse_string_so_id261368.html create mode 100644 doc/html/boost/sort/reverse_string_so_id261432.html create mode 100644 doc/html/boost/sort/reverse_string_so_id261483.html create mode 100644 doc/html/boost/sort/reverse_string_so_id261529.html create mode 100644 doc/html/boost/sort/reverse_string_so_id261693.html create mode 100644 doc/html/boost/sort/reverse_string_so_id261782.html create mode 100644 doc/html/boost/sort/reverse_string_so_id262034.html create mode 100644 doc/html/boost/sort/reverse_string_so_id262038.html create mode 100644 doc/html/boost/sort/reverse_string_so_id262125.html create mode 100644 doc/html/boost/sort/reverse_string_so_id262656.html create mode 100644 doc/html/boost/sort/reverse_string_so_id262750.html create mode 100644 doc/html/boost/sort/reverse_string_so_id262872.html create mode 100644 doc/html/boost/sort/reverse_string_so_id263670.html create mode 100644 doc/html/boost/sort/reverse_string_so_id263906.html create mode 100644 doc/html/boost/sort/reverse_string_so_id264231.html create mode 100644 doc/html/boost/sort/reverse_string_so_id264645.html create mode 100644 doc/html/boost/sort/reverse_string_so_id267448.html create mode 100644 doc/html/boost/sort/reverse_string_so_id268721.html create mode 100644 doc/html/boost/sort/reverse_string_so_id268757.html create mode 100644 doc/html/boost/sort/reverse_string_so_id268930.html create mode 100644 doc/html/boost/sort/reverse_string_so_id268972.html create mode 100644 doc/html/boost/sort/reverse_string_so_id270701.html create mode 100644 doc/html/boost/sort/reverse_string_so_id270935.html create mode 100644 doc/html/boost/sort/reverse_string_so_id272170.html create mode 100644 doc/html/boost/sort/reverse_string_so_id273926.html create mode 100644 doc/html/boost/sort/spreadsort_id244864.html create mode 100644 doc/html/boost/sort/spreadsort_id245000.html create mode 100644 doc/html/boost/sort/spreadsort_id245010.html create mode 100644 doc/html/boost/sort/spreadsort_id245105.html create mode 100644 doc/html/boost/sort/spreadsort_id245143.html create mode 100644 doc/html/boost/sort/spreadsort_id245296.html create mode 100644 doc/html/boost/sort/spreadsort_id245338.html create mode 100644 doc/html/boost/sort/spreadsort_id245513.html create mode 100644 doc/html/boost/sort/spreadsort_id245619.html create mode 100644 doc/html/boost/sort/spreadsort_id245626.html create mode 100644 doc/html/boost/sort/spreadsort_id245643.html create mode 100644 doc/html/boost/sort/spreadsort_id245754.html create mode 100644 doc/html/boost/sort/spreadsort_id245799.html create mode 100644 doc/html/boost/sort/spreadsort_id245816.html create mode 100644 doc/html/boost/sort/spreadsort_id245905.html create mode 100644 doc/html/boost/sort/spreadsort_id245950.html create mode 100644 doc/html/boost/sort/spreadsort_id246083.html create mode 100644 doc/html/boost/sort/spreadsort_id250292.html create mode 100644 doc/html/boost/sort/spreadsort_id250354.html create mode 100644 doc/html/boost/sort/spreadsort_id250467.html create mode 100644 doc/html/boost/sort/spreadsort_id250517.html create mode 100644 doc/html/boost/sort/spreadsort_id250557.html create mode 100644 doc/html/boost/sort/spreadsort_id250650.html create mode 100644 doc/html/boost/sort/spreadsort_id251916.html create mode 100644 doc/html/boost/sort/spreadsort_id252059.html create mode 100644 doc/html/boost/sort/spreadsort_id252171.html create mode 100644 doc/html/boost/sort/spreadsort_id253492.html create mode 100644 doc/html/boost/sort/spreadsort_id253578.html create mode 100644 doc/html/boost/sort/spreadsort_id253746.html create mode 100644 doc/html/boost/sort/spreadsort_id254381.html create mode 100644 doc/html/boost/sort/spreadsort_id255624.html create mode 100644 doc/html/boost/sort/spreadsort_id255842.html create mode 100644 doc/html/boost/sort/spreadsort_id255938.html create mode 100644 doc/html/boost/sort/spreadsort_id256105.html create mode 100644 doc/html/boost/sort/spreadsort_id256385.html create mode 100644 doc/html/boost/sort/spreadsort_id256510.html create mode 100644 doc/html/boost/sort/spreadsort_id256549.html create mode 100644 doc/html/boost/sort/spreadsort_id256686.html create mode 100644 doc/html/boost/sort/spreadsort_id256725.html create mode 100644 doc/html/boost/sort/spreadsort_id256815.html create mode 100644 doc/html/boost/sort/spreadsort_id256849.html create mode 100644 doc/html/boost/sort/spreadsort_id256976.html create mode 100644 doc/html/boost/sort/spreadsort_id257594.html create mode 100644 doc/html/boost/sort/spreadsort_id257734.html create mode 100644 doc/html/boost/sort/spreadsort_id258452.html create mode 100644 doc/html/boost/sort/spreadsort_id258614.html create mode 100644 doc/html/boost/sort/spreadsort_id258751.html create mode 100644 doc/html/boost/sort/spreadsort_id258843.html create mode 100644 doc/html/boost/sort/spreadsort_id258972.html create mode 100644 doc/html/boost/sort/spreadsort_id259061.html create mode 100644 doc/html/boost/sort/spreadsort_id259102.html create mode 100644 doc/html/boost/sort/spreadsort_id259216.html create mode 100644 doc/html/boost/sort/spreadsort_id259349.html create mode 100644 doc/html/boost/sort/spreadsort_id260727.html create mode 100644 doc/html/boost/sort/spreadsort_id260884.html create mode 100644 doc/html/boost/sort/spreadsort_id260999.html create mode 100644 doc/html/boost/sort/spreadsort_id261146.html create mode 100644 doc/html/boost/sort/spreadsort_id261821.html create mode 100644 doc/html/boost/sort/spreadsort_id261864.html create mode 100644 doc/html/boost/sort/spreadsort_id261906.html create mode 100644 doc/html/boost/sort/spreadsort_id261970.html create mode 100644 doc/html/boost/sort/spreadsort_id262059.html create mode 100644 doc/html/boost/sort/spreadsort_id262107.html create mode 100644 doc/html/boost/sort/spreadsort_id262123.html create mode 100644 doc/html/boost/sort/spreadsort_id262244.html create mode 100644 doc/html/boost/sort/spreadsort_id262387.html create mode 100644 doc/html/boost/sort/spreadsort_id262724.html create mode 100644 doc/html/boost/sort/spreadsort_id262840.html create mode 100644 doc/html/boost/sort/spreadsort_id263163.html create mode 100644 doc/html/boost/sort/spreadsort_id263303.html create mode 100644 doc/html/boost/sort/spreadsort_id263426.html create mode 100644 doc/html/boost/sort/spreadsort_id265061.html create mode 100644 doc/html/boost/sort/spreadsort_id265185.html create mode 100644 doc/html/boost/sort/spreadsort_id265305.html create mode 100644 doc/html/boost/sort/spreadsort_id267825.html create mode 100644 doc/html/boost/sort/spreadsort_id267982.html create mode 100644 doc/html/boost/sort/spreadsort_id268089.html create mode 100644 doc/html/boost/sort/spreadsort_id269811.html create mode 100644 doc/html/boost/sort/spreadsort_id269968.html create mode 100644 doc/html/boost/sort/spreadsort_id270110.html create mode 100644 doc/html/boost/sort/spreadsort_id270144.html create mode 100644 doc/html/boost/sort/spreadsort_id270290.html create mode 100644 doc/html/boost/sort/spreadsort_id270414.html create mode 100644 doc/html/boost/sort/string_sort_id243412.html create mode 100644 doc/html/boost/sort/string_sort_id243545.html create mode 100644 doc/html/boost/sort/string_sort_id243767.html create mode 100644 doc/html/boost/sort/string_sort_id244069.html create mode 100644 doc/html/boost/sort/string_sort_id244100.html create mode 100644 doc/html/boost/sort/string_sort_id244211.html create mode 100644 doc/html/boost/sort/string_sort_id244369.html create mode 100644 doc/html/boost/sort/string_sort_id244455.html create mode 100644 doc/html/boost/sort/string_sort_id244725.html create mode 100644 doc/html/boost/sort/string_sort_id244728.html create mode 100644 doc/html/boost/sort/string_sort_id244752.html create mode 100644 doc/html/boost/sort/string_sort_id245001.html create mode 100644 doc/html/boost/sort/string_sort_id245030.html create mode 100644 doc/html/boost/sort/string_sort_id245272.html create mode 100644 doc/html/boost/sort/string_sort_id245464.html create mode 100644 doc/html/boost/sort/string_sort_id245509.html create mode 100644 doc/html/boost/sort/string_sort_id246050.html create mode 100644 doc/html/boost/sort/string_sort_id246080.html create mode 100644 doc/html/boost/sort/string_sort_id246179.html create mode 100644 doc/html/boost/sort/string_sort_id246248.html create mode 100644 doc/html/boost/sort/string_sort_id246303.html create mode 100644 doc/html/boost/sort/string_sort_id246448.html create mode 100644 doc/html/boost/sort/string_sort_id247153.html create mode 100644 doc/html/boost/sort/string_sort_id248559.html create mode 100644 doc/html/boost/sort/string_sort_id248776.html create mode 100644 doc/html/boost/sort/string_sort_id249054.html create mode 100644 doc/html/boost/sort/string_sort_id249486.html create mode 100644 doc/html/boost/sort/string_sort_id249638.html create mode 100644 doc/html/boost/sort/string_sort_id249718.html create mode 100644 doc/html/boost/sort/string_sort_id250742.html create mode 100644 doc/html/boost/sort/string_sort_id250950.html create mode 100644 doc/html/boost/sort/string_sort_id251657.html create mode 100644 doc/html/boost/sort/string_sort_id252315.html create mode 100644 doc/html/boost/sort/string_sort_id252569.html create mode 100644 doc/html/boost/sort/string_sort_id252815.html create mode 100644 doc/html/boost/sort/string_sort_id253251.html create mode 100644 doc/html/boost/sort/string_sort_id253517.html create mode 100644 doc/html/boost/sort/string_sort_id253905.html create mode 100644 doc/html/boost/sort/string_sort_id254112.html create mode 100644 doc/html/boost/sort/string_sort_id254237.html create mode 100644 doc/html/boost/sort/string_sort_id254543.html create mode 100644 doc/html/boost/sort/string_sort_id254771.html create mode 100644 doc/html/boost/sort/string_sort_id254810.html create mode 100644 doc/html/boost/sort/string_sort_id254902.html create mode 100644 doc/html/boost/sort/string_sort_id254982.html create mode 100644 doc/html/boost/sort/string_sort_id255197.html create mode 100644 doc/html/boost/sort/string_sort_id255449.html create mode 100644 doc/html/boost/sort/string_sort_id255626.html create mode 100644 doc/html/boost/sort/string_sort_id255712.html create mode 100644 doc/html/boost/sort/string_sort_id255804.html create mode 100644 doc/html/boost/sort/string_sort_id255918.html create mode 100644 doc/html/boost/sort/string_sort_id256024.html create mode 100644 doc/html/boost/sort/string_sort_id256272.html create mode 100644 doc/html/boost/sort/string_sort_id256699.html create mode 100644 doc/html/boost/sort/string_sort_id256992.html create mode 100644 doc/html/boost/sort/string_sort_id256995.html create mode 100644 doc/html/boost/sort/string_sort_id257141.html create mode 100644 doc/html/boost/sort/string_sort_id257227.html create mode 100644 doc/html/boost/sort/string_sort_id257380.html create mode 100644 doc/html/boost/sort/string_sort_id257950.html create mode 100644 doc/html/boost/sort/string_sort_id258060.html create mode 100644 doc/html/boost/sort/string_sort_id258202.html create mode 100644 doc/html/boost/sort/string_sort_id258348.html create mode 100644 doc/html/boost/sort/string_sort_id258437.html create mode 100644 doc/html/boost/sort/string_sort_id259046.html create mode 100644 doc/html/boost/sort/string_sort_id259268.html create mode 100644 doc/html/boost/sort/string_sort_id259510.html create mode 100644 doc/html/boost/sort/string_sort_id259726.html create mode 100644 doc/html/boost/sort/string_sort_id259958.html create mode 100644 doc/html/boost/sort/string_sort_id260222.html create mode 100644 doc/html/boost/sort/string_sort_id260400.html create mode 100644 doc/html/boost/sort/string_sort_id260480.html create mode 100644 doc/html/boost/sort/string_sort_id260919.html create mode 100644 doc/html/boost/sort/string_sort_id260940.html create mode 100644 doc/html/boost/sort/string_sort_id261032.html create mode 100644 doc/html/boost/sort/string_sort_id261068.html create mode 100644 doc/html/boost/sort/string_sort_id261185.html create mode 100644 doc/html/boost/sort/string_sort_id261193.html create mode 100644 doc/html/boost/sort/string_sort_id261214.html create mode 100644 doc/html/boost/sort/string_sort_id261444.html create mode 100644 doc/html/boost/sort/string_sort_id261588.html create mode 100644 doc/html/boost/sort/string_sort_id261630.html create mode 100644 doc/html/boost/sort/string_sort_id261715.html create mode 100644 doc/html/boost/sort/string_sort_id261810.html create mode 100644 doc/html/boost/sort/string_sort_id261893.html create mode 100644 doc/html/boost/sort/string_sort_id262230.html create mode 100644 doc/html/boost/sort/string_sort_id262262.html create mode 100644 doc/html/boost/sort/string_sort_id262274.html create mode 100644 doc/html/boost/sort/string_sort_id262449.html create mode 100644 doc/html/boost/sort/string_sort_id262514.html create mode 100644 doc/html/boost/sort/string_sort_id262527.html create mode 100644 doc/html/boost/sort/string_sort_id262530.html create mode 100644 doc/html/boost/sort/string_sort_id263164.html create mode 100644 doc/html/boost/sort/string_sort_id263387.html create mode 100644 doc/html/boost/sort/string_sort_id263465.html create mode 100644 doc/html/boost/sort/string_sort_id263576.html create mode 100644 doc/html/boost/sort/string_sort_id264141.html create mode 100644 doc/html/boost/sort/string_sort_id264380.html create mode 100644 doc/html/boost/sort/string_sort_id265488.html create mode 100644 doc/html/boost/sort/string_sort_id266962.html create mode 100644 doc/html/boost/sort/string_sort_id267161.html create mode 100644 doc/html/boost/sort/string_sort_id268254.html create mode 100644 doc/html/boost/sort/string_sort_id268468.html create mode 100644 doc/html/boost/sort/string_sort_id269208.html create mode 100644 doc/html/boost/sort/string_sort_id269501.html create mode 100644 doc/html/boost/sort/string_sort_id270279.html create mode 100644 doc/html/boost/sort/string_sort_id270491.html create mode 100644 doc/html/boost/sort/string_sort_id270561.html create mode 100644 doc/html/boost/sort/string_sort_id270797.html create mode 100644 doc/html/boost/sort/string_sort_id271154.html create mode 100644 doc/html/boost/sort/string_sort_id273679.html create mode 100644 doc/html/boost_sort_c___reference.html create mode 100644 doc/html/header/boost/sort/spreadsort/integer_sort_hpp.html create mode 100644 doc/html/header/boost/sort/spreadsort/spreadsort_hpp.html create mode 100644 doc/html/header/boost/sort/spreadsort/string_sort_hpp.html create mode 100644 doc/html/index.html create mode 100644 doc/html/index/s09.html create mode 100644 doc/html/index/s10.html create mode 100644 doc/html/index/s11.html create mode 100644 doc/html/index/s12.html create mode 100644 doc/html/index/s13.html create mode 100644 doc/html/inspec12jan.htm create mode 100644 doc/html/sort/acks.html create mode 100644 doc/html/sort/bibliog.html create mode 100644 doc/html/sort/definitions.html create mode 100644 doc/html/sort/faq.html create mode 100644 doc/html/sort/header_spreadsort.html create mode 100644 doc/html/sort/history.html create mode 100644 doc/html/sort/integer_sort.html create mode 100644 doc/html/sort/integer_sort/integersort_examples.html create mode 100644 doc/html/sort/rationale.html create mode 100644 doc/html/sort/rationale/hybrid_radix.html create mode 100644 doc/html/sort/rationale/lookup.html create mode 100644 doc/html/sort/rationale/optimization.html create mode 100644 doc/html/sort/rationale/unstable_sort.html create mode 100644 doc/html/sort/rationale/why_spreadsort.html create mode 100644 doc/html/sort/sort_hpp.html create mode 100644 doc/html/sort/sort_hpp/acks.html create mode 100644 doc/html/sort/sort_hpp/bibliog.html create mode 100644 doc/html/sort/sort_hpp/definitions.html create mode 100644 doc/html/sort/sort_hpp/faq.html create mode 100644 doc/html/sort/sort_hpp/history.html create mode 100644 doc/html/sort/sort_hpp/integer_sort.html create mode 100644 doc/html/sort/sort_hpp/rationale.html create mode 100644 doc/html/sort/sort_hpp/rationale/hybrid_radix.html create mode 100644 doc/html/sort/sort_hpp/rationale/lookup.html create mode 100644 doc/html/sort/sort_hpp/rationale/optimization.html create mode 100644 doc/html/sort/sort_hpp/rationale/unstable_sort.html create mode 100644 doc/html/sort/sort_hpp/rationale/why_spreadsort.html create mode 100644 doc/html/sort/sort_hpp/s11.html create mode 100644 doc/html/sort/sort_hpp/s12.html create mode 100644 doc/html/sort/sort_hpp/spreadsort_examples.html create mode 100644 doc/html/sort/spreadsort_examples.html create mode 100644 doc/html/standalone_HTML.manifest create mode 100644 doc/html4_symbols.qbk create mode 100644 doc/images/4_threaded.png create mode 100644 doc/images/Thumbs.db create mode 100644 doc/images/bits_per_byte.png create mode 100644 doc/images/entropy.png create mode 100644 doc/images/single_threaded.png create mode 100644 doc/index.html create mode 100644 doc/integer_sort.html create mode 100644 doc/overview.html create mode 100644 doc/papers/original_spreadsort06_2002.pdf create mode 100644 doc/rationale.html create mode 100644 doc/single_threaded.png create mode 100644 doc/sort.html create mode 100644 doc/sort.idx create mode 100644 doc/sort.log create mode 100644 doc/sort.pdf create mode 100644 doc/sort.qbk create mode 100644 doc/sort12jan.log create mode 100644 doc/sort12janpdf.log create mode 100644 doc/sorting.html create mode 100644 doc/sortpdf.log create mode 100644 doc/spreadsort.html create mode 100644 doc/string_sort.html create mode 100644 example/alrbreaker.cpp create mode 100644 example/alreadysorted.cpp create mode 100644 example/binaryalrbreaker.cpp create mode 100644 example/boostrandomgen.cpp create mode 100644 example/caseinsensitive.cpp create mode 100644 example/charstringsample.cpp create mode 100644 example/double.cpp create mode 100644 example/floatfunctorsample.cpp create mode 100644 example/floatsample.cpp create mode 100644 example/generalizedstruct.cpp create mode 100644 example/int64.cpp create mode 100644 example/keyplusdatasample.cpp create mode 100644 example/mostlysorted.cpp create mode 100644 example/parallelint.cpp create mode 100644 example/parallelstring.cpp create mode 100644 example/randomgen.cpp create mode 100644 example/reverseintsample.cpp create mode 100644 example/reversestringfunctorsample.cpp create mode 100644 example/reversestringsample.cpp create mode 100644 example/rightshiftsample.cpp create mode 100644 example/sample.cpp create mode 100644 example/shiftfloatsample.cpp create mode 100644 example/stringfunctorsample.cpp create mode 100644 example/stringsample.cpp create mode 100644 example/wstringsample.cpp create mode 100644 include/boost/sort/sort.hpp create mode 100644 include/boost/sort/spreadsort/detail/constants.hpp create mode 100644 include/boost/sort/spreadsort/detail/float_sort.hpp create mode 100644 include/boost/sort/spreadsort/detail/integer_sort.hpp create mode 100644 include/boost/sort/spreadsort/detail/spreadsort_common.hpp create mode 100644 include/boost/sort/spreadsort/detail/string_sort.hpp create mode 100644 include/boost/sort/spreadsort/float_sort.hpp create mode 100644 include/boost/sort/spreadsort/integer_sort.hpp create mode 100644 include/boost/sort/spreadsort/spreadsort.hpp create mode 100644 include/boost/sort/spreadsort/string_sort.hpp create mode 100644 index.html create mode 100644 oldgraph/osx_float_sort.htm create mode 100644 oldgraph/osx_float_sort_files/chart001.htm create mode 100644 oldgraph/osx_float_sort_files/chart002.htm create mode 100644 oldgraph/osx_float_sort_files/filelist.xml create mode 100644 oldgraph/osx_float_sort_files/image001.gif create mode 100644 oldgraph/osx_float_sort_files/image002.gif create mode 100644 oldgraph/osx_float_sort_files/sheet001.htm create mode 100644 oldgraph/osx_float_sort_files/sheet002.htm create mode 100644 oldgraph/osx_float_sort_files/stylesheet.css create mode 100644 oldgraph/osx_float_sort_files/tabstrip.htm create mode 100644 oldgraph/osx_integer_sort.htm create mode 100644 oldgraph/osx_integer_sort_files/chart001.htm create mode 100644 oldgraph/osx_integer_sort_files/chart002.htm create mode 100644 oldgraph/osx_integer_sort_files/filelist.xml create mode 100644 oldgraph/osx_integer_sort_files/image001.gif create mode 100644 oldgraph/osx_integer_sort_files/image002.gif create mode 100644 oldgraph/osx_integer_sort_files/sheet001.htm create mode 100644 oldgraph/osx_integer_sort_files/sheet002.htm create mode 100644 oldgraph/osx_integer_sort_files/stylesheet.css create mode 100644 oldgraph/osx_integer_sort_files/tabstrip.htm create mode 100644 oldgraph/osx_string_sort.htm create mode 100644 oldgraph/osx_string_sort_files/chart001.htm create mode 100644 oldgraph/osx_string_sort_files/filelist.xml create mode 100644 oldgraph/osx_string_sort_files/image001.gif create mode 100644 oldgraph/osx_string_sort_files/sheet001.htm create mode 100644 oldgraph/osx_string_sort_files/stylesheet.css create mode 100644 oldgraph/osx_string_sort_files/tabstrip.htm create mode 100644 oldgraph/windows_float_sort.htm create mode 100644 oldgraph/windows_float_sort_files/chart001.htm create mode 100644 oldgraph/windows_float_sort_files/chart002.htm create mode 100644 oldgraph/windows_float_sort_files/filelist.xml create mode 100644 oldgraph/windows_float_sort_files/image001.gif create mode 100644 oldgraph/windows_float_sort_files/image002.gif create mode 100644 oldgraph/windows_float_sort_files/sheet001.htm create mode 100644 oldgraph/windows_float_sort_files/sheet002.htm create mode 100644 oldgraph/windows_float_sort_files/stylesheet.css create mode 100644 oldgraph/windows_float_sort_files/tabstrip.htm create mode 100644 oldgraph/windows_integer_sort.htm create mode 100644 oldgraph/windows_integer_sort_files/chart001.htm create mode 100644 oldgraph/windows_integer_sort_files/chart002.htm create mode 100644 oldgraph/windows_integer_sort_files/filelist.xml create mode 100644 oldgraph/windows_integer_sort_files/image001.gif create mode 100644 oldgraph/windows_integer_sort_files/image002.gif create mode 100644 oldgraph/windows_integer_sort_files/sheet001.htm create mode 100644 oldgraph/windows_integer_sort_files/sheet002.htm create mode 100644 oldgraph/windows_integer_sort_files/stylesheet.css create mode 100644 oldgraph/windows_integer_sort_files/tabstrip.htm create mode 100644 oldgraph/windows_string_sort.htm create mode 100644 oldgraph/windows_string_sort_files/chart001.htm create mode 100644 oldgraph/windows_string_sort_files/filelist.xml create mode 100644 oldgraph/windows_string_sort_files/image001.gif create mode 100644 oldgraph/windows_string_sort_files/sheet001.htm create mode 100644 oldgraph/windows_string_sort_files/stylesheet.css create mode 100644 oldgraph/windows_string_sort_files/tabstrip.htm create mode 100644 test/Jamfile.v2 create mode 100644 test/float_sort_test.cpp create mode 100644 test/integer_sort_test.cpp create mode 100644 test/sort_detail_test.cpp create mode 100644 test/string_sort_test.cpp create mode 100644 test/test.log create mode 100644 tune.pl diff --git a/Jamfile.v2 b/Jamfile.v2 new file mode 100644 index 0000000..9e5d38f --- /dev/null +++ b/Jamfile.v2 @@ -0,0 +1,42 @@ +# Copyright Steven Ross 2009. +# +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt) +# See http://www.boost.org/libs/sort for library home page. + +local properties = ; +if --tune in [ modules.peek : ARGV ] +{ + properties = . release ; +} + +project spreadsort : source-location example : requirements ../.. ../../.. $(properties) ; + +exe spreadsort : sample.cpp ; +exe alreadysorted : alreadysorted.cpp ; +exe mostlysorted : mostlysorted.cpp ; +exe rightshift : rightshiftsample.cpp ; +exe reverseintsort : reverseintsample.cpp ; +exe int64 : int64.cpp ; +exe floatsort : floatsample.cpp ; +exe shiftfloatsort : shiftfloatsample.cpp ; +exe floatfunctorsort : floatfunctorsample.cpp ; +exe double : double.cpp ; +exe stringsort : stringsample.cpp ; +exe wstringsort : wstringsample.cpp ; +exe reversestringsort : reversestringsample.cpp ; +exe charstringsort : charstringsample.cpp ; +exe stringfunctorsort : stringfunctorsample.cpp ; +exe reversestringfunctorsort : reversestringfunctorsample.cpp ; +exe keyplusdata : keyplusdatasample.cpp ; +exe randomgen : randomgen.cpp ; +exe boostrandomgen : boostrandomgen.cpp ; +exe alrbreaker : alrbreaker.cpp ; +exe binaryalrbreaker : binaryalrbreaker.cpp ; +exe caseinsensitive : caseinsensitive.cpp ; +exe generalizedstruct : generalizedstruct.cpp ; + +# benchmarks need to be built with linkflags="-lboost_system -lboost_thread" +#exe parallelint : parallelint.cpp boost_system ; +#exe parallelstring : parallelstring.cpp ; \ No newline at end of file diff --git a/LICENSE_1_0.txt b/LICENSE_1_0.txt new file mode 100644 index 0000000..1dad8e9 --- /dev/null +++ b/LICENSE_1_0.txt @@ -0,0 +1,23 @@ +Boost Software License - Version 1.0 - August 17th, 2003 + +Permission is hereby granted, free of charge, to any person or organization +obtaining a copy of the software and accompanying documentation covered by +this license (the "Software") to use, reproduce, display, distribute, +execute, and transmit the Software, and to prepare derivative works of the +Software, and to permit third-parties to whom the Software is furnished to +do so, all subject to the following: + +The copyright notices in the Software and this entire statement, including +the above license grant, this restriction and the following disclaimer, +must be included in all copies of the Software, in whole or in part, and +all derivative works of the Software, unless such copies or derivative +works are solely in the form of machine-executable object code generated by +a source language processor. + +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, TITLE AND NON-INFRINGEMENT. IN NO EVENT +SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE +FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. diff --git a/README.md b/README.md index c5dc8bd..80f65eb 100644 --- a/README.md +++ b/README.md @@ -1 +1,27 @@ -# sort +sort +==== + +Boost Sort library that includes spreadsort, a hybrid radix sort that is faster than O(n*log(n)) + +Replace "/" with "\" in paths below if you're using Windows. +To install, download boost, run bootstrap, and copy this library into /libs/sort. + +Run the unit tests from your boost root: +./b2 libs/sort/test + +Then go to /libs/sort and run tune.pl: +Then from the same directory verify correctness and speed on small data sets: +perl tune.pl -small [-windows] +(it needs the windows option to build for windows) +This tests sorting on many different distributions and data types, making sure the results are identical to std::sort and showing a speed comparison that is a weighted average across multiple data distributions. +If you're interested in more accurate speed comparisons, run the same command either without the -small option, or with the -large option instead. This will take substantially longer. + +Documentation is available from the index.html in this same directory, including a description of the algorithm, how to use it, and why it's faster. + +Finally, if you have an unusual computing system, you may want to use the -tune option to tune.pl, to tune the constants used by the library for your specific system. BEWARE that this will overwrite the default boost/sort/spreadsort/detail/constants.hpp provided by the library. Making a copy first is a good idea. Also note that it doesn't tune MAX_SPLITS, the most important parameter, because that should only be tuned with the -large option and it can overfit to the specific amount of data passed in. + +Feel free to contact spreadsort@gmail.com with any questions about this library. + +Copyright 2014-2015 Steven Ross +Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + diff --git a/doc/4_threaded.png b/doc/4_threaded.png new file mode 100644 index 0000000000000000000000000000000000000000..b06d324923fbd9c4f35492ee000601503b576fcf GIT binary patch literal 27991 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 literal 0 HcmV?d00001 diff --git a/doc/AutoDoxywarnings.log b/doc/AutoDoxywarnings.log new file mode 100644 index 0000000..e69de29 diff --git a/doc/Jamfile.v2 b/doc/Jamfile.v2 new file mode 100644 index 0000000..df68f37 --- /dev/null +++ b/doc/Jamfile.v2 @@ -0,0 +1,160 @@ +# Spreadsort documentation Jamfile +# Copyright (c) 2014 Steven Ross +# +# Distributed under the Boost Software License, +# Version 1.0. (See accompanying file LICENSE_1_0.txt +# or copy at http://boost.org/LICENSE_1_0.txt) + +# Reminder: whitespace MUST terminate variable name! +# so spaces or newlines BEFORE ; and : and AFTER too. +# (because : and ; are keywords!) + +import doxygen ; +import quickbook ; +import os ; # Needed to get environment variables. +import modules ; + +path-constant here : . ; # convenient to refer to files in the same directory as this jamfile.v2 +path-constant boost-images : ../../../doc/src/images ; +path-constant images_location : ./doc ; # location of SVG and PNG images referenced by Quickbook. +# http://docbook.sourceforge.net/release/xsl/1.77.1/doc/html/img.src.path.html +# relative to /doc ? + +path-constant parent : .. ; # Beman Dawes - so that inspect.exe will start in boost-root/libs/timer + # when run from another directory, such as boost-root/status +using auto-index ; +using doxygen ; # Required if you want to use Doxygen. +using quickbook ; +using boostbook ; + +if --enable-index in [ modules.peek : ARGV ] +{ + ECHO "Building the Spreadsort docs with automatic index generation enabled." ; + using auto-index ; + project sort_doc : requirements + on + sort.idx + . + on + html:on + html:generate.index=0 + pdf:on + pdf:index.on.type=1 + enable_index ; +} +else +{ + project sort_doc ; + ECHO "Building the Spreadsort docs with automatic index generation disabled. Try building with --enable-index." ; +} + +doxygen autodoc + : + [ glob $(here)/../include/boost/sort.hpp ] + [ glob $(here)/../include/boost/sort/spreadsort/*.hpp ] + # [ glob $(here)/../include/boost/sort/detail/spreadsort/*.hpp ] # Hide implementation/detail for now. + # but could also include this and switch Boost.Sort C++ reference info to include implementation/detail or not using Doxygen macro DETAIL. + # See http://www.stack.nl/~dimitri/doxygen/manual/commands.html#cmdcond + # and http://www.stack.nl/~dimitri/doxygen/manual/config.html#cfg_enabled_sections + # by adding this line below with other Doxygen parameters + # ENABLED_SECTIONS="DETAIL" + # Or setting this macro value ENABLED_SECTIONS="DETAIL" in /doxygen/sort_doxyfile.txt for Standalone Doxygen documentaation. + # This might be useful for maintainers. + + : + PROJECT_NAME="Sort" + RECURSIVE=NO + ENABLE_PREPROCESSING=YES + EXPAND_ONLY_PREDEF=YES + EXTRACT_ALL=NO + EXTRACT_PRIVATE=NO + HIDE_UNDOC_MEMBERS=YES + MACRO_EXPANSION=YES + SORT_MEMBER_DOCS=NO + SHOW_INCLUDE_FILES=NO + MAX_INITIALIZER_LINES=0 + VERBATIM_HEADERS=NO + WARNINGS=NO # If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings for undocumented members. + # If EXTRACT_ALL is set to YES then this flag will automatically be disabled. + WARN_IF_UNDOCUMENTED=NO # If WARN_IF_UNDOCUMENTED is set to YES, + # then doxygen will generate warnings for all undocumented members. + WARN_IF_DOC_ERROR=YES # If WARN_IF_DOC_ERROR is set to YES, Doxygen will generate warnings for + # potential errors in the documentation. + WARN_LOGFILE=AutoDoxywarnings.log # This may not be empty (usually not a good sign!), depending on options chosen. + # Much better to send message to a logfile than the default stderr. + # and make sure that there are no Doxygen errors or significant warnings in the log file. + + #"Reference" # Default is "Reference" but helpful to specify library. + "boost.doxygen.reftitle=Boost.Sort C++ Reference" + # See Doxygen configuration for detailed explanation of these options. + ; + +xml sort + : + sort.qbk # This is your 'root' Quickbook file (that may include other .qbk files). + ; + +boostbook standalone + : + sort + : + # http://www.sagehill.net/docbookxsl/SectionNumbering.html + boost.root=../../../.. # modular-boost + chapter.autolabel=0 # No Chapter numbering. + chunk.section.depth=8 + toc.section.depth=8 # How far down sections get TOCs. + toc.max.depth=4 # Max depth in each TOC. + generate.section.toc.level=1 + + + # PDF Options: + # TOC Generation: this is needed for FOP-0.9 and later: + fop1.extensions=0 + xep.extensions=1 + # TOC generation: this is needed for FOP 0.2, but must not be set to zero for FOP-0.9! + fop.extensions=1 + # No indent on body text: + body.start.indent=0pt + # Margin size: + page.margin.inner=0.5in + # Margin size: + page.margin.outer=0.5in + # Paper type = A4 + paper.type=A4 + # Yes, we want graphics for admonishments: + admon.graphics=1 + #html:img.src.path=$(images_location)/ + # Default works for html, need ./doc for PDF + # Set this one for PDF generation *only*: + # default png graphics are awful in PDF form, + # better use SVGs instead, if available: + + pdf:img.src.path=$(images_location)/ + pdf:admon.graphics.extension=".svg" + pdf:admon.graphics.path=$(boost-images)/ + + autodoc # + + ; + +install pdfinstall + : standalone + : . PDF sort.pdf + ; +explicit css ; +explicit images ; + +# This will run the inspect tool automatically from the doc folder +# but sadly seems to build the tool each time so is very slow. +# Also it produces lots of output from the original docs. +# So not very useful yet. + +# Run inspect tool. +# run /boost/tools/inspect//inspect/release +# : $(parent) -text -brief # command line +# : # input files +# : /boost/filesystem//boost_filesystem +# always_show_run_output # requirements +# : inspect # test name +# ; + diff --git a/doc/acknowledgments.html b/doc/acknowledgments.html new file mode 100644 index 0000000..6966f77 --- /dev/null +++ b/doc/acknowledgments.html @@ -0,0 +1,69 @@ + + + + + + + + + Boost Sort library - Acknowledgments + + + + + + + + + +
+

+

+
+

Boost Sort library

+ +

Acknowledgments

+
+ +
+Prev +Up +Home +Next +
+
+

The author would like to thank his wife Mary for her patience and support during the long + process of converting this from a piece of C code to a template library.

+

The author would also like to thank Phil Endecott and Frank Gennari + for the improvements they've suggested and for testing. + Without them this would have taken longer to develop or performed worse. +

float_mem_cast was fixed to be safe and fast thanks to Scott McMurray. +That fix was critical for a high-performance cross-platform float_sort. +

Thanks also for multiple helpful suggestions provided by Steven Watanabe, Edouard Alligand, + and others.

+
+
+Prev +Up +Home +Next +
+ +

Valid HTML 4.01 Transitional

+ +

Revised + 04 + December, 2006

+ +

Copyright © 2009 Steven Ross

+ +

Distributed under the Boost Software License, Version 1.0. (See + accompanying file LICENSE_1_0.txt or + copy at http://www.boost.org/LICENSE_1_0.txt)

+ + diff --git a/doc/autodoc.xml b/doc/autodoc.xml new file mode 100644 index 0000000..290f2ea --- /dev/null +++ b/doc/autodoc.xml @@ -0,0 +1,400 @@ + +Boost.Sort C++ Reference
+ + +Cast_typeconst Data_type &Casts a float to the specified integer type. +Example:struct rightshift { + int operator()(const DATA_TYPE &x, const unsigned offset) const { + return float_mem_cast<KEY_TYPE, CAST_TYPE>(x.key) >> offset; + } +}; + + +voidRandomAccessIterIterator pointer to first element. RandomAccessIterIterator pointing to one beyond the end of data.float_sort with casting to the appropriate size. + +Some performance plots of runtime vs. n and log(range) are provided: + windows_float_sort + osx_float_sortA simple example of sorting some floating-point is:vector<float> vec; +vec.push_back(1.0); +vec.push_back(2.3); +vec.push_back(1.3); +spreadsort(vec.begin(), vec.end()); + +The sorted vector contains ascending values "1.0 1.3 2.3". + +voidRandomAccessIterIterator pointer to first element. RandomAccessIterIterator pointing to one beyond the end of data. Right_shiftNumber of bits to right-shift (using functor). Floating-point sort algorithm using random access iterators with just right-shift functor. + + +voidRandomAccessIterIterator pointer to first element. RandomAccessIterIterator pointing to one beyond the end of data. Right_shiftNumber of bits to right-shift (using functor). Comparecomparison functor. Float sort algorithm using random access iterators with both right-shift and user-defined comparison operator. + + + + + + + + + + + + + + + + + +
+
+ + + + + + +voidRandomAccessIterIterator pointer to first element. RandomAccessIterIterator pointing to one beyond the end of data.Integer sort algorithm using random access iterators. (All variants fall back to std::sort if the data size is too small, < detail::min_sort_size). integer_sort is a fast templated in-place hybrid radix/comparison algorithm, which in testing tends to be roughly 50% to 2X faster than std::sort for large tests (>=100kB). +Worst-case performance is O(N * (lg(range)/s + s)) , so integer_sort is asymptotically faster than pure comparison-based algorithms. s is max_splits, which defaults to 11, so its worst-case with default settings for 32-bit integers is O(N * ((32/11) slow radix-based iterations fast comparison-based iterations). + +Some performance plots of runtime vs. n and log(range) are provided: + windows_integer_sort + osx_integer_sort + + + + + + + +Throwing an exception may cause data loss. This will also throw if a small vector resize throws, in which case there will be no data loss. +Invalid arguments cause undefined behaviour. +spreadsort function provides a wrapper that calls the fastest sorting algorithm available for a data type, enabling faster generic-programming. +The lesser of O(N*log(N)) comparisons and O(N*log(K/S + S)) operations worst-case, where: +* N is last - first, +* K is the log of the range in bits (32 for 32-bit integers using their full range), +* S is a constant called max_splits, defaulting to 11 (except for strings where it is the log of the character size). +[first, last) is a valid range. RandomAccessIter value_type is mutable. RandomAccessIter value_type is LessThanComparable RandomAccessIter value_type supports the operator>>, which returns an integer-type right-shifted a specified number of bits. The elements in the range [first, last) are sorted in ascending order.std::exception Propagates exceptions if any of the element comparisons, the element swaps (or moves), the right shift, subtraction of right-shifted elements, functors, or any operations on iterators throw. +voidRandomAccessIterIterator pointer to first element. RandomAccessIterIterator pointing to one beyond the end of data. Right_shiftNumber of bits to right-shift (using functor). Comparecomparison functor.Integer sort algorithm using random access iterators with both right-shift and user-defined comparison operator. (All variants fall back to std::sort if the data size is too small, < detail::min_sort_size). integer_sort is a fast templated in-place hybrid radix/comparison algorithm, which in testing tends to be roughly 50% to 2X faster than std::sort for large tests (>=100kB). +Worst-case performance is O(N * (lg(range)/s + s)) , so integer_sort is asymptotically faster than pure comparison-based algorithms. s is max_splits, which defaults to 11, so its worst-case with default settings for 32-bit integers is O(N * ((32/11) slow radix-based iterations fast comparison-based iterations). + +Some performance plots of runtime vs. n and log(range) are provided: + windows_integer_sort + osx_integer_sort + + + + + + + + +Throwing an exception may cause data loss. This will also throw if a small vector resize throws, in which case there will be no data loss. +Invalid arguments cause undefined behaviour. +spreadsort function provides a wrapper that calls the fastest sorting algorithm available for a data type, enabling faster generic-programming. +The lesser of O(N*log(N)) comparisons and O(N*log(K/S + S)) operations worst-case, where: +* N is last - first, +* K is the log of the range in bits (32 for 32-bit integers using their full range), +* S is a constant called max_splits, defaulting to 11 (except for strings where it is the log of the character size). +[first, last) is a valid range. RandomAccessIter value_type is mutable. RandomAccessIter value_type is LessThanComparable RandomAccessIter value_type supports the operator>>, which returns an integer-type right-shifted a specified number of bits. The elements in the range [first, last) are sorted in ascending order.void.std::exception Propagates exceptions if any of the element comparisons, the element swaps (or moves), the right shift, subtraction of right-shifted elements, functors, or any operations on iterators throw. +voidRandomAccessIterIterator pointer to first element. RandomAccessIterIterator pointing to one beyond the end of data. Right_shiftNumber of bits to right-shift (using functor).Integer sort algorithm using random access iterators with just right-shift functor. (All variants fall back to std::sort if the data size is too small, < detail::min_sort_size). integer_sort is a fast templated in-place hybrid radix/comparison algorithm, which in testing tends to be roughly 50% to 2X faster than std::sort for large tests (>=100kB). + Performance:Worst-case performance is O(N * (lg(range)/s + s)) , so integer_sort is asymptotically faster than pure comparison-based algorithms. s is max_splits, which defaults to 11, so its worst-case with default settings for 32-bit integers is O(N * ((32/11) slow radix-based iterations fast comparison-based iterations). + +Some performance plots of runtime vs. n and log(range) are provided: + windows_integer_sort + osx_integer_sort + + + + + + + + +Throwing an exception may cause data loss. This will also throw if a small vector resize throws, in which case there will be no data loss. +Invalid arguments cause undefined behaviour. +spreadsort function provides a wrapper that calls the fastest sorting algorithm available for a data type, enabling faster generic-programming. +The lesser of O(N*log(N)) comparisons and O(N*log(K/S + S)) operations worst-case, where: +* N is last - first, +* K is the log of the range in bits (32 for 32-bit integers using their full range), +* S is a constant called max_splits, defaulting to 11 (except for strings where it is the log of the character size). +[first, last) is a valid range. RandomAccessIter value_type is mutable. RandomAccessIter value_type is LessThanComparable RandomAccessIter value_type supports the operator>>, which returns an integer-type right-shifted a specified number of bits. The elements in the range [first, last) are sorted in ascending order.std::exception Propagates exceptions if any of the element comparisons, the element swaps (or moves), the right shift, subtraction of right-shifted elements, functors, or any operations on iterators throw. + + + + + + + + + + + + +
+
+ + + + + + + + + +boost::enable_if_c< std::numeric_limits< typename std::iterator_traits< RandomAccessIter >::value_type >::is_integer, void >::typeRandomAccessIterIterator pointer to first element. RandomAccessIterIterator pointing to one beyond the end of data.Generic spreadsort variant detecting integer-type elements so call to integer_sort. If the data type provided is an integer, integer_sort is used. Sorting other data types requires picking between integer_sort, float_sort and string_sort directly, as spreadsort won't accept types that don't have the appropriate type_traits. + + + + + + + +[first, last) is a valid range. RandomAccessIter value_type is mutable. RandomAccessIter value_type is LessThanComparable RandomAccessIter value_type supports the operator>>, which returns an integer-type right-shifted a specified number of bits. The elements in the range [first, last) are sorted in ascending order. +boost::enable_if_c< !std::numeric_limits< typename std::iterator_traits< RandomAccessIter >::value_type >::is_integer &&std::numeric_limits< typename std::iterator_traits< RandomAccessIter >::value_type >::is_iec559, void >::typeRandomAccessIterIterator pointer to first element. RandomAccessIterIterator pointing to one beyond the end of data.Generic spreadsort variant detecting float element type so call to float_sort. If the data type provided is a float or castable-float, float_sort is used. Sorting other data types requires picking between integer_sort, float_sort and string_sort directly, as spreadsort won't accept types that don't have the appropriate type_traits. + + + + + + + +[first, last) is a valid range. RandomAccessIter value_type is mutable. RandomAccessIter value_type is LessThanComparable RandomAccessIter value_type supports the operator>>, which returns an integer-type right-shifted a specified number of bits. The elements in the range [first, last) are sorted in ascending order. +boost::enable_if_c< is_same< typename std::iterator_traits< RandomAccessIter >::value_type, typename std::string >::value||is_same< typename std::iterator_traits< RandomAccessIter >::value_type, typename std::wstring >::value, void >::typeRandomAccessIterIterator pointer to first element. RandomAccessIterIterator pointing to one beyond the end of data.Generic spreadsort variant detecting string element type so call to string_sort for std::strings and std::wstrings. If the data type provided is a string or wstring, string_sort is used. Sorting other data types requires picking between integer_sort, float_sort and string_sort directly, as spreadsort won't accept types that don't have the appropriate type_traits. + + + + + + + +[first, last) is a valid range. RandomAccessIter value_type is mutable. RandomAccessIter value_type is LessThanComparable RandomAccessIter value_type supports the operator>>, which returns an integer-type right-shifted a specified number of bits. The elements in the range [first, last) are sorted in ascending order. + + + + + + + + + +
+
+ + + + + + + + + + + + +voidRandomAccessIterIterator pointer to first element. RandomAccessIterIterator pointing to one beyond the end of data. Unsigned_char_typeUnused ???String sort algorithm using random access iterators, allowing character-type overloads. + (All variants fall back to std::sort if the data size is too small, < detail::min_sort_size). string_sort is a fast templated in-place hybrid radix/comparison algorithm, which in testing tends to be roughly 50% to 2X faster than std::sort for large tests (>=100kB). +<para>Worst-case performance is <emphasis> O(N * (lg(range)/s + s)) </emphasis>, so <computeroutput>integer_sort</computeroutput> is asymptotically faster than pure comparison-based algorithms. <computeroutput>s</computeroutput> is <computeroutput>max_splits</computeroutput>, which defaults to 11, so its worst-case with default settings for 32-bit integers is <emphasis> O(N * ((32/11) </emphasis> slow radix-based iterations fast comparison-based iterations).<sbr/> +<sbr/> +Some performance plots of runtime vs. n and log(range) are provided:<sbr/> +<ulink url="../../doc/graph/windows_string_sort.htm">windows_string_sort</ulink><sbr/> +<ulink url="../../doc/graph/osx_string_sort.htm">osx_string_sort</ulink></para></formalpara> + + + + + + + + +<warning><para>Throwing an exception may cause data loss. This will also throw if a small vector resize throws, in which case there will be no data loss. </para></warning> +<warning><para>Invalid arguments cause undefined behaviour. </para></warning> +<note><para><computeroutput>spreadsort</computeroutput> function provides a wrapper that calls the fastest sorting algorithm available for a data type, enabling faster generic-programming.</para></note> +<para>The lesser of <emphasis> O(N*log(N)) </emphasis> comparisons and <emphasis> O(N*log(K/S + S)) </emphasis>operations worst-case, where: </para> +<para>* N is <computeroutput>last</computeroutput> - <computeroutput>first</computeroutput>, </para> +<para>* K is the log of the range in bits (32 for 32-bit integers using their full range), </para> +<para>* S is a constant called max_splits, defaulting to 11 (except for strings where it is the log of the character size). </para> +</para></description><requires><para>[<computeroutput>first</computeroutput>, <computeroutput>last</computeroutput>) is a valid range. </para></requires><requires><para><computeroutput>RandomAccessIter</computeroutput> <computeroutput>value_type</computeroutput> is mutable. </para></requires><requires><para><computeroutput>RandomAccessIter</computeroutput> <computeroutput>value_type</computeroutput> is <ulink url="http://en.cppreference.com/w/cpp/concept/LessThanComparable">LessThanComparable</ulink> </para></requires><requires><para><computeroutput>RandomAccessIter</computeroutput> <computeroutput>value_type</computeroutput> supports the <computeroutput>operator>></computeroutput>, which returns an integer-type right-shifted a specified number of bits. </para></requires><postconditions><para>The elements in the range [<computeroutput>first</computeroutput>, <computeroutput>last</computeroutput>) are sorted in ascending order.</para></postconditions><throws><simpara><classname>std::exception</classname> Propagates exceptions if any of the element comparisons, the element swaps (or moves), the right shift, subtraction of right-shifted elements, functors, or any operations on iterators throw.</simpara></throws></function> +<function name="string_sort"><type>void</type><template> + <template-type-parameter name="RandomAccessIter"><purpose><para><ulink url="http://www.cplusplus.com/reference/iterator/RandomAccessIterator/">Random access iterator</ulink> </para></purpose></template-type-parameter> + </template><parameter name="first"><paramtype>RandomAccessIter</paramtype><description><para>Iterator pointer to first element. </para></description></parameter><parameter name="last"><paramtype>RandomAccessIter</paramtype><description><para>Iterator pointing to one beyond the end of data.</para></description></parameter><purpose>String sort algorithm using random access iterators, wraps using default of unsigned char. (All variants fall back to <computeroutput>std::sort</computeroutput> if the data size is too small, < <computeroutput>detail::min_sort_size</computeroutput>). </purpose><description><para><computeroutput>string_sort</computeroutput> is a fast templated in-place hybrid radix/comparison algorithm, which in testing tends to be roughly 50% to 2X faster than <computeroutput>std::sort</computeroutput> for large tests (>=100kB).<sbr/> +Worst-case performance is <emphasis> O(N * (lg(range)/s + s)) </emphasis>, so <computeroutput>integer_sort</computeroutput> is asymptotically faster than pure comparison-based algorithms. <computeroutput>s</computeroutput> is <computeroutput>max_splits</computeroutput>, which defaults to 11, so its worst-case with default settings for 32-bit integers is <emphasis> O(N * ((32/11) </emphasis> slow radix-based iterations fast comparison-based iterations).<sbr/> +<sbr/> +Some performance plots of runtime vs. n and log(range) are provided:<sbr/> + <ulink url="../../doc/graph/windows_string_sort.htm">windows_string_sort</ulink> <sbr/> + <ulink url="../../doc/graph/osx_string_sort.htm">osx_string_sort</ulink></para><para> + + + + + + + +<warning><para>Throwing an exception may cause data loss. This will also throw if a small vector resize throws, in which case there will be no data loss. </para></warning> +<warning><para>Invalid arguments cause undefined behaviour. </para></warning> +<note><para><computeroutput>spreadsort</computeroutput> function provides a wrapper that calls the fastest sorting algorithm available for a data type, enabling faster generic-programming.</para></note> +<para>The lesser of <emphasis> O(N*log(N)) </emphasis> comparisons and <emphasis> O(N*log(K/S + S)) </emphasis>operations worst-case, where: </para> +<para>* N is <computeroutput>last</computeroutput> - <computeroutput>first</computeroutput>, </para> +<para>* K is the log of the range in bits (32 for 32-bit integers using their full range), </para> +<para>* S is a constant called max_splits, defaulting to 11 (except for strings where it is the log of the character size). </para> +</para></description><requires><para>[<computeroutput>first</computeroutput>, <computeroutput>last</computeroutput>) is a valid range. </para></requires><requires><para><computeroutput>RandomAccessIter</computeroutput> <computeroutput>value_type</computeroutput> is mutable. </para></requires><requires><para><computeroutput>RandomAccessIter</computeroutput> <computeroutput>value_type</computeroutput> is <ulink url="http://en.cppreference.com/w/cpp/concept/LessThanComparable">LessThanComparable</ulink> </para></requires><requires><para><computeroutput>RandomAccessIter</computeroutput> <computeroutput>value_type</computeroutput> supports the <computeroutput>operator>></computeroutput>, which returns an integer-type right-shifted a specified number of bits. </para></requires><postconditions><para>The elements in the range [<computeroutput>first</computeroutput>, <computeroutput>last</computeroutput>) are sorted in ascending order.</para></postconditions><throws><simpara><classname>std::exception</classname> Propagates exceptions if any of the element comparisons, the element swaps (or moves), the right shift, subtraction of right-shifted elements, functors, or any operations on iterators throw.</simpara></throws></function> +<function name="reverse_string_sort"><type>void</type><template> + <template-type-parameter name="RandomAccessIter"><purpose><para><ulink url="http://www.cplusplus.com/reference/iterator/RandomAccessIterator/">Random access iterator</ulink> </para></purpose></template-type-parameter> + <template-type-parameter name="Compare"/> + <template-type-parameter name="Unsigned_char_type"><purpose><para>Unsigned character type used for string.</para></purpose></template-type-parameter> + </template><parameter name="first"><paramtype>RandomAccessIter</paramtype><description><para>Iterator pointer to first element. </para></description></parameter><parameter name="last"><paramtype>RandomAccessIter</paramtype><description><para>Iterator pointing to one beyond the end of data. </para></description></parameter><parameter name="comp"><paramtype>Compare</paramtype><description><para>comparison functor. </para></description></parameter><parameter name="unused"><paramtype>Unsigned_char_type</paramtype><description><para>Unused ???</para></description></parameter><purpose>String sort algorithm using random access iterators, allowing character-type overloads. </purpose><description><para>(All variants fall back to <computeroutput>std::sort</computeroutput> if the data size is too small, < detail::min_sort_size).</para><para><computeroutput>integer_sort</computeroutput> is a fast templated in-place hybrid radix/comparison algorithm, which in testing tends to be roughly 50% to 2X faster than <computeroutput>std::sort</computeroutput> for large tests (>=100kB).<sbr/> +Worst-case performance is <emphasis> O(N * (lg(range)/s + s)) </emphasis>, so <computeroutput>integer_sort</computeroutput> is asymptotically faster than pure comparison-based algorithms. <computeroutput>s</computeroutput> is <computeroutput>max_splits</computeroutput>, which defaults to 11, so its worst-case with default settings for 32-bit integers is <emphasis> O(N * ((32/11) </emphasis> slow radix-based iterations fast comparison-based iterations).<sbr/> +<sbr/> +Some performance plots of runtime vs. n and log(range) are provided:<sbr/> + <ulink url="../../doc/graph/windows_integer_sort.htm">windows_integer_sort</ulink> <sbr/> + <ulink url="../../doc/graph/osx_integer_sort.htm">osx_integer_sort</ulink></para><para> + + + + + + + + +<warning><para>Throwing an exception may cause data loss. This will also throw if a small vector resize throws, in which case there will be no data loss. </para></warning> +<warning><para>Invalid arguments cause undefined behaviour. </para></warning> +<note><para><computeroutput>spreadsort</computeroutput> function provides a wrapper that calls the fastest sorting algorithm available for a data type, enabling faster generic-programming.</para></note> +<para>The lesser of <emphasis> O(N*log(N)) </emphasis> comparisons and <emphasis> O(N*log(K/S + S)) </emphasis>operations worst-case, where: </para> +<para>* N is <computeroutput>last</computeroutput> - <computeroutput>first</computeroutput>, </para> +<para>* K is the log of the range in bits (32 for 32-bit integers using their full range), </para> +<para>* S is a constant called max_splits, defaulting to 11 (except for strings where it is the log of the character size). </para> +</para></description><requires><para>[<computeroutput>first</computeroutput>, <computeroutput>last</computeroutput>) is a valid range. </para></requires><requires><para><computeroutput>RandomAccessIter</computeroutput> <computeroutput>value_type</computeroutput> is mutable. </para></requires><requires><para><computeroutput>RandomAccessIter</computeroutput> <computeroutput>value_type</computeroutput> is <ulink url="http://en.cppreference.com/w/cpp/concept/LessThanComparable">LessThanComparable</ulink> </para></requires><requires><para><computeroutput>RandomAccessIter</computeroutput> <computeroutput>value_type</computeroutput> supports the <computeroutput>operator>></computeroutput>, which returns an integer-type right-shifted a specified number of bits. </para></requires><postconditions><para>The elements in the range [<computeroutput>first</computeroutput>, <computeroutput>last</computeroutput>) are sorted in ascending order.</para></postconditions><returns><para><computeroutput>void</computeroutput>.</para></returns><throws><simpara><classname>std::exception</classname> Propagates exceptions if any of the element comparisons, the element swaps (or moves), the right shift, subtraction of right-shifted elements, functors, or any operations on iterators throw.</simpara></throws></function> +<function name="reverse_string_sort"><type>void</type><template> + <template-type-parameter name="RandomAccessIter"><purpose><para><ulink url="http://www.cplusplus.com/reference/iterator/RandomAccessIterator/">Random access iterator</ulink> </para></purpose></template-type-parameter> + <template-type-parameter name="Compare"/> + </template><parameter name="first"><paramtype>RandomAccessIter</paramtype><description><para>Iterator pointer to first element. </para></description></parameter><parameter name="last"><paramtype>RandomAccessIter</paramtype><description><para>Iterator pointing to one beyond the end of data. </para></description></parameter><parameter name="comp"><paramtype>Compare</paramtype><description><para>Comparison functor.</para></description></parameter><purpose>String sort algorithm using random access iterators, wraps using default of <computeroutput>unsigned</computeroutput> char. </purpose><description><para>(All variants fall back to <computeroutput>std::sort</computeroutput> if the data size is too small, < <computeroutput>detail::min_sort_size</computeroutput>).</para><para><computeroutput>integer_sort</computeroutput> is a fast templated in-place hybrid radix/comparison algorithm, which in testing tends to be roughly 50% to 2X faster than <computeroutput>std::sort</computeroutput> for large tests (>=100kB).<sbr/> +Worst-case performance is <emphasis> O(N * (lg(range)/s + s)) </emphasis>, so <computeroutput>integer_sort</computeroutput> is asymptotically faster than pure comparison-based algorithms. <computeroutput>s</computeroutput> is <computeroutput>max_splits</computeroutput>, which defaults to 11, so its worst-case with default settings for 32-bit integers is <emphasis> O(N * ((32/11) </emphasis> slow radix-based iterations fast comparison-based iterations).<sbr/> +<sbr/> +Some performance plots of runtime vs. n and log(range) are provided:<sbr/> + <ulink url="../../doc/graph/windows_integer_sort.htm">windows_integer_sort</ulink> <sbr/> + <ulink url="../../doc/graph/osx_integer_sort.htm">osx_integer_sort</ulink></para><para> + + + + + + + + +<warning><para>Throwing an exception may cause data loss. This will also throw if a small vector resize throws, in which case there will be no data loss. </para></warning> +<warning><para>Invalid arguments cause undefined behaviour. </para></warning> +<note><para><computeroutput>spreadsort</computeroutput> function provides a wrapper that calls the fastest sorting algorithm available for a data type, enabling faster generic-programming.</para></note> +<para>The lesser of <emphasis> O(N*log(N)) </emphasis> comparisons and <emphasis> O(N*log(K/S + S)) </emphasis>operations worst-case, where: </para> +<para>* N is <computeroutput>last</computeroutput> - <computeroutput>first</computeroutput>, </para> +<para>* K is the log of the range in bits (32 for 32-bit integers using their full range), </para> +<para>* S is a constant called max_splits, defaulting to 11 (except for strings where it is the log of the character size). </para> +</para></description><requires><para>[<computeroutput>first</computeroutput>, <computeroutput>last</computeroutput>) is a valid range. </para></requires><requires><para><computeroutput>RandomAccessIter</computeroutput> <computeroutput>value_type</computeroutput> is mutable. </para></requires><requires><para><computeroutput>RandomAccessIter</computeroutput> <computeroutput>value_type</computeroutput> is <ulink url="http://en.cppreference.com/w/cpp/concept/LessThanComparable">LessThanComparable</ulink> </para></requires><requires><para><computeroutput>RandomAccessIter</computeroutput> <computeroutput>value_type</computeroutput> supports the <computeroutput>operator>></computeroutput>, which returns an integer-type right-shifted a specified number of bits. </para></requires><postconditions><para>The elements in the range [<computeroutput>first</computeroutput>, <computeroutput>last</computeroutput>) are sorted in ascending order.</para></postconditions><returns><para><computeroutput>void</computeroutput>.</para></returns><throws><simpara><classname>std::exception</classname> Propagates exceptions if any of the element comparisons, the element swaps (or moves), the right shift, subtraction of right-shifted elements, functors, or any operations on iterators throw.</simpara></throws></function> +<function name="string_sort"><type>void</type><template> + <template-type-parameter name="RandomAccessIter"><purpose><para><ulink url="http://www.cplusplus.com/reference/iterator/RandomAccessIterator/">Random access iterator</ulink> </para></purpose></template-type-parameter> + <template-type-parameter name="Get_char"><purpose><para>Bracket functor equivalent to <computeroutput>operator</computeroutput>[], taking a number corresponding to the character offset.. </para></purpose></template-type-parameter> + <template-type-parameter name="Get_length"><purpose><para>Functor to get the length of the string in characters. TODO Check this and below and other places!!!</para></purpose></template-type-parameter> + </template><parameter name="first"><paramtype>RandomAccessIter</paramtype><description><para>Iterator pointer to first element. </para></description></parameter><parameter name="last"><paramtype>RandomAccessIter</paramtype><description><para>Iterator pointing to one beyond the end of data. </para></description></parameter><parameter name="getchar"><paramtype>Get_char</paramtype><description><para>Number corresponding to the character offset from bracket functor equivalent to <computeroutput>operator</computeroutput>[]. </para></description></parameter><parameter name="length"><paramtype>Get_length</paramtype><description><para>Functor to get the length of the string in characters.</para></description></parameter><purpose>String sort algorithm using random access iterators, wraps using default of <computeroutput>unsigned</computeroutput> char. </purpose><description><para>(All variants fall back to <computeroutput>std::sort</computeroutput> if the data size is too small, < <computeroutput>detail::min_sort_size</computeroutput>).</para><para><computeroutput>integer_sort</computeroutput> is a fast templated in-place hybrid radix/comparison algorithm, which in testing tends to be roughly 50% to 2X faster than <computeroutput>std::sort</computeroutput> for large tests (>=100kB).<sbr/> +Worst-case performance is <emphasis> O(N * (lg(range)/s + s)) </emphasis>, so <computeroutput>integer_sort</computeroutput> is asymptotically faster than pure comparison-based algorithms. <computeroutput>s</computeroutput> is <computeroutput>max_splits</computeroutput>, which defaults to 11, so its worst-case with default settings for 32-bit integers is <emphasis> O(N * ((32/11) </emphasis> slow radix-based iterations fast comparison-based iterations).<sbr/> +<sbr/> +Some performance plots of runtime vs. n and log(range) are provided:<sbr/> + <ulink url="../../doc/graph/windows_integer_sort.htm">windows_integer_sort</ulink> <sbr/> + <ulink url="../../doc/graph/osx_integer_sort.htm">osx_integer_sort</ulink></para><para> + + + + + + + + +<warning><para>Throwing an exception may cause data loss. This will also throw if a small vector resize throws, in which case there will be no data loss. </para></warning> +<warning><para>Invalid arguments cause undefined behaviour. </para></warning> +<note><para><computeroutput>spreadsort</computeroutput> function provides a wrapper that calls the fastest sorting algorithm available for a data type, enabling faster generic-programming.</para></note> +<para>The lesser of <emphasis> O(N*log(N)) </emphasis> comparisons and <emphasis> O(N*log(K/S + S)) </emphasis>operations worst-case, where: </para> +<para>* N is <computeroutput>last</computeroutput> - <computeroutput>first</computeroutput>, </para> +<para>* K is the log of the range in bits (32 for 32-bit integers using their full range), </para> +<para>* S is a constant called max_splits, defaulting to 11 (except for strings where it is the log of the character size). </para> +</para></description><requires><para>[<computeroutput>first</computeroutput>, <computeroutput>last</computeroutput>) is a valid range. </para></requires><requires><para><computeroutput>RandomAccessIter</computeroutput> <computeroutput>value_type</computeroutput> is mutable. </para></requires><requires><para><computeroutput>RandomAccessIter</computeroutput> <computeroutput>value_type</computeroutput> is <ulink url="http://en.cppreference.com/w/cpp/concept/LessThanComparable">LessThanComparable</ulink> </para></requires><requires><para><computeroutput>RandomAccessIter</computeroutput> <computeroutput>value_type</computeroutput> supports the <computeroutput>operator>></computeroutput>, which returns an integer-type right-shifted a specified number of bits. </para></requires><postconditions><para>The elements in the range [<computeroutput>first</computeroutput>, <computeroutput>last</computeroutput>) are sorted in ascending order.</para></postconditions><returns><para><computeroutput>void</computeroutput>.</para></returns><throws><simpara><classname>std::exception</classname> Propagates exceptions if any of the element comparisons, the element swaps (or moves), the right shift, subtraction of right-shifted elements, functors, or any operations on iterators throw.</simpara></throws></function> +<function name="string_sort"><type>void</type><template> + <template-type-parameter name="RandomAccessIter"><purpose><para><ulink url="http://www.cplusplus.com/reference/iterator/RandomAccessIterator/">Random access iterator</ulink> </para></purpose></template-type-parameter> + <template-type-parameter name="Get_char"><purpose><para>???. </para></purpose></template-type-parameter> + <template-type-parameter name="Get_length"><purpose><para>??? TODO </para></purpose></template-type-parameter> + <template-type-parameter name="Compare"/> + </template><parameter name="first"><paramtype>RandomAccessIter</paramtype><description><para>Iterator pointer to first element. </para></description></parameter><parameter name="last"><paramtype>RandomAccessIter</paramtype><description><para>Iterator pointing to one beyond the end of data. </para></description></parameter><parameter name="getchar"><paramtype>Get_char</paramtype><description><para>??? </para></description></parameter><parameter name="length"><paramtype>Get_length</paramtype><description><para>???</para></description></parameter><parameter name="comp"><paramtype>Compare</paramtype><description><para>comparison functor. </para></description></parameter><purpose>String sort algorithm using random access iterators, wraps using default of <computeroutput>unsigned</computeroutput> char. </purpose><description><para>(All variants fall back to <computeroutput>std::sort</computeroutput> if the data size is too small, < <computeroutput>detail::min_sort_size</computeroutput>).</para><para><computeroutput>integer_sort</computeroutput> is a fast templated in-place hybrid radix/comparison algorithm, which in testing tends to be roughly 50% to 2X faster than <computeroutput>std::sort</computeroutput> for large tests (>=100kB).<sbr/> +Worst-case performance is <emphasis> O(N * (lg(range)/s + s)) </emphasis>, so <computeroutput>integer_sort</computeroutput> is asymptotically faster than pure comparison-based algorithms. <computeroutput>s</computeroutput> is <computeroutput>max_splits</computeroutput>, which defaults to 11, so its worst-case with default settings for 32-bit integers is <emphasis> O(N * ((32/11) </emphasis> slow radix-based iterations fast comparison-based iterations).<sbr/> +<sbr/> +Some performance plots of runtime vs. n and log(range) are provided:<sbr/> + <ulink url="../../doc/graph/windows_integer_sort.htm">windows_integer_sort</ulink> <sbr/> + <ulink url="../../doc/graph/osx_integer_sort.htm">osx_integer_sort</ulink></para><para> + + + + + + + +<warning><para>Throwing an exception may cause data loss. This will also throw if a small vector resize throws, in which case there will be no data loss. </para></warning> +<warning><para>Invalid arguments cause undefined behaviour. </para></warning> +<note><para><computeroutput>spreadsort</computeroutput> function provides a wrapper that calls the fastest sorting algorithm available for a data type, enabling faster generic-programming.</para></note> +<para>The lesser of <emphasis> O(N*log(N)) </emphasis> comparisons and <emphasis> O(N*log(K/S + S)) </emphasis>operations worst-case, where: </para> +<para>* N is <computeroutput>last</computeroutput> - <computeroutput>first</computeroutput>, </para> +<para>* K is the log of the range in bits (32 for 32-bit integers using their full range), </para> +<para>* S is a constant called max_splits, defaulting to 11 (except for strings where it is the log of the character size). </para> +</para></description><requires><para>[<computeroutput>first</computeroutput>, <computeroutput>last</computeroutput>) is a valid range. </para></requires><requires><para><computeroutput>RandomAccessIter</computeroutput> <computeroutput>value_type</computeroutput> is mutable. </para></requires><requires><para><computeroutput>RandomAccessIter</computeroutput> <computeroutput>value_type</computeroutput> is <ulink url="http://en.cppreference.com/w/cpp/concept/LessThanComparable">LessThanComparable</ulink> </para></requires><postconditions><para>The elements in the range [<computeroutput>first</computeroutput>, <computeroutput>last</computeroutput>) are sorted in ascending order.</para></postconditions><returns><para><computeroutput>void</computeroutput>.</para></returns><throws><simpara><classname>std::exception</classname> Propagates exceptions if any of the element comparisons, the element swaps (or moves), the right shift, subtraction of right-shifted elements, functors, or any operations on iterators throw.</simpara></throws></function> +<function name="reverse_string_sort"><type>void</type><template> + <template-type-parameter name="RandomAccessIter"><purpose><para><ulink url="http://www.cplusplus.com/reference/iterator/RandomAccessIterator/">Random access iterator</ulink> </para></purpose></template-type-parameter> + <template-type-parameter name="Get_char"><purpose><para>???. </para></purpose></template-type-parameter> + <template-type-parameter name="Get_length"><purpose><para>??? TODO </para></purpose></template-type-parameter> + <template-type-parameter name="Compare"/> + </template><parameter name="first"><paramtype>RandomAccessIter</paramtype><description><para>Iterator pointer to first element. </para></description></parameter><parameter name="last"><paramtype>RandomAccessIter</paramtype><description><para>Iterator pointing to one beyond the end of data. </para></description></parameter><parameter name="getchar"><paramtype>Get_char</paramtype><description><para>??? </para></description></parameter><parameter name="length"><paramtype>Get_length</paramtype><description><para>???</para></description></parameter><parameter name="comp"><paramtype>Compare</paramtype><description><para>comparison functor. </para></description></parameter><purpose>Reverse String sort algorithm using random access iterators. </purpose><description><para>(All variants fall back to <computeroutput>std::sort</computeroutput> if the data size is too small, < <computeroutput>detail::min_sort_size</computeroutput>).</para><para><computeroutput>integer_sort</computeroutput> is a fast templated in-place hybrid radix/comparison algorithm, which in testing tends to be roughly 50% to 2X faster than <computeroutput>std::sort</computeroutput> for large tests (>=100kB).<sbr/> +Worst-case performance is <emphasis> O(N * (lg(range)/s + s)) </emphasis>, so <computeroutput>integer_sort</computeroutput> is asymptotically faster than pure comparison-based algorithms. <computeroutput>s</computeroutput> is <computeroutput>max_splits</computeroutput>, which defaults to 11, so its worst-case with default settings for 32-bit integers is <emphasis> O(N * ((32/11) </emphasis> slow radix-based iterations fast comparison-based iterations).<sbr/> +<sbr/> +Some performance plots of runtime vs. n and log(range) are provided:<sbr/> + <ulink url="../../doc/graph/windows_integer_sort.htm">windows_integer_sort</ulink> <sbr/> + <ulink url="../../doc/graph/osx_integer_sort.htm">osx_integer_sort</ulink></para><para> + + + + + + + +<warning><para>Throwing an exception may cause data loss. This will also throw if a small vector resize throws, in which case there will be no data loss. </para></warning> +<warning><para>Invalid arguments cause undefined behaviour. </para></warning> +<note><para><computeroutput>spreadsort</computeroutput> function provides a wrapper that calls the fastest sorting algorithm available for a data type, enabling faster generic-programming.</para></note> +<para>The lesser of <emphasis> O(N*log(N)) </emphasis> comparisons and <emphasis> O(N*log(K/S + S)) </emphasis>operations worst-case, where: </para> +<para>* N is <computeroutput>last</computeroutput> - <computeroutput>first</computeroutput>, </para> +<para>* K is the log of the range in bits (32 for 32-bit integers using their full range), </para> +<para>* S is a constant called max_splits, defaulting to 11 (except for strings where it is the log of the character size). </para> +</para></description><requires><para>[<computeroutput>first</computeroutput>, <computeroutput>last</computeroutput>) is a valid range. </para></requires><requires><para><computeroutput>RandomAccessIter</computeroutput> <computeroutput>value_type</computeroutput> is mutable. </para></requires><requires><para><computeroutput>RandomAccessIter</computeroutput> <computeroutput>value_type</computeroutput> is <ulink url="http://en.cppreference.com/w/cpp/concept/LessThanComparable">LessThanComparable</ulink> </para></requires><postconditions><para>The elements in the range [<computeroutput>first</computeroutput>, <computeroutput>last</computeroutput>) are sorted in ascending order.</para></postconditions><returns><para><computeroutput>void</computeroutput>.</para></returns><throws><simpara><classname>std::exception</classname> Propagates exceptions if any of the element comparisons, the element swaps (or moves), the right shift, subtraction of right-shifted elements, functors, or any operations on iterators throw.</simpara></throws></function> +</namespace> +</namespace> +</header> +</library-reference> diff --git a/doc/bibliography.html b/doc/bibliography.html new file mode 100644 index 0000000..3182bcd --- /dev/null +++ b/doc/bibliography.html @@ -0,0 +1,76 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html> +<head> + <meta http-equiv="Content-Language" content="en-us"> + <meta http-equiv="Content-Type" content="text/html; charset=us-ascii"> + <link rel="stylesheet" type="text/css" href="../../../boost.css"> + + <title>Boost Sort library - Bibliography + + + + + + + + + +
+

+

+
+

Boost Sort library

+ +

Bibliography

+
+
+Prev +Up +Home +
+
+

Radix Sort

+

A type of algorithm that sorts based upon distribution instead of by comparison. Wikipedia has an article about Radix Sorting. + A more detailed description of various Radix Sorting algorithms is provided here:

+

Donald Knuth. The Art of Computer Programming, Volume 3: Sorting and Searching, + Second Edition. Addison-Wesley, 1998. ISBN 0-201-89685-0. + Section 5.2.5: Sorting by Distribution, pp.168-179.

+

Introsort

+

A high-speed comparison-based sorting algorithm that takes O(N * log(N)) time. + paper

+

American Flag Sort

+

A high-speed hybrid string sorting algorithm that string_sort is partially based upon. + paper

+

Adaptive Left Radix

+

A hybrid cache-friendly integer sorting algorithm with comparable speed on random data + to integer_sort, but does not have the optimizations for worst-case performance, + causing it to perform poorly on certain types of unevenly distributed data. + paper

+

Original Spreadsort

+

The algorithm that integer_sort was originally based on. integer_sort uses a smaller number of key bits at a time for better cache efficiency than the method described in the paper. The importance of cache efficiency grew as CPU clock speeds increased while main memory latency stagnated.

+
+
+Prev +Up +Home +
+ +

Valid HTML 4.01 Transitional

+ +

Revised + 04 + December, 2006

+ +

Copyright © 2009 Steven Ross

+ +

Distributed under the Boost Software License, Version 1.0. (See + accompanying file LICENSE_1_0.txt or + copy at http://www.boost.org/LICENSE_1_0.txt)

+ + diff --git a/doc/bits_per_byte.png b/doc/bits_per_byte.png new file mode 100644 index 0000000000000000000000000000000000000000..9106e3b7a71cd69d53259ab6e63538ccb37da8a6 GIT binary patch literal 23496 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 TxGj`{fq}u()z4*}Q$iB}iTgX~ literal 0 HcmV?d00001 diff --git a/doc/constants.html b/doc/constants.html new file mode 100644 index 0000000..ed1d6cf --- /dev/null +++ b/doc/constants.html @@ -0,0 +1,152 @@ + + + + + + + + + Boost Sort library - Header <boost/sort/spreadsort/sort.hpp> + + + + + + + + + +
+

+

+
+

Boost Sort library

+ +

Header <boost/sort/spreadsort/constants.hpp>

+
+ +
+Prev +Up +Home +Next +
+
+ +

Contents

+ +
+
Introduction
+ +
Constant Values
+
+
+
max_splits
+
max_finishing_splits
+
min_sort_size
+
int_log_mean_bin_size
+
int_log_min_split_count
+
int_log_finishing_count
+
float_log_mean_bin_size
+
float_log_min_split_count
+
float_log_finishing_count
+
+
+
+
+ +

Introduction

+

These are a set of constants in boost::detail that are only used to tune + integer_sort and float_sort. + They are described here because in some situations developers may wish to modify them + to improve performance. Default settings should be good enough for most systems; + modification without a thorough understanding of what they do is not recommended.

+

Constant Values

+
max_splits
+
max_finishing_splits
+
min_sort_size
+
int_log_mean_bin_size
+
int_log_min_split_count
+
int_log_finishing_count
+
float_log_mean_bin_size
+
float_log_min_split_count
+
float_log_finishing_count
+
max_splits: +
enum { max_splits = 11 };
+
Description: log base 2 of the maximum number of pieces the data is split into per iteration. + Usually best between 10 and 13. + This number is used for both floats and integers, + and should correspond to the minimum L1 cache size this software will run on.
+
max_finishing_splits: +
enum { max_finishing_splits = max_splits + 1 };
+
Description: log of the maximum number of pieces the data is split into if it can + complete sorting in one iteration, once radix sorting has already been decided upon. + This is a special optimization, and is usually best as max_splits + 1. + This is used because the occasional cache miss to finish sorting is less expensive + in runtime than running another iteration.
+
min_sort_size: +
enum { min_sort_size = 3000 };
+
Description: std::sort is automatically used on input vectors smaller than this size for all algorithms described here, + skipping radix sorting entirely. Due to overhead, radix sorting shouldn't be used on small + vectors. This should be the point at which + hybrid sorting becomes faster than comparison-based sorting. + 3000 is a good value.
+
int_log_mean_bin_size: +
enum { int_log_mean_bin_size = 2 };
+
Description: The log of the minimum mean number of items per bin in integer_sort. + 2-4 are good values.
+
int_log_min_split_count: +
enum { int_log_min_split_count = 9 };
+
Description: This plus the int_log_mean_bin_size plus the maximum number of remaining + radix iterations is the log of the minimum number of elements to recurse with integer_sort. + Otherwise std::sort is used. + The faster std::sort is with small vectors relative to integer_sort, the larger this number + should be. 6 to max_splits are good values. + This value cannot exceed max_splits.
+
int_log_finishing_count: +
enum { int_log_finishing_count = 31 };
+
Description: The log of the threshold minimum data size to force radix sorting, + if sorting will complete in one iteration. + Defaults to 31, which means that this special-case is not applied.
+
float_log_mean_bin_size: +
enum { int_log_mean_bin_size = 2 };
+
Description: The log of the minimum mean number of items per bin in float_sort. + 2 is a good value.
+
float_log_min_split_count: +
enum { int_log_min_split_count = 8 };
+
Description: This plus the float_log_mean_bin_size plus the maximum number of remaining + radix iterations is the log of the minimum number of elements to recurse with float_sort. + Otherwise std::sort is used. + The faster std::sort is with small vectors relative to float_sort, the larger this number + should be. 4 to max_splits are good values. + This value cannot exceed max_splits.
+
float_log_finishing_count: +
enum { int_log_finishing_count = 4 };
+
Description: The log of the threshold minimum data size to force radix sorting, + if sorting will complete in one iteration. 4 is a good value.
+
+
+Prev +Up +Home +Next +
+ +

Valid HTML 4.01 Transitional

+ +

Revised + 04 + December, 2006

+ +

Copyright © 2009 Steven Ross

+ +

Distributed under the Boost Software License, Version 1.0. (See + accompanying file LICENSE_1_0.txt or + copy at http://www.boost.org/LICENSE_1_0.txt)

+ + diff --git a/doc/definitions.html b/doc/definitions.html new file mode 100644 index 0000000..a185718 --- /dev/null +++ b/doc/definitions.html @@ -0,0 +1,91 @@ + + + + + + + + + Boost Sort library - Definitions + + + + + + + + + +
+

+

+
+

Boost Sort library

+ +

Definitions

+
+ +
+Prev +Up +Home +Next +
+
+ +

Contents

+ +
+
Introduction
+ +
Definitions
+ +
+
+
stable sort
+
+
+
+
+ +

Introduction

+ +

Definitions of terms

+ +

Definitions

+ +
+
stable sort: + A sorting approach that preserves pre-existing order. + If there are two elements with identical keys + in a list that is later stably sorted, + whichever came first in the initial list will come first in a stably sorted list. + The algorithms provided here provide no such guarantee; items with identical keys + will have arbitrary resulting order relative to each other.
+
+
+
+Prev +Up +Home +Next +
+ +

Valid HTML 4.01 Transitional

+ +

Revised + 04 + December, 2006

+ +

Copyright © 2009 Steven Ross

+ +

Distributed under the Boost Software License, Version 1.0. (See + accompanying file LICENSE_1_0.txt or + copy at http://www.boost.org/LICENSE_1_0.txt)

+ + diff --git a/doc/doxygen/boost-no-inspect b/doc/doxygen/boost-no-inspect new file mode 100644 index 0000000..e69de29 diff --git a/doc/doxygen/doxywarnings.log b/doc/doxygen/doxywarnings.log new file mode 100644 index 0000000..e69de29 diff --git a/doc/doxygen/html/_2example_2sample_8cpp-example.html b/doc/doxygen/html/_2example_2sample_8cpp-example.html new file mode 100644 index 0000000..2e595f1 --- /dev/null +++ b/doc/doxygen/html/_2example_2sample_8cpp-example.html @@ -0,0 +1,136 @@ + + + + + + +Boost.Sort: /example/sample.cpp + + + + + + + + + + +
+
+ + + + + + +
+
Boost.Sort +
+
+
+ + + + +
+ +
+
+ + +
+ +
+ +
+
+
/example/sample.cpp
+
+
+

Integer sort algorithm using random access iterators. All variants fall back to std::sort if the data is too small.integer_sort is a fast templated in-place hybrid radix/comparison algorithm, which in testing tends to be roughly 50% to 2X faster than std::sort for large tests (>=100kB).
+Worst-case performance is O(N * (lg(range)/s + s)) , so integer_sort is asymptotically faster than pure comparison-based algorithms. s is max_splits, which defaults to 11, so its worst-case with default settings for 32-bit integers is O(N * ((32/11) slow radix-based iterations fast comparison-based iterations).
+
+Some performance plots of runtime vs. n and log(range) are provided:
+ windows_integer_sort
+ osx_integer_sort

+
Template Parameters
+ + +
RandomAccessIterRandom access iterator
+
+
+
Parameters
+ + + +
[in]firstIterator pointer to first element.
[in]lastIterator pointing to one beyond the end of data.
+
+
+
Precondition
[first, last) is a valid range.
+
+RandomAccessIter value_type is mutable.
+
+RandomAccessIter value_type is LessThanComparable
+
+RandomAccessIter value_type supports the operator>>, which returns an integer-type right-shifted a specified number of bits.
+
Postcondition
The elements in the range [first, last) are sorted in ascending order.
+
Returns
void.
+
Exceptions
+ + +
Propagatesexceptions if any of the element comparisons, the element swaps (or moves), the right shift, subtraction of right-shifted elements, functors, or any operations on iterators throw.
+
+
+
Warning
Throwing an exception may cause data loss. This will also throw if a small vector resize throws, in which case there will be no data loss.
+
+Invalid arguments cause undefined behaviour.
+
Note
spreadsort function provides a wrapper that calls the fastest sorting algorithm available for a data type, enabling faster generic-programming.
+
Remarks
The lesser of O(N*log(N)) comparisons and O(N*log(K/S + S)) operations worst-case, where:
+
+* N is last - first,
+
+* K is the log of the range in bits (32 for 32-bit integers using their full range),
+
+* S is a constant called max_splits, defaulting to 11 (except for strings where it is the log of the character size).
+
+ + + + diff --git a/doc/doxygen/html/alrbreaker_8cpp.html b/doc/doxygen/html/alrbreaker_8cpp.html new file mode 100644 index 0000000..bdcae38 --- /dev/null +++ b/doc/doxygen/html/alrbreaker_8cpp.html @@ -0,0 +1,290 @@ + + + + + + +Boost.Sort: I:/modular-boost/libs/sort/example/alrbreaker.cpp File Reference + + + + + + + + + + +
+
+ + + + + + +
+
Boost.Sort +
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
alrbreaker.cpp File Reference
+
+
+
#include <boost/sort/spreadsort/spreadsort.hpp>
+#include <time.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <algorithm>
+#include <vector>
+#include <string>
+#include <fstream>
+#include <sstream>
+#include <iostream>
+
+ + + + + +

+Macros

#define DATA_TYPE   boost::uint64_t
 
#define ALR_THRESHOLD   3
 
+ + + + + +

+Functions

void fill_vector (vector< DATA_TYPE > &input, const DATA_TYPE base_value, unsigned remaining_bits)
 
int main (int, const char **)
 
+ + + + + + + + + + + +

+Variables

const unsigned max_count = ALR_THRESHOLD - 1
 
const unsigned bit_shift
 
const unsigned radix_threshold = detail::rough_log_2_size(max_count) + 1
 
const unsigned top_splits = 12
 
const DATA_TYPE typed_one = 1
 
+

Macro Definition Documentation

+ +
+
+ + + + +
#define ALR_THRESHOLD   3
+
+ +
+
+ +
+
+ + + + +
#define DATA_TYPE   boost::uint64_t
+
+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void fill_vector (vector< DATA_TYPE > & input,
const DATA_TYPE base_value,
unsigned remaining_bits 
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int main (int ,
const char **  
)
+
+ +
+
+

Variable Documentation

+ +
+
+ + + + +
const unsigned bit_shift
+
+Initial value:
= detail::rough_log_2_size(max_count) -
+
detail::int_log_mean_bin_size
+
const unsigned max_count
Definition: alrbreaker.cpp:28
+
+
+
+ +
+
+ + + + +
const unsigned max_count = ALR_THRESHOLD - 1
+
+ +
+
+ +
+
+ + + + +
const unsigned radix_threshold = detail::rough_log_2_size(max_count) + 1
+
+ +
+
+ +
+
+ + + + +
const unsigned top_splits = 12
+
+ +
+
+ +
+
+ + + + +
const DATA_TYPE typed_one = 1
+
+ +
+
+
+ + + + diff --git a/doc/doxygen/html/alreadysorted_8cpp.html b/doc/doxygen/html/alreadysorted_8cpp.html new file mode 100644 index 0000000..3d0dcf8 --- /dev/null +++ b/doc/doxygen/html/alreadysorted_8cpp.html @@ -0,0 +1,164 @@ + + + + + + +Boost.Sort: I:/modular-boost/libs/sort/example/alreadysorted.cpp File Reference + + + + + + + + + + +
+
+ + + + + + +
+
Boost.Sort +
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
alreadysorted.cpp File Reference
+
+
+
#include <boost/sort/spreadsort/spreadsort.hpp>
+#include <time.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <algorithm>
+#include <vector>
+#include <string>
+#include <fstream>
+#include <sstream>
+#include <iostream>
+
+ + + +

+Macros

#define DATA_TYPE   int
 
+ + + +

+Functions

int main (int argc, const char **argv)
 
+

Macro Definition Documentation

+ +
+
+ + + + +
#define DATA_TYPE   int
+
+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
int main (int argc,
const char ** argv 
)
+
+ +
+
+
+ + + + diff --git a/doc/doxygen/html/annotated.html b/doc/doxygen/html/annotated.html new file mode 100644 index 0000000..c6a8bcd --- /dev/null +++ b/doc/doxygen/html/annotated.html @@ -0,0 +1,109 @@ + + + + + + +Boost.Sort: Class List + + + + + + + + + + +
+
+ + + + + + +
+
Boost.Sort +
+
+
+ + + + + +
+ +
+
+ + +
+ +
+ +
+
+
Class List
+
+
+
Here are the classes, structs, unions and interfaces with brief descriptions:
+ + + + + + + + + +
 Nboost
 Cbracket
 CDATA_TYPE
 Cgetsize
 Cgreaterthan
 Clessthan
 Cnegrightshift
 Crightshift
+
+
+ + + + diff --git a/doc/doxygen/html/arrowdown.png b/doc/doxygen/html/arrowdown.png new file mode 100644 index 0000000000000000000000000000000000000000..0b63f6d38c4b9ec907b820192ebe9724ed6eca22 GIT binary patch literal 246 zcmeAS@N?(olHy`uVBq!ia0y~yU=UznU=ZVAV_;x7xk{#nfq`MKr;B4q1>@Vhihj(F z5=TGEFKK_k5wqa?1D?=ahXjEurkR(76J85s@NhOUGq5u>9t}5-mE%lWepi;Uqf71m z{OS2=-_EA&i>$w5!uw}d@(=FzhI$T(E!{^y{WLCPvfUHg-?n_KaEwzcCzmLr=l*V6 zC-&_#>zx*^v);jxy=5y`_=dB74rP`7XD?ned3^snGwa;g6OSU_JYHVoTgx1KM+Mx1^?q-;~e(vK>ne<2)xN=7sOn7cwv~FnGH9xvX@VfwtS3% zB5wQ>Z?G+OS$!q@2%m^mr`yT^?;Fjw9AOU2uWshOY7y*F@$rm7Z&F@S(dVw}PkZ<8 zo20^d;Cu*UR{+<7Z+jxv_>138F?;of@zV#T4N{wew`}wmUFy`JvG744^GnTH+L4S$ zIyf(_IvsTKf?Ze%3&+Xgj$BKPSIjL>1m`TxZqju)v0V3#%4eP=&P&l5sl5BW3v|Em k$>cEAIRBLX?^wVdmdKI;Vst0IVihlK=n! literal 0 HcmV?d00001 diff --git a/doc/doxygen/html/bc_s.png b/doc/doxygen/html/bc_s.png new file mode 100644 index 0000000000000000000000000000000000000000..224b29aa9847d5a4b3902efd602b7ddf7d33e6c2 GIT binary patch literal 676 zcmeAS@N?(olHy`uVBq!ia0y~yVBlb2V36ZrV_;wqY>4M&U|`Djba4!+V0=6GbhdDy z$g%Ttcb+`6#8YkZGXC6IYKEp}T6srWr?B1GF(F9Dgj?HVt465w+N3F~L=2m{I{LlD z^>%5vZqF6G-~TJ)wO6ipu)6bXjiwh*F19Y=5PHv}_T<_>?)LXZ=brv~w|9jRwclw=A z?M&zHUgY;R*`eBLylJ`psaF}A4gY^O%Fm2B5}9e|mBi(c{`-FBy$*q2n=WRjOR}*p zfBY&&@WtM>%(GnQhCZ8Hrfu)q@J^}V*|pnFG0l-`VjpgNRw?t~DC2x;r?WccM z%Omn1@irTG-CEDAzJ9+RYg5`mgEysJmY;n7W;LYAo9$3t&1meNHsy-)mEv3(1`Syq z@t=pYwN6di?6r!ub^RVD1}~=5i}Ig{wN2S0S{h%+$*`d)R#lZfS1eDaG`5P5VMCE= z^x0z@R^R$Gm60JLb?c-y&!09YUR*eu&fwsA<<`9iTVESDS?SxbGI$-AnRFpglk?-w z))MJk_rJ3+X!!n)F*APYoSvijm+7tb{~abbGah}k{T}t&$Z~D@q`Q~4Y!~SWvp(e` zVceXhX1;R!uD#zA6+PP+HDAA0(fxK@?D8*$&9kMu%}YGP_Juw8c;!!0+6oK)g(sSw zY~HWlnwgvTf6fV!_7>ip`-^|dGPU1!;hwI1lEZZJTJ>Wl_HWi~`r*qYH%WNrY>^GS z)7LcBm>zvDv~{n$U&>{X3q>_wrW{sld81^mt-e{7!GY7X-Tl!#sfouWS|6QU6KDPP n@q}r5#vGT5l>WvCZQg&#VN<^6zNab-3=9mOu6{1-oD!My(o5xe(dH6;i_@% literal 0 HcmV?d00001 diff --git a/doc/doxygen/html/binaryalrbreaker_8cpp.html b/doc/doxygen/html/binaryalrbreaker_8cpp.html new file mode 100644 index 0000000..45084e8 --- /dev/null +++ b/doc/doxygen/html/binaryalrbreaker_8cpp.html @@ -0,0 +1,306 @@ + + + + + + +Boost.Sort: I:/modular-boost/libs/sort/example/binaryalrbreaker.cpp File Reference + + + + + + + + + + +
+
+ + + + + + +
+
Boost.Sort +
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
binaryalrbreaker.cpp File Reference
+
+
+
#include <boost/sort/spreadsort/spreadsort.hpp>
+#include <time.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <algorithm>
+#include <vector>
+#include <string>
+#include <fstream>
+#include <sstream>
+#include <iostream>
+
+ + + + + +

+Macros

#define DATA_TYPE   boost::uint64_t
 
#define ALR_THRESHOLD   3
 
+ + + + + + + +

+Functions

void fill_vector (vector< DATA_TYPE > &input, const DATA_TYPE base_value, unsigned remaining_bits, const vector< unsigned > &indices, int index)
 
unsigned get_index (unsigned count)
 
int main (int, const char **)
 
+ + + + + + + + + +

+Variables

const unsigned max_count = ALR_THRESHOLD - 1
 
const unsigned bit_shift
 
const unsigned radix_threshold = detail::rough_log_2_size(max_count) + 1
 
const DATA_TYPE typed_one = 1
 
+

Macro Definition Documentation

+ +
+
+ + + + +
#define ALR_THRESHOLD   3
+
+ +
+
+ +
+
+ + + + +
#define DATA_TYPE   boost::uint64_t
+
+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void fill_vector (vector< DATA_TYPE > & input,
const DATA_TYPE base_value,
unsigned remaining_bits,
const vector< unsigned > & indices,
int index 
)
+
+ +
+
+ +
+
+ + + + + + + + +
unsigned get_index (unsigned count)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int main (int ,
const char **  
)
+
+ +
+
+

Variable Documentation

+ +
+
+ + + + +
const unsigned bit_shift
+
+Initial value:
= detail::rough_log_2_size(max_count) -
+
detail::int_log_mean_bin_size
+
const unsigned max_count
Definition: binaryalrbreaker.cpp:28
+
+
+
+ +
+
+ + + + +
const unsigned max_count = ALR_THRESHOLD - 1
+
+ +
+
+ +
+
+ + + + +
const unsigned radix_threshold = detail::rough_log_2_size(max_count) + 1
+
+ +
+
+ +
+
+ + + + +
const DATA_TYPE typed_one = 1
+
+ +
+
+
+ + + + diff --git a/doc/doxygen/html/boostrandomgen_8cpp.html b/doc/doxygen/html/boostrandomgen_8cpp.html new file mode 100644 index 0000000..adcbe93 --- /dev/null +++ b/doc/doxygen/html/boostrandomgen_8cpp.html @@ -0,0 +1,142 @@ + + + + + + +Boost.Sort: I:/modular-boost/libs/sort/example/boostrandomgen.cpp File Reference + + + + + + + + + + +
+
+ + + + + + +
+
Boost.Sort +
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
boostrandomgen.cpp File Reference
+
+
+
#include <stdio.h>
+#include "stdlib.h"
+#include <fstream>
+#include <iostream>
+#include <vector>
+#include <string>
+#include <boost/random.hpp>
+
+ + + +

+Functions

int main (int argc, const char **argv)
 
+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
int main (int argc,
const char ** argv 
)
+
+ +
+
+
+ + + + diff --git a/doc/doxygen/html/caseinsensitive_8cpp.html b/doc/doxygen/html/caseinsensitive_8cpp.html new file mode 100644 index 0000000..159f1c9 --- /dev/null +++ b/doc/doxygen/html/caseinsensitive_8cpp.html @@ -0,0 +1,157 @@ + + + + + + +Boost.Sort: I:/modular-boost/libs/sort/example/caseinsensitive.cpp File Reference + + + + + + + + + + +
+
+ + + + + + +
+
Boost.Sort +
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
caseinsensitive.cpp File Reference
+
+
+
#include <boost/algorithm/string.hpp>
+#include <boost/sort/spreadsort/string_sort.hpp>
+#include <time.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <algorithm>
+#include <vector>
+#include <iostream>
+#include <fstream>
+#include <string>
+
+ + + + + + + + + +

+Classes

struct  DATA_TYPE
 
struct  lessthan
 
struct  bracket
 
struct  getsize
 
+ + + +

+Functions

int main (int argc, const char **argv)
 
+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
int main (int argc,
const char ** argv 
)
+
+ +
+
+
+ + + + diff --git a/doc/doxygen/html/charstringsample_8cpp.html b/doc/doxygen/html/charstringsample_8cpp.html new file mode 100644 index 0000000..a82141f --- /dev/null +++ b/doc/doxygen/html/charstringsample_8cpp.html @@ -0,0 +1,154 @@ + + + + + + +Boost.Sort: I:/modular-boost/libs/sort/example/charstringsample.cpp File Reference + + + + + + + + + + +
+
+ + + + + + +
+
Boost.Sort +
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
charstringsample.cpp File Reference
+
+
+
#include <boost/sort/spreadsort/string_sort.hpp>
+#include <time.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <algorithm>
+#include <vector>
+#include <iostream>
+#include <fstream>
+#include <string>
+
+ + + + + + + +

+Classes

struct  DATA_TYPE
 
struct  bracket
 
struct  getsize
 
+ + + +

+Functions

int main (int argc, const char **argv)
 
+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
int main (int argc,
const char ** argv 
)
+
+ +
+
+
+ + + + diff --git a/doc/doxygen/html/classes.html b/doc/doxygen/html/classes.html new file mode 100644 index 0000000..c84631e --- /dev/null +++ b/doc/doxygen/html/classes.html @@ -0,0 +1,114 @@ + + + + + + +Boost.Sort: Class Index + + + + + + + + + + +
+
+ + + + + + +
+
Boost.Sort +
+
+
+ + + + + +
+ +
+
+ + +
+ +
+ +
+
+
Class Index
+
+
+
B | D | G | L | N | R
+ + + + + + + + +
  D  
+
  g  
+
  l  
+
  r  
+
DATA_TYPE   getsize   lessthan   rightshift   
  b  
+
greaterthan   
  n  
+
bracket   negrightshift   
+
B | D | G | L | N | R
+
+ + + + diff --git a/doc/doxygen/html/closed.png b/doc/doxygen/html/closed.png new file mode 100644 index 0000000000000000000000000000000000000000..98cc2c909da37a6df914fbf67780eebd99c597f5 GIT binary patch literal 132 zcmeAS@N?(olHy`uVBq!ia0y~yVBiE{4mJh`h6fYb1Q-|?yggkULn;{G-p%E8P~>R4 z=$<|EB$N38-2}DbmnFr_%O)K7`0vvPK}LtC*|iL-j2e1dIRjJ=#-IMT-)|GIo|S=1 k_R{V{v-v8NIIqptTqq(?amn;60|Nttr>mdKI;Vst0N5uiMgRZ+ literal 0 HcmV?d00001 diff --git a/doc/doxygen/html/constants_8hpp.html b/doc/doxygen/html/constants_8hpp.html new file mode 100644 index 0000000..38e1e40 --- /dev/null +++ b/doc/doxygen/html/constants_8hpp.html @@ -0,0 +1,132 @@ + + + + + + +Boost.Sort: I:/modular-boost/libs/sort/include/boost/sort/spreadsort/detail/constants.hpp File Reference + + + + + + + + + + +
+
+ + + + + + +
+
Boost.Sort +
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
constants.hpp File Reference
+
+ + + + + diff --git a/doc/doxygen/html/constants_8hpp_source.html b/doc/doxygen/html/constants_8hpp_source.html new file mode 100644 index 0000000..ca60a95 --- /dev/null +++ b/doc/doxygen/html/constants_8hpp_source.html @@ -0,0 +1,153 @@ + + + + + + +Boost.Sort: I:/modular-boost/libs/sort/include/boost/sort/spreadsort/detail/constants.hpp Source File + + + + + + + + + + +
+
+ + + + + + +
+
Boost.Sort +
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+
+
constants.hpp
+
+
+Go to the documentation of this file.
1 //constant definitions for the Boost Sort library
+
2 
+
3 // Copyright Steven J. Ross 2001 - 2014
+
4 // Distributed under the Boost Software License, Version 1.0.
+
5 // (See accompanying file LICENSE_1_0.txt or copy at
+
6 // http://www.boost.org/LICENSE_1_0.txt)
+
7 
+
8 // See http://www.boost.org/libs/sort for library home page.
+
9 #ifndef BOOST_SORT_SPREADSORT_DETAIL_CONSTANTS
+
10 #define BOOST_SORT_SPREADSORT_DETAIL_CONSTANTS
+
11 namespace boost {
+
12 namespace sort {
+
13 namespace detail {
+
14 //Tuning constants
+
15 //This should be tuned to your processor cache;
+
16 //if you go too large you get cache misses on bins
+
17 //The smaller this number, the less worst-case memory usage.
+
18 //If too small, too many recursions slow down spreadsort
+
19 enum { max_splits = 11,
+
20 //It's better to have a few cache misses and finish sorting
+
21 //than to run another iteration
+ +
23 //Sets the minimum number of items per bin.
+ +
25 //Used to force a comparison-based sorting for small bins, if it's faster.
+
26 //Minimum value 1
+ +
28 //This is the minimum split count to use spreadsort when it will finish in one
+
29 //iteration. Make this larger the faster std::sort is relative to integer_sort.
+ +
31 //Sets the minimum number of items per bin for floating point.
+ +
33 //Used to force a comparison-based sorting for small bins, if it's faster.
+
34 //Minimum value 1
+ +
36 //This is the minimum split count to use spreadsort when it will finish in one
+
37 //iteration. Make this larger the faster std::sort is relative to float_sort.
+ +
39 //There is a minimum size below which it is not worth using spreadsort
+
40 min_sort_size = 1000 };
+
41 }
+
42 }
+
43 }
+
44 #endif
+
Definition: constants.hpp:11
+ + +
Definition: constants.hpp:22
+ +
Definition: constants.hpp:19
+
Definition: constants.hpp:40
+
Definition: constants.hpp:24
+ + +
+ + + + diff --git a/doc/doxygen/html/detail_2float__sort_8hpp.html b/doc/doxygen/html/detail_2float__sort_8hpp.html new file mode 100644 index 0000000..6ba5ab5 --- /dev/null +++ b/doc/doxygen/html/detail_2float__sort_8hpp.html @@ -0,0 +1,185 @@ + + + + + + +Boost.Sort: I:/modular-boost/libs/sort/include/boost/sort/spreadsort/detail/float_sort.hpp File Reference + + + + + + + + + + +
+
+ + + + + + +
+
Boost.Sort +
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
float_sort.hpp File Reference
+
+
+
#include <algorithm>
+#include <vector>
+#include <limits>
+#include <functional>
+#include <boost/static_assert.hpp>
+#include <boost/serialization/static_warning.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/sort/spreadsort/detail/constants.hpp>
+#include <boost/sort/spreadsort/detail/integer_sort.hpp>
+#include <boost/sort/spreadsort/detail/spreadsort_common.hpp>
+#include <boost/cstdint.hpp>
+
+

Go to the source code of this file.

+ + + + + + + + +

+Namespaces

 boost
 
 boost::sort
 
 boost::sort::detail
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

template<class Cast_type , class RandomAccessIter >
Cast_type boost::sort::detail::cast_float_iter (const RandomAccessIter &floatiter)
 
template<class RandomAccessIter , class Div_type , class Right_shift >
bool boost::sort::detail::is_sorted_or_find_extremes (RandomAccessIter current, RandomAccessIter last, Div_type &max, Div_type &min, Right_shift rshift)
 
template<class RandomAccessIter , class Div_type >
void boost::sort::detail::inner_float_swap_loop (RandomAccessIter *bins, const RandomAccessIter &nextbinstart, unsigned ii, const unsigned log_divisor, const Div_type div_min)
 
template<class RandomAccessIter , class Div_type >
void boost::sort::detail::float_swap_loop (RandomAccessIter *bins, RandomAccessIter &nextbinstart, unsigned ii, const size_t *bin_sizes, const unsigned log_divisor, const Div_type div_min)
 
template<class RandomAccessIter , class Cast_type >
bool boost::sort::detail::is_sorted_or_find_extremes (RandomAccessIter current, RandomAccessIter last, Cast_type &max, Cast_type &min)
 
template<class RandomAccessIter , class Div_type , class Size_type >
void boost::sort::detail::positive_float_sort_rec (RandomAccessIter first, RandomAccessIter last, std::vector< RandomAccessIter > &bin_cache, unsigned cache_offset, size_t *bin_sizes)
 
template<class RandomAccessIter , class Div_type , class Size_type >
void boost::sort::detail::negative_float_sort_rec (RandomAccessIter first, RandomAccessIter last, std::vector< RandomAccessIter > &bin_cache, unsigned cache_offset, size_t *bin_sizes)
 
template<class RandomAccessIter , class Div_type , class Right_shift , class Size_type >
void boost::sort::detail::negative_float_sort_rec (RandomAccessIter first, RandomAccessIter last, std::vector< RandomAccessIter > &bin_cache, unsigned cache_offset, size_t *bin_sizes, Right_shift rshift)
 
template<class RandomAccessIter , class Div_type , class Right_shift , class Compare , class Size_type >
void boost::sort::detail::negative_float_sort_rec (RandomAccessIter first, RandomAccessIter last, std::vector< RandomAccessIter > &bin_cache, unsigned cache_offset, size_t *bin_sizes, Right_shift rshift, Compare comp)
 
template<class RandomAccessIter , class Div_type , class Size_type >
void boost::sort::detail::float_sort_rec (RandomAccessIter first, RandomAccessIter last, std::vector< RandomAccessIter > &bin_cache, unsigned cache_offset, size_t *bin_sizes)
 
template<class RandomAccessIter , class Div_type , class Right_shift , class Size_type >
void boost::sort::detail::float_sort_rec (RandomAccessIter first, RandomAccessIter last, std::vector< RandomAccessIter > &bin_cache, unsigned cache_offset, size_t *bin_sizes, Right_shift rshift)
 
template<class RandomAccessIter , class Div_type , class Right_shift , class Compare , class Size_type >
void boost::sort::detail::float_sort_rec (RandomAccessIter first, RandomAccessIter last, std::vector< RandomAccessIter > &bin_cache, unsigned cache_offset, size_t *bin_sizes, Right_shift rshift, Compare comp)
 
template<class RandomAccessIter >
boost::enable_if_c< sizeof(boost::uint32_t)==sizeof(typename std::iterator_traits< RandomAccessIter >::value_type)&&std::numeric_limits< typename std::iterator_traits< RandomAccessIter >::value_type >::is_iec559, void >::type boost::sort::detail::float_sort (RandomAccessIter first, RandomAccessIter last)
 
template<class RandomAccessIter >
boost::enable_if_c< sizeof(boost::uint64_t)==sizeof(typename std::iterator_traits< RandomAccessIter >::value_type)&&std::numeric_limits< typename std::iterator_traits< RandomAccessIter >::value_type >::is_iec559, void >::type boost::sort::detail::float_sort (RandomAccessIter first, RandomAccessIter last)
 
template<class RandomAccessIter >
boost::disable_if_c< (sizeof(boost::uint64_t)==sizeof(typename std::iterator_traits< RandomAccessIter >::value_type)||sizeof(boost::uint32_t)==sizeof(typename std::iterator_traits< RandomAccessIter >::value_type))&&std::numeric_limits< typename std::iterator_traits< RandomAccessIter >::value_type >::is_iec559, void >::type boost::sort::detail::float_sort (RandomAccessIter first, RandomAccessIter last)
 
template<class RandomAccessIter , class Div_type , class Right_shift >
void::type boost::sort::detail::float_sort (RandomAccessIter first, RandomAccessIter last, Div_type, Right_shift rshift)
 
template<class RandomAccessIter , class Div_type , class Right_shift >
boost::enable_if_c< sizeof(size_t)< sizeof(Div_type)&&sizeof(boost::uintmax_t) >=sizeof(Div_type), void >::type boost::sort::detail::float_sort (RandomAccessIter first, RandomAccessIter last, Div_type, Right_shift rshift)
 
template<class RandomAccessIter , class Div_type , class Right_shift , class Compare >
void::type boost::sort::detail::float_sort (RandomAccessIter first, RandomAccessIter last, Div_type, Right_shift rshift, Compare comp)
 
template<class RandomAccessIter , class Div_type , class Right_shift , class Compare >
boost::enable_if_c< sizeof(size_t)< sizeof(Div_type)&&sizeof(boost::uintmax_t) >=sizeof(Div_type), void >::type boost::sort::detail::float_sort (RandomAccessIter first, RandomAccessIter last, Div_type, Right_shift rshift, Compare comp)
 
+
+ + + + diff --git a/doc/doxygen/html/detail_2float__sort_8hpp_source.html b/doc/doxygen/html/detail_2float__sort_8hpp_source.html new file mode 100644 index 0000000..181cd2c --- /dev/null +++ b/doc/doxygen/html/detail_2float__sort_8hpp_source.html @@ -0,0 +1,922 @@ + + + + + + +Boost.Sort: I:/modular-boost/libs/sort/include/boost/sort/spreadsort/detail/float_sort.hpp Source File + + + + + + + + + + +
+
+ + + + + + +
+
Boost.Sort +
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+
+
float_sort.hpp
+
+
+Go to the documentation of this file.
1 // Details for templated Spreadsort-based float_sort.
+
2 
+
3 // Copyright Steven J. Ross 2001 - 2014.
+
4 // Distributed under the Boost Software License, Version 1.0.
+
5 // (See accompanying file LICENSE_1_0.txt or copy at
+
6 // http://www.boost.org/LICENSE_1_0.txt)
+
7 
+
8 // See http://www.boost.org/libs/sort for library home page.
+
9 
+
10 /*
+
11 Some improvements suggested by:
+
12 Phil Endecott and Frank Gennari
+
13 float_mem_cast fix provided by:
+
14 Scott McMurray
+
15 */
+
16 
+
17 #ifndef BOOST_SORT_SPREADSORT_DETAIL_FLOAT_SORT_HPP
+
18 #define BOOST_SORT_SPREADSORT_DETAIL_FLOAT_SORT_HPP
+
19 #include <algorithm>
+
20 #include <vector>
+
21 #include <limits>
+
22 #include <functional>
+
23 #include <boost/static_assert.hpp>
+
24 #include <boost/serialization/static_warning.hpp>
+
25 #include <boost/utility/enable_if.hpp>
+ + + +
29 #include <boost/cstdint.hpp>
+
30 
+
31 namespace boost {
+
32 namespace sort {
+
33  namespace detail {
+
34  //Casts a RandomAccessIter to the specified integer type
+
35  template<class Cast_type, class RandomAccessIter>
+
36  inline Cast_type
+
37  cast_float_iter(const RandomAccessIter & floatiter)
+
38  {
+
39  typedef typename std::iterator_traits<RandomAccessIter>::value_type
+
40  Data_type;
+
41  //Only cast IEEE floating-point numbers, and only to same-sized integers
+
42  BOOST_STATIC_ASSERT(sizeof(Cast_type) == sizeof(Data_type));
+
43  BOOST_STATIC_ASSERT(std::numeric_limits<Data_type>::is_iec559);
+
44  BOOST_STATIC_ASSERT(std::numeric_limits<Cast_type>::is_integer);
+
45  Cast_type result;
+
46  std::memcpy(&result, &(*floatiter), sizeof(Data_type));
+
47  return result;
+
48  }
+
49 
+
50  // Return true if the list is sorted. Otherwise, find the minimum and
+
51  // maximum. Values are Right_shifted 0 bits before comparison.
+
52  template <class RandomAccessIter, class Div_type, class Right_shift>
+
53  inline bool
+
54  is_sorted_or_find_extremes(RandomAccessIter current, RandomAccessIter last,
+
55  Div_type & max, Div_type & min, Right_shift rshift)
+
56  {
+
57  min = max = rshift(*current, 0);
+
58  Div_type prev = min;
+
59  bool sorted = true;
+
60  while (++current < last) {
+
61  Div_type value = rshift(*current, 0);
+
62  sorted &= value >= prev;
+
63  prev = value;
+
64  if (max < value)
+
65  max = value;
+
66  else if (value < min)
+
67  min = value;
+
68  }
+
69  return sorted;
+
70  }
+
71 
+
72  //Specialized swap loops for floating-point casting
+
73  template <class RandomAccessIter, class Div_type>
+
74  inline void inner_float_swap_loop(RandomAccessIter * bins,
+
75  const RandomAccessIter & nextbinstart, unsigned ii
+
76  , const unsigned log_divisor, const Div_type div_min)
+
77  {
+
78  RandomAccessIter * local_bin = bins + ii;
+
79  for (RandomAccessIter current = *local_bin; current < nextbinstart;
+
80  ++current) {
+
81  for (RandomAccessIter * target_bin =
+
82  (bins + ((cast_float_iter<Div_type, RandomAccessIter>(current) >>
+
83  log_divisor) - div_min)); target_bin != local_bin;
+
84  target_bin = bins + ((cast_float_iter<Div_type, RandomAccessIter>
+
85  (current) >> log_divisor) - div_min)) {
+
86  typename std::iterator_traits<RandomAccessIter>::value_type tmp;
+
87  RandomAccessIter b = (*target_bin)++;
+
88  RandomAccessIter * b_bin = bins + ((cast_float_iter<Div_type,
+
89  RandomAccessIter>(b) >> log_divisor) - div_min);
+
90  //Three-way swap; if the item to be swapped doesn't belong in the
+
91  //current bin, swap it to where it belongs
+
92  if (b_bin != local_bin) {
+
93  RandomAccessIter c = (*b_bin)++;
+
94  tmp = *c;
+
95  *c = *b;
+
96  }
+
97  else
+
98  tmp = *b;
+
99  *b = *current;
+
100  *current = tmp;
+
101  }
+
102  }
+
103  *local_bin = nextbinstart;
+
104  }
+
105 
+
106  template <class RandomAccessIter, class Div_type>
+
107  inline void float_swap_loop(RandomAccessIter * bins,
+
108  RandomAccessIter & nextbinstart, unsigned ii,
+
109  const size_t *bin_sizes,
+
110  const unsigned log_divisor, const Div_type div_min)
+
111  {
+
112  nextbinstart += bin_sizes[ii];
+
113  inner_float_swap_loop<RandomAccessIter, Div_type>
+
114  (bins, nextbinstart, ii, log_divisor, div_min);
+
115  }
+
116 
+
117  // Return true if the list is sorted. Otherwise, find the minimum and
+
118  // maximum. Values are cast to Cast_type before comparison.
+
119  template <class RandomAccessIter, class Cast_type>
+
120  inline bool
+
121  is_sorted_or_find_extremes(RandomAccessIter current, RandomAccessIter last,
+
122  Cast_type & max, Cast_type & min)
+
123  {
+
124  min = max = cast_float_iter<Cast_type, RandomAccessIter>(current);
+
125  Cast_type prev = min;
+
126  bool sorted = true;
+
127  while (++current < last) {
+
128  Cast_type value = cast_float_iter<Cast_type, RandomAccessIter>(current);
+
129  sorted &= value >= prev;
+
130  prev = value;
+
131  if (max < value)
+
132  max = value;
+
133  else if (value < min)
+
134  min = value;
+
135  }
+
136  return sorted;
+
137  }
+
138 
+
139  //Special-case sorting of positive floats with casting
+
140  template <class RandomAccessIter, class Div_type, class Size_type>
+
141  inline void
+
142  positive_float_sort_rec(RandomAccessIter first, RandomAccessIter last,
+
143  std::vector<RandomAccessIter> &bin_cache, unsigned cache_offset
+
144  , size_t *bin_sizes)
+
145  {
+
146  Div_type max, min;
+
147  if (is_sorted_or_find_extremes<RandomAccessIter, Div_type>(first, last,
+
148  max, min))
+
149  return;
+
150  unsigned log_divisor = get_log_divisor<float_log_mean_bin_size>(
+
151  last - first, rough_log_2_size(Size_type(max - min)));
+
152  Div_type div_min = min >> log_divisor;
+
153  Div_type div_max = max >> log_divisor;
+
154  unsigned bin_count = unsigned(div_max - div_min) + 1;
+
155  unsigned cache_end;
+
156  RandomAccessIter * bins = size_bins(bin_sizes, bin_cache, cache_offset,
+
157  cache_end, bin_count);
+
158 
+
159  //Calculating the size of each bin
+
160  for (RandomAccessIter current = first; current != last;)
+
161  bin_sizes[unsigned((cast_float_iter<Div_type, RandomAccessIter>(
+
162  current++) >> log_divisor) - div_min)]++;
+
163  bins[0] = first;
+
164  for (unsigned u = 0; u < bin_count - 1; u++)
+
165  bins[u + 1] = bins[u] + bin_sizes[u];
+
166 
+
167 
+
168  //Swap into place
+
169  RandomAccessIter nextbinstart = first;
+
170  for (unsigned u = 0; u < bin_count - 1; ++u)
+
171  float_swap_loop<RandomAccessIter, Div_type>
+
172  (bins, nextbinstart, u, bin_sizes, log_divisor, div_min);
+
173  bins[bin_count - 1] = last;
+
174 
+
175  //Return if we've completed bucketsorting
+
176  if (!log_divisor)
+
177  return;
+
178 
+
179  //Recursing
+
180  size_t max_count = get_min_count<float_log_mean_bin_size,
+ +
182  float_log_finishing_count>(log_divisor);
+
183  RandomAccessIter lastPos = first;
+
184  for (unsigned u = cache_offset; u < cache_end; lastPos = bin_cache[u],
+
185  ++u) {
+
186  size_t count = bin_cache[u] - lastPos;
+
187  if (count < 2)
+
188  continue;
+
189  if (count < max_count)
+
190  std::sort(lastPos, bin_cache[u]);
+
191  else
+
192  positive_float_sort_rec<RandomAccessIter, Div_type, Size_type>
+
193  (lastPos, bin_cache[u], bin_cache, cache_end, bin_sizes);
+
194  }
+
195  }
+
196 
+
197  //Sorting negative floats
+
198  //Bins are iterated in reverse because max_neg_float = min_neg_int
+
199  template <class RandomAccessIter, class Div_type, class Size_type>
+
200  inline void
+
201  negative_float_sort_rec(RandomAccessIter first, RandomAccessIter last,
+
202  std::vector<RandomAccessIter> &bin_cache,
+
203  unsigned cache_offset, size_t *bin_sizes)
+
204  {
+
205  Div_type max, min;
+
206  if (is_sorted_or_find_extremes<RandomAccessIter, Div_type>(first, last,
+
207  max, min))
+
208  return;
+
209  unsigned log_divisor = get_log_divisor<float_log_mean_bin_size>(
+
210  last - first, rough_log_2_size(Size_type(max - min)));
+
211  Div_type div_min = min >> log_divisor;
+
212  Div_type div_max = max >> log_divisor;
+
213  unsigned bin_count = unsigned(div_max - div_min) + 1;
+
214  unsigned cache_end;
+
215  RandomAccessIter * bins = size_bins(bin_sizes, bin_cache, cache_offset,
+
216  cache_end, bin_count);
+
217 
+
218  //Calculating the size of each bin
+
219  for (RandomAccessIter current = first; current != last;)
+
220  bin_sizes[unsigned((cast_float_iter<Div_type, RandomAccessIter>(
+
221  current++) >> log_divisor) - div_min)]++;
+
222  bins[bin_count - 1] = first;
+
223  for (int ii = bin_count - 2; ii >= 0; --ii)
+
224  bins[ii] = bins[ii + 1] + bin_sizes[ii + 1];
+
225 
+
226  //Swap into place
+
227  RandomAccessIter nextbinstart = first;
+
228  //The last bin will always have the correct elements in it
+
229  for (int ii = bin_count - 1; ii > 0; --ii)
+
230  float_swap_loop<RandomAccessIter, Div_type>
+
231  (bins, nextbinstart, ii, bin_sizes, log_divisor, div_min);
+
232  //Update the end position because we don't process the last bin
+
233  bin_cache[cache_offset] = last;
+
234 
+
235  //Return if we've completed bucketsorting
+
236  if (!log_divisor)
+
237  return;
+
238 
+
239  //Recursing
+
240  size_t max_count = get_min_count<float_log_mean_bin_size,
+ +
242  float_log_finishing_count>(log_divisor);
+
243  RandomAccessIter lastPos = first;
+
244  for (int ii = cache_end - 1; ii >= static_cast<int>(cache_offset);
+
245  lastPos = bin_cache[ii], --ii) {
+
246  size_t count = bin_cache[ii] - lastPos;
+
247  if (count < 2)
+
248  continue;
+
249  if (count < max_count)
+
250  std::sort(lastPos, bin_cache[ii]);
+
251  else
+
252  negative_float_sort_rec<RandomAccessIter, Div_type, Size_type>
+
253  (lastPos, bin_cache[ii], bin_cache, cache_end, bin_sizes);
+
254  }
+
255  }
+
256 
+
257  //Sorting negative floats
+
258  //Bins are iterated in reverse order because max_neg_float = min_neg_int
+
259  template <class RandomAccessIter, class Div_type, class Right_shift,
+
260  class Size_type>
+
261  inline void
+
262  negative_float_sort_rec(RandomAccessIter first, RandomAccessIter last,
+
263  std::vector<RandomAccessIter> &bin_cache, unsigned cache_offset
+
264  , size_t *bin_sizes, Right_shift rshift)
+
265  {
+
266  Div_type max, min;
+
267  if (is_sorted_or_find_extremes(first, last, max, min, rshift))
+
268  return;
+
269  unsigned log_divisor = get_log_divisor<float_log_mean_bin_size>(
+
270  last - first, rough_log_2_size(Size_type(max - min)));
+
271  Div_type div_min = min >> log_divisor;
+
272  Div_type div_max = max >> log_divisor;
+
273  unsigned bin_count = unsigned(div_max - div_min) + 1;
+
274  unsigned cache_end;
+
275  RandomAccessIter * bins = size_bins(bin_sizes, bin_cache, cache_offset,
+
276  cache_end, bin_count);
+
277 
+
278  //Calculating the size of each bin
+
279  for (RandomAccessIter current = first; current != last;)
+
280  bin_sizes[unsigned(rshift(*(current++), log_divisor) - div_min)]++;
+
281  bins[bin_count - 1] = first;
+
282  for (int ii = bin_count - 2; ii >= 0; --ii)
+
283  bins[ii] = bins[ii + 1] + bin_sizes[ii + 1];
+
284 
+
285  //Swap into place
+
286  RandomAccessIter nextbinstart = first;
+
287  //The last bin will always have the correct elements in it
+
288  for (int ii = bin_count - 1; ii > 0; --ii)
+
289  swap_loop<RandomAccessIter, Div_type, Right_shift>
+
290  (bins, nextbinstart, ii, rshift, bin_sizes, log_divisor, div_min);
+
291  //Update the end position of the unprocessed last bin
+
292  bin_cache[cache_offset] = last;
+
293 
+
294  //Return if we've completed bucketsorting
+
295  if (!log_divisor)
+
296  return;
+
297 
+
298  //Recursing
+
299  size_t max_count = get_min_count<float_log_mean_bin_size,
+ +
301  float_log_finishing_count>(log_divisor);
+
302  RandomAccessIter lastPos = first;
+
303  for (int ii = cache_end - 1; ii >= static_cast<int>(cache_offset);
+
304  lastPos = bin_cache[ii], --ii) {
+
305  size_t count = bin_cache[ii] - lastPos;
+
306  if (count < 2)
+
307  continue;
+
308  if (count < max_count)
+
309  std::sort(lastPos, bin_cache[ii]);
+
310  else
+
311  negative_float_sort_rec<RandomAccessIter, Div_type, Right_shift,
+
312  Size_type>
+
313  (lastPos, bin_cache[ii], bin_cache, cache_end, bin_sizes, rshift);
+
314  }
+
315  }
+
316 
+
317  template <class RandomAccessIter, class Div_type, class Right_shift,
+
318  class Compare, class Size_type>
+
319  inline void
+
320  negative_float_sort_rec(RandomAccessIter first, RandomAccessIter last,
+
321  std::vector<RandomAccessIter> &bin_cache, unsigned cache_offset,
+
322  size_t *bin_sizes, Right_shift rshift, Compare comp)
+
323  {
+
324  Div_type max, min;
+
325  if (is_sorted_or_find_extremes(first, last, max, min, rshift))
+
326  return;
+
327  unsigned log_divisor = get_log_divisor<float_log_mean_bin_size>(
+
328  last - first, rough_log_2_size(Size_type(max - min)));
+
329  Div_type div_min = min >> log_divisor;
+
330  Div_type div_max = max >> log_divisor;
+
331  unsigned bin_count = unsigned(div_max - div_min) + 1;
+
332  unsigned cache_end;
+
333  RandomAccessIter * bins = size_bins(bin_sizes, bin_cache, cache_offset,
+
334  cache_end, bin_count);
+
335 
+
336  //Calculating the size of each bin
+
337  for (RandomAccessIter current = first; current != last;)
+
338  bin_sizes[unsigned(rshift(*(current++), log_divisor) - div_min)]++;
+
339  bins[bin_count - 1] = first;
+
340  for (int ii = bin_count - 2; ii >= 0; --ii)
+
341  bins[ii] = bins[ii + 1] + bin_sizes[ii + 1];
+
342 
+
343  //Swap into place
+
344  RandomAccessIter nextbinstart = first;
+
345  //The last bin will always have the correct elements in it
+
346  for (int ii = bin_count - 1; ii > 0; --ii)
+
347  swap_loop<RandomAccessIter, Div_type, Right_shift>
+
348  (bins, nextbinstart, ii, rshift, bin_sizes, log_divisor, div_min);
+
349  //Update the end position of the unprocessed last bin
+
350  bin_cache[cache_offset] = last;
+
351 
+
352  //Return if we've completed bucketsorting
+
353  if (!log_divisor)
+
354  return;
+
355 
+
356  //Recursing
+
357  size_t max_count = get_min_count<float_log_mean_bin_size,
+ +
359  float_log_finishing_count>(log_divisor);
+
360  RandomAccessIter lastPos = first;
+
361  for (int ii = cache_end - 1; ii >= static_cast<int>(cache_offset);
+
362  lastPos = bin_cache[ii], --ii) {
+
363  size_t count = bin_cache[ii] - lastPos;
+
364  if (count < 2)
+
365  continue;
+
366  if (count < max_count)
+
367  std::sort(lastPos, bin_cache[ii], comp);
+
368  else
+
369  negative_float_sort_rec<RandomAccessIter, Div_type, Right_shift,
+
370  Compare, Size_type>(lastPos, bin_cache[ii],
+
371  bin_cache, cache_end,
+
372  bin_sizes, rshift, comp);
+
373  }
+
374  }
+
375 
+
376  //Casting special-case for floating-point sorting
+
377  template <class RandomAccessIter, class Div_type, class Size_type>
+
378  inline void
+
379  float_sort_rec(RandomAccessIter first, RandomAccessIter last,
+
380  std::vector<RandomAccessIter> &bin_cache, unsigned cache_offset
+
381  , size_t *bin_sizes)
+
382  {
+
383  Div_type max, min;
+
384  if (is_sorted_or_find_extremes<RandomAccessIter, Div_type>(first, last,
+
385  max, min))
+
386  return;
+
387  unsigned log_divisor = get_log_divisor<float_log_mean_bin_size>(
+
388  last - first, rough_log_2_size(Size_type(max - min)));
+
389  Div_type div_min = min >> log_divisor;
+
390  Div_type div_max = max >> log_divisor;
+
391  unsigned bin_count = unsigned(div_max - div_min) + 1;
+
392  unsigned cache_end;
+
393  RandomAccessIter * bins = size_bins(bin_sizes, bin_cache, cache_offset,
+
394  cache_end, bin_count);
+
395 
+
396  //Calculating the size of each bin
+
397  for (RandomAccessIter current = first; current != last;)
+
398  bin_sizes[unsigned((cast_float_iter<Div_type, RandomAccessIter>(
+
399  current++) >> log_divisor) - div_min)]++;
+
400  //The index of the first positive bin
+
401  //Must be divided small enough to fit into an integer
+
402  unsigned first_positive = (div_min < 0) ? unsigned(-div_min) : 0;
+
403  //Resetting if all bins are negative
+
404  if (cache_offset + first_positive > cache_end)
+
405  first_positive = cache_end - cache_offset;
+
406  //Reversing the order of the negative bins
+
407  //Note that because of the negative/positive ordering direction flip
+
408  //We can not depend upon bin order and positions matching up
+
409  //so bin_sizes must be reused to contain the end of the bin
+
410  if (first_positive > 0) {
+
411  bins[first_positive - 1] = first;
+
412  for (int ii = first_positive - 2; ii >= 0; --ii) {
+
413  bins[ii] = first + bin_sizes[ii + 1];
+
414  bin_sizes[ii] += bin_sizes[ii + 1];
+
415  }
+
416  //Handling positives following negatives
+
417  if (first_positive < bin_count) {
+
418  bins[first_positive] = first + bin_sizes[0];
+
419  bin_sizes[first_positive] += bin_sizes[0];
+
420  }
+
421  }
+
422  else
+
423  bins[0] = first;
+
424  for (unsigned u = first_positive; u < bin_count - 1; u++) {
+
425  bins[u + 1] = first + bin_sizes[u];
+
426  bin_sizes[u + 1] += bin_sizes[u];
+
427  }
+
428 
+
429  //Swap into place
+
430  RandomAccessIter nextbinstart = first;
+
431  for (unsigned u = 0; u < bin_count; ++u) {
+
432  nextbinstart = first + bin_sizes[u];
+
433  inner_float_swap_loop<RandomAccessIter, Div_type>
+
434  (bins, nextbinstart, u, log_divisor, div_min);
+
435  }
+
436 
+
437  if (!log_divisor)
+
438  return;
+
439 
+
440  //Handling negative values first
+
441  size_t max_count = get_min_count<float_log_mean_bin_size,
+ +
443  float_log_finishing_count>(log_divisor);
+
444  RandomAccessIter lastPos = first;
+
445  for (int ii = cache_offset + first_positive - 1;
+
446  ii >= static_cast<int>(cache_offset);
+
447  lastPos = bin_cache[ii--]) {
+
448  size_t count = bin_cache[ii] - lastPos;
+
449  if (count < 2)
+
450  continue;
+
451  if (count < max_count)
+
452  std::sort(lastPos, bin_cache[ii]);
+
453  //sort negative values using reversed-bin spreadsort
+
454  else
+
455  negative_float_sort_rec<RandomAccessIter, Div_type, Size_type>
+
456  (lastPos, bin_cache[ii], bin_cache, cache_end, bin_sizes);
+
457  }
+
458 
+
459  for (unsigned u = cache_offset + first_positive; u < cache_end;
+
460  lastPos = bin_cache[u], ++u) {
+
461  size_t count = bin_cache[u] - lastPos;
+
462  if (count < 2)
+
463  continue;
+
464  if (count < max_count)
+
465  std::sort(lastPos, bin_cache[u]);
+
466  //sort positive values using normal spreadsort
+
467  else
+
468  positive_float_sort_rec<RandomAccessIter, Div_type, Size_type>
+
469  (lastPos, bin_cache[u], bin_cache, cache_end, bin_sizes);
+
470  }
+
471  }
+
472 
+
473  //Functor implementation for recursive sorting
+
474  template <class RandomAccessIter, class Div_type, class Right_shift
+
475  , class Size_type>
+
476  inline void
+
477  float_sort_rec(RandomAccessIter first, RandomAccessIter last,
+
478  std::vector<RandomAccessIter> &bin_cache, unsigned cache_offset
+
479  , size_t *bin_sizes, Right_shift rshift)
+
480  {
+
481  Div_type max, min;
+
482  if (is_sorted_or_find_extremes(first, last, max, min, rshift))
+
483  return;
+
484  unsigned log_divisor = get_log_divisor<float_log_mean_bin_size>(
+
485  last - first, rough_log_2_size(Size_type(max - min)));
+
486  Div_type div_min = min >> log_divisor;
+
487  Div_type div_max = max >> log_divisor;
+
488  unsigned bin_count = unsigned(div_max - div_min) + 1;
+
489  unsigned cache_end;
+
490  RandomAccessIter * bins = size_bins(bin_sizes, bin_cache, cache_offset,
+
491  cache_end, bin_count);
+
492 
+
493  //Calculating the size of each bin
+
494  for (RandomAccessIter current = first; current != last;)
+
495  bin_sizes[unsigned(rshift(*(current++), log_divisor) - div_min)]++;
+
496  //The index of the first positive bin
+
497  unsigned first_positive = (div_min < 0) ? unsigned(-div_min) : 0;
+
498  //Resetting if all bins are negative
+
499  if (cache_offset + first_positive > cache_end)
+
500  first_positive = cache_end - cache_offset;
+
501  //Reversing the order of the negative bins
+
502  //Note that because of the negative/positive ordering direction flip
+
503  //We can not depend upon bin order and positions matching up
+
504  //so bin_sizes must be reused to contain the end of the bin
+
505  if (first_positive > 0) {
+
506  bins[first_positive - 1] = first;
+
507  for (int ii = first_positive - 2; ii >= 0; --ii) {
+
508  bins[ii] = first + bin_sizes[ii + 1];
+
509  bin_sizes[ii] += bin_sizes[ii + 1];
+
510  }
+
511  //Handling positives following negatives
+
512  if (static_cast<unsigned>(first_positive) < bin_count) {
+
513  bins[first_positive] = first + bin_sizes[0];
+
514  bin_sizes[first_positive] += bin_sizes[0];
+
515  }
+
516  }
+
517  else
+
518  bins[0] = first;
+
519  for (unsigned u = first_positive; u < bin_count - 1; u++) {
+
520  bins[u + 1] = first + bin_sizes[u];
+
521  bin_sizes[u + 1] += bin_sizes[u];
+
522  }
+
523 
+
524  //Swap into place
+
525  RandomAccessIter next_bin_start = first;
+
526  for (unsigned u = 0; u < bin_count; ++u) {
+
527  next_bin_start = first + bin_sizes[u];
+
528  inner_swap_loop<RandomAccessIter, Div_type, Right_shift>
+
529  (bins, next_bin_start, u, rshift, log_divisor, div_min);
+
530  }
+
531 
+
532  //Return if we've completed bucketsorting
+
533  if (!log_divisor)
+
534  return;
+
535 
+
536  //Handling negative values first
+
537  size_t max_count = get_min_count<float_log_mean_bin_size,
+ +
539  float_log_finishing_count>(log_divisor);
+
540  RandomAccessIter lastPos = first;
+
541  for (int ii = cache_offset + first_positive - 1;
+
542  ii >= static_cast<int>(cache_offset);
+
543  lastPos = bin_cache[ii--]) {
+
544  size_t count = bin_cache[ii] - lastPos;
+
545  if (count < 2)
+
546  continue;
+
547  if (count < max_count)
+
548  std::sort(lastPos, bin_cache[ii]);
+
549  //sort negative values using reversed-bin spreadsort
+
550  else
+
551  negative_float_sort_rec<RandomAccessIter, Div_type,
+
552  Right_shift, Size_type>(lastPos, bin_cache[ii], bin_cache,
+
553  cache_end, bin_sizes, rshift);
+
554  }
+
555 
+
556  for (unsigned u = cache_offset + first_positive; u < cache_end;
+
557  lastPos = bin_cache[u], ++u) {
+
558  size_t count = bin_cache[u] - lastPos;
+
559  if (count < 2)
+
560  continue;
+
561  if (count < max_count)
+
562  std::sort(lastPos, bin_cache[u]);
+
563  //sort positive values using normal spreadsort
+
564  else
+
565  spreadsort_rec<RandomAccessIter, Div_type, Right_shift, Size_type,
+ + +
568  (lastPos, bin_cache[u], bin_cache, cache_end, bin_sizes, rshift);
+
569  }
+
570  }
+
571 
+
572  template <class RandomAccessIter, class Div_type, class Right_shift,
+
573  class Compare, class Size_type>
+
574  inline void
+
575  float_sort_rec(RandomAccessIter first, RandomAccessIter last,
+
576  std::vector<RandomAccessIter> &bin_cache, unsigned cache_offset,
+
577  size_t *bin_sizes, Right_shift rshift, Compare comp)
+
578  {
+
579  Div_type max, min;
+
580  if (is_sorted_or_find_extremes(first, last, max, min, rshift))
+
581  return;
+
582  unsigned log_divisor = get_log_divisor<float_log_mean_bin_size>(
+
583  last - first, rough_log_2_size(Size_type(max - min)));
+
584  Div_type div_min = min >> log_divisor;
+
585  Div_type div_max = max >> log_divisor;
+
586  unsigned bin_count = unsigned(div_max - div_min) + 1;
+
587  unsigned cache_end;
+
588  RandomAccessIter * bins = size_bins(bin_sizes, bin_cache, cache_offset,
+
589  cache_end, bin_count);
+
590 
+
591  //Calculating the size of each bin
+
592  for (RandomAccessIter current = first; current != last;)
+
593  bin_sizes[unsigned(rshift(*(current++), log_divisor) - div_min)]++;
+
594  //The index of the first positive bin
+
595  unsigned first_positive =
+
596  (div_min < 0) ? static_cast<unsigned>(-div_min) : 0;
+
597  //Resetting if all bins are negative
+
598  if (cache_offset + first_positive > cache_end)
+
599  first_positive = cache_end - cache_offset;
+
600  //Reversing the order of the negative bins
+
601  //Note that because of the negative/positive ordering direction flip
+
602  //We can not depend upon bin order and positions matching up
+
603  //so bin_sizes must be reused to contain the end of the bin
+
604  if (first_positive > 0) {
+
605  bins[first_positive - 1] = first;
+
606  for (int ii = first_positive - 2; ii >= 0; --ii) {
+
607  bins[ii] = first + bin_sizes[ii + 1];
+
608  bin_sizes[ii] += bin_sizes[ii + 1];
+
609  }
+
610  //Handling positives following negatives
+
611  if (static_cast<unsigned>(first_positive) < bin_count) {
+
612  bins[first_positive] = first + bin_sizes[0];
+
613  bin_sizes[first_positive] += bin_sizes[0];
+
614  }
+
615  }
+
616  else
+
617  bins[0] = first;
+
618  for (unsigned u = first_positive; u < bin_count - 1; u++) {
+
619  bins[u + 1] = first + bin_sizes[u];
+
620  bin_sizes[u + 1] += bin_sizes[u];
+
621  }
+
622 
+
623  //Swap into place
+
624  RandomAccessIter next_bin_start = first;
+
625  for (unsigned u = 0; u < bin_count; ++u) {
+
626  next_bin_start = first + bin_sizes[u];
+
627  inner_swap_loop<RandomAccessIter, Div_type, Right_shift>
+
628  (bins, next_bin_start, u, rshift, log_divisor, div_min);
+
629  }
+
630 
+
631  //Return if we've completed bucketsorting
+
632  if (!log_divisor)
+
633  return;
+
634 
+
635  //Handling negative values first
+
636  size_t max_count = get_min_count<float_log_mean_bin_size,
+ +
638  float_log_finishing_count>(log_divisor);
+
639  RandomAccessIter lastPos = first;
+
640  for (int ii = cache_offset + first_positive - 1;
+
641  ii >= static_cast<int>(cache_offset);
+
642  lastPos = bin_cache[ii--]) {
+
643  size_t count = bin_cache[ii] - lastPos;
+
644  if (count < 2)
+
645  continue;
+
646  if (count < max_count)
+
647  std::sort(lastPos, bin_cache[ii], comp);
+
648  //sort negative values using reversed-bin spreadsort
+
649  else
+
650  negative_float_sort_rec<RandomAccessIter, Div_type, Right_shift,
+
651  Compare, Size_type>(lastPos, bin_cache[ii],
+
652  bin_cache, cache_end,
+
653  bin_sizes, rshift, comp);
+
654  }
+
655 
+
656  for (unsigned u = cache_offset + first_positive; u < cache_end;
+
657  lastPos = bin_cache[u], ++u) {
+
658  size_t count = bin_cache[u] - lastPos;
+
659  if (count < 2)
+
660  continue;
+
661  if (count < max_count)
+
662  std::sort(lastPos, bin_cache[u], comp);
+
663  //sort positive values using normal spreadsort
+
664  else
+
665  spreadsort_rec<RandomAccessIter, Div_type, Right_shift, Compare,
+
666  Size_type, float_log_mean_bin_size,
+ +
668  (lastPos, bin_cache[u], bin_cache, cache_end, bin_sizes, rshift, comp);
+
669  }
+
670  }
+
671 
+
672  //Checking whether the value type is a float, and trying a 32-bit integer
+
673  template <class RandomAccessIter>
+
674  inline typename boost::enable_if_c< sizeof(boost::uint32_t) ==
+
675  sizeof(typename std::iterator_traits<RandomAccessIter>::value_type)
+
676  && std::numeric_limits<typename
+
677  std::iterator_traits<RandomAccessIter>::value_type>::is_iec559,
+
678  void >::type
+
679  float_sort(RandomAccessIter first, RandomAccessIter last)
+
680  {
+
681  size_t bin_sizes[1 << max_splits];
+
682  std::vector<RandomAccessIter> bin_cache;
+
683  float_sort_rec<RandomAccessIter, boost::int32_t, boost::uint32_t>
+
684  (first, last, bin_cache, 0, bin_sizes);
+
685  }
+
686 
+
687  //Checking whether the value type is a double, and using a 64-bit integer
+
688  template <class RandomAccessIter>
+
689  inline typename boost::enable_if_c< sizeof(boost::uint64_t) ==
+
690  sizeof(typename std::iterator_traits<RandomAccessIter>::value_type)
+
691  && std::numeric_limits<typename
+
692  std::iterator_traits<RandomAccessIter>::value_type>::is_iec559,
+
693  void >::type
+
694  float_sort(RandomAccessIter first, RandomAccessIter last)
+
695  {
+
696  size_t bin_sizes[1 << max_splits];
+
697  std::vector<RandomAccessIter> bin_cache;
+
698  float_sort_rec<RandomAccessIter, boost::int64_t, boost::uint64_t>
+
699  (first, last, bin_cache, 0, bin_sizes);
+
700  }
+
701 
+
702  template <class RandomAccessIter>
+
703  inline typename boost::disable_if_c< (sizeof(boost::uint64_t) ==
+
704  sizeof(typename std::iterator_traits<RandomAccessIter>::value_type)
+
705  || sizeof(boost::uint32_t) ==
+
706  sizeof(typename std::iterator_traits<RandomAccessIter>::value_type))
+
707  && std::numeric_limits<typename
+
708  std::iterator_traits<RandomAccessIter>::value_type>::is_iec559,
+
709  void >::type
+
710  float_sort(RandomAccessIter first, RandomAccessIter last)
+
711  {
+
712  BOOST_STATIC_WARNING(!(sizeof(boost::uint64_t) ==
+
713  sizeof(typename std::iterator_traits<RandomAccessIter>::value_type)
+
714  || sizeof(boost::uint32_t) ==
+
715  sizeof(typename std::iterator_traits<RandomAccessIter>::value_type))
+
716  || !std::numeric_limits<typename
+
717  std::iterator_traits<RandomAccessIter>::value_type>::is_iec559);
+
718  std::sort(first, last);
+
719  }
+
720 
+
721  //These approaches require the user to do the typecast
+
722  //with rshift but default comparision
+
723  template <class RandomAccessIter, class Div_type, class Right_shift>
+
724  inline typename boost::enable_if_c< sizeof(size_t) >= sizeof(Div_type),
+
725  void >::type
+
726  float_sort(RandomAccessIter first, RandomAccessIter last, Div_type,
+
727  Right_shift rshift)
+
728  {
+
729  size_t bin_sizes[1 << max_splits];
+
730  std::vector<RandomAccessIter> bin_cache;
+
731  float_sort_rec<RandomAccessIter, Div_type, Right_shift, size_t>
+
732  (first, last, bin_cache, 0, bin_sizes, rshift);
+
733  }
+
734 
+
735  //maximum integer size with rshift but default comparision
+
736  template <class RandomAccessIter, class Div_type, class Right_shift>
+
737  inline typename boost::enable_if_c< sizeof(size_t) < sizeof(Div_type)
+
738  && sizeof(boost::uintmax_t) >= sizeof(Div_type), void >::type
+
739  float_sort(RandomAccessIter first, RandomAccessIter last, Div_type,
+
740  Right_shift rshift)
+
741  {
+
742  size_t bin_sizes[1 << max_splits];
+
743  std::vector<RandomAccessIter> bin_cache;
+
744  float_sort_rec<RandomAccessIter, Div_type, Right_shift, boost::uintmax_t>
+
745  (first, last, bin_cache, 0, bin_sizes, rshift);
+
746  }
+
747 
+
748  //sizeof(Div_type) doesn't match, so use std::sort
+
749  template <class RandomAccessIter, class Div_type, class Right_shift>
+
750  inline typename boost::disable_if_c< sizeof(boost::uintmax_t) >=
+
751  sizeof(Div_type), void >::type
+
752  float_sort(RandomAccessIter first, RandomAccessIter last, Div_type,
+
753  Right_shift rshift)
+
754  {
+
755  BOOST_STATIC_WARNING(sizeof(boost::uintmax_t) >= sizeof(Div_type));
+
756  std::sort(first, last);
+
757  }
+
758 
+
759  //specialized comparison
+
760  template <class RandomAccessIter, class Div_type, class Right_shift,
+
761  class Compare>
+
762  inline typename boost::enable_if_c< sizeof(size_t) >= sizeof(Div_type),
+
763  void >::type
+
764  float_sort(RandomAccessIter first, RandomAccessIter last, Div_type,
+
765  Right_shift rshift, Compare comp)
+
766  {
+
767  size_t bin_sizes[1 << max_splits];
+
768  std::vector<RandomAccessIter> bin_cache;
+
769  float_sort_rec<RandomAccessIter, Div_type, Right_shift, Compare,
+
770  size_t>
+
771  (first, last, bin_cache, 0, bin_sizes, rshift, comp);
+
772  }
+
773 
+
774  //max-sized integer with specialized comparison
+
775  template <class RandomAccessIter, class Div_type, class Right_shift,
+
776  class Compare>
+
777  inline typename boost::enable_if_c< sizeof(size_t) < sizeof(Div_type)
+
778  && sizeof(boost::uintmax_t) >= sizeof(Div_type), void >::type
+
779  float_sort(RandomAccessIter first, RandomAccessIter last, Div_type,
+
780  Right_shift rshift, Compare comp)
+
781  {
+
782  size_t bin_sizes[1 << max_splits];
+
783  std::vector<RandomAccessIter> bin_cache;
+
784  float_sort_rec<RandomAccessIter, Div_type, Right_shift, Compare,
+
785  boost::uintmax_t>
+
786  (first, last, bin_cache, 0, bin_sizes, rshift, comp);
+
787  }
+
788 
+
789  //sizeof(Div_type) doesn't match, so use std::sort
+
790  template <class RandomAccessIter, class Div_type, class Right_shift,
+
791  class Compare>
+
792  inline typename boost::disable_if_c< sizeof(boost::uintmax_t) >=
+
793  sizeof(Div_type), void >::type
+
794  float_sort(RandomAccessIter first, RandomAccessIter last, Div_type,
+
795  Right_shift rshift, Compare comp)
+
796  {
+
797  BOOST_STATIC_WARNING(sizeof(boost::uintmax_t) >= sizeof(Div_type));
+
798  std::sort(first, last, comp);
+
799  }
+
800  }
+
801 }
+
802 }
+
803 
+
804 #endif
+
void float_sort_rec(RandomAccessIter first, RandomAccessIter last, std::vector< RandomAccessIter > &bin_cache, unsigned cache_offset, size_t *bin_sizes)
Definition: float_sort.hpp:379
+
Definition: constants.hpp:11
+
Cast_type cast_float_iter(const RandomAccessIter &floatiter)
Definition: float_sort.hpp:37
+ + +
void inner_float_swap_loop(RandomAccessIter *bins, const RandomAccessIter &nextbinstart, unsigned ii, const unsigned log_divisor, const Div_type div_min)
Definition: float_sort.hpp:74
+
size_t get_min_count(unsigned log_range)
Definition: spreadsort_common.hpp:51
+
Definition: constants.hpp:19
+ +
void float_swap_loop(RandomAccessIter *bins, RandomAccessIter &nextbinstart, unsigned ii, const size_t *bin_sizes, const unsigned log_divisor, const Div_type div_min)
Definition: float_sort.hpp:107
+
unsigned rough_log_2_size(const T &input)
Definition: spreadsort_common.hpp:34
+
bool is_sorted_or_find_extremes(RandomAccessIter current, RandomAccessIter last, Div_type &max, Div_type &min, Right_shift rshift)
Definition: float_sort.hpp:54
+ +
RandomAccessIter * size_bins(size_t *bin_sizes, std::vector< RandomAccessIter > &bin_cache, unsigned cache_offset, unsigned &cache_end, unsigned bin_count)
Definition: spreadsort_common.hpp:106
+ + +
void negative_float_sort_rec(RandomAccessIter first, RandomAccessIter last, std::vector< RandomAccessIter > &bin_cache, unsigned cache_offset, size_t *bin_sizes)
Definition: float_sort.hpp:201
+
void positive_float_sort_rec(RandomAccessIter first, RandomAccessIter last, std::vector< RandomAccessIter > &bin_cache, unsigned cache_offset, size_t *bin_sizes)
Definition: float_sort.hpp:142
+
boost::enable_if_c< sizeof(boost::uint32_t)==sizeof(typename std::iterator_traits< RandomAccessIter >::value_type)&&std::numeric_limits< typename std::iterator_traits< RandomAccessIter >::value_type >::is_iec559, void >::type float_sort(RandomAccessIter first, RandomAccessIter last)
Definition: float_sort.hpp:679
+
+ + + + diff --git a/doc/doxygen/html/detail_2integer__sort_8hpp.html b/doc/doxygen/html/detail_2integer__sort_8hpp.html new file mode 100644 index 0000000..440b084 --- /dev/null +++ b/doc/doxygen/html/detail_2integer__sort_8hpp.html @@ -0,0 +1,111 @@ + + + + + + +Boost.Sort: I:/modular-boost/libs/sort/include/boost/sort/spreadsort/detail/integer_sort.hpp File Reference + + + + + + + + + + +
+
+ + + + + + +
+
Boost.Sort +
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+
+
integer_sort.hpp File Reference
+
+
+
#include <algorithm>
+#include <vector>
+#include <limits>
+#include <functional>
+#include <boost/static_assert.hpp>
+#include <boost/serialization/static_warning.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/sort/spreadsort/detail/constants.hpp>
+#include <boost/sort/spreadsort/detail/spreadsort_common.hpp>
+#include <boost/cstdint.hpp>
+
+

Go to the source code of this file.

+
+ + + + diff --git a/doc/doxygen/html/detail_2integer__sort_8hpp_source.html b/doc/doxygen/html/detail_2integer__sort_8hpp_source.html new file mode 100644 index 0000000..46765a1 --- /dev/null +++ b/doc/doxygen/html/detail_2integer__sort_8hpp_source.html @@ -0,0 +1,608 @@ + + + + + + +Boost.Sort: I:/modular-boost/libs/sort/include/boost/sort/spreadsort/detail/integer_sort.hpp Source File + + + + + + + + + + +
+
+ + + + + + +
+
Boost.Sort +
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+
+
integer_sort.hpp
+
+
+Go to the documentation of this file.
1 // Details for templated Spreadsort-based integer_sort.
+
2 
+
3 // Copyright Steven J. Ross 2001 - 2014.
+
4 // Distributed under the Boost Software License, Version 1.0.
+
5 // (See accompanying file LICENSE_1_0.txt or copy at
+
6 // http://www.boost.org/LICENSE_1_0.txt)
+
7 
+
8 // See http://www.boost.org/libs/sort for library home page.
+
9 
+
10 /*
+
11 Some improvements suggested by:
+
12 Phil Endecott and Frank Gennari
+
13 */
+
14 
+
15 #ifndef BOOST_SORT_SPREADSORT_DETAIL_INTEGER_SORT_HPP
+
16 #define BOOST_SORT_SPREADSORT_DETAIL_INTEGER_SORT_HPP
+
17 #include <algorithm>
+
18 #include <vector>
+
19 #include <limits>
+
20 #include <functional>
+
21 #include <boost/static_assert.hpp>
+
22 #include <boost/serialization/static_warning.hpp>
+
23 #include <boost/utility/enable_if.hpp>
+ + +
26 #include <boost/cstdint.hpp>
+
27 
+
28 //! \cond DETAIL
+
29 
+
30 namespace boost {
+
31 namespace sort {
+
32  namespace detail {
+
33  // Return true if the list is sorted. Otherwise, find the minimum and
+
34  // maximum using <.
+
35  template <class RandomAccessIter>
+
36  inline bool
+
37  is_sorted_or_find_extremes(RandomAccessIter current, RandomAccessIter last,
+
38  RandomAccessIter & max, RandomAccessIter & min)
+
39  {
+
40  min = max = current;
+
41  //This assumes we have more than 1 element based on prior checks.
+
42  while (!(*(current + 1) < *current)) {
+
43  //If everything is in sorted order, return
+
44  if (++current == last - 1)
+
45  return true;
+
46  }
+
47 
+
48  //The maximum is the last sorted element
+
49  max = current;
+
50  //Start from the first unsorted element
+
51  while (++current < last) {
+
52  if (*max < *current)
+
53  max = current;
+
54  else if (*current < *min)
+
55  min = current;
+
56  }
+
57  return false;
+
58  }
+
59 
+
60  // Return true if the list is sorted. Otherwise, find the minimum and
+
61  // maximum.
+
62  // Use a user-defined comparison operator
+
63  template <class RandomAccessIter, class Compare>
+
64  inline bool
+
65  is_sorted_or_find_extremes(RandomAccessIter current, RandomAccessIter last,
+
66  RandomAccessIter & max, RandomAccessIter & min, Compare comp)
+
67  {
+
68  min = max = current;
+
69  while (!comp(*(current + 1), *current)) {
+
70  //If everything is in sorted order, return
+
71  if (++current == last - 1)
+
72  return true;
+
73  }
+
74 
+
75  //The maximum is the last sorted element
+
76  max = current;
+
77  while (++current < last) {
+
78  if (comp(*max, *current))
+
79  max = current;
+
80  else if (comp(*current, *min))
+
81  min = current;
+
82  }
+
83  return false;
+
84  }
+
85 
+
86  //Gets a non-negative right bit shift to operate as a logarithmic divisor
+
87  template<unsigned log_mean_bin_size>
+
88  inline int
+
89  get_log_divisor(size_t count, int log_range)
+
90  {
+
91  int log_divisor;
+
92  //If we can finish in one iteration without exceeding either
+
93  //(2 to the max_finishing_splits) or n bins, do so
+
94  if ((log_divisor = log_range - rough_log_2_size(count)) <= 0 &&
+
95  log_range <= max_finishing_splits)
+
96  log_divisor = 0;
+
97  else {
+
98  //otherwise divide the data into an optimized number of pieces
+
99  log_divisor += log_mean_bin_size;
+
100  //Cannot exceed max_splits or cache misses slow down bin lookups
+
101  if ((log_range - log_divisor) > max_splits)
+
102  log_divisor = log_range - max_splits;
+
103  }
+
104  return log_divisor;
+
105  }
+
106 
+
107  //Implementation for recursive integer sorting
+
108  template <class RandomAccessIter, class Div_type, class Size_type>
+
109  inline void
+
110  spreadsort_rec(RandomAccessIter first, RandomAccessIter last,
+
111  std::vector<RandomAccessIter> &bin_cache, unsigned cache_offset
+
112  , size_t *bin_sizes)
+
113  {
+
114  //This step is roughly 10% of runtime, but it helps avoid worst-case
+
115  //behavior and improve behavior with real data
+
116  //If you know the maximum and minimum ahead of time, you can pass those
+
117  //values in and skip this step for the first iteration
+
118  RandomAccessIter max, min;
+
119  if (is_sorted_or_find_extremes(first, last, max, min))
+
120  return;
+
121  RandomAccessIter * target_bin;
+
122  unsigned log_divisor = get_log_divisor<int_log_mean_bin_size>(
+
123  last - first, rough_log_2_size(Size_type((*max >> 0) - (*min >> 0))));
+
124  Div_type div_min = *min >> log_divisor;
+
125  Div_type div_max = *max >> log_divisor;
+
126  unsigned bin_count = unsigned(div_max - div_min) + 1;
+
127  unsigned cache_end;
+
128  RandomAccessIter * bins =
+
129  size_bins(bin_sizes, bin_cache, cache_offset, cache_end, bin_count);
+
130 
+
131  //Calculating the size of each bin; this takes roughly 10% of runtime
+
132  for (RandomAccessIter current = first; current != last;)
+
133  bin_sizes[size_t((*(current++) >> log_divisor) - div_min)]++;
+
134  //Assign the bin positions
+
135  bins[0] = first;
+
136  for (unsigned u = 0; u < bin_count - 1; u++)
+
137  bins[u + 1] = bins[u] + bin_sizes[u];
+
138 
+
139  RandomAccessIter nextbinstart = first;
+
140  //Swap into place
+
141  //This dominates runtime, mostly in the swap and bin lookups
+
142  for (unsigned u = 0; u < bin_count - 1; ++u) {
+
143  RandomAccessIter * local_bin = bins + u;
+
144  nextbinstart += bin_sizes[u];
+
145  //Iterating over each element in this bin
+
146  for (RandomAccessIter current = *local_bin; current < nextbinstart;
+
147  ++current) {
+
148  //Swapping elements in current into place until the correct
+
149  //element has been swapped in
+
150  for (target_bin = (bins + ((*current >> log_divisor) - div_min));
+
151  target_bin != local_bin;
+
152  target_bin = bins + ((*current >> log_divisor) - div_min)) {
+
153  //3-way swap; this is about 1% faster than a 2-way swap
+
154  //The main advantage is less copies are involved per item
+
155  //put in the correct place
+
156  typename std::iterator_traits<RandomAccessIter>::value_type tmp;
+
157  RandomAccessIter b = (*target_bin)++;
+
158  RandomAccessIter * b_bin = bins + ((*b >> log_divisor) - div_min);
+
159  if (b_bin != local_bin) {
+
160  RandomAccessIter c = (*b_bin)++;
+
161  tmp = *c;
+
162  *c = *b;
+
163  }
+
164  else
+
165  tmp = *b;
+
166  *b = *current;
+
167  *current = tmp;
+
168  }
+
169  }
+
170  *local_bin = nextbinstart;
+
171  }
+
172  bins[bin_count - 1] = last;
+
173 
+
174  //If we've bucketsorted, the array is sorted and we should skip recursion
+
175  if (!log_divisor)
+
176  return;
+
177  //log_divisor is the remaining range; calculating the comparison threshold
+
178  size_t max_count =
+ +
180  int_log_finishing_count>(log_divisor);
+
181 
+
182  //Recursing
+
183  RandomAccessIter lastPos = first;
+
184  for (unsigned u = cache_offset; u < cache_end; lastPos = bin_cache[u],
+
185  ++u) {
+
186  Size_type count = bin_cache[u] - lastPos;
+
187  //don't sort unless there are at least two items to Compare
+
188  if (count < 2)
+
189  continue;
+
190  //using std::sort if its worst-case is better
+
191  if (count < max_count)
+
192  std::sort(lastPos, bin_cache[u]);
+
193  else
+
194  spreadsort_rec<RandomAccessIter, Div_type, Size_type>(lastPos,
+
195  bin_cache[u],
+
196  bin_cache,
+
197  cache_end,
+
198  bin_sizes);
+
199  }
+
200  }
+
201 
+
202  //Generic bitshift-based 3-way swapping code
+
203  template <class RandomAccessIter, class Div_type, class Right_shift>
+
204  inline void inner_swap_loop(RandomAccessIter * bins,
+
205  const RandomAccessIter & next_bin_start, unsigned ii, Right_shift &rshift
+
206  , const unsigned log_divisor, const Div_type div_min)
+
207  {
+
208  RandomAccessIter * local_bin = bins + ii;
+
209  for (RandomAccessIter current = *local_bin; current < next_bin_start;
+
210  ++current) {
+
211  for (RandomAccessIter * target_bin =
+
212  (bins + (rshift(*current, log_divisor) - div_min));
+
213  target_bin != local_bin;
+
214  target_bin = bins + (rshift(*current, log_divisor) - div_min)) {
+
215  typename std::iterator_traits<RandomAccessIter>::value_type tmp;
+
216  RandomAccessIter b = (*target_bin)++;
+
217  RandomAccessIter * b_bin =
+
218  bins + (rshift(*b, log_divisor) - div_min);
+
219  //Three-way swap; if the item to be swapped doesn't belong
+
220  //in the current bin, swap it to where it belongs
+
221  if (b_bin != local_bin) {
+
222  RandomAccessIter c = (*b_bin)++;
+
223  tmp = *c;
+
224  *c = *b;
+
225  }
+
226  //Note: we could increment current once the swap is done in this case
+
227  //but that seems to impair performance
+
228  else
+
229  tmp = *b;
+
230  *b = *current;
+
231  *current = tmp;
+
232  }
+
233  }
+
234  *local_bin = next_bin_start;
+
235  }
+
236 
+
237  //Standard swapping wrapper for ascending values
+
238  template <class RandomAccessIter, class Div_type, class Right_shift>
+
239  inline void swap_loop(RandomAccessIter * bins,
+
240  RandomAccessIter & next_bin_start, unsigned ii, Right_shift &rshift
+
241  , const size_t *bin_sizes
+
242  , const unsigned log_divisor, const Div_type div_min)
+
243  {
+
244  next_bin_start += bin_sizes[ii];
+
245  inner_swap_loop<RandomAccessIter, Div_type, Right_shift>(bins,
+
246  next_bin_start, ii, rshift, log_divisor, div_min);
+
247  }
+
248 
+
249  //Functor implementation for recursive sorting
+
250  template <class RandomAccessIter, class Div_type, class Right_shift,
+
251  class Compare, class Size_type, unsigned log_mean_bin_size,
+
252  unsigned log_min_split_count, unsigned log_finishing_count>
+
253  inline void
+
254  spreadsort_rec(RandomAccessIter first, RandomAccessIter last,
+
255  std::vector<RandomAccessIter> &bin_cache, unsigned cache_offset
+
256  , size_t *bin_sizes, Right_shift rshift, Compare comp)
+
257  {
+
258  RandomAccessIter max, min;
+
259  if (is_sorted_or_find_extremes(first, last, max, min, comp))
+
260  return;
+
261  unsigned log_divisor = get_log_divisor<log_mean_bin_size>(last - first,
+
262  rough_log_2_size(Size_type(rshift(*max, 0) - rshift(*min, 0))));
+
263  Div_type div_min = rshift(*min, log_divisor);
+
264  Div_type div_max = rshift(*max, log_divisor);
+
265  unsigned bin_count = unsigned(div_max - div_min) + 1;
+
266  unsigned cache_end;
+
267  RandomAccessIter * bins = size_bins(bin_sizes, bin_cache, cache_offset,
+
268  cache_end, bin_count);
+
269 
+
270  //Calculating the size of each bin
+
271  for (RandomAccessIter current = first; current != last;)
+
272  bin_sizes[unsigned(rshift(*(current++), log_divisor) - div_min)]++;
+
273  bins[0] = first;
+
274  for (unsigned u = 0; u < bin_count - 1; u++)
+
275  bins[u + 1] = bins[u] + bin_sizes[u];
+
276 
+
277  //Swap into place
+
278  RandomAccessIter next_bin_start = first;
+
279  for (unsigned u = 0; u < bin_count - 1; ++u)
+
280  swap_loop<RandomAccessIter, Div_type, Right_shift>(bins, next_bin_start,
+
281  u, rshift, bin_sizes, log_divisor, div_min);
+
282  bins[bin_count - 1] = last;
+
283 
+
284  //If we've bucketsorted, the array is sorted
+
285  if (!log_divisor)
+
286  return;
+
287 
+
288  //Recursing
+
289  size_t max_count = get_min_count<log_mean_bin_size, log_min_split_count,
+
290  log_finishing_count>(log_divisor);
+
291  RandomAccessIter lastPos = first;
+
292  for (unsigned u = cache_offset; u < cache_end; lastPos = bin_cache[u],
+
293  ++u) {
+
294  size_t count = bin_cache[u] - lastPos;
+
295  if (count < 2)
+
296  continue;
+
297  if (count < max_count)
+
298  std::sort(lastPos, bin_cache[u], comp);
+
299  else
+
300  spreadsort_rec<RandomAccessIter, Div_type, Right_shift, Compare,
+
301  Size_type, log_mean_bin_size, log_min_split_count, log_finishing_count>
+
302  (lastPos, bin_cache[u], bin_cache, cache_end, bin_sizes, rshift, comp);
+
303  }
+
304  }
+
305 
+
306  //Functor implementation for recursive sorting with only Shift overridden
+
307  template <class RandomAccessIter, class Div_type, class Right_shift,
+
308  class Size_type, unsigned log_mean_bin_size,
+
309  unsigned log_min_split_count, unsigned log_finishing_count>
+
310  inline void
+
311  spreadsort_rec(RandomAccessIter first, RandomAccessIter last,
+
312  std::vector<RandomAccessIter> &bin_cache, unsigned cache_offset
+
313  , size_t *bin_sizes, Right_shift rshift)
+
314  {
+
315  RandomAccessIter max, min;
+
316  if (is_sorted_or_find_extremes(first, last, max, min))
+
317  return;
+
318  unsigned log_divisor = get_log_divisor<log_mean_bin_size>(last - first,
+
319  rough_log_2_size(Size_type(rshift(*max, 0) - rshift(*min, 0))));
+
320  Div_type div_min = rshift(*min, log_divisor);
+
321  Div_type div_max = rshift(*max, log_divisor);
+
322  unsigned bin_count = unsigned(div_max - div_min) + 1;
+
323  unsigned cache_end;
+
324  RandomAccessIter * bins = size_bins(bin_sizes, bin_cache, cache_offset,
+
325  cache_end, bin_count);
+
326 
+
327  //Calculating the size of each bin
+
328  for (RandomAccessIter current = first; current != last;)
+
329  bin_sizes[unsigned(rshift(*(current++), log_divisor) - div_min)]++;
+
330  bins[0] = first;
+
331  for (unsigned u = 0; u < bin_count - 1; u++)
+
332  bins[u + 1] = bins[u] + bin_sizes[u];
+
333 
+
334  //Swap into place
+
335  RandomAccessIter nextbinstart = first;
+
336  for (unsigned ii = 0; ii < bin_count - 1; ++ii)
+
337  swap_loop<RandomAccessIter, Div_type, Right_shift>(bins, nextbinstart,
+
338  ii, rshift, bin_sizes, log_divisor, div_min);
+
339  bins[bin_count - 1] = last;
+
340 
+
341  //If we've bucketsorted, the array is sorted
+
342  if (!log_divisor)
+
343  return;
+
344 
+
345  //Recursing
+
346  size_t max_count = get_min_count<log_mean_bin_size, log_min_split_count,
+
347  log_finishing_count>(log_divisor);
+
348  RandomAccessIter lastPos = first;
+
349  for (unsigned u = cache_offset; u < cache_end; lastPos = bin_cache[u],
+
350  ++u) {
+
351  size_t count = bin_cache[u] - lastPos;
+
352  if (count < 2)
+
353  continue;
+
354  if (count < max_count)
+
355  std::sort(lastPos, bin_cache[u]);
+
356  else
+
357  spreadsort_rec<RandomAccessIter, Div_type, Right_shift, Size_type,
+
358  log_mean_bin_size, log_min_split_count, log_finishing_count>(lastPos,
+
359  bin_cache[u], bin_cache, cache_end, bin_sizes, rshift);
+
360  }
+
361  }
+
362 
+
363  //Holds the bin vector and makes the initial recursive call
+
364  template <class RandomAccessIter, class Div_type>
+
365  //Only use spreadsort if the integer can fit in a size_t
+
366  inline typename boost::enable_if_c< sizeof(Div_type) <= sizeof(size_t),
+
367  void >::type
+
368  integer_sort(RandomAccessIter first, RandomAccessIter last, Div_type)
+
369  {
+
370  size_t bin_sizes[1 << max_finishing_splits];
+
371  std::vector<RandomAccessIter> bin_cache;
+
372  spreadsort_rec<RandomAccessIter, Div_type, size_t>(first, last,
+
373  bin_cache, 0, bin_sizes);
+
374  }
+
375 
+
376  //Holds the bin vector and makes the initial recursive call
+
377  template <class RandomAccessIter, class Div_type>
+
378  //Only use spreadsort if the integer can fit in a uintmax_t
+
379  inline typename boost::enable_if_c< (sizeof(Div_type) > sizeof(size_t))
+
380  && sizeof(Div_type) <= sizeof(boost::uintmax_t), void >::type
+
381  integer_sort(RandomAccessIter first, RandomAccessIter last, Div_type)
+
382  {
+
383  size_t bin_sizes[1 << max_finishing_splits];
+
384  std::vector<RandomAccessIter> bin_cache;
+
385  spreadsort_rec<RandomAccessIter, Div_type, boost::uintmax_t>(first,
+
386  last, bin_cache, 0, bin_sizes);
+
387  }
+
388 
+
389  template <class RandomAccessIter, class Div_type>
+
390  inline typename boost::disable_if_c< sizeof(Div_type) <= sizeof(size_t)
+
391  || sizeof(Div_type) <= sizeof(boost::uintmax_t), void >::type
+
392  //defaulting to std::sort when integer_sort won't work
+
393  integer_sort(RandomAccessIter first, RandomAccessIter last, Div_type)
+
394  {
+
395  //Warning that we're using std::sort, even though integer_sort was called
+
396  BOOST_STATIC_WARNING( sizeof(Div_type) <= sizeof(size_t) );
+
397  std::sort(first, last);
+
398  }
+
399 
+
400 
+
401  //Same for the full functor version
+
402  template <class RandomAccessIter, class Div_type, class Right_shift,
+
403  class Compare>
+
404  //Only use spreadsort if the integer can fit in a size_t
+
405  inline typename boost::enable_if_c< sizeof(Div_type) <= sizeof(size_t),
+
406  void >::type
+
407  integer_sort(RandomAccessIter first, RandomAccessIter last, Div_type,
+
408  Right_shift shift, Compare comp)
+
409  {
+
410  size_t bin_sizes[1 << max_finishing_splits];
+
411  std::vector<RandomAccessIter> bin_cache;
+
412  spreadsort_rec<RandomAccessIter, Div_type, Right_shift, Compare,
+ + +
415  (first, last, bin_cache, 0, bin_sizes, shift, comp);
+
416  }
+
417 
+
418  template <class RandomAccessIter, class Div_type, class Right_shift,
+
419  class Compare>
+
420  //Only use spreadsort if the integer can fit in a uintmax_t
+
421  inline typename boost::enable_if_c< (sizeof(Div_type) > sizeof(size_t))
+
422  && sizeof(Div_type) <= sizeof(boost::uintmax_t), void >::type
+
423  integer_sort(RandomAccessIter first, RandomAccessIter last, Div_type,
+
424  Right_shift shift, Compare comp)
+
425  {
+
426  size_t bin_sizes[1 << max_finishing_splits];
+
427  std::vector<RandomAccessIter> bin_cache;
+
428  spreadsort_rec<RandomAccessIter, Div_type, Right_shift, Compare,
+
429  boost::uintmax_t, int_log_mean_bin_size,
+ +
431  (first, last, bin_cache, 0, bin_sizes, shift, comp);
+
432  }
+
433 
+
434  template <class RandomAccessIter, class Div_type, class Right_shift,
+
435  class Compare>
+
436  inline typename boost::disable_if_c< sizeof(Div_type) <= sizeof(size_t)
+
437  || sizeof(Div_type) <= sizeof(boost::uintmax_t), void >::type
+
438  //defaulting to std::sort when integer_sort won't work
+
439  integer_sort(RandomAccessIter first, RandomAccessIter last, Div_type,
+
440  Right_shift shift, Compare comp)
+
441  {
+
442  //Warning that we're using std::sort, even though integer_sort was called
+
443  BOOST_STATIC_WARNING( sizeof(Div_type) <= sizeof(size_t) );
+
444  std::sort(first, last, comp);
+
445  }
+
446 
+
447 
+
448  //Same for the right shift version
+
449  template <class RandomAccessIter, class Div_type, class Right_shift>
+
450  //Only use spreadsort if the integer can fit in a size_t
+
451  inline typename boost::enable_if_c< sizeof(Div_type) <= sizeof(size_t),
+
452  void >::type
+
453  integer_sort(RandomAccessIter first, RandomAccessIter last, Div_type,
+
454  Right_shift shift)
+
455  {
+
456  size_t bin_sizes[1 << max_finishing_splits];
+
457  std::vector<RandomAccessIter> bin_cache;
+
458  spreadsort_rec<RandomAccessIter, Div_type, Right_shift, size_t,
+ + +
461  (first, last, bin_cache, 0, bin_sizes, shift);
+
462  }
+
463 
+
464  template <class RandomAccessIter, class Div_type, class Right_shift>
+
465  //Only use spreadsort if the integer can fit in a uintmax_t
+
466  inline typename boost::enable_if_c< (sizeof(Div_type) > sizeof(size_t))
+
467  && sizeof(Div_type) <= sizeof(boost::uintmax_t), void >::type
+
468  integer_sort(RandomAccessIter first, RandomAccessIter last, Div_type,
+
469  Right_shift shift)
+
470  {
+
471  size_t bin_sizes[1 << max_finishing_splits];
+
472  std::vector<RandomAccessIter> bin_cache;
+
473  spreadsort_rec<RandomAccessIter, Div_type, Right_shift,
+
474  boost::uintmax_t, int_log_mean_bin_size,
+ +
476  (first, last, bin_cache, 0, bin_sizes, shift);
+
477  }
+
478 
+
479  template <class RandomAccessIter, class Div_type, class Right_shift>
+
480  inline typename boost::disable_if_c< sizeof(Div_type) <= sizeof(size_t)
+
481  || sizeof(Div_type) <= sizeof(boost::uintmax_t), void >::type
+
482  //defaulting to std::sort when integer_sort won't work
+
483  integer_sort(RandomAccessIter first, RandomAccessIter last, Div_type,
+
484  Right_shift shift)
+
485  {
+
486  //Warning that we're using std::sort, even though integer_sort was called
+
487  BOOST_STATIC_WARNING( sizeof(Div_type) <= sizeof(size_t) );
+
488  std::sort(first, last);
+
489  }
+
490  }
+
491 }
+
492 }
+
493 //! \endcond
+
494 
+
495 #endif
+
496 
+
void integer_sort(RandomAccessIter first, RandomAccessIter last)
Integer sort algorithm using random access iterators. (All variants fall back to std::sort if the dat...
Definition: integer_sort.hpp:78
+
Definition: constants.hpp:11
+ +
Definition: constants.hpp:22
+
size_t get_min_count(unsigned log_range)
Definition: spreadsort_common.hpp:51
+ +
Definition: constants.hpp:19
+ +
unsigned rough_log_2_size(const T &input)
Definition: spreadsort_common.hpp:34
+
bool is_sorted_or_find_extremes(RandomAccessIter current, RandomAccessIter last, Div_type &max, Div_type &min, Right_shift rshift)
Definition: float_sort.hpp:54
+ +
RandomAccessIter * size_bins(size_t *bin_sizes, std::vector< RandomAccessIter > &bin_cache, unsigned cache_offset, unsigned &cache_end, unsigned bin_count)
Definition: spreadsort_common.hpp:106
+
Definition: constants.hpp:24
+
+ + + + diff --git a/doc/doxygen/html/detail_2string__sort_8hpp.html b/doc/doxygen/html/detail_2string__sort_8hpp.html new file mode 100644 index 0000000..9bbbbfc --- /dev/null +++ b/doc/doxygen/html/detail_2string__sort_8hpp.html @@ -0,0 +1,159 @@ + + + + + + +Boost.Sort: I:/modular-boost/libs/sort/include/boost/sort/spreadsort/detail/string_sort.hpp File Reference + + + + + + + + + + +
+
+ + + + + + +
+
Boost.Sort +
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
string_sort.hpp File Reference
+
+
+
#include <algorithm>
+#include <vector>
+#include <cstring>
+#include <limits>
+#include <functional>
+#include <boost/static_assert.hpp>
+#include <boost/serialization/static_warning.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/sort/spreadsort/detail/constants.hpp>
+#include <boost/sort/spreadsort/detail/spreadsort_common.hpp>
+#include <boost/cstdint.hpp>
+
+

Go to the source code of this file.

+ + + + + + + + +

+Classes

struct  boost::sort::detail::offset_less_than< Data_type, Unsigned_char_type >
 
struct  boost::sort::detail::offset_greater_than< Data_type, Unsigned_char_type >
 
struct  boost::sort::detail::offset_char_less_than< Data_type, Get_char, Get_length >
 
+ + + + + + + +

+Namespaces

 boost
 
 boost::sort
 
 boost::sort::detail
 
+ + + + + + + + + + + + + + + + + + + + + + +

+Functions

template<class RandomAccessIter , class Unsigned_char_type >
void boost::sort::detail::update_offset (RandomAccessIter first, RandomAccessIter finish, size_t &char_offset)
 
template<class RandomAccessIter , class Get_char , class Get_length >
void boost::sort::detail::update_offset (RandomAccessIter first, RandomAccessIter finish, size_t &char_offset, Get_char getchar, Get_length length)
 
template<class RandomAccessIter , class Unsigned_char_type >
void boost::sort::detail::string_sort_rec (RandomAccessIter first, RandomAccessIter last, size_t char_offset, std::vector< RandomAccessIter > &bin_cache, unsigned cache_offset, size_t *bin_sizes)
 
template<class RandomAccessIter , class Unsigned_char_type >
void boost::sort::detail::reverse_string_sort_rec (RandomAccessIter first, RandomAccessIter last, size_t char_offset, std::vector< RandomAccessIter > &bin_cache, unsigned cache_offset, size_t *bin_sizes)
 
template<class RandomAccessIter , class Unsigned_char_type , class Get_char , class Get_length >
void boost::sort::detail::string_sort_rec (RandomAccessIter first, RandomAccessIter last, size_t char_offset, std::vector< RandomAccessIter > &bin_cache, unsigned cache_offset, size_t *bin_sizes, Get_char getchar, Get_length length)
 
template<class RandomAccessIter , class Unsigned_char_type , class Get_char , class Get_length , class Compare >
void boost::sort::detail::string_sort_rec (RandomAccessIter first, RandomAccessIter last, size_t char_offset, std::vector< RandomAccessIter > &bin_cache, unsigned cache_offset, size_t *bin_sizes, Get_char getchar, Get_length length, Compare comp)
 
template<class RandomAccessIter , class Unsigned_char_type , class Get_char , class Get_length , class Compare >
void boost::sort::detail::reverse_string_sort_rec (RandomAccessIter first, RandomAccessIter last, size_t char_offset, std::vector< RandomAccessIter > &bin_cache, unsigned cache_offset, size_t *bin_sizes, Get_char getchar, Get_length length, Compare comp)
 
+
+ + + + diff --git a/doc/doxygen/html/detail_2string__sort_8hpp_source.html b/doc/doxygen/html/detail_2string__sort_8hpp_source.html new file mode 100644 index 0000000..e434659 --- /dev/null +++ b/doc/doxygen/html/detail_2string__sort_8hpp_source.html @@ -0,0 +1,939 @@ + + + + + + +Boost.Sort: I:/modular-boost/libs/sort/include/boost/sort/spreadsort/detail/string_sort.hpp Source File + + + + + + + + + + +
+
+ + + + + + +
+
Boost.Sort +
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+
+
string_sort.hpp
+
+
+Go to the documentation of this file.
1 // Details for a templated general-case hybrid-radix string_sort.
+
2 
+
3 // Copyright Steven J. Ross 2001 - 2014.
+
4 // Distributed under the Boost Software License, Version 1.0.
+
5 // (See accompanying file LICENSE_1_0.txt or copy at
+
6 // http://www.boost.org/LICENSE_1_0.txt)
+
7 
+
8 // See http://www.boost.org/libs/sort for library home page.
+
9 
+
10 /*
+
11 Some improvements suggested by:
+
12 Phil Endecott and Frank Gennari
+
13 */
+
14 
+
15 #ifndef BOOST_SORT_SPREADSORT_DETAIL_SPREAD_SORT_HPP
+
16 #define BOOST_SORT_SPREADSORT_DETAIL_SPREAD_SORT_HPP
+
17 #include <algorithm>
+
18 #include <vector>
+
19 #include <cstring>
+
20 #include <limits>
+
21 #include <functional>
+
22 #include <boost/static_assert.hpp>
+
23 #include <boost/serialization/static_warning.hpp>
+
24 #include <boost/utility/enable_if.hpp>
+ + +
27 #include <boost/cstdint.hpp>
+
28 
+
29 namespace boost {
+
30 namespace sort {
+
31  namespace detail {
+
32  static const int max_step_size = 64;
+
33 
+
34  //Offsetting on identical characters. This function works a chunk of
+
35  //characters at a time for cache efficiency and optimal worst-case
+
36  //performance.
+
37  template<class RandomAccessIter, class Unsigned_char_type>
+
38  inline void
+
39  update_offset(RandomAccessIter first, RandomAccessIter finish,
+
40  size_t &char_offset)
+
41  {
+
42  const int char_size = sizeof(Unsigned_char_type);
+
43  size_t nextOffset = char_offset;
+
44  int step_size = max_step_size;
+
45  while (true) {
+
46  RandomAccessIter curr = first;
+
47  do {
+
48  //Ignore empties, but if the nextOffset would exceed the length or
+
49  //not match, exit; we've found the last matching character
+
50  //This will reduce the step_size if the current step doesn't match.
+
51  if ((*curr).size() > char_offset) {
+
52  if((*curr).size() <= (nextOffset + step_size)) {
+
53  step_size = (*curr).size() - nextOffset - 1;
+
54  if (step_size < 1) {
+
55  char_offset = nextOffset;
+
56  return;
+
57  }
+
58  }
+
59  const int step_byte_size = step_size * char_size;
+
60  if (memcmp(curr->data() + nextOffset, first->data() + nextOffset,
+
61  step_byte_size) != 0) {
+
62  if (step_size == 1) {
+
63  char_offset = nextOffset;
+
64  return;
+
65  }
+
66  step_size = (step_size > 4) ? 4 : 1;
+
67  continue;
+
68  }
+
69  }
+
70  ++curr;
+
71  } while (curr != finish);
+
72  nextOffset += step_size;
+
73  }
+
74  }
+
75 
+
76  //Offsetting on identical characters. This function works a character
+
77  //at a time for optimal worst-case performance.
+
78  template<class RandomAccessIter, class Get_char, class Get_length>
+
79  inline void
+
80  update_offset(RandomAccessIter first, RandomAccessIter finish,
+
81  size_t &char_offset, Get_char getchar, Get_length length)
+
82  {
+
83  size_t nextOffset = char_offset;
+
84  while (true) {
+
85  RandomAccessIter curr = first;
+
86  do {
+
87  //ignore empties, but if the nextOffset would exceed the length or
+
88  //not match, exit; we've found the last matching character
+
89  if (length(*curr) > char_offset && (length(*curr) <= (nextOffset + 1)
+
90  || getchar((*curr), nextOffset) != getchar((*first), nextOffset))) {
+
91  char_offset = nextOffset;
+
92  return;
+
93  }
+
94  } while (++curr != finish);
+
95  ++nextOffset;
+
96  }
+
97  }
+
98 
+
99  //This comparison functor assumes strings are identical up to char_offset
+
100  template<class Data_type, class Unsigned_char_type>
+ +
102  offset_less_than(size_t char_offset) : fchar_offset(char_offset){}
+
103  inline bool operator()(const Data_type &x, const Data_type &y) const
+
104  {
+
105  size_t minSize = (std::min)(x.size(), y.size());
+
106  for (size_t u = fchar_offset; u < minSize; ++u) {
+
107  BOOST_STATIC_ASSERT(sizeof(x[u]) == sizeof(Unsigned_char_type));
+
108  if (static_cast<Unsigned_char_type>(x[u]) !=
+
109  static_cast<Unsigned_char_type>(y[u])) {
+
110  return static_cast<Unsigned_char_type>(x[u]) <
+
111  static_cast<Unsigned_char_type>(y[u]);
+
112  }
+
113  }
+
114  return x.size() < y.size();
+
115  }
+
116  size_t fchar_offset;
+
117  };
+
118 
+
119  //Compares strings assuming they are identical up to char_offset
+
120  template<class Data_type, class Unsigned_char_type>
+ +
122  offset_greater_than(size_t char_offset) : fchar_offset(char_offset){}
+
123  inline bool operator()(const Data_type &x, const Data_type &y) const
+
124  {
+
125  size_t minSize = (std::min)(x.size(), y.size());
+
126  for (size_t u = fchar_offset; u < minSize; ++u) {
+
127  BOOST_STATIC_ASSERT(sizeof(x[u]) == sizeof(Unsigned_char_type));
+
128  if (static_cast<Unsigned_char_type>(x[u]) !=
+
129  static_cast<Unsigned_char_type>(y[u])) {
+
130  return static_cast<Unsigned_char_type>(x[u]) >
+
131  static_cast<Unsigned_char_type>(y[u]);
+
132  }
+
133  }
+
134  return x.size() > y.size();
+
135  }
+
136  size_t fchar_offset;
+
137  };
+
138 
+
139  //This comparison functor assumes strings are identical up to char_offset
+
140  template<class Data_type, class Get_char, class Get_length>
+ +
142  offset_char_less_than(size_t char_offset) : fchar_offset(char_offset){}
+
143  inline bool operator()(const Data_type &x, const Data_type &y) const
+
144  {
+
145  size_t minSize = (std::min)(length(x), length(y));
+
146  for (size_t u = fchar_offset; u < minSize; ++u) {
+
147  if (getchar(x, u) != getchar(y, u)) {
+
148  return getchar(x, u) < getchar(y, u);
+
149  }
+
150  }
+
151  return length(x) < length(y);
+
152  }
+
153  size_t fchar_offset;
+
154  Get_char getchar;
+
155  Get_length length;
+
156  };
+
157 
+
158  //String sorting recursive implementation
+
159  template <class RandomAccessIter, class Unsigned_char_type>
+
160  inline void
+
161  string_sort_rec(RandomAccessIter first, RandomAccessIter last,
+
162  size_t char_offset,
+
163  std::vector<RandomAccessIter> &bin_cache,
+
164  unsigned cache_offset, size_t *bin_sizes)
+
165  {
+
166  typedef typename std::iterator_traits<RandomAccessIter>::value_type
+
167  Data_type;
+
168  //This section makes handling of long identical substrings much faster
+
169  //with a mild average performance impact.
+
170  //Iterate to the end of the empties. If all empty, return
+
171  while ((*first).size() <= char_offset) {
+
172  if (++first == last)
+
173  return;
+
174  }
+
175  RandomAccessIter finish = last - 1;
+
176  //Getting the last non-empty
+
177  for (;(*finish).size() <= char_offset; --finish);
+
178  ++finish;
+
179  //Offsetting on identical characters. This section works
+
180  //a few characters at a time for optimal worst-case performance.
+
181  update_offset<RandomAccessIter, Unsigned_char_type>(first, finish,
+
182  char_offset);
+
183 
+
184  const unsigned bin_count = (1 << (sizeof(Unsigned_char_type)*8));
+
185  //Equal worst-case of radix and comparison is when bin_count = n*log(n).
+
186  const unsigned max_size = bin_count;
+
187  const unsigned membin_count = bin_count + 1;
+
188  unsigned cache_end;
+
189  RandomAccessIter * bins = size_bins(bin_sizes, bin_cache, cache_offset,
+
190  cache_end, membin_count) + 1;
+
191 
+
192  //Calculating the size of each bin; this takes roughly 10% of runtime
+
193  for (RandomAccessIter current = first; current != last; ++current) {
+
194  if ((*current).size() <= char_offset) {
+
195  bin_sizes[0]++;
+
196  }
+
197  else
+
198  bin_sizes[static_cast<Unsigned_char_type>((*current)[char_offset])
+
199  + 1]++;
+
200  }
+
201  //Assign the bin positions
+
202  bin_cache[cache_offset] = first;
+
203  for (unsigned u = 0; u < membin_count - 1; u++)
+
204  bin_cache[cache_offset + u + 1] =
+
205  bin_cache[cache_offset + u] + bin_sizes[u];
+
206 
+
207  //Swap into place
+
208  RandomAccessIter next_bin_start = first;
+
209  //handling empty bins
+
210  RandomAccessIter * local_bin = &(bin_cache[cache_offset]);
+
211  next_bin_start += bin_sizes[0];
+
212  RandomAccessIter * target_bin;
+
213  //Iterating over each element in the bin of empties
+
214  for (RandomAccessIter current = *local_bin; current < next_bin_start;
+
215  ++current) {
+
216  //empties belong in this bin
+
217  while ((*current).size() > char_offset) {
+
218  target_bin =
+
219  bins + static_cast<Unsigned_char_type>((*current)[char_offset]);
+
220  iter_swap(current, (*target_bin)++);
+
221  }
+
222  }
+
223  *local_bin = next_bin_start;
+
224  //iterate backwards to find the last bin with elements in it
+
225  //this saves iterations in multiple loops
+
226  unsigned last_bin = bin_count - 1;
+
227  for (; last_bin && !bin_sizes[last_bin + 1]; --last_bin);
+
228  //This dominates runtime, mostly in the swap and bin lookups
+
229  for (unsigned u = 0; u < last_bin; ++u) {
+
230  local_bin = bins + u;
+
231  next_bin_start += bin_sizes[u + 1];
+
232  //Iterating over each element in this bin
+
233  for (RandomAccessIter current = *local_bin; current < next_bin_start;
+
234  ++current) {
+
235  //Swapping into place until the correct element has been swapped in
+
236  for (target_bin = bins + static_cast<Unsigned_char_type>
+
237  ((*current)[char_offset]); target_bin != local_bin;
+
238  target_bin = bins + static_cast<Unsigned_char_type>
+
239  ((*current)[char_offset])) iter_swap(current, (*target_bin)++);
+
240  }
+
241  *local_bin = next_bin_start;
+
242  }
+
243  bins[last_bin] = last;
+
244  //Recursing
+
245  RandomAccessIter lastPos = bin_cache[cache_offset];
+
246  //Skip this loop for empties
+
247  for (unsigned u = cache_offset + 1; u < cache_offset + last_bin + 2;
+
248  lastPos = bin_cache[u], ++u) {
+
249  size_t count = bin_cache[u] - lastPos;
+
250  //don't sort unless there are at least two items to Compare
+
251  if (count < 2)
+
252  continue;
+
253  //using std::sort if its worst-case is better
+
254  if (count < max_size)
+
255  std::sort(lastPos, bin_cache[u],
+ +
257  else
+
258  string_sort_rec<RandomAccessIter, Unsigned_char_type>(lastPos,
+
259  bin_cache[u], char_offset + 1, bin_cache, cache_end, bin_sizes);
+
260  }
+
261  }
+
262 
+
263  //Sorts strings in reverse order, with empties at the end
+
264  template <class RandomAccessIter, class Unsigned_char_type>
+
265  inline void
+
266  reverse_string_sort_rec(RandomAccessIter first, RandomAccessIter last,
+
267  size_t char_offset,
+
268  std::vector<RandomAccessIter> &bin_cache,
+
269  unsigned cache_offset,
+
270  size_t *bin_sizes)
+
271  {
+
272  typedef typename std::iterator_traits<RandomAccessIter>::value_type
+
273  Data_type;
+
274  //This section makes handling of long identical substrings much faster
+
275  //with a mild average performance impact.
+
276  RandomAccessIter curr = first;
+
277  //Iterate to the end of the empties. If all empty, return
+
278  while ((*curr).size() <= char_offset) {
+
279  if (++curr == last)
+
280  return;
+
281  }
+
282  //Getting the last non-empty
+
283  while ((*(--last)).size() <= char_offset);
+
284  ++last;
+
285  //Offsetting on identical characters. This section works
+
286  //a few characters at a time for optimal worst-case performance.
+
287  update_offset<RandomAccessIter, Unsigned_char_type>(first, last,
+
288  char_offset);
+
289  RandomAccessIter * target_bin;
+
290 
+
291  const unsigned bin_count = (1 << (sizeof(Unsigned_char_type)*8));
+
292  //Equal worst-case of radix and comparison when bin_count = n*log(n).
+
293  const unsigned max_size = bin_count;
+
294  const unsigned membin_count = bin_count + 1;
+
295  const unsigned max_bin = bin_count - 1;
+
296  unsigned cache_end;
+
297  RandomAccessIter * bins = size_bins(bin_sizes, bin_cache, cache_offset,
+
298  cache_end, membin_count);
+
299  RandomAccessIter * end_bin = &(bin_cache[cache_offset + max_bin]);
+
300 
+
301  //Calculating the size of each bin; this takes roughly 10% of runtime
+
302  for (RandomAccessIter current = first; current != last; ++current) {
+
303  if ((*current).size() <= char_offset) {
+
304  bin_sizes[bin_count]++;
+
305  }
+
306  else
+
307  bin_sizes[max_bin - static_cast<Unsigned_char_type>
+
308  ((*current)[char_offset])]++;
+
309  }
+
310  //Assign the bin positions
+
311  bin_cache[cache_offset] = first;
+
312  for (unsigned u = 0; u < membin_count - 1; u++)
+
313  bin_cache[cache_offset + u + 1] =
+
314  bin_cache[cache_offset + u] + bin_sizes[u];
+
315 
+
316  //Swap into place
+
317  RandomAccessIter next_bin_start = last;
+
318  //handling empty bins
+
319  RandomAccessIter * local_bin = &(bin_cache[cache_offset + bin_count]);
+
320  RandomAccessIter lastFull = *local_bin;
+
321  //Iterating over each element in the bin of empties
+
322  for (RandomAccessIter current = *local_bin; current < next_bin_start;
+
323  ++current) {
+
324  //empties belong in this bin
+
325  while ((*current).size() > char_offset) {
+
326  target_bin =
+
327  end_bin - static_cast<Unsigned_char_type>((*current)[char_offset]);
+
328  iter_swap(current, (*target_bin)++);
+
329  }
+
330  }
+
331  *local_bin = next_bin_start;
+
332  next_bin_start = first;
+
333  //iterate backwards to find the last non-empty bin
+
334  //this saves iterations in multiple loops
+
335  unsigned last_bin = max_bin;
+
336  for (; last_bin && !bin_sizes[last_bin]; --last_bin);
+
337  //This dominates runtime, mostly in the swap and bin lookups
+
338  for (unsigned u = 0; u < last_bin; ++u) {
+
339  local_bin = bins + u;
+
340  next_bin_start += bin_sizes[u];
+
341  //Iterating over each element in this bin
+
342  for (RandomAccessIter current = *local_bin; current < next_bin_start;
+
343  ++current) {
+
344  //Swapping into place until the correct element has been swapped in
+
345  for (target_bin =
+
346  end_bin - static_cast<Unsigned_char_type>((*current)[char_offset]);
+
347  target_bin != local_bin;
+
348  target_bin =
+
349  end_bin - static_cast<Unsigned_char_type>((*current)[char_offset]))
+
350  iter_swap(current, (*target_bin)++);
+
351  }
+
352  *local_bin = next_bin_start;
+
353  }
+
354  bins[last_bin] = lastFull;
+
355  //Recursing
+
356  RandomAccessIter lastPos = first;
+
357  //Skip this loop for empties
+
358  for (unsigned u = cache_offset; u <= cache_offset + last_bin;
+
359  lastPos = bin_cache[u], ++u) {
+
360  size_t count = bin_cache[u] - lastPos;
+
361  //don't sort unless there are at least two items to Compare
+
362  if (count < 2)
+
363  continue;
+
364  //using std::sort if its worst-case is better
+
365  if (count < max_size)
+
366  std::sort(lastPos, bin_cache[u], offset_greater_than<Data_type,
+
367  Unsigned_char_type>(char_offset + 1));
+
368  else
+
369  reverse_string_sort_rec<RandomAccessIter, Unsigned_char_type>
+
370  (lastPos, bin_cache[u], char_offset + 1, bin_cache, cache_end, bin_sizes);
+
371  }
+
372  }
+
373 
+
374  //String sorting recursive implementation
+
375  template <class RandomAccessIter, class Unsigned_char_type, class Get_char,
+
376  class Get_length>
+
377  inline void
+
378  string_sort_rec(RandomAccessIter first, RandomAccessIter last,
+
379  size_t char_offset, std::vector<RandomAccessIter> &bin_cache,
+
380  unsigned cache_offset, size_t *bin_sizes,
+
381  Get_char getchar, Get_length length)
+
382  {
+
383  typedef typename std::iterator_traits<RandomAccessIter>::value_type
+
384  Data_type;
+
385  //This section makes handling of long identical substrings much faster
+
386  //with a mild average performance impact.
+
387  //Iterate to the end of the empties. If all empty, return
+
388  while (length(*first) <= char_offset) {
+
389  if (++first == last)
+
390  return;
+
391  }
+
392  RandomAccessIter finish = last - 1;
+
393  //Getting the last non-empty
+
394  for (;length(*finish) <= char_offset; --finish);
+
395  ++finish;
+
396  update_offset(first, finish, char_offset, getchar, length);
+
397 
+
398  const unsigned bin_count = (1 << (sizeof(Unsigned_char_type)*8));
+
399  //Equal worst-case of radix and comparison is when bin_count = n*log(n).
+
400  const unsigned max_size = bin_count;
+
401  const unsigned membin_count = bin_count + 1;
+
402  unsigned cache_end;
+
403  RandomAccessIter * bins = size_bins(bin_sizes, bin_cache, cache_offset,
+
404  cache_end, membin_count) + 1;
+
405 
+
406  //Calculating the size of each bin; this takes roughly 10% of runtime
+
407  for (RandomAccessIter current = first; current != last; ++current) {
+
408  if (length(*current) <= char_offset) {
+
409  bin_sizes[0]++;
+
410  }
+
411  else
+
412  bin_sizes[getchar((*current), char_offset) + 1]++;
+
413  }
+
414  //Assign the bin positions
+
415  bin_cache[cache_offset] = first;
+
416  for (unsigned u = 0; u < membin_count - 1; u++)
+
417  bin_cache[cache_offset + u + 1] =
+
418  bin_cache[cache_offset + u] + bin_sizes[u];
+
419 
+
420  //Swap into place
+
421  RandomAccessIter next_bin_start = first;
+
422  //handling empty bins
+
423  RandomAccessIter * local_bin = &(bin_cache[cache_offset]);
+
424  next_bin_start += bin_sizes[0];
+
425  RandomAccessIter * target_bin;
+
426  //Iterating over each element in the bin of empties
+
427  for (RandomAccessIter current = *local_bin; current < next_bin_start;
+
428  ++current) {
+
429  //empties belong in this bin
+
430  while (length(*current) > char_offset) {
+
431  target_bin = bins + getchar((*current), char_offset);
+
432  iter_swap(current, (*target_bin)++);
+
433  }
+
434  }
+
435  *local_bin = next_bin_start;
+
436  //iterate backwards to find the last bin with elements in it
+
437  //this saves iterations in multiple loops
+
438  unsigned last_bin = bin_count - 1;
+
439  for (; last_bin && !bin_sizes[last_bin + 1]; --last_bin);
+
440  //This dominates runtime, mostly in the swap and bin lookups
+
441  for (unsigned ii = 0; ii < last_bin; ++ii) {
+
442  local_bin = bins + ii;
+
443  next_bin_start += bin_sizes[ii + 1];
+
444  //Iterating over each element in this bin
+
445  for (RandomAccessIter current = *local_bin; current < next_bin_start;
+
446  ++current) {
+
447  //Swapping into place until the correct element has been swapped in
+
448  for (target_bin = bins + getchar((*current), char_offset);
+
449  target_bin != local_bin;
+
450  target_bin = bins + getchar((*current), char_offset))
+
451  iter_swap(current, (*target_bin)++);
+
452  }
+
453  *local_bin = next_bin_start;
+
454  }
+
455  bins[last_bin] = last;
+
456 
+
457  //Recursing
+
458  RandomAccessIter lastPos = bin_cache[cache_offset];
+
459  //Skip this loop for empties
+
460  for (unsigned u = cache_offset + 1; u < cache_offset + last_bin + 2;
+
461  lastPos = bin_cache[u], ++u) {
+
462  size_t count = bin_cache[u] - lastPos;
+
463  //don't sort unless there are at least two items to Compare
+
464  if (count < 2)
+
465  continue;
+
466  //using std::sort if its worst-case is better
+
467  if (count < max_size)
+
468  std::sort(lastPos, bin_cache[u], offset_char_less_than<Data_type,
+
469  Get_char, Get_length>(char_offset + 1));
+
470  else
+
471  string_sort_rec<RandomAccessIter, Unsigned_char_type, Get_char,
+
472  Get_length>(lastPos, bin_cache[u], char_offset + 1, bin_cache,
+
473  cache_end, bin_sizes, getchar, length);
+
474  }
+
475  }
+
476 
+
477  //String sorting recursive implementation
+
478  template <class RandomAccessIter, class Unsigned_char_type, class Get_char,
+
479  class Get_length, class Compare>
+
480  inline void
+
481  string_sort_rec(RandomAccessIter first, RandomAccessIter last,
+
482  size_t char_offset, std::vector<RandomAccessIter> &bin_cache,
+
483  unsigned cache_offset, size_t *bin_sizes,
+
484  Get_char getchar, Get_length length, Compare comp)
+
485  {
+
486  //This section makes handling of long identical substrings much faster
+
487  //with a mild average performance impact.
+
488  //Iterate to the end of the empties. If all empty, return
+
489  while (length(*first) <= char_offset) {
+
490  if (++first == last)
+
491  return;
+
492  }
+
493  RandomAccessIter finish = last - 1;
+
494  //Getting the last non-empty
+
495  for (;length(*finish) <= char_offset; --finish);
+
496  ++finish;
+
497  update_offset(first, finish, char_offset, getchar, length);
+
498 
+
499  const unsigned bin_count = (1 << (sizeof(Unsigned_char_type)*8));
+
500  //Equal worst-case of radix and comparison is when bin_count = n*log(n).
+
501  const unsigned max_size = bin_count;
+
502  const unsigned membin_count = bin_count + 1;
+
503  unsigned cache_end;
+
504  RandomAccessIter * bins = size_bins(bin_sizes, bin_cache, cache_offset,
+
505  cache_end, membin_count) + 1;
+
506 
+
507  //Calculating the size of each bin; this takes roughly 10% of runtime
+
508  for (RandomAccessIter current = first; current != last; ++current) {
+
509  if (length(*current) <= char_offset) {
+
510  bin_sizes[0]++;
+
511  }
+
512  else
+
513  bin_sizes[getchar((*current), char_offset) + 1]++;
+
514  }
+
515  //Assign the bin positions
+
516  bin_cache[cache_offset] = first;
+
517  for (unsigned u = 0; u < membin_count - 1; u++)
+
518  bin_cache[cache_offset + u + 1] =
+
519  bin_cache[cache_offset + u] + bin_sizes[u];
+
520 
+
521  //Swap into place
+
522  RandomAccessIter next_bin_start = first;
+
523  //handling empty bins
+
524  RandomAccessIter * local_bin = &(bin_cache[cache_offset]);
+
525  next_bin_start += bin_sizes[0];
+
526  RandomAccessIter * target_bin;
+
527  //Iterating over each element in the bin of empties
+
528  for (RandomAccessIter current = *local_bin; current < next_bin_start;
+
529  ++current) {
+
530  //empties belong in this bin
+
531  while (length(*current) > char_offset) {
+
532  target_bin = bins + getchar((*current), char_offset);
+
533  iter_swap(current, (*target_bin)++);
+
534  }
+
535  }
+
536  *local_bin = next_bin_start;
+
537  //iterate backwards to find the last bin with elements in it
+
538  //this saves iterations in multiple loops
+
539  unsigned last_bin = bin_count - 1;
+
540  for (; last_bin && !bin_sizes[last_bin + 1]; --last_bin);
+
541  //This dominates runtime, mostly in the swap and bin lookups
+
542  for (unsigned u = 0; u < last_bin; ++u) {
+
543  local_bin = bins + u;
+
544  next_bin_start += bin_sizes[u + 1];
+
545  //Iterating over each element in this bin
+
546  for (RandomAccessIter current = *local_bin; current < next_bin_start;
+
547  ++current) {
+
548  //Swapping into place until the correct element has been swapped in
+
549  for (target_bin = bins + getchar((*current), char_offset);
+
550  target_bin != local_bin;
+
551  target_bin = bins + getchar((*current), char_offset))
+
552  iter_swap(current, (*target_bin)++);
+
553  }
+
554  *local_bin = next_bin_start;
+
555  }
+
556  bins[last_bin] = last;
+
557 
+
558  //Recursing
+
559  RandomAccessIter lastPos = bin_cache[cache_offset];
+
560  //Skip this loop for empties
+
561  for (unsigned u = cache_offset + 1; u < cache_offset + last_bin + 2;
+
562  lastPos = bin_cache[u], ++u) {
+
563  size_t count = bin_cache[u] - lastPos;
+
564  //don't sort unless there are at least two items to Compare
+
565  if (count < 2)
+
566  continue;
+
567  //using std::sort if its worst-case is better
+
568  if (count < max_size)
+
569  std::sort(lastPos, bin_cache[u], comp);
+
570  else
+
571  string_sort_rec<RandomAccessIter, Unsigned_char_type, Get_char,
+
572  Get_length, Compare>
+
573  (lastPos, bin_cache[u], char_offset + 1, bin_cache, cache_end,
+
574  bin_sizes, getchar, length, comp);
+
575  }
+
576  }
+
577 
+
578  //Sorts strings in reverse order, with empties at the end
+
579  template <class RandomAccessIter, class Unsigned_char_type, class Get_char,
+
580  class Get_length, class Compare>
+
581  inline void
+
582  reverse_string_sort_rec(RandomAccessIter first, RandomAccessIter last,
+
583  size_t char_offset, std::vector<RandomAccessIter> &bin_cache,
+
584  unsigned cache_offset, size_t *bin_sizes,
+
585  Get_char getchar, Get_length length, Compare comp)
+
586  {
+
587  //This section makes handling of long identical substrings much faster
+
588  //with a mild average performance impact.
+
589  RandomAccessIter curr = first;
+
590  //Iterate to the end of the empties. If all empty, return
+
591  while (length(*curr) <= char_offset) {
+
592  if (++curr == last)
+
593  return;
+
594  }
+
595  //Getting the last non-empty
+
596  while (length(*(--last)) <= char_offset);
+
597  ++last;
+
598  //Offsetting on identical characters. This section works
+
599  //a character at a time for optimal worst-case performance.
+
600  update_offset(curr, last, char_offset, getchar, length);
+
601 
+
602  const unsigned bin_count = (1 << (sizeof(Unsigned_char_type)*8));
+
603  //Equal worst-case of radix and comparison is when bin_count = n*log(n).
+
604  const unsigned max_size = bin_count;
+
605  const unsigned membin_count = bin_count + 1;
+
606  const unsigned max_bin = bin_count - 1;
+
607  unsigned cache_end;
+
608  RandomAccessIter * bins = size_bins(bin_sizes, bin_cache, cache_offset,
+
609  cache_end, membin_count);
+
610  RandomAccessIter *end_bin = &(bin_cache[cache_offset + max_bin]);
+
611 
+
612  //Calculating the size of each bin; this takes roughly 10% of runtime
+
613  for (RandomAccessIter current = first; current != last; ++current) {
+
614  if (length(*current) <= char_offset) {
+
615  bin_sizes[bin_count]++;
+
616  }
+
617  else
+
618  bin_sizes[max_bin - getchar((*current), char_offset)]++;
+
619  }
+
620  //Assign the bin positions
+
621  bin_cache[cache_offset] = first;
+
622  for (unsigned u = 0; u < membin_count - 1; u++)
+
623  bin_cache[cache_offset + u + 1] =
+
624  bin_cache[cache_offset + u] + bin_sizes[u];
+
625 
+
626  //Swap into place
+
627  RandomAccessIter next_bin_start = last;
+
628  //handling empty bins
+
629  RandomAccessIter * local_bin = &(bin_cache[cache_offset + bin_count]);
+
630  RandomAccessIter lastFull = *local_bin;
+
631  RandomAccessIter * target_bin;
+
632  //Iterating over each element in the bin of empties
+
633  for (RandomAccessIter current = *local_bin; current < next_bin_start;
+
634  ++current) {
+
635  //empties belong in this bin
+
636  while (length(*current) > char_offset) {
+
637  target_bin = end_bin - getchar((*current), char_offset);
+
638  iter_swap(current, (*target_bin)++);
+
639  }
+
640  }
+
641  *local_bin = next_bin_start;
+
642  next_bin_start = first;
+
643  //iterate backwards to find the last bin with elements in it
+
644  //this saves iterations in multiple loops
+
645  unsigned last_bin = max_bin;
+
646  for (; last_bin && !bin_sizes[last_bin]; --last_bin);
+
647  //This dominates runtime, mostly in the swap and bin lookups
+
648  for (unsigned u = 0; u < last_bin; ++u) {
+
649  local_bin = bins + u;
+
650  next_bin_start += bin_sizes[u];
+
651  //Iterating over each element in this bin
+
652  for (RandomAccessIter current = *local_bin; current < next_bin_start;
+
653  ++current) {
+
654  //Swapping into place until the correct element has been swapped in
+
655  for (target_bin = end_bin - getchar((*current), char_offset);
+
656  target_bin != local_bin;
+
657  target_bin = end_bin - getchar((*current), char_offset))
+
658  iter_swap(current, (*target_bin)++);
+
659  }
+
660  *local_bin = next_bin_start;
+
661  }
+
662  bins[last_bin] = lastFull;
+
663  //Recursing
+
664  RandomAccessIter lastPos = first;
+
665  //Skip this loop for empties
+
666  for (unsigned u = cache_offset; u <= cache_offset + last_bin;
+
667  lastPos = bin_cache[u], ++u) {
+
668  size_t count = bin_cache[u] - lastPos;
+
669  //don't sort unless there are at least two items to Compare
+
670  if (count < 2)
+
671  continue;
+
672  //using std::sort if its worst-case is better
+
673  if (count < max_size)
+
674  std::sort(lastPos, bin_cache[u], comp);
+
675  else
+
676  reverse_string_sort_rec<RandomAccessIter, Unsigned_char_type,
+
677  Get_char, Get_length, Compare>
+
678  (lastPos, bin_cache[u], char_offset + 1, bin_cache, cache_end,
+
679  bin_sizes, getchar, length, comp);
+
680  }
+
681  }
+
682 
+
683  //Holds the bin vector and makes the initial recursive call
+
684  template <class RandomAccessIter, class Unsigned_char_type>
+
685  inline typename boost::enable_if_c< sizeof(Unsigned_char_type) <= 2, void
+
686  >::type
+
687  string_sort(RandomAccessIter first, RandomAccessIter last,
+
688  Unsigned_char_type)
+
689  {
+
690  size_t bin_sizes[(1 << (8 * sizeof(Unsigned_char_type))) + 1];
+
691  std::vector<RandomAccessIter> bin_cache;
+
692  string_sort_rec<RandomAccessIter, Unsigned_char_type>
+
693  (first, last, 0, bin_cache, 0, bin_sizes);
+
694  }
+
695 
+
696  template <class RandomAccessIter, class Unsigned_char_type>
+
697  inline typename boost::disable_if_c< sizeof(Unsigned_char_type) <= 2, void
+
698  >::type
+
699  string_sort(RandomAccessIter first, RandomAccessIter last,
+
700  Unsigned_char_type)
+
701  {
+
702  //Warning that we're using std::sort, even though string_sort was called
+
703  BOOST_STATIC_WARNING( sizeof(Unsigned_char_type) <= 2 );
+
704  std::sort(first, last);
+
705  }
+
706 
+
707  //Holds the bin vector and makes the initial recursive call
+
708  template <class RandomAccessIter, class Unsigned_char_type>
+
709  inline typename boost::enable_if_c< sizeof(Unsigned_char_type) <= 2, void
+
710  >::type
+
711  reverse_string_sort(RandomAccessIter first, RandomAccessIter last,
+
712  Unsigned_char_type)
+
713  {
+
714  size_t bin_sizes[(1 << (8 * sizeof(Unsigned_char_type))) + 1];
+
715  std::vector<RandomAccessIter> bin_cache;
+
716  reverse_string_sort_rec<RandomAccessIter, Unsigned_char_type>
+
717  (first, last, 0, bin_cache, 0, bin_sizes);
+
718  }
+
719 
+
720  template <class RandomAccessIter, class Unsigned_char_type>
+
721  inline typename boost::disable_if_c< sizeof(Unsigned_char_type) <= 2, void
+
722  >::type
+
723  reverse_string_sort(RandomAccessIter first, RandomAccessIter last,
+
724  Unsigned_char_type)
+
725  {
+
726  typedef typename std::iterator_traits<RandomAccessIter>::value_type
+
727  Data_type;
+
728  //Warning that we're using std::sort, even though string_sort was called
+
729  BOOST_STATIC_WARNING( sizeof(Unsigned_char_type) <= 2 );
+
730  std::sort(first, last, std::greater<Data_type>());
+
731  }
+
732 
+
733  //Holds the bin vector and makes the initial recursive call
+
734  template <class RandomAccessIter, class Get_char, class Get_length,
+
735  class Unsigned_char_type>
+
736  inline typename boost::enable_if_c< sizeof(Unsigned_char_type) <= 2, void
+
737  >::type
+
738  string_sort(RandomAccessIter first, RandomAccessIter last,
+
739  Get_char getchar, Get_length length, Unsigned_char_type)
+
740  {
+
741  size_t bin_sizes[(1 << (8 * sizeof(Unsigned_char_type))) + 1];
+
742  std::vector<RandomAccessIter> bin_cache;
+
743  string_sort_rec<RandomAccessIter, Unsigned_char_type, Get_char,
+
744  Get_length>(first, last, 0, bin_cache, 0, bin_sizes, getchar, length);
+
745  }
+
746 
+
747  template <class RandomAccessIter, class Get_char, class Get_length,
+
748  class Unsigned_char_type>
+
749  inline typename boost::disable_if_c< sizeof(Unsigned_char_type) <= 2, void
+
750  >::type
+
751  string_sort(RandomAccessIter first, RandomAccessIter last,
+
752  Get_char getchar, Get_length length, Unsigned_char_type)
+
753  {
+
754  //Warning that we're using std::sort, even though string_sort was called
+
755  BOOST_STATIC_WARNING( sizeof(Unsigned_char_type) <= 2 );
+
756  std::sort(first, last);
+
757  }
+
758 
+
759  //Holds the bin vector and makes the initial recursive call
+
760  template <class RandomAccessIter, class Get_char, class Get_length,
+
761  class Compare, class Unsigned_char_type>
+
762  inline typename boost::enable_if_c< sizeof(Unsigned_char_type) <= 2, void
+
763  >::type
+
764  string_sort(RandomAccessIter first, RandomAccessIter last,
+
765  Get_char getchar, Get_length length, Compare comp, Unsigned_char_type)
+
766  {
+
767  size_t bin_sizes[(1 << (8 * sizeof(Unsigned_char_type))) + 1];
+
768  std::vector<RandomAccessIter> bin_cache;
+
769  string_sort_rec<RandomAccessIter, Unsigned_char_type, Get_char
+
770  , Get_length, Compare>
+
771  (first, last, 0, bin_cache, 0, bin_sizes, getchar, length, comp);
+
772  }
+
773 
+
774  //disable_if_c was refusing to compile, so rewrote to use enable_if_c
+
775  template <class RandomAccessIter, class Get_char, class Get_length,
+
776  class Compare, class Unsigned_char_type>
+
777  inline typename boost::enable_if_c< (sizeof(Unsigned_char_type) > 2), void
+
778  >::type
+
779  string_sort(RandomAccessIter first, RandomAccessIter last,
+
780  Get_char getchar, Get_length length, Compare comp, Unsigned_char_type)
+
781  {
+
782  //Warning that we're using std::sort, even though string_sort was called
+
783  BOOST_STATIC_WARNING( sizeof(Unsigned_char_type) <= 2 );
+
784  std::sort(first, last, comp);
+
785  }
+
786 
+
787  //Holds the bin vector and makes the initial recursive call
+
788  template <class RandomAccessIter, class Get_char, class Get_length,
+
789  class Compare, class Unsigned_char_type>
+
790  inline typename boost::enable_if_c< sizeof(Unsigned_char_type) <= 2, void
+
791  >::type
+
792  reverse_string_sort(RandomAccessIter first, RandomAccessIter last,
+
793  Get_char getchar, Get_length length, Compare comp, Unsigned_char_type)
+
794  {
+
795  size_t bin_sizes[(1 << (8 * sizeof(Unsigned_char_type))) + 1];
+
796  std::vector<RandomAccessIter> bin_cache;
+
797  reverse_string_sort_rec<RandomAccessIter, Unsigned_char_type, Get_char,
+
798  Get_length, Compare>
+
799  (first, last, 0, bin_cache, 0, bin_sizes, getchar, length, comp);
+
800  }
+
801 
+
802  template <class RandomAccessIter, class Get_char, class Get_length,
+
803  class Compare, class Unsigned_char_type>
+
804  inline typename boost::disable_if_c< sizeof(Unsigned_char_type) <= 2, void
+
805  >::type
+
806  reverse_string_sort(RandomAccessIter first, RandomAccessIter last,
+
807  Get_char getchar, Get_length length, Compare comp, Unsigned_char_type)
+
808  {
+
809  //Warning that we're using std::sort, even though string_sort was called
+
810  BOOST_STATIC_WARNING( sizeof(Unsigned_char_type) <= 2 );
+
811  std::sort(first, last, comp);
+
812  }
+
813  }
+
814 }
+
815 }
+
816 
+
817 #endif
+
void update_offset(RandomAccessIter first, RandomAccessIter finish, size_t &char_offset)
Definition: string_sort.hpp:39
+
Definition: constants.hpp:11
+
offset_char_less_than(size_t char_offset)
Definition: string_sort.hpp:142
+
bool operator()(const Data_type &x, const Data_type &y) const
Definition: string_sort.hpp:123
+
size_t fchar_offset
Definition: string_sort.hpp:136
+
Definition: string_sort.hpp:121
+
void string_sort_rec(RandomAccessIter first, RandomAccessIter last, size_t char_offset, std::vector< RandomAccessIter > &bin_cache, unsigned cache_offset, size_t *bin_sizes)
Definition: string_sort.hpp:161
+
void reverse_string_sort_rec(RandomAccessIter first, RandomAccessIter last, size_t char_offset, std::vector< RandomAccessIter > &bin_cache, unsigned cache_offset, size_t *bin_sizes)
Definition: string_sort.hpp:266
+
offset_less_than(size_t char_offset)
Definition: string_sort.hpp:102
+
size_t fchar_offset
Definition: string_sort.hpp:153
+
void string_sort(RandomAccessIter first, RandomAccessIter last, Unsigned_char_type unused)
Definition: string_sort.hpp:29
+
Definition: string_sort.hpp:141
+ +
void reverse_string_sort(RandomAccessIter first, RandomAccessIter last, Compare comp, Unsigned_char_type unused)
Definition: string_sort.hpp:49
+
Definition: string_sort.hpp:101
+
offset_greater_than(size_t char_offset)
Definition: string_sort.hpp:122
+
bool operator()(const Data_type &x, const Data_type &y) const
Definition: string_sort.hpp:103
+ +
size_t fchar_offset
Definition: string_sort.hpp:116
+
Get_length length
Definition: string_sort.hpp:155
+
RandomAccessIter * size_bins(size_t *bin_sizes, std::vector< RandomAccessIter > &bin_cache, unsigned cache_offset, unsigned &cache_end, unsigned bin_count)
Definition: spreadsort_common.hpp:106
+
Get_char getchar
Definition: string_sort.hpp:154
+
bool operator()(const Data_type &x, const Data_type &y) const
Definition: string_sort.hpp:143
+
+ + + + diff --git a/doc/doxygen/html/dir_0dcad0da4f36218cbabb216021de9867.html b/doc/doxygen/html/dir_0dcad0da4f36218cbabb216021de9867.html new file mode 100644 index 0000000..0174fa5 --- /dev/null +++ b/doc/doxygen/html/dir_0dcad0da4f36218cbabb216021de9867.html @@ -0,0 +1,105 @@ + + + + + + +Boost.Sort: I:/modular-boost/libs/sort/include/boost/sort Directory Reference + + + + + + + + + + +
+
+ + + + + + +
+
Boost.Sort +
+
+
+ + + + + +
+
+ + +
+ +
+ + +
+
+
+
sort Directory Reference
+
+
+ + + + +

+Directories

directory  spreadsort
 
+ + + +

+Files

file  sort.hpp [code]
 
+
+ + + + diff --git a/doc/doxygen/html/dir_1878a3f4746a95c6aad317458cc7ef80.html b/doc/doxygen/html/dir_1878a3f4746a95c6aad317458cc7ef80.html new file mode 100644 index 0000000..1f7ff95 --- /dev/null +++ b/doc/doxygen/html/dir_1878a3f4746a95c6aad317458cc7ef80.html @@ -0,0 +1,100 @@ + + + + + + +Boost.Sort: I:/modular-boost/libs/sort/include/boost Directory Reference + + + + + + + + + + +
+
+ + + + + + +
+
Boost.Sort +
+
+
+ + + + + +
+
+ + +
+ +
+ + +
+
+
+
boost Directory Reference
+
+
+ + + + +

+Directories

directory  sort
 
+
+ + + + diff --git a/doc/doxygen/html/dir_1b6f0a484b3a75c2ed43dc394e95eff6.html b/doc/doxygen/html/dir_1b6f0a484b3a75c2ed43dc394e95eff6.html new file mode 100644 index 0000000..b3b838b --- /dev/null +++ b/doc/doxygen/html/dir_1b6f0a484b3a75c2ed43dc394e95eff6.html @@ -0,0 +1,108 @@ + + + + + + +Boost.Sort: I:/modular-boost/libs/sort/include/boost/sort/spreadsort/detail Directory Reference + + + + + + + + + + +
+
+ + + + + + +
+
Boost.Sort +
+
+
+ + + + + +
+
+ + +
+ +
+ + +
+
+
+
detail Directory Reference
+
+
+ + + + + + + + + + + + +

+Files

file  constants.hpp [code]
 
file  float_sort.hpp [code]
 
file  integer_sort.hpp [code]
 
file  spreadsort_common.hpp [code]
 
file  string_sort.hpp [code]
 
+
+ + + + diff --git a/doc/doxygen/html/dir_4aa236a92b75d6f514e733718a475329.html b/doc/doxygen/html/dir_4aa236a92b75d6f514e733718a475329.html new file mode 100644 index 0000000..59cb057 --- /dev/null +++ b/doc/doxygen/html/dir_4aa236a92b75d6f514e733718a475329.html @@ -0,0 +1,106 @@ + + + + + + +Boost.Sort: I:/modular-boost/libs/sort/include/boost/sort/spreadsort Directory Reference + + + + + + + + + + +
+
+ + + + + + +
+
Boost.Sort +
+
+
+ + + + + +
+
+ + +
+ +
+ + +
+
+
+
spreadsort Directory Reference
+
+
+ + + + + + + + + + +

+Files

file  float_sort.hpp [code]
 
file  integer_sort.hpp [code]
 
file  spreadsort.hpp [code]
 
file  string_sort.hpp [code]
 
+
+ + + + diff --git a/doc/doxygen/html/dir_cfafba98a580ce4b62f8a6fa96d7cbb0.html b/doc/doxygen/html/dir_cfafba98a580ce4b62f8a6fa96d7cbb0.html new file mode 100644 index 0000000..337b7d5 --- /dev/null +++ b/doc/doxygen/html/dir_cfafba98a580ce4b62f8a6fa96d7cbb0.html @@ -0,0 +1,151 @@ + + + + + + +Boost.Sort: I:/modular-boost/libs/sort/example Directory Reference + + + + + + + + + + +
+
+ + + + + + +
+
Boost.Sort +
+
+
+ + + + + +
+
+ + +
+ +
+ + +
+
+
+
example Directory Reference
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Files

file  alrbreaker.cpp
 
file  alreadysorted.cpp
 
file  binaryalrbreaker.cpp
 
file  boostrandomgen.cpp
 
file  caseinsensitive.cpp
 
file  charstringsample.cpp
 
file  double.cpp
 
file  floatfunctorsample.cpp
 
file  floatsample.cpp
 
file  generalizedstruct.cpp
 
file  int64.cpp
 
file  keyplusdatasample.cpp
 
file  mostlysorted.cpp
 
file  parallelint.cpp
 
file  parallelstring.cpp
 
file  randomgen.cpp
 
file  reverseintsample.cpp
 integer sort with a rightshift functor reverse sorting example.
 
file  reversestringfunctorsample.cpp
 
file  reversestringsample.cpp
 
file  rightshiftsample.cpp
 Integer sort with a rightshift functor sorting example.
 
file  sample.cpp
 
file  shiftfloatsample.cpp
 
file  stringfunctorsample.cpp
 spreadsort string functor sorting example.
 
file  stringsample.cpp
 
file  wstringsample.cpp
 
+
+ + + + diff --git a/doc/doxygen/html/dir_d44c64559bbebec7f509842c48db8b23.html b/doc/doxygen/html/dir_d44c64559bbebec7f509842c48db8b23.html new file mode 100644 index 0000000..6714aa6 --- /dev/null +++ b/doc/doxygen/html/dir_d44c64559bbebec7f509842c48db8b23.html @@ -0,0 +1,100 @@ + + + + + + +Boost.Sort: I:/modular-boost/libs/sort/include Directory Reference + + + + + + + + + + +
+
+ + + + + + +
+
Boost.Sort +
+
+
+ + + + + +
+
+ + +
+ +
+ + +
+
+
+
include Directory Reference
+
+
+ + + + +

+Directories

directory  boost
 
+
+ + + + diff --git a/doc/doxygen/html/doc.png b/doc/doxygen/html/doc.png new file mode 100644 index 0000000000000000000000000000000000000000..17edabff95f7b8da13c9516a04efe05493c29501 GIT binary patch literal 746 zcmeAS@N?(olHy`uVBq!ia0y~yV31&7U=ZVAV_;yoRU6a6z`(T8)5S5Qg7NKKU;p4} ziPrh^ihm{A>qbOr1c~a50+@}UVgXodffY{_m;uoJ7d@^j3pS-JB`&h zF!((>ygX;;j`*bY1qtdDP%r!MD!(AV5Wn7fF-YoiCM4Myw<)2#mb3|8&bvB&rk6gRp zf7qn@<EkbNbI-?3|_`^r^^HbZLlI zutr!Ko5eTF(n-8m7qgeo{`omkn%VZOP4%UPp*?)xi`HwOe465N-c98NtPDoflHu@h-ct?NY9d{GM}{ z?V~dGM=X9H|L^Y7Xw7EM1ore-hZCix + + + + + +Boost.Sort: I:/modular-boost/libs/sort/example/double.cpp File Reference + + + + + + + + + + +
+
+ + + + + + +
+
Boost.Sort +
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
double.cpp File Reference
+
+
+
#include <boost/sort/spreadsort/spreadsort.hpp>
+#include <time.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <algorithm>
+#include <vector>
+#include <string>
+#include <fstream>
+#include <iostream>
+
+ + + + + +

+Macros

#define DATA_TYPE   double
 
#define CAST_TYPE   boost::int64_t
 
+ + + +

+Functions

int main (int argc, const char **argv)
 
+

Macro Definition Documentation

+ +
+
+ + + + +
#define CAST_TYPE   boost::int64_t
+
+ +
+
+ +
+
+ + + + +
#define DATA_TYPE   double
+
+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
int main (int argc,
const char ** argv 
)
+
+ +
+
+
+ + + + diff --git a/doc/doxygen/html/doxygen.css b/doc/doxygen/html/doxygen.css new file mode 100644 index 0000000..a000833 --- /dev/null +++ b/doc/doxygen/html/doxygen.css @@ -0,0 +1,1449 @@ +/* The standard CSS for doxygen 1.8.9.1 */ + +body, table, div, p, dl { + 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; +} + +div.multicol { + -moz-column-gap: 1em; + -webkit-column-gap: 1em; + -moz-column-count: 3; + -webkit-column-count: 3; +} + +p.startli, p.startdd { + margin-top: 2px; +} + +p.starttd { + margin-top: 0px; +} + +p.endli { + margin-bottom: 0px; +} + +p.enddd { + margin-bottom: 4px; +} + +p.endtd { + margin-bottom: 2px; +} + +/* @end */ + +caption { + font-weight: bold; +} + +span.legend { + font-size: 70%; + text-align: center; +} + +h3.version { + font-size: 90%; + text-align: center; +} + +div.qindex, div.navtab{ + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; +} + +div.qindex, div.navpath { + width: 100%; + line-height: 140%; +} + +div.navtab { + margin-right: 15px; +} + +/* @group Link Styling */ + +a { + color: #3D578C; + font-weight: normal; + text-decoration: none; +} + +.contents a:visited { + color: #4665A2; +} + +a:hover { + text-decoration: underline; +} + +a.qindex { + font-weight: bold; +} + +a.qindexHL { + font-weight: bold; + background-color: #9CAFD4; + color: #ffffff; + border: 1px double #869DCA; +} + +.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; +} + +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: 4px 6px; + 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.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; +} + +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); +} + +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 { + 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; +} + +/* @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 { + width: 100%; +} + +.memTemplParams { + color: #4665A2; + white-space: nowrap; + font-size: 80%; +} + +/* @end */ + +/* @group Member Details */ + +/* Styles for detailed member documentation */ + +.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: bold; + 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-image:url('nav_f.png'); + background-repeat:repeat-x; + background-color: #E2E8F2; + /* opera specific markup */ + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + border-top-right-radius: 4px; + border-top-left-radius: 4px; + /* firefox specific markup */ + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + -moz-border-radius-topright: 4px; + -moz-border-radius-topleft: 4px; + /* webkit specific markup */ + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + -webkit-border-top-right-radius: 4px; + -webkit-border-top-left-radius: 4px; + +} + +.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 { + font-weight: bold; + vertical-align: top; +} + +.params .paramtype { + font-style: italic; + vertical-align: top; +} + +.params .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 { + 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; + -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; +} + +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; +} + +dl +{ + padding: 0 0 0 10px; +} + +/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug */ +dl.section +{ + margin-left: 0px; + padding-left: 0px; +} + +dl.note +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #D0C000; +} + +dl.warning, dl.attention +{ + margin-left:-7px; + padding-left: 3px; + border-left: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.deprecated +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #505050; +} + +dl.todo +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #00C0E0; +} + +dl.test +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #3030E0; +} + +dl.bug +{ + margin-left:-7px; + padding-left: 3px; + border-left: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; +} + +#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; +} + +.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; +} + +dl.citelist dd { + margin:2px 0; + 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 20px 10px 10px; + width: 200px; +} + +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; +} + +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; +} + +.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; + } +} + diff --git a/doc/doxygen/html/doxygen.png b/doc/doxygen/html/doxygen.png new file mode 100644 index 0000000000000000000000000000000000000000..3ff17d807fd8aa003bed8bb2a69e8f0909592fd1 GIT binary patch literal 3779 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 literal 0 HcmV?d00001 diff --git a/doc/doxygen/html/dynsections.js b/doc/doxygen/html/dynsections.js new file mode 100644 index 0000000..85e1836 --- /dev/null +++ b/doc/doxygen/html/dynsections.js @@ -0,0 +1,97 @@ +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 + + + + + +Boost.Sort: Examples + + + + + + + + + + +
+
+ + + + + + +
+
Boost.Sort +
+
+
+ + + + +
+ +
+
+ + +
+ +
+ +
+
+
Examples
+
+
+
Here is a list of all examples:
+
+ + + + diff --git a/doc/doxygen/html/files.html b/doc/doxygen/html/files.html new file mode 100644 index 0000000..1620e44 --- /dev/null +++ b/doc/doxygen/html/files.html @@ -0,0 +1,135 @@ + + + + + + +Boost.Sort: File List + + + + + + + + + + +
+
+ + + + + + +
+
Boost.Sort +
+
+
+ + + + + +
+ +
+
+ + +
+ +
+ +
+
+
File List
+
+
+
Here is a list of all files with brief descriptions:
+
+ + + + diff --git a/doc/doxygen/html/float__sort_8hpp.html b/doc/doxygen/html/float__sort_8hpp.html new file mode 100644 index 0000000..5869bd2 --- /dev/null +++ b/doc/doxygen/html/float__sort_8hpp.html @@ -0,0 +1,139 @@ + + + + + + +Boost.Sort: I:/modular-boost/libs/sort/include/boost/sort/spreadsort/float_sort.hpp File Reference + + + + + + + + + + +
+
+ + + + + + +
+
Boost.Sort +
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
float_sort.hpp File Reference
+
+
+
#include <algorithm>
+#include <vector>
+#include <cstring>
+#include <limits>
+#include <boost/static_assert.hpp>
+#include <boost/sort/spreadsort/detail/constants.hpp>
+#include <boost/sort/spreadsort/detail/float_sort.hpp>
+
+

Go to the source code of this file.

+ + + + + + +

+Namespaces

 boost
 
 boost::sort
 
+ + + + + + + + + + + + + + + + + +

+Functions

template<class Data_type , class Cast_type >
Cast_type boost::sort::float_mem_cast (const Data_type &data)
 Casts a float to the specified integer type. More...
 
template<class RandomAccessIter >
void boost::sort::float_sort (RandomAccessIter first, RandomAccessIter last)
 float_sort with casting to the appropriate size. More...
 
template<class RandomAccessIter , class Right_shift >
void boost::sort::float_sort (RandomAccessIter first, RandomAccessIter last, Right_shift rshift)
 Floating-point sort algorithm using random access iterators with just right-shift functor. More...
 
template<class RandomAccessIter , class Right_shift , class Compare >
void boost::sort::float_sort (RandomAccessIter first, RandomAccessIter last, Right_shift rshift, Compare comp)
 Float sort algorithm using random access iterators with both right-shift and user-defined comparison operator. More...
 
+
+ + + + diff --git a/doc/doxygen/html/float__sort_8hpp_source.html b/doc/doxygen/html/float__sort_8hpp_source.html new file mode 100644 index 0000000..a807890 --- /dev/null +++ b/doc/doxygen/html/float__sort_8hpp_source.html @@ -0,0 +1,244 @@ + + + + + + +Boost.Sort: I:/modular-boost/libs/sort/include/boost/sort/spreadsort/float_sort.hpp Source File + + + + + + + + + + +
+
+ + + + + + +
+
Boost.Sort +
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+
+
float_sort.hpp
+
+
+Go to the documentation of this file.
1 //Templated Spreadsort-based implementation of float_sort and float_mem_cast
+
2 
+
3 // Copyright Steven J. Ross 2001 - 2014.
+
4 // Distributed under the Boost Software License, Version 1.0.
+
5 // (See accompanying file LICENSE_1_0.txt or copy at
+
6 // http://www.boost.org/LICENSE_1_0.txt)
+
7 
+
8 // See http://www.boost.org/libs/sort/ for library home page.
+
9 
+
10 /*
+
11 Some improvements suggested by:
+
12 Phil Endecott and Frank Gennari
+
13 float_mem_cast fix provided by:
+
14 Scott McMurray
+
15 */
+
16 
+
17 #ifndef BOOST_FLOAT_SORT_HPP
+
18 #define BOOST_FLOAT_SORT_HPP
+
19 #include <algorithm>
+
20 #include <vector>
+
21 #include <cstring>
+
22 #include <limits>
+
23 #include <boost/static_assert.hpp>
+
24 #include <boost/sort/spreadsort/detail/constants.hpp>
+
25 #include <boost/sort/spreadsort/detail/float_sort.hpp>
+
26 
+
27 namespace boost {
+
28 namespace sort {
+
29 
+
30 
+
31  /*!
+
32  \brief Casts a float to the specified integer type.
+
33 
+
34  \tparam Data_type Floating-point IEEE 754/IEC559 type.
+
35  \tparam Cast_type Integer type (same size) to which to cast.
+
36 
+
37  \par Example:
+
38  \code
+
39  struct rightshift {
+
40  int operator()(const DATA_TYPE &x, const unsigned offset) const {
+
41  return float_mem_cast<KEY_TYPE, CAST_TYPE>(x.key) >> offset;
+
42  }
+
43  };
+
44  \endcode
+
45  */
+
46  template<class Data_type, class Cast_type>
+
47  inline Cast_type
+
48  float_mem_cast(const Data_type & data)
+
49  {
+
50  // Only cast IEEE floating-point numbers, and only to a same-sized integer.
+
51  BOOST_STATIC_ASSERT(sizeof(Cast_type) == sizeof(Data_type));
+
52  BOOST_STATIC_ASSERT(std::numeric_limits<Data_type>::is_iec559);
+
53  BOOST_STATIC_ASSERT(std::numeric_limits<Cast_type>::is_integer);
+
54  Cast_type result;
+
55  std::memcpy(&result, &data, sizeof(Cast_type));
+
56  return result;
+
57  }
+
58 
+
59 
+
60  /*!
+
61  \brief @c float_sort with casting to the appropriate size.
+
62  \tparam RandomAccessIter <a href="http://www.cplusplus.com/reference/iterator/RandomAccessIterator/">Random access iterator</a>
+
63 
+
64  \param[in] first Iterator pointer to first element.
+
65  \param[in] last Iterator pointing to one beyond the end of data.
+
66 
+
67 Some performance plots of runtime vs. n and log(range) are provided:\n
+
68  <a href="../../doc/graph/windows_float_sort.htm"> windows_float_sort</a>
+
69  \n
+
70  <a href="../../doc/graph/osx_float_sort.htm"> osx_float_sort</a>
+
71 
+
72 
+
73 
+
74  \par A simple example of sorting some floating-point is:
+
75  \code
+
76  vector<float> vec;
+
77  vec.push_back(1.0);
+
78  vec.push_back(2.3);
+
79  vec.push_back(1.3);
+
80  spreadsort(vec.begin(), vec.end());
+
81  \endcode
+
82  \par The sorted vector contains ascending values "1.0 1.3 2.3".
+
83 
+
84  */
+
85  template <class RandomAccessIter>
+
86  inline void float_sort(RandomAccessIter first, RandomAccessIter last)
+
87  {
+
88  if (last - first < detail::min_sort_size)
+
89  std::sort(first, last);
+
90  else
+
91  detail::float_sort(first, last);
+
92  }
+
93 
+
94  /*!
+
95  \brief Floating-point sort algorithm using random access iterators with just right-shift functor.
+
96  \tparam RandomAccessIter <a href="http://www.cplusplus.com/reference/iterator/RandomAccessIterator/">Random access iterator</a>
+
97  \tparam Right_shift Functor for right-shift by parameter @c shift bits.
+
98 
+
99  \param[in] first Iterator pointer to first element.
+
100  \param[in] last Iterator pointing to one beyond the end of data.
+
101  \param[in] rshift Number of bits to right-shift (using functor).
+
102 
+
103  */
+
104  template <class RandomAccessIter, class Right_shift>
+
105  inline void float_sort(RandomAccessIter first, RandomAccessIter last,
+
106  Right_shift rshift)
+
107  {
+
108  if (last - first < detail::min_sort_size)
+
109  std::sort(first, last);
+
110  else
+
111  detail::float_sort(first, last, rshift(*first, 0), rshift);
+
112  }
+
113 
+
114 
+
115  /*!
+
116  \brief Float sort algorithm using random access iterators with both right-shift and user-defined comparison operator.
+
117 
+
118  \tparam RandomAccessIter <a href="http://www.cplusplus.com/reference/iterator/RandomAccessIterator/">Random access iterator</a>
+
119  \tparam Right_shift functor for right-shift by parameter @c shift bits.
+
120  \tparam Comp To provide @c operator< for user-defined comparison.
+
121 
+
122  \param[in] first Iterator pointer to first element.
+
123  \param[in] last Iterator pointing to one beyond the end of data.
+
124  \param[in] rshift Number of bits to right-shift (using functor).
+
125  \param[in] comp comparison functor.
+
126  */
+
127 
+
128  template <class RandomAccessIter, class Right_shift, class Compare>
+
129  inline void float_sort(RandomAccessIter first, RandomAccessIter last,
+
130  Right_shift rshift, Compare comp)
+
131  {
+
132  if (last - first < detail::min_sort_size)
+
133  std::sort(first, last, comp);
+
134  else
+
135  detail::float_sort(first, last, rshift(*first, 0), rshift, comp);
+
136  }
+
137 }
+
138 }
+
139 
+
140 #endif
+
Definition: float_sort.hpp:27
+
void float_sort(RandomAccessIter first, RandomAccessIter last, Right_shift rshift, Compare comp)
Float sort algorithm using random access iterators with both right-shift and user-defined comparison ...
Definition: float_sort.hpp:129
+
Cast_type float_mem_cast(const Data_type &data)
Casts a float to the specified integer type.
Definition: float_sort.hpp:48
+
void float_sort(RandomAccessIter first, RandomAccessIter last)
float_sort with casting to the appropriate size.
Definition: float_sort.hpp:86
+
+ + + + diff --git a/doc/doxygen/html/floatfunctorsample_8cpp.html b/doc/doxygen/html/floatfunctorsample_8cpp.html new file mode 100644 index 0000000..acc4b83 --- /dev/null +++ b/doc/doxygen/html/floatfunctorsample_8cpp.html @@ -0,0 +1,188 @@ + + + + + + +Boost.Sort: I:/modular-boost/libs/sort/example/floatfunctorsample.cpp File Reference + + + + + + + + + + +
+
+ + + + + + +
+
Boost.Sort +
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
floatfunctorsample.cpp File Reference
+
+
+
#include <boost/sort/spreadsort/spreadsort.hpp>
+#include <time.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <algorithm>
+#include <vector>
+#include <string>
+#include <fstream>
+#include <sstream>
+#include <iostream>
+
+ + + + + + + +

+Classes

struct  DATA_TYPE
 
struct  rightshift
 
struct  lessthan
 
+ + + + + +

+Macros

#define CAST_TYPE   int
 
#define KEY_TYPE   float
 
+ + + +

+Functions

int main (int argc, const char **argv)
 
+

Macro Definition Documentation

+ +
+
+ + + + +
#define CAST_TYPE   int
+
+ +
+
+ +
+
+ + + + +
#define KEY_TYPE   float
+
+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
int main (int argc,
const char ** argv 
)
+
+ +
+
+
+ + + + diff --git a/doc/doxygen/html/floatsample_8cpp.html b/doc/doxygen/html/floatsample_8cpp.html new file mode 100644 index 0000000..772dcf4 --- /dev/null +++ b/doc/doxygen/html/floatsample_8cpp.html @@ -0,0 +1,177 @@ + + + + + + +Boost.Sort: I:/modular-boost/libs/sort/example/floatsample.cpp File Reference + + + + + + + + + + +
+
+ + + + + + +
+
Boost.Sort +
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
floatsample.cpp File Reference
+
+
+
#include <boost/sort/spreadsort/spreadsort.hpp>
+#include <time.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <algorithm>
+#include <vector>
+#include <string>
+#include <fstream>
+#include <iostream>
+
+ + + + + +

+Macros

#define DATA_TYPE   float
 
#define CAST_TYPE   int
 
+ + + +

+Functions

int main (int argc, const char **argv)
 
+

Macro Definition Documentation

+ +
+
+ + + + +
#define CAST_TYPE   int
+
+ +
+
+ +
+
+ + + + +
#define DATA_TYPE   float
+
+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
int main (int argc,
const char ** argv 
)
+
+ +
+
+
+ + + + diff --git a/doc/doxygen/html/folderclosed.png b/doc/doxygen/html/folderclosed.png new file mode 100644 index 0000000000000000000000000000000000000000..bb8ab35edce8e97554e360005ee9fc5bffb36e66 GIT binary patch literal 616 zcmeAS@N?(olHy`uVBq!ia0y~yV31&7U=ZVAV_;yoRU6a6z`&&M>Eakt!T2`T*Z+!x zMBS}lr8g$z6vTdG-mg6SXly{_1Xt&d7|Wl`dnzy9Pq=pE|AWT=2ToRee#E%QSwT&} zw(!CcfnN5-jMK}ap3g1YW}MqN;YM?N**u@$e$Q*~eXqSYcW;!V0E0u`21W({Cw>K7 z43jE8|MTAP@uPG@#ht7v8!U=1GBr$AnA|X@KVDjHPxPU;&z8S;VPH^inkrIRnX3I` z&u?yXWu_v(`8n_ZaAa%o>@&EqCO&0#yvBo%ho^0P@TJO@;bXpYv#0mbC`7D>Bj;!>6saJ1(pm;Cd_1Xbv?Ic z#ko@xl@^pPotwwrpc15HU%gYzW`sHkOzmi8Pog(+QZT$66JI>~%l+tpe1-+|W z3a1oqiCMGy(oB}bX$(CRS33T0;8(h`b-~P6^Irrku4R-^c70GKQ~g`dB2(dA!RA*Q zjxOac%h+96Y+kKNc3mc>!t0T8>WCQ6lwLinn>_A)y37m-Jw8o;_o*-HJYuuNS;lkK zUhA93L!wePX4YEUz4&s!sp`75_x0r#C1MObOZvD9Wu}N(m6rW4n|gQlnoT#$Tp#6C zxA<;%i%8#dCM`qI%S6a=^nig63;?8SjV}a-AgBgB=|M>s^ eVv+g}?khiKem3!}T*$z{z~JfX=d#Wzp$P!>ZX#j; literal 0 HcmV?d00001 diff --git a/doc/doxygen/html/folderopen.png b/doc/doxygen/html/folderopen.png new file mode 100644 index 0000000000000000000000000000000000000000..d6c7f676a3b3ef8c2c307d319dff3c6a604eb227 GIT binary patch literal 597 zcmeAS@N?(olHy`uVBq!ia0y~yV31&7U=ZVAV_;yoRU6a6z`!Kq>Eakt!T2`TKL2un zz<x}AR=$zQt$$#L0c|y{QD>v87z44Pz$Ky??`WF?k30jRI zTVtC-7P`m<+&W@be!jL-)_S3{wL;?l%X9C~|9$uUyLo%E90eE-to3AL$P4~g+hEDy zG5KuOxvwv_QeX{r{3_4-KHC&iIZo;fX=zyIHn>5GeRiZbq% z+IzF7jpyWQ@!2a6L>@0>P*8L~zF(&7O#9A@H`dMK-q6!@#cd};ZK2%KB)-`1O#J3= zw=)=M-b$Ih@Batg7rSZ$(w;277FlgF^Wq_g+F#GUd^EcK=gM@kkH4P!^>{WNJl>rA z{NOIt#cM*lHh6B%l}_IHg>}Z$Jy(v+{d2ojwzB=@_J0=Us`WK=%bBL< zBFgiwcT9c%yGYg{M}^@>!2co-hQvh4*1LSp)K zN>*hF7;(tDIabKCm+7+k%$F><-XmMU6>`K=pDSi*ahmwsz1BQgVVNP#FMch_k4r8% z`e)B?>EFB0C&f-V)UarY4S!qWzpHaLO}>Abc}C^r#eB;x`>lH3{nS3tzge!~;{zR6 z?s;jO&0hL3bo3r^UF;oNdnZoFT6)`!yr@N`_eIu*2AfRhy}0Ie(%X4{+w^W_FT0Ty za^%}CRk^LJ9&ygiTpxDi)ZI_ZXY!o*Db27$^XGqe=7yP{*mrqxID{;yn8Luoz~JfX K=d#Wzp$PzT5g5Y& literal 0 HcmV?d00001 diff --git a/doc/doxygen/html/ftv2blank.png b/doc/doxygen/html/ftv2blank.png new file mode 100644 index 0000000000000000000000000000000000000000..63c605bb4c3d941c921a4b6cfa74951e946bcb48 GIT binary patch literal 86 zcmeAS@N?(olHy`uVBq!ia0y~yU=UznU=ZVAV_;x7xk{#nfq_BR)5S5Qg7NL$jSLJ7 o42L)T2FVdQ&MBb@0Ppk@y8r+H literal 0 HcmV?d00001 diff --git a/doc/doxygen/html/ftv2doc.png b/doc/doxygen/html/ftv2doc.png new file mode 100644 index 0000000000000000000000000000000000000000..17edabff95f7b8da13c9516a04efe05493c29501 GIT binary patch literal 746 zcmeAS@N?(olHy`uVBq!ia0y~yV31&7U=ZVAV_;yoRU6a6z`(T8)5S5Qg7NKKU;p4} ziPrh^ihm{A>qbOr1c~a50+@}UVgXodffY{_m;uoJ7d@^j3pS-JB`&h zF!((>ygX;;j`*bY1qtdDP%r!MD!(AV5Wn7fF-YoiCM4Myw<)2#mb3|8&bvB&rk6gRp zf7qn@<EkbNbI-?3|_`^r^^HbZLlI zutr!Ko5eTF(n-8m7qgeo{`omkn%VZOP4%UPp*?)xi`HwOe465N-c98NtPDoflHu@h-ct?NY9d{GM}{ z?V~dGM=X9H|L^Y7Xw7EM1ore-hZCixEakt!T2`T*Z+!x zMBS}lr8g$z6vTdG-mg6SXly{_1Xt&d7|Wl`dnzy9Pq=pE|AWT=2ToRee#E%QSwT&} zw(!CcfnN5-jMK}ap3g1YW}MqN;YM?N**u@$e$Q*~eXqSYcW;!V0E0u`21W({Cw>K7 z43jE8|MTAP@uPG@#ht7v8!U=1GBr$AnA|X@KVDjHPxPU;&z8S;VPH^inkrIRnX3I` z&u?yXWu_v(`8n_ZaAa%o>@&EqCO&0#yvBo%ho^0P@TJO@;bXpYv#0mbC`7D>Bj;!>6saJ1(pm;Cd_1Xbv?Ic z#ko@xl@^pPotwwrpc15HU%gYzW`sHkOzmi8Pog(+QZT$66JI>~%l+tpe1-+|W z3a1oqiCMGy(oB}bX$(CRS33T0;8(h`b-~P6^Irrku4R-^c70GKQ~g`dB2(dA!RA*Q zjxOac%h+96Y+kKNc3mc>!t0T8>WCQ6lwLinn>_A)y37m-Jw8o;_o*-HJYuuNS;lkK zUhA93L!wePX4YEUz4&s!sp`75_x0r#C1MObOZvD9Wu}N(m6rW4n|gQlnoT#$Tp#6C zxA<;%i%8#dCM`qI%S6a=^nig63;?8SjV}a-AgBgB=|M>s^ eVv+g}?khiKem3!}T*$z{z~JfX=d#Wzp$P!>ZX#j; literal 0 HcmV?d00001 diff --git a/doc/doxygen/html/ftv2folderopen.png b/doc/doxygen/html/ftv2folderopen.png new file mode 100644 index 0000000000000000000000000000000000000000..d6c7f676a3b3ef8c2c307d319dff3c6a604eb227 GIT binary patch literal 597 zcmeAS@N?(olHy`uVBq!ia0y~yV31&7U=ZVAV_;yoRU6a6z`!Kq>Eakt!T2`TKL2un zz<x}AR=$zQt$$#L0c|y{QD>v87z44Pz$Ky??`WF?k30jRI zTVtC-7P`m<+&W@be!jL-)_S3{wL;?l%X9C~|9$uUyLo%E90eE-to3AL$P4~g+hEDy zG5KuOxvwv_QeX{r{3_4-KHC&iIZo;fX=zyIHn>5GeRiZbq% z+IzF7jpyWQ@!2a6L>@0>P*8L~zF(&7O#9A@H`dMK-q6!@#cd};ZK2%KB)-`1O#J3= zw=)=M-b$Ih@Batg7rSZ$(w;277FlgF^Wq_g+F#GUd^EcK=gM@kkH4P!^>{WNJl>rA z{NOIt#cM*lHh6B%l}_IHg>}Z$Jy(v+{d2ojwzB=@_J0=Us`WK=%bBL< zBFgiwcT9c%yGYg{M}^@>!2co-hQvh4*1LSp)K zN>*hF7;(tDIabKCm+7+k%$F><-XmMU6>`K=pDSi*ahmwsz1BQgVVNP#FMch_k4r8% z`e)B?>EFB0C&f-V)UarY4S!qWzpHaLO}>Abc}C^r#eB;x`>lH3{nS3tzge!~;{zR6 z?s;jO&0hL3bo3r^UF;oNdnZoFT6)`!yr@N`_eIu*2AfRhy}0Ie(%X4{+w^W_FT0Ty za^%}CRk^LJ9&ygiTpxDi)ZI_ZXY!o*Db27$^XGqe=7yP{*mrqxID{;yn8Luoz~JfX K=d#Wzp$PzT5g5Y& literal 0 HcmV?d00001 diff --git a/doc/doxygen/html/ftv2lastnode.png b/doc/doxygen/html/ftv2lastnode.png new file mode 100644 index 0000000000000000000000000000000000000000..63c605bb4c3d941c921a4b6cfa74951e946bcb48 GIT binary patch literal 86 zcmeAS@N?(olHy`uVBq!ia0y~yU=UznU=ZVAV_;x7xk{#nfq_BR)5S5Qg7NL$jSLJ7 o42L)T2FVdQ&MBb@0Ppk@y8r+H literal 0 HcmV?d00001 diff --git a/doc/doxygen/html/ftv2link.png b/doc/doxygen/html/ftv2link.png new file mode 100644 index 0000000000000000000000000000000000000000..17edabff95f7b8da13c9516a04efe05493c29501 GIT binary patch literal 746 zcmeAS@N?(olHy`uVBq!ia0y~yV31&7U=ZVAV_;yoRU6a6z`(T8)5S5Qg7NKKU;p4} ziPrh^ihm{A>qbOr1c~a50+@}UVgXodffY{_m;uoJ7d@^j3pS-JB`&h zF!((>ygX;;j`*bY1qtdDP%r!MD!(AV5Wn7fF-YoiCM4Myw<)2#mb3|8&bvB&rk6gRp zf7qn@<EkbNbI-?3|_`^r^^HbZLlI zutr!Ko5eTF(n-8m7qgeo{`omkn%VZOP4%UPp*?)xi`HwOe465N-c98NtPDoflHu@h-ct?NY9d{GM}{ z?V~dGM=X9H|L^Y7Xw7EM1ore-hZCix@Vhihj(F z5=TGEFKK_k5wqa?1D?=ahXjEurkR(76J85s@NhOUGq5u>9t}5-mE%lWepi;Uqf71m z{OS2=-_EA&i>$w5!uw}d@(=FzhI$T(E!{^y{WLCPvfUHg-?n_KaEwzcCzmLr=l*V6 zC-&_#>zx*^v);jxy=5y`_=dB74rP`7XD?ned3^snGwa;g6OSU_JYHVoTgx1KM+Mx1^?q-;~e(vK>ne<2)xN=7sOn7cwv~FnGH9xvX@Vhihj(F z5=TGEFKK_k5wqa?1D?=ahXjEurkR(76J85s@NhOUGq5u>9t}5-mE%lWepi;Uqf71m z{OS2=-_EA&i>$w5!uw}d@(=FzhI$T(E!{^y{WLCPvfUHg-?n_KaEwzcCzmLr=l*V6 zC-&_#>zx*^v);jxy=5y`_=dB74rP`7XD?ned3^snGwa;g6OSU_JYHVoTgx1KM+Mx1^?q-;~e(vK>ne<2)xN=7sOn7cwv~FnGH9xvXFVdQ&MBb@0Ppk@y8r+H literal 0 HcmV?d00001 diff --git a/doc/doxygen/html/ftv2plastnode.png b/doc/doxygen/html/ftv2plastnode.png new file mode 100644 index 0000000000000000000000000000000000000000..c6ee22f937a07d1dbfc27c669d11f8ed13e2f152 GIT binary patch literal 229 zcmeAS@N?(olHy`uVBq!ia0y~yU=UznU=ZVAV_;x7xk{#nfq`L-r;B4q1>@VfwtS3% zB5wQ>Z?G+OS$!q@2%m^mr`yT^?;Fjw9AOU2uWshOY7y*F@$rm7Z&F@S(dVw}PkZ<8 zo20^d;Cu*UR{+<7Z+jxv_>138F?;of@zV#T4N{wew`}wmUFy`JvG744^GnTH+L4S$ zIyf(_IvsTKf?Ze%3&+Xgj$BKPSIjL>1m`TxZqju)v0V3#%4eP=&P&l5sl5BW3v|Em k$>cEAIRBLX?^wVdmdKI;Vst0IVihlK=n! literal 0 HcmV?d00001 diff --git a/doc/doxygen/html/ftv2pnode.png b/doc/doxygen/html/ftv2pnode.png new file mode 100644 index 0000000000000000000000000000000000000000..c6ee22f937a07d1dbfc27c669d11f8ed13e2f152 GIT binary patch literal 229 zcmeAS@N?(olHy`uVBq!ia0y~yU=UznU=ZVAV_;x7xk{#nfq`L-r;B4q1>@VfwtS3% zB5wQ>Z?G+OS$!q@2%m^mr`yT^?;Fjw9AOU2uWshOY7y*F@$rm7Z&F@S(dVw}PkZ<8 zo20^d;Cu*UR{+<7Z+jxv_>138F?;of@zV#T4N{wew`}wmUFy`JvG744^GnTH+L4S$ zIyf(_IvsTKf?Ze%3&+Xgj$BKPSIjL>1m`TxZqju)v0V3#%4eP=&P&l5sl5BW3v|Em k$>cEAIRBLX?^wVdmdKI;Vst0IVihlK=n! literal 0 HcmV?d00001 diff --git a/doc/doxygen/html/ftv2splitbar.png b/doc/doxygen/html/ftv2splitbar.png new file mode 100644 index 0000000000000000000000000000000000000000..fe895f2c58179b471a22d8320b39a4bd7312ec8e GIT binary patch literal 314 zcmeAS@N?(olHy`uVBq!ia0y~yU|?flU}4~3VqjqK-LYSgfq{|H)5S5Qg7NL$g3+rcW~p3*2k<8ET5+kt+??7VY)%8z5|0uNDQ@?BH>==GIK88=8LINZs-Am7NcFtb?^;v({ zq8ITc`sa7geZ2VM+sMGMuOD7LdHeYLmg_$w*WCKQb@{T)vd`K3;@>{~dwa2`g9;hw cuXA+R8{0q8EosLX7#J8lUHx3vIVCg!02F6;9RL6T literal 0 HcmV?d00001 diff --git a/doc/doxygen/html/ftv2vertline.png b/doc/doxygen/html/ftv2vertline.png new file mode 100644 index 0000000000000000000000000000000000000000..63c605bb4c3d941c921a4b6cfa74951e946bcb48 GIT binary patch literal 86 zcmeAS@N?(olHy`uVBq!ia0y~yU=UznU=ZVAV_;x7xk{#nfq_BR)5S5Qg7NL$jSLJ7 o42L)T2FVdQ&MBb@0Ppk@y8r+H literal 0 HcmV?d00001 diff --git a/doc/doxygen/html/functions.html b/doc/doxygen/html/functions.html new file mode 100644 index 0000000..9878e03 --- /dev/null +++ b/doc/doxygen/html/functions.html @@ -0,0 +1,134 @@ + + + + + + +Boost.Sort: Class Members + + + + + + + + + + +
+
+ + + + + + +
+
Boost.Sort +
+
+
+ + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+
+ + + + diff --git a/doc/doxygen/html/functions_func.html b/doc/doxygen/html/functions_func.html new file mode 100644 index 0000000..0080be0 --- /dev/null +++ b/doc/doxygen/html/functions_func.html @@ -0,0 +1,113 @@ + + + + + + +Boost.Sort: Class Members - Functions + + + + + + + + + + +
+
+ + + + + + +
+
Boost.Sort +
+
+
+ + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ + + + diff --git a/doc/doxygen/html/functions_vars.html b/doc/doxygen/html/functions_vars.html new file mode 100644 index 0000000..3864228 --- /dev/null +++ b/doc/doxygen/html/functions_vars.html @@ -0,0 +1,123 @@ + + + + + + +Boost.Sort: Class Members - Variables + + + + + + + + + + +
+
+ + + + + + +
+
Boost.Sort +
+
+
+ + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ + + + diff --git a/doc/doxygen/html/generalizedstruct_8cpp.html b/doc/doxygen/html/generalizedstruct_8cpp.html new file mode 100644 index 0000000..28161b2 --- /dev/null +++ b/doc/doxygen/html/generalizedstruct_8cpp.html @@ -0,0 +1,157 @@ + + + + + + +Boost.Sort: I:/modular-boost/libs/sort/example/generalizedstruct.cpp File Reference + + + + + + + + + + +
+
+ + + + + + +
+
Boost.Sort +
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
generalizedstruct.cpp File Reference
+
+
+
#include <boost/sort/spreadsort/string_sort.hpp>
+#include <boost/sort/spreadsort/float_sort.hpp>
+#include <time.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <algorithm>
+#include <vector>
+#include <iostream>
+#include <fstream>
+#include <string>
+
+ + + + + + + + + +

+Classes

struct  DATA_TYPE
 
struct  lessthan
 
struct  bracket
 
struct  getsize
 
+ + + +

+Functions

int main (int argc, const char **argv)
 
+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
int main (int argc,
const char ** argv 
)
+
+ +
+
+
+ + + + diff --git a/doc/doxygen/html/globals.html b/doc/doxygen/html/globals.html new file mode 100644 index 0000000..96c91ef --- /dev/null +++ b/doc/doxygen/html/globals.html @@ -0,0 +1,255 @@ + + + + + + +Boost.Sort: File Members + + + + + + + + + + +
+
+ + + + + + +
+
Boost.Sort +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all file members with links to the files they belong to:
+ +

- a -

+ + +

- b -

+ + +

- c -

+ + +

- d -

+ + +

- f -

+ + +

- g -

+ + +

- i -

+ + +

- k -

+ + +

- m -

+ + +

- r -

+ + +

- s -

+ + +

- t -

+
+ + + + diff --git a/doc/doxygen/html/globals_defs.html b/doc/doxygen/html/globals_defs.html new file mode 100644 index 0000000..414d0ec --- /dev/null +++ b/doc/doxygen/html/globals_defs.html @@ -0,0 +1,133 @@ + + + + + + +Boost.Sort: File Members + + + + + + + + + + +
+
+ + + + + + +
+
Boost.Sort +
+
+
+ + + + + + +
+ +
+
+ + +
+ +
+ + + + + + diff --git a/doc/doxygen/html/globals_func.html b/doc/doxygen/html/globals_func.html new file mode 100644 index 0000000..de7ce55 --- /dev/null +++ b/doc/doxygen/html/globals_func.html @@ -0,0 +1,170 @@ + + + + + + +Boost.Sort: File Members + + + + + + + + + + +
+
+ + + + + + +
+
Boost.Sort +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ + + + + + diff --git a/doc/doxygen/html/globals_vars.html b/doc/doxygen/html/globals_vars.html new file mode 100644 index 0000000..58bc298 --- /dev/null +++ b/doc/doxygen/html/globals_vars.html @@ -0,0 +1,121 @@ + + + + + + +Boost.Sort: File Members + + + + + + + + + + +
+
+ + + + + + +
+
Boost.Sort +
+
+
+ + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ + + + diff --git a/doc/doxygen/html/index.html b/doc/doxygen/html/index.html new file mode 100644 index 0000000..2fa067c --- /dev/null +++ b/doc/doxygen/html/index.html @@ -0,0 +1,90 @@ + + + + + + +Boost.Sort: Main Page + + + + + + + + + + +
+
+ + + + + + +
+
Boost.Sort +
+
+
+ + + + +
+ +
+
+ + +
+ +
+ +
+
+
Boost.Sort Documentation
+
+
+
+ + + + diff --git a/doc/doxygen/html/int64_8cpp.html b/doc/doxygen/html/int64_8cpp.html new file mode 100644 index 0000000..dcb59e9 --- /dev/null +++ b/doc/doxygen/html/int64_8cpp.html @@ -0,0 +1,164 @@ + + + + + + +Boost.Sort: I:/modular-boost/libs/sort/example/int64.cpp File Reference + + + + + + + + + + +
+
+ + + + + + +
+
Boost.Sort +
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
int64.cpp File Reference
+
+
+
#include <boost/sort/spreadsort/spreadsort.hpp>
+#include <time.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <algorithm>
+#include <vector>
+#include <string>
+#include <fstream>
+#include <sstream>
+#include <iostream>
+
+ + + +

+Macros

#define DATA_TYPE   boost::int64_t
 
+ + + +

+Functions

int main (int argc, const char **argv)
 
+

Macro Definition Documentation

+ +
+
+ + + + +
#define DATA_TYPE   boost::int64_t
+
+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
int main (int argc,
const char ** argv 
)
+
+ +
+
+
+ + + + diff --git a/doc/doxygen/html/integer__sort_8hpp.html b/doc/doxygen/html/integer__sort_8hpp.html new file mode 100644 index 0000000..3dbbc77 --- /dev/null +++ b/doc/doxygen/html/integer__sort_8hpp.html @@ -0,0 +1,135 @@ + + + + + + +Boost.Sort: I:/modular-boost/libs/sort/include/boost/sort/spreadsort/integer_sort.hpp File Reference + + + + + + + + + + +
+
+ + + + + + +
+
Boost.Sort +
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
integer_sort.hpp File Reference
+
+
+
#include <algorithm>
+#include <vector>
+#include <cstring>
+#include <limits>
+#include <boost/static_assert.hpp>
+#include <boost/sort/spreadsort/detail/constants.hpp>
+#include <boost/sort/spreadsort/detail/integer_sort.hpp>
+
+

Go to the source code of this file.

+ + + + + + +

+Namespaces

 boost
 
 boost::sort
 
+ + + + + + + + + + + + + +

+Functions

template<class RandomAccessIter >
void boost::sort::integer_sort (RandomAccessIter first, RandomAccessIter last)
 Integer sort algorithm using random access iterators. (All variants fall back to std::sort if the data size is too small, < detail::min_sort_size). More...
 
template<class RandomAccessIter , class Right_shift , class Compare >
void boost::sort::integer_sort (RandomAccessIter first, RandomAccessIter last, Right_shift shift, Compare comp)
 Integer sort algorithm using random access iterators with both right-shift and user-defined comparison operator. (All variants fall back to std::sort if the data size is too small, < detail::min_sort_size). More...
 
template<class RandomAccessIter , class Right_shift >
void boost::sort::integer_sort (RandomAccessIter first, RandomAccessIter last, Right_shift shift)
 Integer sort algorithm using random access iterators with just right-shift functor. (All variants fall back to std::sort if the data size is too small, < detail::min_sort_size). More...
 
+
+ + + + diff --git a/doc/doxygen/html/integer__sort_8hpp_source.html b/doc/doxygen/html/integer__sort_8hpp_source.html new file mode 100644 index 0000000..b88ff87 --- /dev/null +++ b/doc/doxygen/html/integer__sort_8hpp_source.html @@ -0,0 +1,300 @@ + + + + + + +Boost.Sort: I:/modular-boost/libs/sort/include/boost/sort/spreadsort/integer_sort.hpp Source File + + + + + + + + + + +
+
+ + + + + + +
+
Boost.Sort +
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+
+
integer_sort.hpp
+
+
+Go to the documentation of this file.
1 //Templated Spreadsort-based implementation of integer_sort
+
2 
+
3 // Copyright Steven J. Ross 2001 - 2014.
+
4 // Distributed under the Boost Software License, Version 1.0.
+
5 // (See accompanying file LICENSE_1_0.txt or copy at
+
6 // http://www.boost.org/LICENSE_1_0.txt)
+
7 
+
8 // See http://www.boost.org/libs/sort/ for library home page.
+
9 
+
10 /*
+
11 Some improvements suggested by:
+
12 Phil Endecott and Frank Gennari
+
13 
+
14 Doxygen comments by Paul A. Bristow Jan 2015
+
15 
+
16 */
+
17 
+
18 #ifndef BOOST_INTEGER_SORT_HPP
+
19 #define BOOST_INTEGER_SORT_HPP
+
20 #include <algorithm>
+
21 #include <vector>
+
22 #include <cstring>
+
23 #include <limits>
+
24 #include <boost/static_assert.hpp>
+
25 #include <boost/sort/spreadsort/detail/constants.hpp>
+
26 #include <boost/sort/spreadsort/detail/integer_sort.hpp>
+
27 
+
28 namespace boost {
+
29 namespace sort {
+
30  //Top-level sorting call for integers.
+
31 
+
32 
+
33 /*! \brief Integer sort algorithm using random access iterators.
+
34  (All variants fall back to @c std::sort if the data size is too small, < @c detail::min_sort_size).
+
35 
+
36  \details @c integer_sort is a fast templated in-place hybrid radix/comparison algorithm,
+
37 which in testing tends to be roughly 50% to 2X faster than @c std::sort for large tests (>=100kB).\n
+
38 Worst-case performance is <em> O(N * (lg(range)/s + s)) </em>,
+
39 so @c integer_sort is asymptotically faster
+
40 than pure comparison-based algorithms. @c s is @c max_splits, which defaults to 11,
+
41 so its worst-case with default settings for 32-bit integers is
+
42 <em> O(N * ((32/11) </em> slow radix-based iterations fast comparison-based iterations).\n\n
+
43 Some performance plots of runtime vs. n and log(range) are provided:\n
+
44  <a href="../../doc/graph/windows_integer_sort.htm"> windows_integer_sort</a>
+
45  \n
+
46  <a href="../../doc/graph/osx_integer_sort.htm"> osx_integer_sort</a>
+
47 
+
48 
+
49  \tparam RandomAccessIter <a href="http://www.cplusplus.com/reference/iterator/RandomAccessIterator/">Random access iterator</a>
+
50  \param[in] first Iterator pointer to first element.
+
51  \param[in] last Iterator pointing to one beyond the end of data.
+
52 
+
53  \pre [@c first, @c last) is a valid range.
+
54  \pre @c RandomAccessIter @c value_type is mutable.
+
55  \pre @c RandomAccessIter @c value_type is <a href="http://en.cppreference.com/w/cpp/concept/LessThanComparable">LessThanComparable</a>
+
56  \pre @c RandomAccessIter @c value_type supports the @c operator>>,
+
57  which returns an integer-type right-shifted a specified number of bits.
+
58  \post The elements in the range [@c first, @c last) are sorted in ascending order.
+
59 
+
60  \throws std::exception Propagates exceptions if any of the element comparisons, the element swaps (or moves),
+
61  the right shift, subtraction of right-shifted elements, functors, or any operations on iterators throw.
+
62 
+
63  \warning Throwing an exception may cause data loss. This will also throw if a small vector resize throws, in which case there will be no data loss.
+
64  \warning Invalid arguments cause undefined behaviour.
+
65  \note @c spreadsort function provides a wrapper that calls the fastest sorting algorithm available for a data type,
+
66  enabling faster generic-programming.
+
67 
+
68  \remark The lesser of <em> O(N*log(N)) </em> comparisons and <em> O(N*log(K/S + S)) </em>operations worst-case, where:
+
69  \remark * N is @c last - @c first,
+
70  \remark * K is the log of the range in bits (32 for 32-bit integers using their full range),
+
71  \remark * S is a constant called max_splits, defaulting to 11 (except for strings where it is the log of the character size).
+
72 
+
73 */
+
74  template <class RandomAccessIter>
+
75  inline void integer_sort(RandomAccessIter first, RandomAccessIter last)
+
76  {
+
77  // Don't sort if it's too small to optimize.
+
78  if (last - first < detail::min_sort_size)
+
79  std::sort(first, last);
+
80  else
+
81  detail::integer_sort(first, last, *first >> 0);
+
82  }
+
83 
+
84 /*! \brief Integer sort algorithm using random access iterators with both right-shift and user-defined comparison operator.
+
85  (All variants fall back to @c std::sort if the data size is too small, < @c detail::min_sort_size).
+
86 
+
87  \details @c integer_sort is a fast templated in-place hybrid radix/comparison algorithm,
+
88 which in testing tends to be roughly 50% to 2X faster than @c std::sort for large tests (>=100kB).\n
+
89 Worst-case performance is <em> O(N * (lg(range)/s + s)) </em>,
+
90 so @c integer_sort is asymptotically faster
+
91 than pure comparison-based algorithms. @c s is @c max_splits, which defaults to 11,
+
92 so its worst-case with default settings for 32-bit integers is
+
93 <em> O(N * ((32/11) </em> slow radix-based iterations fast comparison-based iterations).\n\n
+
94 Some performance plots of runtime vs. n and log(range) are provided:\n
+
95  <a href="../../doc/graph/windows_integer_sort.htm"> windows_integer_sort</a>
+
96  \n
+
97  <a href="../../doc/graph/osx_integer_sort.htm"> osx_integer_sort</a>
+
98 
+
99  \tparam RandomAccessIter <a href="http://www.cplusplus.com/reference/iterator/RandomAccessIterator/">Random access iterator</a>
+
100  \tparam Right_shift functor for right-shift by parameter @c shift bits.
+
101  \tparam Comp To provide @c operator< for user-defined comparison.
+
102 
+
103  \param[in] first Iterator pointer to first element.
+
104  \param[in] last Iterator pointing to one beyond the end of data.
+
105  \param[in] shift Number of bits to right-shift (using functor).
+
106  \param[in] comp comparison functor.
+
107 
+
108  \pre [@c first, @c last) is a valid range.
+
109  \pre @c RandomAccessIter @c value_type is mutable.
+
110  \pre @c RandomAccessIter @c value_type is <a href="http://en.cppreference.com/w/cpp/concept/LessThanComparable">LessThanComparable</a>
+
111  \pre @c RandomAccessIter @c value_type supports the @c operator>>,
+
112  which returns an integer-type right-shifted a specified number of bits.
+
113  \post The elements in the range [@c first, @c last) are sorted in ascending order.
+
114 
+
115  \return @c void.
+
116 
+
117  \throws std::exception Propagates exceptions if any of the element comparisons, the element swaps (or moves),
+
118  the right shift, subtraction of right-shifted elements, functors,
+
119  or any operations on iterators throw.
+
120 
+
121  \warning Throwing an exception may cause data loss. This will also throw if a small vector resize throws, in which case there will be no data loss.
+
122  \warning Invalid arguments cause undefined behaviour.
+
123  \note @c spreadsort function provides a wrapper that calls the fastest sorting algorithm available for a data type,
+
124  enabling faster generic-programming.
+
125 
+
126  \remark The lesser of <em> O(N*log(N)) </em> comparisons and <em> O(N*log(K/S + S)) </em>operations worst-case, where:
+
127  \remark * N is @c last - @c first,
+
128  \remark * K is the log of the range in bits (32 for 32-bit integers using their full range),
+
129  \remark * S is a constant called max_splits, defaulting to 11 (except for strings where it is the log of the character size).
+
130 */
+
131  template <class RandomAccessIter, class Right_shift, class Compare>
+
132  inline void integer_sort(RandomAccessIter first, RandomAccessIter last,
+
133  Right_shift shift, Compare comp) {
+
134  if (last - first < detail::min_sort_size)
+
135  std::sort(first, last, comp);
+
136  else
+
137  detail::integer_sort(first, last, shift(*first, 0), shift, comp);
+
138  }
+
139 
+
140 /*! \brief Integer sort algorithm using random access iterators with just right-shift functor.
+
141  (All variants fall back to @c std::sort if the data size is too small, < @c detail::min_sort_size).
+
142 
+
143  \details @c integer_sort is a fast templated in-place hybrid radix/comparison algorithm,
+
144 which in testing tends to be roughly 50% to 2X faster than @c std::sort for large tests (>=100kB).\n
+
145 
+
146 \par Performance:
+
147 Worst-case performance is <em> O(N * (lg(range)/s + s)) </em>,
+
148 so @c integer_sort is asymptotically faster
+
149 than pure comparison-based algorithms. @c s is @c max_splits, which defaults to 11,
+
150 so its worst-case with default settings for 32-bit integers is
+
151 <em> O(N * ((32/11) </em> slow radix-based iterations fast comparison-based iterations).\n\n
+
152 Some performance plots of runtime vs. n and log(range) are provided:\n
+
153  * <a href="../../doc/graph/windows_integer_sort.htm"> windows_integer_sort</a>\n
+
154  * <a href="../../doc/graph/osx_integer_sort.htm"> osx_integer_sort</a>
+
155 
+
156  \tparam RandomAccessIter <a href="http://www.cplusplus.com/reference/iterator/RandomAccessIterator/">Random access iterator</a>
+
157  \tparam Right_shift functor for right-shift by parameter @c shift bits.
+
158 
+
159  \param[in] first Iterator pointer to first element.
+
160  \param[in] last Iterator pointing to one beyond the end of data.
+
161  \param[in] shift Number of bits to right-shift (using functor).
+
162 
+
163  \pre [@c first, @c last) is a valid range.
+
164  \pre @c RandomAccessIter @c value_type is mutable.
+
165  \pre @c RandomAccessIter @c value_type is <a href="http://en.cppreference.com/w/cpp/concept/LessThanComparable">LessThanComparable</a>
+
166  \pre @c RandomAccessIter @c value_type supports the @c operator>>,
+
167  which returns an integer-type right-shifted a specified number of bits.
+
168  \post The elements in the range [@c first, @c last) are sorted in ascending order.
+
169 
+
170  \throws std::exception Propagates exceptions if any of the element comparisons, the element swaps (or moves),
+
171  the right shift, subtraction of right-shifted elements, functors,
+
172  or any operations on iterators throw.
+
173 
+
174  \warning Throwing an exception may cause data loss. This will also throw if a small vector resize throws, in which case there will be no data loss.
+
175  \warning Invalid arguments cause undefined behaviour.
+
176  \note @c spreadsort function provides a wrapper that calls the fastest sorting algorithm available for a data type,
+
177  enabling faster generic-programming.
+
178 
+
179  \remark The lesser of <em> O(N*log(N)) </em> comparisons and <em> O(N*log(K/S + S)) </em>operations worst-case, where:
+
180  \remark * N is @c last - @c first,
+
181  \remark * K is the log of the range in bits (32 for 32-bit integers using their full range),
+
182  \remark * S is a constant called max_splits, defaulting to 11 (except for strings where it is the log of the character size).
+
183 
+
184 */
+
185  template <class RandomAccessIter, class Right_shift>
+
186  inline void integer_sort(RandomAccessIter first, RandomAccessIter last,
+
187  Right_shift shift) {
+
188  if (last - first < detail::min_sort_size)
+
189  std::sort(first, last);
+
190  else
+
191  detail::integer_sort(first, last, shift(*first, 0), shift);
+
192  }
+
193 }
+
194 }
+
195 
+
196 #endif
+
197 
+
void integer_sort(RandomAccessIter first, RandomAccessIter last)
Integer sort algorithm using random access iterators. (All variants fall back to std::sort if the dat...
Definition: integer_sort.hpp:75
+
Definition: float_sort.hpp:27
+
void integer_sort(RandomAccessIter first, RandomAccessIter last, Right_shift shift)
Integer sort algorithm using random access iterators with just right-shift functor. (All variants fall back to std::sort if the data size is too small, < detail::min_sort_size).
Definition: integer_sort.hpp:186
+
+ + + + diff --git a/doc/doxygen/html/jquery.js b/doc/doxygen/html/jquery.js new file mode 100644 index 0000000..1f4d0b4 --- /dev/null +++ b/doc/doxygen/html/jquery.js @@ -0,0 +1,68 @@ +/*! + * jQuery JavaScript Library v1.7.1 + * http://jquery.com/ + * + * Copyright 2011, John Resig + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * + * Date: Mon Nov 21 21:11:03 2011 -0500 + */ +(function(bb,L){var av=bb.document,bu=bb.navigator,bl=bb.location;var b=(function(){var bF=function(b0,b1){return new bF.fn.init(b0,b1,bD)},bU=bb.jQuery,bH=bb.$,bD,bY=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,bM=/\S/,bI=/^\s+/,bE=/\s+$/,bA=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,bN=/^[\],:{}\s]*$/,bW=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,bP=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,bJ=/(?:^|:|,)(?:\s*\[)+/g,by=/(webkit)[ \/]([\w.]+)/,bR=/(opera)(?:.*version)?[ \/]([\w.]+)/,bQ=/(msie) ([\w.]+)/,bS=/(mozilla)(?:.*? rv:([\w.]+))?/,bB=/-([a-z]|[0-9])/ig,bZ=/^-ms-/,bT=function(b0,b1){return(b1+"").toUpperCase()},bX=bu.userAgent,bV,bC,e,bL=Object.prototype.toString,bG=Object.prototype.hasOwnProperty,bz=Array.prototype.push,bK=Array.prototype.slice,bO=String.prototype.trim,bv=Array.prototype.indexOf,bx={};bF.fn=bF.prototype={constructor:bF,init:function(b0,b4,b3){var b2,b5,b1,b6;if(!b0){return this}if(b0.nodeType){this.context=this[0]=b0;this.length=1;return this}if(b0==="body"&&!b4&&av.body){this.context=av;this[0]=av.body;this.selector=b0;this.length=1;return this}if(typeof b0==="string"){if(b0.charAt(0)==="<"&&b0.charAt(b0.length-1)===">"&&b0.length>=3){b2=[null,b0,null]}else{b2=bY.exec(b0)}if(b2&&(b2[1]||!b4)){if(b2[1]){b4=b4 instanceof bF?b4[0]:b4;b6=(b4?b4.ownerDocument||b4:av);b1=bA.exec(b0);if(b1){if(bF.isPlainObject(b4)){b0=[av.createElement(b1[1])];bF.fn.attr.call(b0,b4,true)}else{b0=[b6.createElement(b1[1])]}}else{b1=bF.buildFragment([b2[1]],[b6]);b0=(b1.cacheable?bF.clone(b1.fragment):b1.fragment).childNodes}return bF.merge(this,b0)}else{b5=av.getElementById(b2[2]);if(b5&&b5.parentNode){if(b5.id!==b2[2]){return b3.find(b0)}this.length=1;this[0]=b5}this.context=av;this.selector=b0;return this}}else{if(!b4||b4.jquery){return(b4||b3).find(b0)}else{return this.constructor(b4).find(b0)}}}else{if(bF.isFunction(b0)){return b3.ready(b0)}}if(b0.selector!==L){this.selector=b0.selector;this.context=b0.context}return bF.makeArray(b0,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return bK.call(this,0)},get:function(b0){return b0==null?this.toArray():(b0<0?this[this.length+b0]:this[b0])},pushStack:function(b1,b3,b0){var b2=this.constructor();if(bF.isArray(b1)){bz.apply(b2,b1)}else{bF.merge(b2,b1)}b2.prevObject=this;b2.context=this.context;if(b3==="find"){b2.selector=this.selector+(this.selector?" ":"")+b0}else{if(b3){b2.selector=this.selector+"."+b3+"("+b0+")"}}return b2},each:function(b1,b0){return bF.each(this,b1,b0)},ready:function(b0){bF.bindReady();bC.add(b0);return this},eq:function(b0){b0=+b0;return b0===-1?this.slice(b0):this.slice(b0,b0+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(bK.apply(this,arguments),"slice",bK.call(arguments).join(","))},map:function(b0){return this.pushStack(bF.map(this,function(b2,b1){return b0.call(b2,b1,b2)}))},end:function(){return this.prevObject||this.constructor(null)},push:bz,sort:[].sort,splice:[].splice};bF.fn.init.prototype=bF.fn;bF.extend=bF.fn.extend=function(){var b9,b2,b0,b1,b6,b7,b5=arguments[0]||{},b4=1,b3=arguments.length,b8=false;if(typeof b5==="boolean"){b8=b5;b5=arguments[1]||{};b4=2}if(typeof b5!=="object"&&!bF.isFunction(b5)){b5={}}if(b3===b4){b5=this;--b4}for(;b40){return}bC.fireWith(av,[bF]);if(bF.fn.trigger){bF(av).trigger("ready").off("ready")}}},bindReady:function(){if(bC){return}bC=bF.Callbacks("once memory");if(av.readyState==="complete"){return setTimeout(bF.ready,1)}if(av.addEventListener){av.addEventListener("DOMContentLoaded",e,false);bb.addEventListener("load",bF.ready,false)}else{if(av.attachEvent){av.attachEvent("onreadystatechange",e);bb.attachEvent("onload",bF.ready);var b0=false;try{b0=bb.frameElement==null}catch(b1){}if(av.documentElement.doScroll&&b0){bw()}}}},isFunction:function(b0){return bF.type(b0)==="function"},isArray:Array.isArray||function(b0){return bF.type(b0)==="array"},isWindow:function(b0){return b0&&typeof b0==="object"&&"setInterval" in b0},isNumeric:function(b0){return !isNaN(parseFloat(b0))&&isFinite(b0)},type:function(b0){return b0==null?String(b0):bx[bL.call(b0)]||"object"},isPlainObject:function(b2){if(!b2||bF.type(b2)!=="object"||b2.nodeType||bF.isWindow(b2)){return false}try{if(b2.constructor&&!bG.call(b2,"constructor")&&!bG.call(b2.constructor.prototype,"isPrototypeOf")){return false}}catch(b1){return false}var b0;for(b0 in b2){}return b0===L||bG.call(b2,b0)},isEmptyObject:function(b1){for(var b0 in b1){return false}return true},error:function(b0){throw new Error(b0)},parseJSON:function(b0){if(typeof b0!=="string"||!b0){return null}b0=bF.trim(b0);if(bb.JSON&&bb.JSON.parse){return bb.JSON.parse(b0)}if(bN.test(b0.replace(bW,"@").replace(bP,"]").replace(bJ,""))){return(new Function("return "+b0))()}bF.error("Invalid JSON: "+b0)},parseXML:function(b2){var b0,b1;try{if(bb.DOMParser){b1=new DOMParser();b0=b1.parseFromString(b2,"text/xml")}else{b0=new ActiveXObject("Microsoft.XMLDOM");b0.async="false";b0.loadXML(b2)}}catch(b3){b0=L}if(!b0||!b0.documentElement||b0.getElementsByTagName("parsererror").length){bF.error("Invalid XML: "+b2)}return b0},noop:function(){},globalEval:function(b0){if(b0&&bM.test(b0)){(bb.execScript||function(b1){bb["eval"].call(bb,b1)})(b0)}},camelCase:function(b0){return b0.replace(bZ,"ms-").replace(bB,bT)},nodeName:function(b1,b0){return b1.nodeName&&b1.nodeName.toUpperCase()===b0.toUpperCase()},each:function(b3,b6,b2){var b1,b4=0,b5=b3.length,b0=b5===L||bF.isFunction(b3);if(b2){if(b0){for(b1 in b3){if(b6.apply(b3[b1],b2)===false){break}}}else{for(;b40&&b0[0]&&b0[b1-1])||b1===0||bF.isArray(b0));if(b3){for(;b21?aJ.call(arguments,0):bG;if(!(--bw)){bC.resolveWith(bC,bx)}}}function bz(bF){return function(bG){bB[bF]=arguments.length>1?aJ.call(arguments,0):bG;bC.notifyWith(bE,bB)}}if(e>1){for(;bv
a";bI=bv.getElementsByTagName("*");bF=bv.getElementsByTagName("a")[0];if(!bI||!bI.length||!bF){return{}}bG=av.createElement("select");bx=bG.appendChild(av.createElement("option"));bE=bv.getElementsByTagName("input")[0];bJ={leadingWhitespace:(bv.firstChild.nodeType===3),tbody:!bv.getElementsByTagName("tbody").length,htmlSerialize:!!bv.getElementsByTagName("link").length,style:/top/.test(bF.getAttribute("style")),hrefNormalized:(bF.getAttribute("href")==="/a"),opacity:/^0.55/.test(bF.style.opacity),cssFloat:!!bF.style.cssFloat,checkOn:(bE.value==="on"),optSelected:bx.selected,getSetAttribute:bv.className!=="t",enctype:!!av.createElement("form").enctype,html5Clone:av.createElement("nav").cloneNode(true).outerHTML!=="<:nav>",submitBubbles:true,changeBubbles:true,focusinBubbles:false,deleteExpando:true,noCloneEvent:true,inlineBlockNeedsLayout:false,shrinkWrapBlocks:false,reliableMarginRight:true};bE.checked=true;bJ.noCloneChecked=bE.cloneNode(true).checked;bG.disabled=true;bJ.optDisabled=!bx.disabled;try{delete bv.test}catch(bC){bJ.deleteExpando=false}if(!bv.addEventListener&&bv.attachEvent&&bv.fireEvent){bv.attachEvent("onclick",function(){bJ.noCloneEvent=false});bv.cloneNode(true).fireEvent("onclick")}bE=av.createElement("input");bE.value="t";bE.setAttribute("type","radio");bJ.radioValue=bE.value==="t";bE.setAttribute("checked","checked");bv.appendChild(bE);bD=av.createDocumentFragment();bD.appendChild(bv.lastChild);bJ.checkClone=bD.cloneNode(true).cloneNode(true).lastChild.checked;bJ.appendChecked=bE.checked;bD.removeChild(bE);bD.appendChild(bv);bv.innerHTML="";if(bb.getComputedStyle){bA=av.createElement("div");bA.style.width="0";bA.style.marginRight="0";bv.style.width="2px";bv.appendChild(bA);bJ.reliableMarginRight=(parseInt((bb.getComputedStyle(bA,null)||{marginRight:0}).marginRight,10)||0)===0}if(bv.attachEvent){for(by in {submit:1,change:1,focusin:1}){bB="on"+by;bw=(bB in bv);if(!bw){bv.setAttribute(bB,"return;");bw=(typeof bv[bB]==="function")}bJ[by+"Bubbles"]=bw}}bD.removeChild(bv);bD=bG=bx=bA=bv=bE=null;b(function(){var bM,bU,bV,bT,bN,bO,bL,bS,bR,e,bP,bQ=av.getElementsByTagName("body")[0];if(!bQ){return}bL=1;bS="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;";bR="visibility:hidden;border:0;";e="style='"+bS+"border:5px solid #000;padding:0;'";bP="
";bM=av.createElement("div");bM.style.cssText=bR+"width:0;height:0;position:static;top:0;margin-top:"+bL+"px";bQ.insertBefore(bM,bQ.firstChild);bv=av.createElement("div");bM.appendChild(bv);bv.innerHTML="
t
";bz=bv.getElementsByTagName("td");bw=(bz[0].offsetHeight===0);bz[0].style.display="";bz[1].style.display="none";bJ.reliableHiddenOffsets=bw&&(bz[0].offsetHeight===0);bv.innerHTML="";bv.style.width=bv.style.paddingLeft="1px";b.boxModel=bJ.boxModel=bv.offsetWidth===2;if(typeof bv.style.zoom!=="undefined"){bv.style.display="inline";bv.style.zoom=1;bJ.inlineBlockNeedsLayout=(bv.offsetWidth===2);bv.style.display="";bv.innerHTML="
";bJ.shrinkWrapBlocks=(bv.offsetWidth!==2)}bv.style.cssText=bS+bR;bv.innerHTML=bP;bU=bv.firstChild;bV=bU.firstChild;bN=bU.nextSibling.firstChild.firstChild;bO={doesNotAddBorder:(bV.offsetTop!==5),doesAddBorderForTableAndCells:(bN.offsetTop===5)};bV.style.position="fixed";bV.style.top="20px";bO.fixedPosition=(bV.offsetTop===20||bV.offsetTop===15);bV.style.position=bV.style.top="";bU.style.overflow="hidden";bU.style.position="relative";bO.subtractsBorderForOverflowNotVisible=(bV.offsetTop===-5);bO.doesNotIncludeMarginInBodyOffset=(bQ.offsetTop!==bL);bQ.removeChild(bM);bv=bM=null;b.extend(bJ,bO)});return bJ})();var aS=/^(?:\{.*\}|\[.*\])$/,aA=/([A-Z])/g;b.extend({cache:{},uuid:0,expando:"jQuery"+(b.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:true,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:true},hasData:function(e){e=e.nodeType?b.cache[e[b.expando]]:e[b.expando];return !!e&&!S(e)},data:function(bx,bv,bz,by){if(!b.acceptData(bx)){return}var bG,bA,bD,bE=b.expando,bC=typeof bv==="string",bF=bx.nodeType,e=bF?b.cache:bx,bw=bF?bx[bE]:bx[bE]&&bE,bB=bv==="events";if((!bw||!e[bw]||(!bB&&!by&&!e[bw].data))&&bC&&bz===L){return}if(!bw){if(bF){bx[bE]=bw=++b.uuid}else{bw=bE}}if(!e[bw]){e[bw]={};if(!bF){e[bw].toJSON=b.noop}}if(typeof bv==="object"||typeof bv==="function"){if(by){e[bw]=b.extend(e[bw],bv)}else{e[bw].data=b.extend(e[bw].data,bv)}}bG=bA=e[bw];if(!by){if(!bA.data){bA.data={}}bA=bA.data}if(bz!==L){bA[b.camelCase(bv)]=bz}if(bB&&!bA[bv]){return bG.events}if(bC){bD=bA[bv];if(bD==null){bD=bA[b.camelCase(bv)]}}else{bD=bA}return bD},removeData:function(bx,bv,by){if(!b.acceptData(bx)){return}var bB,bA,bz,bC=b.expando,bD=bx.nodeType,e=bD?b.cache:bx,bw=bD?bx[bC]:bC;if(!e[bw]){return}if(bv){bB=by?e[bw]:e[bw].data;if(bB){if(!b.isArray(bv)){if(bv in bB){bv=[bv]}else{bv=b.camelCase(bv);if(bv in bB){bv=[bv]}else{bv=bv.split(" ")}}}for(bA=0,bz=bv.length;bA-1){return true}}return false},val:function(bx){var e,bv,by,bw=this[0];if(!arguments.length){if(bw){e=b.valHooks[bw.nodeName.toLowerCase()]||b.valHooks[bw.type];if(e&&"get" in e&&(bv=e.get(bw,"value"))!==L){return bv}bv=bw.value;return typeof bv==="string"?bv.replace(aU,""):bv==null?"":bv}return}by=b.isFunction(bx);return this.each(function(bA){var bz=b(this),bB;if(this.nodeType!==1){return}if(by){bB=bx.call(this,bA,bz.val())}else{bB=bx}if(bB==null){bB=""}else{if(typeof bB==="number"){bB+=""}else{if(b.isArray(bB)){bB=b.map(bB,function(bC){return bC==null?"":bC+""})}}}e=b.valHooks[this.nodeName.toLowerCase()]||b.valHooks[this.type];if(!e||!("set" in e)||e.set(this,bB,"value")===L){this.value=bB}})}});b.extend({valHooks:{option:{get:function(e){var bv=e.attributes.value;return !bv||bv.specified?e.value:e.text}},select:{get:function(e){var bA,bv,bz,bx,by=e.selectedIndex,bB=[],bC=e.options,bw=e.type==="select-one";if(by<0){return null}bv=bw?by:0;bz=bw?by+1:bC.length;for(;bv=0});if(!e.length){bv.selectedIndex=-1}return e}}},attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(bA,bx,bB,bz){var bw,e,by,bv=bA.nodeType;if(!bA||bv===3||bv===8||bv===2){return}if(bz&&bx in b.attrFn){return b(bA)[bx](bB)}if(typeof bA.getAttribute==="undefined"){return b.prop(bA,bx,bB)}by=bv!==1||!b.isXMLDoc(bA);if(by){bx=bx.toLowerCase();e=b.attrHooks[bx]||(ao.test(bx)?aY:be)}if(bB!==L){if(bB===null){b.removeAttr(bA,bx);return}else{if(e&&"set" in e&&by&&(bw=e.set(bA,bB,bx))!==L){return bw}else{bA.setAttribute(bx,""+bB);return bB}}}else{if(e&&"get" in e&&by&&(bw=e.get(bA,bx))!==null){return bw}else{bw=bA.getAttribute(bx);return bw===null?L:bw}}},removeAttr:function(bx,bz){var by,bA,bv,e,bw=0;if(bz&&bx.nodeType===1){bA=bz.toLowerCase().split(af);e=bA.length;for(;bw=0)}}})});var bd=/^(?:textarea|input|select)$/i,n=/^([^\.]*)?(?:\.(.+))?$/,J=/\bhover(\.\S+)?\b/,aO=/^key/,bf=/^(?:mouse|contextmenu)|click/,T=/^(?:focusinfocus|focusoutblur)$/,U=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,Y=function(e){var bv=U.exec(e);if(bv){bv[1]=(bv[1]||"").toLowerCase();bv[3]=bv[3]&&new RegExp("(?:^|\\s)"+bv[3]+"(?:\\s|$)")}return bv},j=function(bw,e){var bv=bw.attributes||{};return((!e[1]||bw.nodeName.toLowerCase()===e[1])&&(!e[2]||(bv.id||{}).value===e[2])&&(!e[3]||e[3].test((bv["class"]||{}).value)))},bt=function(e){return b.event.special.hover?e:e.replace(J,"mouseenter$1 mouseleave$1")};b.event={add:function(bx,bC,bJ,bA,by){var bD,bB,bK,bI,bH,bF,e,bG,bv,bz,bw,bE;if(bx.nodeType===3||bx.nodeType===8||!bC||!bJ||!(bD=b._data(bx))){return}if(bJ.handler){bv=bJ;bJ=bv.handler}if(!bJ.guid){bJ.guid=b.guid++}bK=bD.events;if(!bK){bD.events=bK={}}bB=bD.handle;if(!bB){bD.handle=bB=function(bL){return typeof b!=="undefined"&&(!bL||b.event.triggered!==bL.type)?b.event.dispatch.apply(bB.elem,arguments):L};bB.elem=bx}bC=b.trim(bt(bC)).split(" ");for(bI=0;bI=0){bG=bG.slice(0,-1);bw=true}if(bG.indexOf(".")>=0){bx=bG.split(".");bG=bx.shift();bx.sort()}if((!bA||b.event.customEvent[bG])&&!b.event.global[bG]){return}bv=typeof bv==="object"?bv[b.expando]?bv:new b.Event(bG,bv):new b.Event(bG);bv.type=bG;bv.isTrigger=true;bv.exclusive=bw;bv.namespace=bx.join(".");bv.namespace_re=bv.namespace?new RegExp("(^|\\.)"+bx.join("\\.(?:.*\\.)?")+"(\\.|$)"):null;by=bG.indexOf(":")<0?"on"+bG:"";if(!bA){e=b.cache;for(bC in e){if(e[bC].events&&e[bC].events[bG]){b.event.trigger(bv,bD,e[bC].handle.elem,true)}}return}bv.result=L;if(!bv.target){bv.target=bA}bD=bD!=null?b.makeArray(bD):[];bD.unshift(bv);bF=b.event.special[bG]||{};if(bF.trigger&&bF.trigger.apply(bA,bD)===false){return}bB=[[bA,bF.bindType||bG]];if(!bJ&&!bF.noBubble&&!b.isWindow(bA)){bI=bF.delegateType||bG;bH=T.test(bI+bG)?bA:bA.parentNode;bz=null;for(;bH;bH=bH.parentNode){bB.push([bH,bI]);bz=bH}if(bz&&bz===bA.ownerDocument){bB.push([bz.defaultView||bz.parentWindow||bb,bI])}}for(bC=0;bCbA){bH.push({elem:this,matches:bz.slice(bA)})}for(bC=0;bC0?this.on(e,null,bx,bw):this.trigger(e)};if(b.attrFn){b.attrFn[e]=true}if(aO.test(e)){b.event.fixHooks[e]=b.event.keyHooks}if(bf.test(e)){b.event.fixHooks[e]=b.event.mouseHooks}}); +/*! + * Sizzle CSS Selector Engine + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * More information: http://sizzlejs.com/ + */ +(function(){var bH=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,bC="sizcache"+(Math.random()+"").replace(".",""),bI=0,bL=Object.prototype.toString,bB=false,bA=true,bK=/\\/g,bO=/\r\n/g,bQ=/\W/;[0,0].sort(function(){bA=false;return 0});var by=function(bV,e,bY,bZ){bY=bY||[];e=e||av;var b1=e;if(e.nodeType!==1&&e.nodeType!==9){return[]}if(!bV||typeof bV!=="string"){return bY}var bS,b3,b6,bR,b2,b5,b4,bX,bU=true,bT=by.isXML(e),bW=[],b0=bV;do{bH.exec("");bS=bH.exec(b0);if(bS){b0=bS[3];bW.push(bS[1]);if(bS[2]){bR=bS[3];break}}}while(bS);if(bW.length>1&&bD.exec(bV)){if(bW.length===2&&bE.relative[bW[0]]){b3=bM(bW[0]+bW[1],e,bZ)}else{b3=bE.relative[bW[0]]?[e]:by(bW.shift(),e);while(bW.length){bV=bW.shift();if(bE.relative[bV]){bV+=bW.shift()}b3=bM(bV,b3,bZ)}}}else{if(!bZ&&bW.length>1&&e.nodeType===9&&!bT&&bE.match.ID.test(bW[0])&&!bE.match.ID.test(bW[bW.length-1])){b2=by.find(bW.shift(),e,bT);e=b2.expr?by.filter(b2.expr,b2.set)[0]:b2.set[0]}if(e){b2=bZ?{expr:bW.pop(),set:bF(bZ)}:by.find(bW.pop(),bW.length===1&&(bW[0]==="~"||bW[0]==="+")&&e.parentNode?e.parentNode:e,bT);b3=b2.expr?by.filter(b2.expr,b2.set):b2.set;if(bW.length>0){b6=bF(b3)}else{bU=false}while(bW.length){b5=bW.pop();b4=b5;if(!bE.relative[b5]){b5=""}else{b4=bW.pop()}if(b4==null){b4=e}bE.relative[b5](b6,b4,bT)}}else{b6=bW=[]}}if(!b6){b6=b3}if(!b6){by.error(b5||bV)}if(bL.call(b6)==="[object Array]"){if(!bU){bY.push.apply(bY,b6)}else{if(e&&e.nodeType===1){for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&(b6[bX]===true||b6[bX].nodeType===1&&by.contains(e,b6[bX]))){bY.push(b3[bX])}}}else{for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&b6[bX].nodeType===1){bY.push(b3[bX])}}}}}else{bF(b6,bY)}if(bR){by(bR,b1,bY,bZ);by.uniqueSort(bY)}return bY};by.uniqueSort=function(bR){if(bJ){bB=bA;bR.sort(bJ);if(bB){for(var e=1;e0};by.find=function(bX,e,bY){var bW,bS,bU,bT,bV,bR;if(!bX){return[]}for(bS=0,bU=bE.order.length;bS":function(bW,bR){var bV,bU=typeof bR==="string",bS=0,e=bW.length;if(bU&&!bQ.test(bR)){bR=bR.toLowerCase();for(;bS=0)){if(!bS){e.push(bV)}}else{if(bS){bR[bU]=false}}}}return false},ID:function(e){return e[1].replace(bK,"")},TAG:function(bR,e){return bR[1].replace(bK,"").toLowerCase()},CHILD:function(e){if(e[1]==="nth"){if(!e[2]){by.error(e[0])}e[2]=e[2].replace(/^\+|\s*/g,"");var bR=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(e[2]==="even"&&"2n"||e[2]==="odd"&&"2n+1"||!/\D/.test(e[2])&&"0n+"+e[2]||e[2]);e[2]=(bR[1]+(bR[2]||1))-0;e[3]=bR[3]-0}else{if(e[2]){by.error(e[0])}}e[0]=bI++;return e},ATTR:function(bU,bR,bS,e,bV,bW){var bT=bU[1]=bU[1].replace(bK,"");if(!bW&&bE.attrMap[bT]){bU[1]=bE.attrMap[bT]}bU[4]=(bU[4]||bU[5]||"").replace(bK,"");if(bU[2]==="~="){bU[4]=" "+bU[4]+" "}return bU},PSEUDO:function(bU,bR,bS,e,bV){if(bU[1]==="not"){if((bH.exec(bU[3])||"").length>1||/^\w/.test(bU[3])){bU[3]=by(bU[3],null,null,bR)}else{var bT=by.filter(bU[3],bR,bS,true^bV);if(!bS){e.push.apply(e,bT)}return false}}else{if(bE.match.POS.test(bU[0])||bE.match.CHILD.test(bU[0])){return true}}return bU},POS:function(e){e.unshift(true);return e}},filters:{enabled:function(e){return e.disabled===false&&e.type!=="hidden"},disabled:function(e){return e.disabled===true},checked:function(e){return e.checked===true},selected:function(e){if(e.parentNode){e.parentNode.selectedIndex}return e.selected===true},parent:function(e){return !!e.firstChild},empty:function(e){return !e.firstChild},has:function(bS,bR,e){return !!by(e[3],bS).length},header:function(e){return(/h\d/i).test(e.nodeName)},text:function(bS){var e=bS.getAttribute("type"),bR=bS.type;return bS.nodeName.toLowerCase()==="input"&&"text"===bR&&(e===bR||e===null)},radio:function(e){return e.nodeName.toLowerCase()==="input"&&"radio"===e.type},checkbox:function(e){return e.nodeName.toLowerCase()==="input"&&"checkbox"===e.type},file:function(e){return e.nodeName.toLowerCase()==="input"&&"file"===e.type},password:function(e){return e.nodeName.toLowerCase()==="input"&&"password"===e.type},submit:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"submit"===bR.type},image:function(e){return e.nodeName.toLowerCase()==="input"&&"image"===e.type},reset:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"reset"===bR.type},button:function(bR){var e=bR.nodeName.toLowerCase();return e==="input"&&"button"===bR.type||e==="button"},input:function(e){return(/input|select|textarea|button/i).test(e.nodeName)},focus:function(e){return e===e.ownerDocument.activeElement}},setFilters:{first:function(bR,e){return e===0},last:function(bS,bR,e,bT){return bR===bT.length-1},even:function(bR,e){return e%2===0},odd:function(bR,e){return e%2===1},lt:function(bS,bR,e){return bRe[3]-0},nth:function(bS,bR,e){return e[3]-0===bR},eq:function(bS,bR,e){return e[3]-0===bR}},filter:{PSEUDO:function(bS,bX,bW,bY){var e=bX[1],bR=bE.filters[e];if(bR){return bR(bS,bW,bX,bY)}else{if(e==="contains"){return(bS.textContent||bS.innerText||bw([bS])||"").indexOf(bX[3])>=0}else{if(e==="not"){var bT=bX[3];for(var bV=0,bU=bT.length;bV=0)}}},ID:function(bR,e){return bR.nodeType===1&&bR.getAttribute("id")===e},TAG:function(bR,e){return(e==="*"&&bR.nodeType===1)||!!bR.nodeName&&bR.nodeName.toLowerCase()===e},CLASS:function(bR,e){return(" "+(bR.className||bR.getAttribute("class"))+" ").indexOf(e)>-1},ATTR:function(bV,bT){var bS=bT[1],e=by.attr?by.attr(bV,bS):bE.attrHandle[bS]?bE.attrHandle[bS](bV):bV[bS]!=null?bV[bS]:bV.getAttribute(bS),bW=e+"",bU=bT[2],bR=bT[4];return e==null?bU==="!=":!bU&&by.attr?e!=null:bU==="="?bW===bR:bU==="*="?bW.indexOf(bR)>=0:bU==="~="?(" "+bW+" ").indexOf(bR)>=0:!bR?bW&&e!==false:bU==="!="?bW!==bR:bU==="^="?bW.indexOf(bR)===0:bU==="$="?bW.substr(bW.length-bR.length)===bR:bU==="|="?bW===bR||bW.substr(0,bR.length+1)===bR+"-":false},POS:function(bU,bR,bS,bV){var e=bR[2],bT=bE.setFilters[e];if(bT){return bT(bU,bS,bR,bV)}}}};var bD=bE.match.POS,bx=function(bR,e){return"\\"+(e-0+1)};for(var bz in bE.match){bE.match[bz]=new RegExp(bE.match[bz].source+(/(?![^\[]*\])(?![^\(]*\))/.source));bE.leftMatch[bz]=new RegExp(/(^(?:.|\r|\n)*?)/.source+bE.match[bz].source.replace(/\\(\d+)/g,bx))}var bF=function(bR,e){bR=Array.prototype.slice.call(bR,0);if(e){e.push.apply(e,bR);return e}return bR};try{Array.prototype.slice.call(av.documentElement.childNodes,0)[0].nodeType}catch(bP){bF=function(bU,bT){var bS=0,bR=bT||[];if(bL.call(bU)==="[object Array]"){Array.prototype.push.apply(bR,bU)}else{if(typeof bU.length==="number"){for(var e=bU.length;bS";e.insertBefore(bR,e.firstChild);if(av.getElementById(bS)){bE.find.ID=function(bU,bV,bW){if(typeof bV.getElementById!=="undefined"&&!bW){var bT=bV.getElementById(bU[1]);return bT?bT.id===bU[1]||typeof bT.getAttributeNode!=="undefined"&&bT.getAttributeNode("id").nodeValue===bU[1]?[bT]:L:[]}};bE.filter.ID=function(bV,bT){var bU=typeof bV.getAttributeNode!=="undefined"&&bV.getAttributeNode("id");return bV.nodeType===1&&bU&&bU.nodeValue===bT}}e.removeChild(bR);e=bR=null})();(function(){var e=av.createElement("div");e.appendChild(av.createComment(""));if(e.getElementsByTagName("*").length>0){bE.find.TAG=function(bR,bV){var bU=bV.getElementsByTagName(bR[1]);if(bR[1]==="*"){var bT=[];for(var bS=0;bU[bS];bS++){if(bU[bS].nodeType===1){bT.push(bU[bS])}}bU=bT}return bU}}e.innerHTML="";if(e.firstChild&&typeof e.firstChild.getAttribute!=="undefined"&&e.firstChild.getAttribute("href")!=="#"){bE.attrHandle.href=function(bR){return bR.getAttribute("href",2)}}e=null})();if(av.querySelectorAll){(function(){var e=by,bT=av.createElement("div"),bS="__sizzle__";bT.innerHTML="

";if(bT.querySelectorAll&&bT.querySelectorAll(".TEST").length===0){return}by=function(b4,bV,bZ,b3){bV=bV||av;if(!b3&&!by.isXML(bV)){var b2=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b4);if(b2&&(bV.nodeType===1||bV.nodeType===9)){if(b2[1]){return bF(bV.getElementsByTagName(b4),bZ)}else{if(b2[2]&&bE.find.CLASS&&bV.getElementsByClassName){return bF(bV.getElementsByClassName(b2[2]),bZ)}}}if(bV.nodeType===9){if(b4==="body"&&bV.body){return bF([bV.body],bZ)}else{if(b2&&b2[3]){var bY=bV.getElementById(b2[3]);if(bY&&bY.parentNode){if(bY.id===b2[3]){return bF([bY],bZ)}}else{return bF([],bZ)}}}try{return bF(bV.querySelectorAll(b4),bZ)}catch(b0){}}else{if(bV.nodeType===1&&bV.nodeName.toLowerCase()!=="object"){var bW=bV,bX=bV.getAttribute("id"),bU=bX||bS,b6=bV.parentNode,b5=/^\s*[+~]/.test(b4);if(!bX){bV.setAttribute("id",bU)}else{bU=bU.replace(/'/g,"\\$&")}if(b5&&b6){bV=bV.parentNode}try{if(!b5||b6){return bF(bV.querySelectorAll("[id='"+bU+"'] "+b4),bZ)}}catch(b1){}finally{if(!bX){bW.removeAttribute("id")}}}}}return e(b4,bV,bZ,b3)};for(var bR in e){by[bR]=e[bR]}bT=null})()}(function(){var e=av.documentElement,bS=e.matchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.msMatchesSelector;if(bS){var bU=!bS.call(av.createElement("div"),"div"),bR=false;try{bS.call(av.documentElement,"[test!='']:sizzle")}catch(bT){bR=true}by.matchesSelector=function(bW,bY){bY=bY.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!by.isXML(bW)){try{if(bR||!bE.match.PSEUDO.test(bY)&&!/!=/.test(bY)){var bV=bS.call(bW,bY);if(bV||!bU||bW.document&&bW.document.nodeType!==11){return bV}}}catch(bX){}}return by(bY,null,null,[bW]).length>0}}})();(function(){var e=av.createElement("div");e.innerHTML="
";if(!e.getElementsByClassName||e.getElementsByClassName("e").length===0){return}e.lastChild.className="e";if(e.getElementsByClassName("e").length===1){return}bE.order.splice(1,0,"CLASS");bE.find.CLASS=function(bR,bS,bT){if(typeof bS.getElementsByClassName!=="undefined"&&!bT){return bS.getElementsByClassName(bR[1])}};e=null})();function bv(bR,bW,bV,bZ,bX,bY){for(var bT=0,bS=bZ.length;bT0){bU=e;break}}}e=e[bR]}bZ[bT]=bU}}}if(av.documentElement.contains){by.contains=function(bR,e){return bR!==e&&(bR.contains?bR.contains(e):true)}}else{if(av.documentElement.compareDocumentPosition){by.contains=function(bR,e){return !!(bR.compareDocumentPosition(e)&16)}}else{by.contains=function(){return false}}}by.isXML=function(e){var bR=(e?e.ownerDocument||e:0).documentElement;return bR?bR.nodeName!=="HTML":false};var bM=function(bS,e,bW){var bV,bX=[],bU="",bY=e.nodeType?[e]:e;while((bV=bE.match.PSEUDO.exec(bS))){bU+=bV[0];bS=bS.replace(bE.match.PSEUDO,"")}bS=bE.relative[bS]?bS+"*":bS;for(var bT=0,bR=bY.length;bT0){for(bB=bA;bB=0:b.filter(e,this).length>0:this.filter(e).length>0)},closest:function(by,bx){var bv=[],bw,e,bz=this[0];if(b.isArray(by)){var bB=1;while(bz&&bz.ownerDocument&&bz!==bx){for(bw=0;bw-1:b.find.matchesSelector(bz,by)){bv.push(bz);break}else{bz=bz.parentNode;if(!bz||!bz.ownerDocument||bz===bx||bz.nodeType===11){break}}}}bv=bv.length>1?b.unique(bv):bv;return this.pushStack(bv,"closest",by)},index:function(e){if(!e){return(this[0]&&this[0].parentNode)?this.prevAll().length:-1}if(typeof e==="string"){return b.inArray(this[0],b(e))}return b.inArray(e.jquery?e[0]:e,this)},add:function(e,bv){var bx=typeof e==="string"?b(e,bv):b.makeArray(e&&e.nodeType?[e]:e),bw=b.merge(this.get(),bx);return this.pushStack(C(bx[0])||C(bw[0])?bw:b.unique(bw))},andSelf:function(){return this.add(this.prevObject)}});function C(e){return !e||!e.parentNode||e.parentNode.nodeType===11}b.each({parent:function(bv){var e=bv.parentNode;return e&&e.nodeType!==11?e:null},parents:function(e){return b.dir(e,"parentNode")},parentsUntil:function(bv,e,bw){return b.dir(bv,"parentNode",bw)},next:function(e){return b.nth(e,2,"nextSibling")},prev:function(e){return b.nth(e,2,"previousSibling")},nextAll:function(e){return b.dir(e,"nextSibling")},prevAll:function(e){return b.dir(e,"previousSibling")},nextUntil:function(bv,e,bw){return b.dir(bv,"nextSibling",bw)},prevUntil:function(bv,e,bw){return b.dir(bv,"previousSibling",bw)},siblings:function(e){return b.sibling(e.parentNode.firstChild,e)},children:function(e){return b.sibling(e.firstChild)},contents:function(e){return b.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:b.makeArray(e.childNodes)}},function(e,bv){b.fn[e]=function(by,bw){var bx=b.map(this,bv,by);if(!ab.test(e)){bw=by}if(bw&&typeof bw==="string"){bx=b.filter(bw,bx)}bx=this.length>1&&!ay[e]?b.unique(bx):bx;if((this.length>1||a9.test(bw))&&aq.test(e)){bx=bx.reverse()}return this.pushStack(bx,e,P.call(arguments).join(","))}});b.extend({filter:function(bw,e,bv){if(bv){bw=":not("+bw+")"}return e.length===1?b.find.matchesSelector(e[0],bw)?[e[0]]:[]:b.find.matches(bw,e)},dir:function(bw,bv,by){var e=[],bx=bw[bv];while(bx&&bx.nodeType!==9&&(by===L||bx.nodeType!==1||!b(bx).is(by))){if(bx.nodeType===1){e.push(bx)}bx=bx[bv]}return e},nth:function(by,e,bw,bx){e=e||1;var bv=0;for(;by;by=by[bw]){if(by.nodeType===1&&++bv===e){break}}return by},sibling:function(bw,bv){var e=[];for(;bw;bw=bw.nextSibling){if(bw.nodeType===1&&bw!==bv){e.push(bw)}}return e}});function aG(bx,bw,e){bw=bw||0;if(b.isFunction(bw)){return b.grep(bx,function(bz,by){var bA=!!bw.call(bz,by,bz);return bA===e})}else{if(bw.nodeType){return b.grep(bx,function(bz,by){return(bz===bw)===e})}else{if(typeof bw==="string"){var bv=b.grep(bx,function(by){return by.nodeType===1});if(bp.test(bw)){return b.filter(bw,bv,!e)}else{bw=b.filter(bw,bv)}}}}return b.grep(bx,function(bz,by){return(b.inArray(bz,bw)>=0)===e})}function a(e){var bw=aR.split("|"),bv=e.createDocumentFragment();if(bv.createElement){while(bw.length){bv.createElement(bw.pop())}}return bv}var aR="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",ag=/ jQuery\d+="(?:\d+|null)"/g,ar=/^\s+/,R=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,d=/<([\w:]+)/,w=/",""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]},ac=a(av);ax.optgroup=ax.option;ax.tbody=ax.tfoot=ax.colgroup=ax.caption=ax.thead;ax.th=ax.td;if(!b.support.htmlSerialize){ax._default=[1,"div
","
"]}b.fn.extend({text:function(e){if(b.isFunction(e)){return this.each(function(bw){var bv=b(this);bv.text(e.call(this,bw,bv.text()))})}if(typeof e!=="object"&&e!==L){return this.empty().append((this[0]&&this[0].ownerDocument||av).createTextNode(e))}return b.text(this)},wrapAll:function(e){if(b.isFunction(e)){return this.each(function(bw){b(this).wrapAll(e.call(this,bw))})}if(this[0]){var bv=b(e,this[0].ownerDocument).eq(0).clone(true);if(this[0].parentNode){bv.insertBefore(this[0])}bv.map(function(){var bw=this;while(bw.firstChild&&bw.firstChild.nodeType===1){bw=bw.firstChild}return bw}).append(this)}return this},wrapInner:function(e){if(b.isFunction(e)){return this.each(function(bv){b(this).wrapInner(e.call(this,bv))})}return this.each(function(){var bv=b(this),bw=bv.contents();if(bw.length){bw.wrapAll(e)}else{bv.append(e)}})},wrap:function(e){var bv=b.isFunction(e);return this.each(function(bw){b(this).wrapAll(bv?e.call(this,bw):e)})},unwrap:function(){return this.parent().each(function(){if(!b.nodeName(this,"body")){b(this).replaceWith(this.childNodes)}}).end()},append:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.appendChild(e)}})},prepend:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.insertBefore(e,this.firstChild)}})},before:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this)})}else{if(arguments.length){var e=b.clean(arguments);e.push.apply(e,this.toArray());return this.pushStack(e,"before",arguments)}}},after:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this.nextSibling)})}else{if(arguments.length){var e=this.pushStack(this,"after",arguments);e.push.apply(e,b.clean(arguments));return e}}},remove:function(e,bx){for(var bv=0,bw;(bw=this[bv])!=null;bv++){if(!e||b.filter(e,[bw]).length){if(!bx&&bw.nodeType===1){b.cleanData(bw.getElementsByTagName("*"));b.cleanData([bw])}if(bw.parentNode){bw.parentNode.removeChild(bw)}}}return this},empty:function(){for(var e=0,bv;(bv=this[e])!=null;e++){if(bv.nodeType===1){b.cleanData(bv.getElementsByTagName("*"))}while(bv.firstChild){bv.removeChild(bv.firstChild)}}return this},clone:function(bv,e){bv=bv==null?false:bv;e=e==null?bv:e;return this.map(function(){return b.clone(this,bv,e)})},html:function(bx){if(bx===L){return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(ag,""):null}else{if(typeof bx==="string"&&!ae.test(bx)&&(b.support.leadingWhitespace||!ar.test(bx))&&!ax[(d.exec(bx)||["",""])[1].toLowerCase()]){bx=bx.replace(R,"<$1>");try{for(var bw=0,bv=this.length;bw1&&bw0?this.clone(true):this).get();b(bC[bA])[bv](by);bz=bz.concat(by)}return this.pushStack(bz,e,bC.selector)}}});function bg(e){if(typeof e.getElementsByTagName!=="undefined"){return e.getElementsByTagName("*")}else{if(typeof e.querySelectorAll!=="undefined"){return e.querySelectorAll("*")}else{return[]}}}function az(e){if(e.type==="checkbox"||e.type==="radio"){e.defaultChecked=e.checked}}function E(e){var bv=(e.nodeName||"").toLowerCase();if(bv==="input"){az(e)}else{if(bv!=="script"&&typeof e.getElementsByTagName!=="undefined"){b.grep(e.getElementsByTagName("input"),az)}}}function al(e){var bv=av.createElement("div");ac.appendChild(bv);bv.innerHTML=e.outerHTML;return bv.firstChild}b.extend({clone:function(by,bA,bw){var e,bv,bx,bz=b.support.html5Clone||!ah.test("<"+by.nodeName)?by.cloneNode(true):al(by);if((!b.support.noCloneEvent||!b.support.noCloneChecked)&&(by.nodeType===1||by.nodeType===11)&&!b.isXMLDoc(by)){ai(by,bz);e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){if(bv[bx]){ai(e[bx],bv[bx])}}}if(bA){t(by,bz);if(bw){e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){t(e[bx],bv[bx])}}}e=bv=null;return bz},clean:function(bw,by,bH,bA){var bF;by=by||av;if(typeof by.createElement==="undefined"){by=by.ownerDocument||by[0]&&by[0].ownerDocument||av}var bI=[],bB;for(var bE=0,bz;(bz=bw[bE])!=null;bE++){if(typeof bz==="number"){bz+=""}if(!bz){continue}if(typeof bz==="string"){if(!W.test(bz)){bz=by.createTextNode(bz)}else{bz=bz.replace(R,"<$1>");var bK=(d.exec(bz)||["",""])[1].toLowerCase(),bx=ax[bK]||ax._default,bD=bx[0],bv=by.createElement("div");if(by===av){ac.appendChild(bv)}else{a(by).appendChild(bv)}bv.innerHTML=bx[1]+bz+bx[2];while(bD--){bv=bv.lastChild}if(!b.support.tbody){var e=w.test(bz),bC=bK==="table"&&!e?bv.firstChild&&bv.firstChild.childNodes:bx[1]===""&&!e?bv.childNodes:[];for(bB=bC.length-1;bB>=0;--bB){if(b.nodeName(bC[bB],"tbody")&&!bC[bB].childNodes.length){bC[bB].parentNode.removeChild(bC[bB])}}}if(!b.support.leadingWhitespace&&ar.test(bz)){bv.insertBefore(by.createTextNode(ar.exec(bz)[0]),bv.firstChild)}bz=bv.childNodes}}var bG;if(!b.support.appendChecked){if(bz[0]&&typeof(bG=bz.length)==="number"){for(bB=0;bB=0){return bx+"px"}}else{return bx}}}});if(!b.support.opacity){b.cssHooks.opacity={get:function(bv,e){return au.test((e&&bv.currentStyle?bv.currentStyle.filter:bv.style.filter)||"")?(parseFloat(RegExp.$1)/100)+"":e?"1":""},set:function(by,bz){var bx=by.style,bv=by.currentStyle,e=b.isNumeric(bz)?"alpha(opacity="+bz*100+")":"",bw=bv&&bv.filter||bx.filter||"";bx.zoom=1;if(bz>=1&&b.trim(bw.replace(ak,""))===""){bx.removeAttribute("filter");if(bv&&!bv.filter){return}}bx.filter=ak.test(bw)?bw.replace(ak,e):bw+" "+e}}}b(function(){if(!b.support.reliableMarginRight){b.cssHooks.marginRight={get:function(bw,bv){var e;b.swap(bw,{display:"inline-block"},function(){if(bv){e=Z(bw,"margin-right","marginRight")}else{e=bw.style.marginRight}});return e}}}});if(av.defaultView&&av.defaultView.getComputedStyle){aI=function(by,bw){var bv,bx,e;bw=bw.replace(z,"-$1").toLowerCase();if((bx=by.ownerDocument.defaultView)&&(e=bx.getComputedStyle(by,null))){bv=e.getPropertyValue(bw);if(bv===""&&!b.contains(by.ownerDocument.documentElement,by)){bv=b.style(by,bw)}}return bv}}if(av.documentElement.currentStyle){aX=function(bz,bw){var bA,e,by,bv=bz.currentStyle&&bz.currentStyle[bw],bx=bz.style;if(bv===null&&bx&&(by=bx[bw])){bv=by}if(!bc.test(bv)&&bn.test(bv)){bA=bx.left;e=bz.runtimeStyle&&bz.runtimeStyle.left;if(e){bz.runtimeStyle.left=bz.currentStyle.left}bx.left=bw==="fontSize"?"1em":(bv||0);bv=bx.pixelLeft+"px";bx.left=bA;if(e){bz.runtimeStyle.left=e}}return bv===""?"auto":bv}}Z=aI||aX;function p(by,bw,bv){var bA=bw==="width"?by.offsetWidth:by.offsetHeight,bz=bw==="width"?an:a1,bx=0,e=bz.length;if(bA>0){if(bv!=="border"){for(;bx)<[^<]*)*<\/script>/gi,q=/^(?:select|textarea)/i,h=/\s+/,br=/([?&])_=[^&]*/,K=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,A=b.fn.load,aa={},r={},aE,s,aV=["*/"]+["*"];try{aE=bl.href}catch(aw){aE=av.createElement("a");aE.href="";aE=aE.href}s=K.exec(aE.toLowerCase())||[];function f(e){return function(by,bA){if(typeof by!=="string"){bA=by;by="*"}if(b.isFunction(bA)){var bx=by.toLowerCase().split(h),bw=0,bz=bx.length,bv,bB,bC;for(;bw=0){var e=bw.slice(by,bw.length);bw=bw.slice(0,by)}var bx="GET";if(bz){if(b.isFunction(bz)){bA=bz;bz=L}else{if(typeof bz==="object"){bz=b.param(bz,b.ajaxSettings.traditional);bx="POST"}}}var bv=this;b.ajax({url:bw,type:bx,dataType:"html",data:bz,complete:function(bC,bB,bD){bD=bC.responseText;if(bC.isResolved()){bC.done(function(bE){bD=bE});bv.html(e?b("
").append(bD.replace(a6,"")).find(e):bD)}if(bA){bv.each(bA,[bD,bB,bC])}}});return this},serialize:function(){return b.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?b.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||q.test(this.nodeName)||aZ.test(this.type))}).map(function(e,bv){var bw=b(this).val();return bw==null?null:b.isArray(bw)?b.map(bw,function(by,bx){return{name:bv.name,value:by.replace(bs,"\r\n")}}):{name:bv.name,value:bw.replace(bs,"\r\n")}}).get()}});b.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(e,bv){b.fn[bv]=function(bw){return this.on(bv,bw)}});b.each(["get","post"],function(e,bv){b[bv]=function(bw,by,bz,bx){if(b.isFunction(by)){bx=bx||bz;bz=by;by=L}return b.ajax({type:bv,url:bw,data:by,success:bz,dataType:bx})}});b.extend({getScript:function(e,bv){return b.get(e,L,bv,"script")},getJSON:function(e,bv,bw){return b.get(e,bv,bw,"json")},ajaxSetup:function(bv,e){if(e){am(bv,b.ajaxSettings)}else{e=bv;bv=b.ajaxSettings}am(bv,e);return bv},ajaxSettings:{url:aE,isLocal:aM.test(s[1]),global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":aV},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":bb.String,"text html":true,"text json":b.parseJSON,"text xml":b.parseXML},flatOptions:{context:true,url:true}},ajaxPrefilter:f(aa),ajaxTransport:f(r),ajax:function(bz,bx){if(typeof bz==="object"){bx=bz;bz=L}bx=bx||{};var bD=b.ajaxSetup({},bx),bS=bD.context||bD,bG=bS!==bD&&(bS.nodeType||bS instanceof b)?b(bS):b.event,bR=b.Deferred(),bN=b.Callbacks("once memory"),bB=bD.statusCode||{},bC,bH={},bO={},bQ,by,bL,bE,bI,bA=0,bw,bK,bJ={readyState:0,setRequestHeader:function(bT,bU){if(!bA){var e=bT.toLowerCase();bT=bO[e]=bO[e]||bT;bH[bT]=bU}return this},getAllResponseHeaders:function(){return bA===2?bQ:null},getResponseHeader:function(bT){var e;if(bA===2){if(!by){by={};while((e=aD.exec(bQ))){by[e[1].toLowerCase()]=e[2]}}e=by[bT.toLowerCase()]}return e===L?null:e},overrideMimeType:function(e){if(!bA){bD.mimeType=e}return this},abort:function(e){e=e||"abort";if(bL){bL.abort(e)}bF(0,e);return this}};function bF(bZ,bU,b0,bW){if(bA===2){return}bA=2;if(bE){clearTimeout(bE)}bL=L;bQ=bW||"";bJ.readyState=bZ>0?4:0;var bT,b4,b3,bX=bU,bY=b0?bj(bD,bJ,b0):L,bV,b2;if(bZ>=200&&bZ<300||bZ===304){if(bD.ifModified){if((bV=bJ.getResponseHeader("Last-Modified"))){b.lastModified[bC]=bV}if((b2=bJ.getResponseHeader("Etag"))){b.etag[bC]=b2}}if(bZ===304){bX="notmodified";bT=true}else{try{b4=G(bD,bY);bX="success";bT=true}catch(b1){bX="parsererror";b3=b1}}}else{b3=bX;if(!bX||bZ){bX="error";if(bZ<0){bZ=0}}}bJ.status=bZ;bJ.statusText=""+(bU||bX);if(bT){bR.resolveWith(bS,[b4,bX,bJ])}else{bR.rejectWith(bS,[bJ,bX,b3])}bJ.statusCode(bB);bB=L;if(bw){bG.trigger("ajax"+(bT?"Success":"Error"),[bJ,bD,bT?b4:b3])}bN.fireWith(bS,[bJ,bX]);if(bw){bG.trigger("ajaxComplete",[bJ,bD]);if(!(--b.active)){b.event.trigger("ajaxStop")}}}bR.promise(bJ);bJ.success=bJ.done;bJ.error=bJ.fail;bJ.complete=bN.add;bJ.statusCode=function(bT){if(bT){var e;if(bA<2){for(e in bT){bB[e]=[bB[e],bT[e]]}}else{e=bT[bJ.status];bJ.then(e,e)}}return this};bD.url=((bz||bD.url)+"").replace(bq,"").replace(c,s[1]+"//");bD.dataTypes=b.trim(bD.dataType||"*").toLowerCase().split(h);if(bD.crossDomain==null){bI=K.exec(bD.url.toLowerCase());bD.crossDomain=!!(bI&&(bI[1]!=s[1]||bI[2]!=s[2]||(bI[3]||(bI[1]==="http:"?80:443))!=(s[3]||(s[1]==="http:"?80:443))))}if(bD.data&&bD.processData&&typeof bD.data!=="string"){bD.data=b.param(bD.data,bD.traditional)}aW(aa,bD,bx,bJ);if(bA===2){return false}bw=bD.global;bD.type=bD.type.toUpperCase();bD.hasContent=!aQ.test(bD.type);if(bw&&b.active++===0){b.event.trigger("ajaxStart")}if(!bD.hasContent){if(bD.data){bD.url+=(M.test(bD.url)?"&":"?")+bD.data;delete bD.data}bC=bD.url;if(bD.cache===false){var bv=b.now(),bP=bD.url.replace(br,"$1_="+bv);bD.url=bP+((bP===bD.url)?(M.test(bD.url)?"&":"?")+"_="+bv:"")}}if(bD.data&&bD.hasContent&&bD.contentType!==false||bx.contentType){bJ.setRequestHeader("Content-Type",bD.contentType)}if(bD.ifModified){bC=bC||bD.url;if(b.lastModified[bC]){bJ.setRequestHeader("If-Modified-Since",b.lastModified[bC])}if(b.etag[bC]){bJ.setRequestHeader("If-None-Match",b.etag[bC])}}bJ.setRequestHeader("Accept",bD.dataTypes[0]&&bD.accepts[bD.dataTypes[0]]?bD.accepts[bD.dataTypes[0]]+(bD.dataTypes[0]!=="*"?", "+aV+"; q=0.01":""):bD.accepts["*"]);for(bK in bD.headers){bJ.setRequestHeader(bK,bD.headers[bK])}if(bD.beforeSend&&(bD.beforeSend.call(bS,bJ,bD)===false||bA===2)){bJ.abort();return false}for(bK in {success:1,error:1,complete:1}){bJ[bK](bD[bK])}bL=aW(r,bD,bx,bJ);if(!bL){bF(-1,"No Transport")}else{bJ.readyState=1;if(bw){bG.trigger("ajaxSend",[bJ,bD])}if(bD.async&&bD.timeout>0){bE=setTimeout(function(){bJ.abort("timeout")},bD.timeout)}try{bA=1;bL.send(bH,bF)}catch(bM){if(bA<2){bF(-1,bM)}else{throw bM}}}return bJ},param:function(e,bw){var bv=[],by=function(bz,bA){bA=b.isFunction(bA)?bA():bA;bv[bv.length]=encodeURIComponent(bz)+"="+encodeURIComponent(bA)};if(bw===L){bw=b.ajaxSettings.traditional}if(b.isArray(e)||(e.jquery&&!b.isPlainObject(e))){b.each(e,function(){by(this.name,this.value)})}else{for(var bx in e){v(bx,e[bx],bw,by)}}return bv.join("&").replace(k,"+")}});function v(bw,by,bv,bx){if(b.isArray(by)){b.each(by,function(bA,bz){if(bv||ap.test(bw)){bx(bw,bz)}else{v(bw+"["+(typeof bz==="object"||b.isArray(bz)?bA:"")+"]",bz,bv,bx)}})}else{if(!bv&&by!=null&&typeof by==="object"){for(var e in by){v(bw+"["+e+"]",by[e],bv,bx)}}else{bx(bw,by)}}}b.extend({active:0,lastModified:{},etag:{}});function bj(bD,bC,bz){var bv=bD.contents,bB=bD.dataTypes,bw=bD.responseFields,by,bA,bx,e;for(bA in bw){if(bA in bz){bC[bw[bA]]=bz[bA]}}while(bB[0]==="*"){bB.shift();if(by===L){by=bD.mimeType||bC.getResponseHeader("content-type")}}if(by){for(bA in bv){if(bv[bA]&&bv[bA].test(by)){bB.unshift(bA);break}}}if(bB[0] in bz){bx=bB[0]}else{for(bA in bz){if(!bB[0]||bD.converters[bA+" "+bB[0]]){bx=bA;break}if(!e){e=bA}}bx=bx||e}if(bx){if(bx!==bB[0]){bB.unshift(bx)}return bz[bx]}}function G(bH,bz){if(bH.dataFilter){bz=bH.dataFilter(bz,bH.dataType)}var bD=bH.dataTypes,bG={},bA,bE,bw=bD.length,bB,bC=bD[0],bx,by,bF,bv,e;for(bA=1;bA=bw.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();bw.animatedProperties[this.prop]=true;for(bA in bw.animatedProperties){if(bw.animatedProperties[bA]!==true){e=false}}if(e){if(bw.overflow!=null&&!b.support.shrinkWrapBlocks){b.each(["","X","Y"],function(bC,bD){bz.style["overflow"+bD]=bw.overflow[bC]})}if(bw.hide){b(bz).hide()}if(bw.hide||bw.show){for(bA in bw.animatedProperties){b.style(bz,bA,bw.orig[bA]);b.removeData(bz,"fxshow"+bA,true);b.removeData(bz,"toggle"+bA,true)}}bv=bw.complete;if(bv){bw.complete=false;bv.call(bz)}}return false}else{if(bw.duration==Infinity){this.now=bx}else{bB=bx-this.startTime;this.state=bB/bw.duration;this.pos=b.easing[bw.animatedProperties[this.prop]](this.state,bB,0,1,bw.duration);this.now=this.start+((this.end-this.start)*this.pos)}this.update()}return true}};b.extend(b.fx,{tick:function(){var bw,bv=b.timers,e=0;for(;e").appendTo(e),bw=bv.css("display");bv.remove();if(bw==="none"||bw===""){if(!a8){a8=av.createElement("iframe");a8.frameBorder=a8.width=a8.height=0}e.appendChild(a8);if(!m||!a8.createElement){m=(a8.contentWindow||a8.contentDocument).document;m.write((av.compatMode==="CSS1Compat"?"":"")+"");m.close()}bv=m.createElement(bx);m.body.appendChild(bv);bw=b.css(bv,"display");e.removeChild(a8)}Q[bx]=bw}return Q[bx]}var V=/^t(?:able|d|h)$/i,ad=/^(?:body|html)$/i;if("getBoundingClientRect" in av.documentElement){b.fn.offset=function(bI){var by=this[0],bB;if(bI){return this.each(function(e){b.offset.setOffset(this,bI,e)})}if(!by||!by.ownerDocument){return null}if(by===by.ownerDocument.body){return b.offset.bodyOffset(by)}try{bB=by.getBoundingClientRect()}catch(bF){}var bH=by.ownerDocument,bw=bH.documentElement;if(!bB||!b.contains(bw,by)){return bB?{top:bB.top,left:bB.left}:{top:0,left:0}}var bC=bH.body,bD=aK(bH),bA=bw.clientTop||bC.clientTop||0,bE=bw.clientLeft||bC.clientLeft||0,bv=bD.pageYOffset||b.support.boxModel&&bw.scrollTop||bC.scrollTop,bz=bD.pageXOffset||b.support.boxModel&&bw.scrollLeft||bC.scrollLeft,bG=bB.top+bv-bA,bx=bB.left+bz-bE;return{top:bG,left:bx}}}else{b.fn.offset=function(bF){var bz=this[0];if(bF){return this.each(function(bG){b.offset.setOffset(this,bF,bG)})}if(!bz||!bz.ownerDocument){return null}if(bz===bz.ownerDocument.body){return b.offset.bodyOffset(bz)}var bC,bw=bz.offsetParent,bv=bz,bE=bz.ownerDocument,bx=bE.documentElement,bA=bE.body,bB=bE.defaultView,e=bB?bB.getComputedStyle(bz,null):bz.currentStyle,bD=bz.offsetTop,by=bz.offsetLeft;while((bz=bz.parentNode)&&bz!==bA&&bz!==bx){if(b.support.fixedPosition&&e.position==="fixed"){break}bC=bB?bB.getComputedStyle(bz,null):bz.currentStyle;bD-=bz.scrollTop;by-=bz.scrollLeft;if(bz===bw){bD+=bz.offsetTop;by+=bz.offsetLeft;if(b.support.doesNotAddBorder&&!(b.support.doesAddBorderForTableAndCells&&V.test(bz.nodeName))){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}bv=bw;bw=bz.offsetParent}if(b.support.subtractsBorderForOverflowNotVisible&&bC.overflow!=="visible"){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}e=bC}if(e.position==="relative"||e.position==="static"){bD+=bA.offsetTop;by+=bA.offsetLeft}if(b.support.fixedPosition&&e.position==="fixed"){bD+=Math.max(bx.scrollTop,bA.scrollTop);by+=Math.max(bx.scrollLeft,bA.scrollLeft)}return{top:bD,left:by}}}b.offset={bodyOffset:function(e){var bw=e.offsetTop,bv=e.offsetLeft;if(b.support.doesNotIncludeMarginInBodyOffset){bw+=parseFloat(b.css(e,"marginTop"))||0;bv+=parseFloat(b.css(e,"marginLeft"))||0}return{top:bw,left:bv}},setOffset:function(bx,bG,bA){var bB=b.css(bx,"position");if(bB==="static"){bx.style.position="relative"}var bz=b(bx),bv=bz.offset(),e=b.css(bx,"top"),bE=b.css(bx,"left"),bF=(bB==="absolute"||bB==="fixed")&&b.inArray("auto",[e,bE])>-1,bD={},bC={},bw,by;if(bF){bC=bz.position();bw=bC.top;by=bC.left}else{bw=parseFloat(e)||0;by=parseFloat(bE)||0}if(b.isFunction(bG)){bG=bG.call(bx,bA,bv)}if(bG.top!=null){bD.top=(bG.top-bv.top)+bw}if(bG.left!=null){bD.left=(bG.left-bv.left)+by}if("using" in bG){bG.using.call(bx,bD)}else{bz.css(bD)}}};b.fn.extend({position:function(){if(!this[0]){return null}var bw=this[0],bv=this.offsetParent(),bx=this.offset(),e=ad.test(bv[0].nodeName)?{top:0,left:0}:bv.offset();bx.top-=parseFloat(b.css(bw,"marginTop"))||0;bx.left-=parseFloat(b.css(bw,"marginLeft"))||0;e.top+=parseFloat(b.css(bv[0],"borderTopWidth"))||0;e.left+=parseFloat(b.css(bv[0],"borderLeftWidth"))||0;return{top:bx.top-e.top,left:bx.left-e.left}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||av.body;while(e&&(!ad.test(e.nodeName)&&b.css(e,"position")==="static")){e=e.offsetParent}return e})}});b.each(["Left","Top"],function(bv,e){var bw="scroll"+e;b.fn[bw]=function(bz){var bx,by;if(bz===L){bx=this[0];if(!bx){return null}by=aK(bx);return by?("pageXOffset" in by)?by[bv?"pageYOffset":"pageXOffset"]:b.support.boxModel&&by.document.documentElement[bw]||by.document.body[bw]:bx[bw]}return this.each(function(){by=aK(this);if(by){by.scrollTo(!bv?bz:b(by).scrollLeft(),bv?bz:b(by).scrollTop())}else{this[bw]=bz}})}});function aK(e){return b.isWindow(e)?e:e.nodeType===9?e.defaultView||e.parentWindow:false}b.each(["Height","Width"],function(bv,e){var bw=e.toLowerCase();b.fn["inner"+e]=function(){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,"padding")):this[bw]():null};b.fn["outer"+e]=function(by){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,by?"margin":"border")):this[bw]():null};b.fn[bw]=function(bz){var bA=this[0];if(!bA){return bz==null?null:this}if(b.isFunction(bz)){return this.each(function(bE){var bD=b(this);bD[bw](bz.call(this,bE,bD[bw]()))})}if(b.isWindow(bA)){var bB=bA.document.documentElement["client"+e],bx=bA.document.body;return bA.document.compatMode==="CSS1Compat"&&bB||bx&&bx["client"+e]||bB}else{if(bA.nodeType===9){return Math.max(bA.documentElement["client"+e],bA.body["scroll"+e],bA.documentElement["scroll"+e],bA.body["offset"+e],bA.documentElement["offset"+e])}else{if(bz===L){var bC=b.css(bA,bw),by=parseFloat(bC);return b.isNumeric(by)?by:bC}else{return this.css(bw,typeof bz==="string"?bz:bz+"px")}}}}});bb.jQuery=bb.$=b;if(typeof define==="function"&&define.amd&&define.amd.jQuery){define("jquery",[],function(){return b})}})(window);/*! + * jQuery UI 1.8.18 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI + */ +(function(a,d){a.ui=a.ui||{};if(a.ui.version){return}a.extend(a.ui,{version:"1.8.18",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});a.fn.extend({propAttr:a.fn.prop||a.fn.attr,_focus:a.fn.focus,focus:function(e,f){return typeof e==="number"?this.each(function(){var g=this;setTimeout(function(){a(g).focus();if(f){f.call(g)}},e)}):this._focus.apply(this,arguments)},scrollParent:function(){var e;if((a.browser.msie&&(/(static|relative)/).test(this.css("position")))||(/absolute/).test(this.css("position"))){e=this.parents().filter(function(){return(/(relative|absolute|fixed)/).test(a.curCSS(this,"position",1))&&(/(auto|scroll)/).test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0)}else{e=this.parents().filter(function(){return(/(auto|scroll)/).test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0)}return(/fixed/).test(this.css("position"))||!e.length?a(document):e},zIndex:function(h){if(h!==d){return this.css("zIndex",h)}if(this.length){var f=a(this[0]),e,g;while(f.length&&f[0]!==document){e=f.css("position");if(e==="absolute"||e==="relative"||e==="fixed"){g=parseInt(f.css("zIndex"),10);if(!isNaN(g)&&g!==0){return g}}f=f.parent()}}return 0},disableSelection:function(){return this.bind((a.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(e){e.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});a.each(["Width","Height"],function(g,e){var f=e==="Width"?["Left","Right"]:["Top","Bottom"],h=e.toLowerCase(),k={innerWidth:a.fn.innerWidth,innerHeight:a.fn.innerHeight,outerWidth:a.fn.outerWidth,outerHeight:a.fn.outerHeight};function j(m,l,i,n){a.each(f,function(){l-=parseFloat(a.curCSS(m,"padding"+this,true))||0;if(i){l-=parseFloat(a.curCSS(m,"border"+this+"Width",true))||0}if(n){l-=parseFloat(a.curCSS(m,"margin"+this,true))||0}});return l}a.fn["inner"+e]=function(i){if(i===d){return k["inner"+e].call(this)}return this.each(function(){a(this).css(h,j(this,i)+"px")})};a.fn["outer"+e]=function(i,l){if(typeof i!=="number"){return k["outer"+e].call(this,i)}return this.each(function(){a(this).css(h,j(this,i,true,l)+"px")})}});function c(g,e){var j=g.nodeName.toLowerCase();if("area"===j){var i=g.parentNode,h=i.name,f;if(!g.href||!h||i.nodeName.toLowerCase()!=="map"){return false}f=a("img[usemap=#"+h+"]")[0];return !!f&&b(f)}return(/input|select|textarea|button|object/.test(j)?!g.disabled:"a"==j?g.href||e:e)&&b(g)}function b(e){return !a(e).parents().andSelf().filter(function(){return a.curCSS(this,"visibility")==="hidden"||a.expr.filters.hidden(this)}).length}a.extend(a.expr[":"],{data:function(g,f,e){return !!a.data(g,e[3])},focusable:function(e){return c(e,!isNaN(a.attr(e,"tabindex")))},tabbable:function(g){var e=a.attr(g,"tabindex"),f=isNaN(e);return(f||e>=0)&&c(g,!f)}});a(function(){var e=document.body,f=e.appendChild(f=document.createElement("div"));f.offsetHeight;a.extend(f.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});a.support.minHeight=f.offsetHeight===100;a.support.selectstart="onselectstart" in f;e.removeChild(f).style.display="none"});a.extend(a.ui,{plugin:{add:function(f,g,j){var h=a.ui[f].prototype;for(var e in j){h.plugins[e]=h.plugins[e]||[];h.plugins[e].push([g,j[e]])}},call:function(e,g,f){var j=e.plugins[g];if(!j||!e.element[0].parentNode){return}for(var h=0;h0){return true}h[e]=1;g=(h[e]>0);h[e]=0;return g},isOverAxis:function(f,e,g){return(f>e)&&(f<(e+g))},isOver:function(j,f,i,h,e,g){return a.ui.isOverAxis(j,i,e)&&a.ui.isOverAxis(f,h,g)}})})(jQuery);/*! + * jQuery UI Widget 1.8.18 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Widget + */ +(function(b,d){if(b.cleanData){var c=b.cleanData;b.cleanData=function(f){for(var g=0,h;(h=f[g])!=null;g++){try{b(h).triggerHandler("remove")}catch(j){}}c(f)}}else{var a=b.fn.remove;b.fn.remove=function(e,f){return this.each(function(){if(!f){if(!e||b.filter(e,[this]).length){b("*",this).add([this]).each(function(){try{b(this).triggerHandler("remove")}catch(g){}})}}return a.call(b(this),e,f)})}}b.widget=function(f,h,e){var g=f.split(".")[0],j;f=f.split(".")[1];j=g+"-"+f;if(!e){e=h;h=b.Widget}b.expr[":"][j]=function(k){return !!b.data(k,f)};b[g]=b[g]||{};b[g][f]=function(k,l){if(arguments.length){this._createWidget(k,l)}};var i=new h();i.options=b.extend(true,{},i.options);b[g][f].prototype=b.extend(true,i,{namespace:g,widgetName:f,widgetEventPrefix:b[g][f].prototype.widgetEventPrefix||f,widgetBaseClass:j},e);b.widget.bridge(f,b[g][f])};b.widget.bridge=function(f,e){b.fn[f]=function(i){var g=typeof i==="string",h=Array.prototype.slice.call(arguments,1),j=this;i=!g&&h.length?b.extend.apply(null,[true,i].concat(h)):i;if(g&&i.charAt(0)==="_"){return j}if(g){this.each(function(){var k=b.data(this,f),l=k&&b.isFunction(k[i])?k[i].apply(k,h):k;if(l!==k&&l!==d){j=l;return false}})}else{this.each(function(){var k=b.data(this,f);if(k){k.option(i||{})._init()}else{b.data(this,f,new e(i,this))}})}return j}};b.Widget=function(e,f){if(arguments.length){this._createWidget(e,f)}};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(f,g){b.data(g,this.widgetName,this);this.element=b(g);this.options=b.extend(true,{},this.options,this._getCreateOptions(),f);var e=this;this.element.bind("remove."+this.widgetName,function(){e.destroy()});this._create();this._trigger("create");this._init()},_getCreateOptions:function(){return b.metadata&&b.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled ui-state-disabled")},widget:function(){return this.element},option:function(f,g){var e=f;if(arguments.length===0){return b.extend({},this.options)}if(typeof f==="string"){if(g===d){return this.options[f]}e={};e[f]=g}this._setOptions(e);return this},_setOptions:function(f){var e=this;b.each(f,function(g,h){e._setOption(g,h)});return this},_setOption:function(e,f){this.options[e]=f;if(e==="disabled"){this.widget()[f?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",f)}return this},enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(e,f,g){var j,i,h=this.options[e];g=g||{};f=b.Event(f);f.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase();f.target=this.element[0];i=f.originalEvent;if(i){for(j in i){if(!(j in f)){f[j]=i[j]}}}this.element.trigger(f,g);return !(b.isFunction(h)&&h.call(this.element[0],f,g)===false||f.isDefaultPrevented())}}})(jQuery);/*! + * jQuery UI Mouse 1.8.18 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Mouse + * + * Depends: + * jquery.ui.widget.js + */ +(function(b,c){var a=false;b(document).mouseup(function(d){a=false});b.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var d=this;this.element.bind("mousedown."+this.widgetName,function(e){return d._mouseDown(e)}).bind("click."+this.widgetName,function(e){if(true===b.data(e.target,d.widgetName+".preventClickEvent")){b.removeData(e.target,d.widgetName+".preventClickEvent");e.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName)},_mouseDown:function(f){if(a){return}(this._mouseStarted&&this._mouseUp(f));this._mouseDownEvent=f;var e=this,g=(f.which==1),d=(typeof this.options.cancel=="string"&&f.target.nodeName?b(f.target).closest(this.options.cancel).length:false);if(!g||d||!this._mouseCapture(f)){return true}this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){e.mouseDelayMet=true},this.options.delay)}if(this._mouseDistanceMet(f)&&this._mouseDelayMet(f)){this._mouseStarted=(this._mouseStart(f)!==false);if(!this._mouseStarted){f.preventDefault();return true}}if(true===b.data(f.target,this.widgetName+".preventClickEvent")){b.removeData(f.target,this.widgetName+".preventClickEvent")}this._mouseMoveDelegate=function(h){return e._mouseMove(h)};this._mouseUpDelegate=function(h){return e._mouseUp(h)};b(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);f.preventDefault();a=true;return true},_mouseMove:function(d){if(b.browser.msie&&!(document.documentMode>=9)&&!d.button){return this._mouseUp(d)}if(this._mouseStarted){this._mouseDrag(d);return d.preventDefault()}if(this._mouseDistanceMet(d)&&this._mouseDelayMet(d)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,d)!==false);(this._mouseStarted?this._mouseDrag(d):this._mouseUp(d))}return !this._mouseStarted},_mouseUp:function(d){b(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;if(d.target==this._mouseDownEvent.target){b.data(d.target,this.widgetName+".preventClickEvent",true)}this._mouseStop(d)}return false},_mouseDistanceMet:function(d){return(Math.max(Math.abs(this._mouseDownEvent.pageX-d.pageX),Math.abs(this._mouseDownEvent.pageY-d.pageY))>=this.options.distance)},_mouseDelayMet:function(d){return this.mouseDelayMet},_mouseStart:function(d){},_mouseDrag:function(d){},_mouseStop:function(d){},_mouseCapture:function(d){return true}})})(jQuery);(function(c,d){c.widget("ui.resizable",c.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,containment:false,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1000},_create:function(){var f=this,k=this.options;this.element.addClass("ui-resizable");c.extend(this,{_aspectRatio:!!(k.aspectRatio),aspectRatio:k.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:k.helper||k.ghost||k.animate?k.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){this.element.wrap(c('
').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("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom: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({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=k.handles||(!c(".ui-resizable-handle",this.element).length?"e,s,se":{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"});if(this.handles.constructor==String){if(this.handles=="all"){this.handles="n,e,s,w,se,sw,ne,nw"}var l=this.handles.split(",");this.handles={};for(var g=0;g
');if(/sw|se|ne|nw/.test(j)){h.css({zIndex:++k.zIndex})}if("se"==j){h.addClass("ui-icon ui-icon-gripsmall-diagonal-se")}this.handles[j]=".ui-resizable-"+j;this.element.append(h)}}this._renderAxis=function(q){q=q||this.element;for(var n in this.handles){if(this.handles[n].constructor==String){this.handles[n]=c(this.handles[n],this.element).show()}if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var o=c(this.handles[n],this.element),p=0;p=/sw|ne|nw|se|n|s/.test(n)?o.outerHeight():o.outerWidth();var m=["padding",/ne|nw|n/.test(n)?"Top":/se|sw|s/.test(n)?"Bottom":/^e$/.test(n)?"Right":"Left"].join("");q.css(m,p);this._proportionallyResize()}if(!c(this.handles[n]).length){continue}}};this._renderAxis(this.element);this._handles=c(".ui-resizable-handle",this.element).disableSelection();this._handles.mouseover(function(){if(!f.resizing){if(this.className){var i=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)}f.axis=i&&i[1]?i[1]:"se"}});if(k.autoHide){this._handles.hide();c(this.element).addClass("ui-resizable-autohide").hover(function(){if(k.disabled){return}c(this).removeClass("ui-resizable-autohide");f._handles.show()},function(){if(k.disabled){return}if(!f.resizing){c(this).addClass("ui-resizable-autohide");f._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var e=function(g){c(g).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){e(this.element);var f=this.element;f.after(this.originalElement.css({position:f.css("position"),width:f.outerWidth(),height:f.outerHeight(),top:f.css("top"),left:f.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);e(this.originalElement);return this},_mouseCapture:function(f){var g=false;for(var e in this.handles){if(c(this.handles[e])[0]==f.target){g=true}}return !this.options.disabled&&g},_mouseStart:function(g){var j=this.options,f=this.element.position(),e=this.element;this.resizing=true;this.documentScroll={top:c(document).scrollTop(),left:c(document).scrollLeft()};if(e.is(".ui-draggable")||(/absolute/).test(e.css("position"))){e.css({position:"absolute",top:f.top,left:f.left})}this._renderProxy();var k=b(this.helper.css("left")),h=b(this.helper.css("top"));if(j.containment){k+=c(j.containment).scrollLeft()||0;h+=c(j.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:k,top:h};this.size=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalSize=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalPosition={left:k,top:h};this.sizeDiff={width:e.outerWidth()-e.width(),height:e.outerHeight()-e.height()};this.originalMousePosition={left:g.pageX,top:g.pageY};this.aspectRatio=(typeof j.aspectRatio=="number")?j.aspectRatio:((this.originalSize.width/this.originalSize.height)||1);var i=c(".ui-resizable-"+this.axis).css("cursor");c("body").css("cursor",i=="auto"?this.axis+"-resize":i);e.addClass("ui-resizable-resizing");this._propagate("start",g);return true},_mouseDrag:function(e){var h=this.helper,g=this.options,m={},q=this,j=this.originalMousePosition,n=this.axis;var r=(e.pageX-j.left)||0,p=(e.pageY-j.top)||0;var i=this._change[n];if(!i){return false}var l=i.apply(this,[e,r,p]),k=c.browser.msie&&c.browser.version<7,f=this.sizeDiff;this._updateVirtualBoundaries(e.shiftKey);if(this._aspectRatio||e.shiftKey){l=this._updateRatio(l,e)}l=this._respectSize(l,e);this._propagate("resize",e);h.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});if(!this._helper&&this._proportionallyResizeElements.length){this._proportionallyResize()}this._updateCache(l);this._trigger("resize",e,this.ui());return false},_mouseStop:function(h){this.resizing=false;var i=this.options,m=this;if(this._helper){var g=this._proportionallyResizeElements,e=g.length&&(/textarea/i).test(g[0].nodeName),f=e&&c.ui.hasScroll(g[0],"left")?0:m.sizeDiff.height,k=e?0:m.sizeDiff.width;var n={width:(m.helper.width()-k),height:(m.helper.height()-f)},j=(parseInt(m.element.css("left"),10)+(m.position.left-m.originalPosition.left))||null,l=(parseInt(m.element.css("top"),10)+(m.position.top-m.originalPosition.top))||null;if(!i.animate){this.element.css(c.extend(n,{top:l,left:j}))}m.helper.height(m.size.height);m.helper.width(m.size.width);if(this._helper&&!i.animate){this._proportionallyResize()}}c("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",h);if(this._helper){this.helper.remove()}return false},_updateVirtualBoundaries:function(g){var j=this.options,i,h,f,k,e;e={minWidth:a(j.minWidth)?j.minWidth:0,maxWidth:a(j.maxWidth)?j.maxWidth:Infinity,minHeight:a(j.minHeight)?j.minHeight:0,maxHeight:a(j.maxHeight)?j.maxHeight:Infinity};if(this._aspectRatio||g){i=e.minHeight*this.aspectRatio;f=e.minWidth/this.aspectRatio;h=e.maxHeight*this.aspectRatio;k=e.maxWidth/this.aspectRatio;if(i>e.minWidth){e.minWidth=i}if(f>e.minHeight){e.minHeight=f}if(hl.width),s=a(l.height)&&i.minHeight&&(i.minHeight>l.height);if(h){l.width=i.minWidth}if(s){l.height=i.minHeight}if(t){l.width=i.maxWidth}if(m){l.height=i.maxHeight}var f=this.originalPosition.left+this.originalSize.width,p=this.position.top+this.size.height;var k=/sw|nw|w/.test(q),e=/nw|ne|n/.test(q);if(h&&k){l.left=f-i.minWidth}if(t&&k){l.left=f-i.maxWidth}if(s&&e){l.top=p-i.minHeight}if(m&&e){l.top=p-i.maxHeight}var n=!l.width&&!l.height;if(n&&!l.left&&l.top){l.top=null}else{if(n&&!l.top&&l.left){l.left=null}}return l},_proportionallyResize:function(){var k=this.options;if(!this._proportionallyResizeElements.length){return}var g=this.helper||this.element;for(var f=0;f');var e=c.browser.msie&&c.browser.version<7,g=(e?1:0),h=(e?2:-1);this.helper.addClass(this._helper).css({width:this.element.outerWidth()+h,height:this.element.outerHeight()+h,position:"absolute",left:this.elementOffset.left-g+"px",top:this.elementOffset.top-g+"px",zIndex:++i.zIndex});this.helper.appendTo("body").disableSelection()}else{this.helper=this.element}},_change:{e:function(g,f,e){return{width:this.originalSize.width+f}},w:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{left:i.left+f,width:g.width-f}},n:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{top:i.top+e,height:g.height-e}},s:function(g,f,e){return{height:this.originalSize.height+e}},se:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},sw:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[g,f,e]))},ne:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},nw:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[g,f,e]))}},_propagate:function(f,e){c.ui.plugin.call(this,f,[e,this.ui()]);(f!="resize"&&this._trigger(f,e,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}}});c.extend(c.ui.resizable,{version:"1.8.18"});c.ui.plugin.add("resizable","alsoResize",{start:function(f,g){var e=c(this).data("resizable"),i=e.options;var h=function(j){c(j).each(function(){var k=c(this);k.data("resizable-alsoresize",{width:parseInt(k.width(),10),height:parseInt(k.height(),10),left:parseInt(k.css("left"),10),top:parseInt(k.css("top"),10)})})};if(typeof(i.alsoResize)=="object"&&!i.alsoResize.parentNode){if(i.alsoResize.length){i.alsoResize=i.alsoResize[0];h(i.alsoResize)}else{c.each(i.alsoResize,function(j){h(j)})}}else{h(i.alsoResize)}},resize:function(g,i){var f=c(this).data("resizable"),j=f.options,h=f.originalSize,l=f.originalPosition;var k={height:(f.size.height-h.height)||0,width:(f.size.width-h.width)||0,top:(f.position.top-l.top)||0,left:(f.position.left-l.left)||0},e=function(m,n){c(m).each(function(){var q=c(this),r=c(this).data("resizable-alsoresize"),p={},o=n&&n.length?n:q.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];c.each(o,function(s,u){var t=(r[u]||0)+(k[u]||0);if(t&&t>=0){p[u]=t||null}});q.css(p)})};if(typeof(j.alsoResize)=="object"&&!j.alsoResize.nodeType){c.each(j.alsoResize,function(m,n){e(m,n)})}else{e(j.alsoResize)}},stop:function(e,f){c(this).removeData("resizable-alsoresize")}});c.ui.plugin.add("resizable","animate",{stop:function(i,n){var p=c(this).data("resizable"),j=p.options;var h=p._proportionallyResizeElements,e=h.length&&(/textarea/i).test(h[0].nodeName),f=e&&c.ui.hasScroll(h[0],"left")?0:p.sizeDiff.height,l=e?0:p.sizeDiff.width;var g={width:(p.size.width-l),height:(p.size.height-f)},k=(parseInt(p.element.css("left"),10)+(p.position.left-p.originalPosition.left))||null,m=(parseInt(p.element.css("top"),10)+(p.position.top-p.originalPosition.top))||null;p.element.animate(c.extend(g,m&&k?{top:m,left:k}:{}),{duration:j.animateDuration,easing:j.animateEasing,step:function(){var o={width:parseInt(p.element.css("width"),10),height:parseInt(p.element.css("height"),10),top:parseInt(p.element.css("top"),10),left:parseInt(p.element.css("left"),10)};if(h&&h.length){c(h[0]).css({width:o.width,height:o.height})}p._updateCache(o);p._propagate("resize",i)}})}});c.ui.plugin.add("resizable","containment",{start:function(f,r){var t=c(this).data("resizable"),j=t.options,l=t.element;var g=j.containment,k=(g instanceof c)?g.get(0):(/parent/.test(g))?l.parent().get(0):g;if(!k){return}t.containerElement=c(k);if(/document/.test(g)||g==document){t.containerOffset={left:0,top:0};t.containerPosition={left:0,top:0};t.parentData={element:c(document),left:0,top:0,width:c(document).width(),height:c(document).height()||document.body.parentNode.scrollHeight}}else{var n=c(k),i=[];c(["Top","Right","Left","Bottom"]).each(function(p,o){i[p]=b(n.css("padding"+o))});t.containerOffset=n.offset();t.containerPosition=n.position();t.containerSize={height:(n.innerHeight()-i[3]),width:(n.innerWidth()-i[1])};var q=t.containerOffset,e=t.containerSize.height,m=t.containerSize.width,h=(c.ui.hasScroll(k,"left")?k.scrollWidth:m),s=(c.ui.hasScroll(k)?k.scrollHeight:e);t.parentData={element:k,left:q.left,top:q.top,width:h,height:s}}},resize:function(g,q){var t=c(this).data("resizable"),i=t.options,f=t.containerSize,p=t.containerOffset,m=t.size,n=t.position,r=t._aspectRatio||g.shiftKey,e={top:0,left:0},h=t.containerElement;if(h[0]!=document&&(/static/).test(h.css("position"))){e=p}if(n.left<(t._helper?p.left:0)){t.size.width=t.size.width+(t._helper?(t.position.left-p.left):(t.position.left-e.left));if(r){t.size.height=t.size.width/i.aspectRatio}t.position.left=i.helper?p.left:0}if(n.top<(t._helper?p.top:0)){t.size.height=t.size.height+(t._helper?(t.position.top-p.top):t.position.top);if(r){t.size.width=t.size.height*i.aspectRatio}t.position.top=t._helper?p.top:0}t.offset.left=t.parentData.left+t.position.left;t.offset.top=t.parentData.top+t.position.top;var l=Math.abs((t._helper?t.offset.left-e.left:(t.offset.left-e.left))+t.sizeDiff.width),s=Math.abs((t._helper?t.offset.top-e.top:(t.offset.top-p.top))+t.sizeDiff.height);var k=t.containerElement.get(0)==t.element.parent().get(0),j=/relative|absolute/.test(t.containerElement.css("position"));if(k&&j){l-=t.parentData.left}if(l+t.size.width>=t.parentData.width){t.size.width=t.parentData.width-l;if(r){t.size.height=t.size.width/t.aspectRatio}}if(s+t.size.height>=t.parentData.height){t.size.height=t.parentData.height-s;if(r){t.size.width=t.size.height*t.aspectRatio}}},stop:function(f,n){var q=c(this).data("resizable"),g=q.options,l=q.position,m=q.containerOffset,e=q.containerPosition,i=q.containerElement;var j=c(q.helper),r=j.offset(),p=j.outerWidth()-q.sizeDiff.width,k=j.outerHeight()-q.sizeDiff.height;if(q._helper&&!g.animate&&(/relative/).test(i.css("position"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}if(q._helper&&!g.animate&&(/static/).test(i.css("position"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}}});c.ui.plugin.add("resizable","ghost",{start:function(g,h){var e=c(this).data("resizable"),i=e.options,f=e.size;e.ghost=e.originalElement.clone();e.ghost.css({opacity:0.25,display:"block",position:"relative",height:f.height,width:f.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof i.ghost=="string"?i.ghost:"");e.ghost.appendTo(e.helper)},resize:function(f,g){var e=c(this).data("resizable"),h=e.options;if(e.ghost){e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})}},stop:function(f,g){var e=c(this).data("resizable"),h=e.options;if(e.ghost&&e.helper){e.helper.get(0).removeChild(e.ghost.get(0))}}});c.ui.plugin.add("resizable","grid",{resize:function(e,m){var p=c(this).data("resizable"),h=p.options,k=p.size,i=p.originalSize,j=p.originalPosition,n=p.axis,l=h._aspectRatio||e.shiftKey;h.grid=typeof h.grid=="number"?[h.grid,h.grid]:h.grid;var g=Math.round((k.width-i.width)/(h.grid[0]||1))*(h.grid[0]||1),f=Math.round((k.height-i.height)/(h.grid[1]||1))*(h.grid[1]||1);if(/^(se|s|e)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f}else{if(/^(ne)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f}else{if(/^(sw)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.left=j.left-g}else{p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f;p.position.left=j.left-g}}}}});var b=function(e){return parseInt(e,10)||0};var a=function(e){return !isNaN(parseInt(e,10))}})(jQuery);/*! + * jQuery hashchange event - v1.3 - 7/21/2010 + * http://benalman.com/projects/jquery-hashchange-plugin/ + * + * Copyright (c) 2010 "Cowboy" Ben Alman + * Dual licensed under the MIT and GPL licenses. + * http://benalman.com/about/license/ + */ +(function($,e,b){var c="hashchange",h=document,f,g=$.event.special,i=h.documentMode,d="on"+c in e&&(i===b||i>7);function a(j){j=j||location.href;return"#"+j.replace(/^[^#]*#?(.*)$/,"$1")}$.fn[c]=function(j){return j?this.bind(c,j):this.trigger(c)};$.fn[c].delay=50;g[c]=$.extend(g[c],{setup:function(){if(d){return false}$(f.start)},teardown:function(){if(d){return false}$(f.stop)}});f=(function(){var j={},p,m=a(),k=function(q){return q},l=k,o=k;j.start=function(){p||n()};j.stop=function(){p&&clearTimeout(p);p=b};function n(){var r=a(),q=o(m);if(r!==m){l(m=r,q);$(e).trigger(c)}else{if(q!==m){location.href=location.href.replace(/#.*/,"")+q}}p=setTimeout(n,$.fn[c].delay)}$.browser.msie&&!d&&(function(){var q,r;j.start=function(){if(!q){r=$.fn[c].src;r=r&&r+a();q=$(' + + + + +
+ +
+
keyplusdatasample.cpp File Reference
+
+
+
#include <boost/sort/spreadsort/spreadsort.hpp>
+#include <time.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <algorithm>
+#include <vector>
+#include <string>
+#include <fstream>
+#include <sstream>
+#include <iostream>
+
+ + + + + + + +

+Classes

struct  DATA_TYPE
 
struct  lessthan
 
struct  rightshift
 
+ + + +

+Functions

int main (int argc, const char **argv)
 
+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
int main (int argc,
const char ** argv 
)
+
+ +
+
+ + + + + diff --git a/doc/doxygen/html/mostlysorted_8cpp.html b/doc/doxygen/html/mostlysorted_8cpp.html new file mode 100644 index 0000000..9f151e3 --- /dev/null +++ b/doc/doxygen/html/mostlysorted_8cpp.html @@ -0,0 +1,182 @@ + + + + + + +Boost.Sort: I:/modular-boost/libs/sort/example/mostlysorted.cpp File Reference + + + + + + + + + + +
+
+ + + + + + +
+
Boost.Sort +
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
mostlysorted.cpp File Reference
+
+
+
#include <boost/sort/spreadsort/spreadsort.hpp>
+#include <time.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <algorithm>
+#include <vector>
+#include <string>
+#include <fstream>
+#include <sstream>
+#include <iostream>
+
+ + + +

+Macros

#define DATA_TYPE   int
 
+ + + + + +

+Functions

unsigned get_index (unsigned count)
 
int main (int argc, const char **argv)
 
+

Macro Definition Documentation

+ +
+
+ + + + +
#define DATA_TYPE   int
+
+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + +
unsigned get_index (unsigned count)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int main (int argc,
const char ** argv 
)
+
+ +
+
+
+ + + + diff --git a/doc/doxygen/html/namespaceboost.html b/doc/doxygen/html/namespaceboost.html new file mode 100644 index 0000000..ac9fa72 --- /dev/null +++ b/doc/doxygen/html/namespaceboost.html @@ -0,0 +1,104 @@ + + + + + + +Boost.Sort: boost Namespace Reference + + + + + + + + + + +
+
+ + + + + + +
+
Boost.Sort +
+
+
+ + + + + + +
+
+ + +
+ +
+ +
+
+ +
+
boost Namespace Reference
+
+
+ + + + +

+Namespaces

 sort
 
+
+ + + + diff --git a/doc/doxygen/html/namespaceboost_1_1sort.html b/doc/doxygen/html/namespaceboost_1_1sort.html new file mode 100644 index 0000000..147df4b --- /dev/null +++ b/doc/doxygen/html/namespaceboost_1_1sort.html @@ -0,0 +1,1534 @@ + + + + + + +Boost.Sort: boost::sort Namespace Reference + + + + + + + + + + +
+
+ + + + + + +
+
Boost.Sort +
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
boost::sort Namespace Reference
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

template<class Data_type , class Cast_type >
Cast_type float_mem_cast (const Data_type &data)
 Casts a float to the specified integer type. More...
 
template<class RandomAccessIter >
void float_sort (RandomAccessIter first, RandomAccessIter last)
 float_sort with casting to the appropriate size. More...
 
template<class RandomAccessIter , class Right_shift >
void float_sort (RandomAccessIter first, RandomAccessIter last, Right_shift rshift)
 Floating-point sort algorithm using random access iterators with just right-shift functor. More...
 
template<class RandomAccessIter , class Right_shift , class Compare >
void float_sort (RandomAccessIter first, RandomAccessIter last, Right_shift rshift, Compare comp)
 Float sort algorithm using random access iterators with both right-shift and user-defined comparison operator. More...
 
template<class RandomAccessIter >
void integer_sort (RandomAccessIter first, RandomAccessIter last)
 Integer sort algorithm using random access iterators. (All variants fall back to std::sort if the data size is too small, < detail::min_sort_size). More...
 
template<class RandomAccessIter , class Right_shift , class Compare >
void integer_sort (RandomAccessIter first, RandomAccessIter last, Right_shift shift, Compare comp)
 Integer sort algorithm using random access iterators with both right-shift and user-defined comparison operator. (All variants fall back to std::sort if the data size is too small, < detail::min_sort_size). More...
 
template<class RandomAccessIter , class Right_shift >
void integer_sort (RandomAccessIter first, RandomAccessIter last, Right_shift shift)
 Integer sort algorithm using random access iterators with just right-shift functor. (All variants fall back to std::sort if the data size is too small, < detail::min_sort_size). More...
 
template<class RandomAccessIter >
boost::enable_if_c< std::numeric_limits< typename std::iterator_traits< RandomAccessIter >::value_type >::is_integer, void >::type spreadsort (RandomAccessIter first, RandomAccessIter last)
 Generic spreadsort variant detecting integer-type elements so call to integer_sort. More...
 
template<class RandomAccessIter >
boost::enable_if_c< !std::numeric_limits< typename std::iterator_traits< RandomAccessIter >::value_type >::is_integer &&std::numeric_limits< typename std::iterator_traits< RandomAccessIter >::value_type >::is_iec559, void >::type spreadsort (RandomAccessIter first, RandomAccessIter last)
 Generic spreadsort variant detecting float element type so call to float_sort. More...
 
template<class RandomAccessIter >
boost::enable_if_c< is_same< typename std::iterator_traits< RandomAccessIter >::value_type, typename std::string >::value||is_same< typename std::iterator_traits< RandomAccessIter >::value_type, typename std::wstring >::value, void >::type spreadsort (RandomAccessIter first, RandomAccessIter last)
 Generic spreadsort variant detecting string element type so call to string_sort for std::strings and std::wstrings. More...
 
template<class RandomAccessIter , class Unsigned_char_type >
void string_sort (RandomAccessIter first, RandomAccessIter last, Unsigned_char_type unused)
 String sort algorithm using random access iterators, allowing character-type overloads.
+ (All variants fall back to std::sort if the data size is too small, < detail::min_sort_size). More...
 
template<class RandomAccessIter >
void string_sort (RandomAccessIter first, RandomAccessIter last)
 String sort algorithm using random access iterators, wraps using default of unsigned char. (All variants fall back to std::sort if the data size is too small, < detail::min_sort_size). More...
 
template<class RandomAccessIter , class Compare , class Unsigned_char_type >
void reverse_string_sort (RandomAccessIter first, RandomAccessIter last, Compare comp, Unsigned_char_type unused)
 String sort algorithm using random access iterators, allowing character-type overloads. More...
 
template<class RandomAccessIter , class Compare >
void reverse_string_sort (RandomAccessIter first, RandomAccessIter last, Compare comp)
 String sort algorithm using random access iterators, wraps using default of unsigned char. More...
 
template<class RandomAccessIter , class Get_char , class Get_length >
void string_sort (RandomAccessIter first, RandomAccessIter last, Get_char getchar, Get_length length)
 String sort algorithm using random access iterators, wraps using default of unsigned char. More...
 
template<class RandomAccessIter , class Get_char , class Get_length , class Compare >
void string_sort (RandomAccessIter first, RandomAccessIter last, Get_char getchar, Get_length length, Compare comp)
 String sort algorithm using random access iterators, wraps using default of unsigned char. More...
 
template<class RandomAccessIter , class Get_char , class Get_length , class Compare >
void reverse_string_sort (RandomAccessIter first, RandomAccessIter last, Get_char getchar, Get_length length, Compare comp)
 Reverse String sort algorithm using random access iterators. More...
 
+

Detailed Description

+

Namespace for spreadsort sort variants for different data types.

Note
Use hyperlinks (coloured) to get detailed information about functions.
+

Function Documentation

+ +
+
+
+template<class Data_type , class Cast_type >
+ + + + + +
+ + + + + + + + +
Cast_type boost::sort::float_mem_cast (const Data_type & data)
+
+inline
+
+ +

Casts a float to the specified integer type.

+
Template Parameters
+ + + +
Data_typeFloating-point IEEE 754/IEC559 type.
Cast_typeInteger type (same size) to which to cast.
+
+
+
Example:
struct rightshift {
+
int operator()(const DATA_TYPE &x, const unsigned offset) const {
+
return float_mem_cast<KEY_TYPE, CAST_TYPE>(x.key) >> offset;
+
}
+
};
+
+ +
+
+ +
+
+
+template<class RandomAccessIter >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void boost::sort::float_sort (RandomAccessIter first,
RandomAccessIter last 
)
+
+inline
+
+ +

float_sort with casting to the appropriate size.

+
Template Parameters
+ + +
RandomAccessIterRandom access iterator
+
+
+
Parameters
+ + + +
[in]firstIterator pointer to first element.
[in]lastIterator pointing to one beyond the end of data.
+
+
+

Some performance plots of runtime vs. n and log(range) are provided:
+ windows_float_sort
+ osx_float_sort

+
A simple example of sorting some floating-point is:
vector<float> vec;
+
vec.push_back(1.0);
+
vec.push_back(2.3);
+
vec.push_back(1.3);
+
spreadsort(vec.begin(), vec.end());
+
+
The sorted vector contains ascending values "1.0 1.3 2.3".
+ +
+
+ +
+
+
+template<class RandomAccessIter , class Right_shift >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
void boost::sort::float_sort (RandomAccessIter first,
RandomAccessIter last,
Right_shift rshift 
)
+
+inline
+
+ +

Floating-point sort algorithm using random access iterators with just right-shift functor.

+
Template Parameters
+ + + +
RandomAccessIterRandom access iterator
Right_shiftFunctor for right-shift by parameter shift bits.
+
+
+
Parameters
+ + + + +
[in]firstIterator pointer to first element.
[in]lastIterator pointing to one beyond the end of data.
[in]rshiftNumber of bits to right-shift (using functor).
+
+
+ +
+
+ +
+
+
+template<class RandomAccessIter , class Right_shift , class Compare >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void boost::sort::float_sort (RandomAccessIter first,
RandomAccessIter last,
Right_shift rshift,
Compare comp 
)
+
+inline
+
+ +

Float sort algorithm using random access iterators with both right-shift and user-defined comparison operator.

+
Template Parameters
+ + + + +
RandomAccessIterRandom access iterator
Right_shiftfunctor for right-shift by parameter shift bits.
CompTo provide operator< for user-defined comparison.
+
+
+
Parameters
+ + + + + +
[in]firstIterator pointer to first element.
[in]lastIterator pointing to one beyond the end of data.
[in]rshiftNumber of bits to right-shift (using functor).
[in]compcomparison functor.
+
+
+ +
+
+ +
+
+
+template<class RandomAccessIter >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void boost::sort::integer_sort (RandomAccessIter first,
RandomAccessIter last 
)
+
+inline
+
+ +

Integer sort algorithm using random access iterators. (All variants fall back to std::sort if the data size is too small, < detail::min_sort_size).

+

integer_sort is a fast templated in-place hybrid radix/comparison algorithm, which in testing tends to be roughly 50% to 2X faster than std::sort for large tests (>=100kB).
+Worst-case performance is O(N * (lg(range)/s + s)) , so integer_sort is asymptotically faster than pure comparison-based algorithms. s is max_splits, which defaults to 11, so its worst-case with default settings for 32-bit integers is O(N * ((32/11) slow radix-based iterations fast comparison-based iterations).
+
+Some performance plots of runtime vs. n and log(range) are provided:
+ windows_integer_sort
+ osx_integer_sort

+
Template Parameters
+ + +
RandomAccessIterRandom access iterator
+
+
+
Parameters
+ + + +
[in]firstIterator pointer to first element.
[in]lastIterator pointing to one beyond the end of data.
+
+
+
Precondition
[first, last) is a valid range.
+
+RandomAccessIter value_type is mutable.
+
+RandomAccessIter value_type is LessThanComparable
+
+RandomAccessIter value_type supports the operator>>, which returns an integer-type right-shifted a specified number of bits.
+
Postcondition
The elements in the range [first, last) are sorted in ascending order.
+
Exceptions
+ + +
std::exceptionPropagates exceptions if any of the element comparisons, the element swaps (or moves), the right shift, subtraction of right-shifted elements, functors, or any operations on iterators throw.
+
+
+
Warning
Throwing an exception may cause data loss. This will also throw if a small vector resize throws, in which case there will be no data loss.
+
+Invalid arguments cause undefined behaviour.
+
Note
spreadsort function provides a wrapper that calls the fastest sorting algorithm available for a data type, enabling faster generic-programming.
+
Remarks
The lesser of O(N*log(N)) comparisons and O(N*log(K/S + S)) operations worst-case, where:
+
+* N is last - first,
+
+* K is the log of the range in bits (32 for 32-bit integers using their full range),
+
+* S is a constant called max_splits, defaulting to 11 (except for strings where it is the log of the character size).
+ +
+
+ +
+
+
+template<class RandomAccessIter , class Right_shift , class Compare >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void boost::sort::integer_sort (RandomAccessIter first,
RandomAccessIter last,
Right_shift shift,
Compare comp 
)
+
+inline
+
+ +

Integer sort algorithm using random access iterators with both right-shift and user-defined comparison operator. (All variants fall back to std::sort if the data size is too small, < detail::min_sort_size).

+

integer_sort is a fast templated in-place hybrid radix/comparison algorithm, which in testing tends to be roughly 50% to 2X faster than std::sort for large tests (>=100kB).
+Worst-case performance is O(N * (lg(range)/s + s)) , so integer_sort is asymptotically faster than pure comparison-based algorithms. s is max_splits, which defaults to 11, so its worst-case with default settings for 32-bit integers is O(N * ((32/11) slow radix-based iterations fast comparison-based iterations).
+
+Some performance plots of runtime vs. n and log(range) are provided:
+ windows_integer_sort
+ osx_integer_sort

+
Template Parameters
+ + + + +
RandomAccessIterRandom access iterator
Right_shiftfunctor for right-shift by parameter shift bits.
CompTo provide operator< for user-defined comparison.
+
+
+
Parameters
+ + + + + +
[in]firstIterator pointer to first element.
[in]lastIterator pointing to one beyond the end of data.
[in]shiftNumber of bits to right-shift (using functor).
[in]compcomparison functor.
+
+
+
Precondition
[first, last) is a valid range.
+
+RandomAccessIter value_type is mutable.
+
+RandomAccessIter value_type is LessThanComparable
+
+RandomAccessIter value_type supports the operator>>, which returns an integer-type right-shifted a specified number of bits.
+
Postcondition
The elements in the range [first, last) are sorted in ascending order.
+
Returns
void.
+
Exceptions
+ + +
std::exceptionPropagates exceptions if any of the element comparisons, the element swaps (or moves), the right shift, subtraction of right-shifted elements, functors, or any operations on iterators throw.
+
+
+
Warning
Throwing an exception may cause data loss. This will also throw if a small vector resize throws, in which case there will be no data loss.
+
+Invalid arguments cause undefined behaviour.
+
Note
spreadsort function provides a wrapper that calls the fastest sorting algorithm available for a data type, enabling faster generic-programming.
+
Remarks
The lesser of O(N*log(N)) comparisons and O(N*log(K/S + S)) operations worst-case, where:
+
+* N is last - first,
+
+* K is the log of the range in bits (32 for 32-bit integers using their full range),
+
+* S is a constant called max_splits, defaulting to 11 (except for strings where it is the log of the character size).
+ +
+
+ +
+
+
+template<class RandomAccessIter , class Right_shift >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
void boost::sort::integer_sort (RandomAccessIter first,
RandomAccessIter last,
Right_shift shift 
)
+
+inline
+
+ +

Integer sort algorithm using random access iterators with just right-shift functor. (All variants fall back to std::sort if the data size is too small, < detail::min_sort_size).

+

integer_sort is a fast templated in-place hybrid radix/comparison algorithm, which in testing tends to be roughly 50% to 2X faster than std::sort for large tests (>=100kB).
+

Performance:
Worst-case performance is O(N * (lg(range)/s + s)) , so integer_sort is asymptotically faster than pure comparison-based algorithms. s is max_splits, which defaults to 11, so its worst-case with default settings for 32-bit integers is O(N * ((32/11) slow radix-based iterations fast comparison-based iterations).
+
+Some performance plots of runtime vs. n and log(range) are provided:
+ windows_integer_sort
+ osx_integer_sort
+
Template Parameters
+ + + +
RandomAccessIterRandom access iterator
Right_shiftfunctor for right-shift by parameter shift bits.
+
+
+
Parameters
+ + + + +
[in]firstIterator pointer to first element.
[in]lastIterator pointing to one beyond the end of data.
[in]shiftNumber of bits to right-shift (using functor).
+
+
+
Precondition
[first, last) is a valid range.
+
+RandomAccessIter value_type is mutable.
+
+RandomAccessIter value_type is LessThanComparable
+
+RandomAccessIter value_type supports the operator>>, which returns an integer-type right-shifted a specified number of bits.
+
Postcondition
The elements in the range [first, last) are sorted in ascending order.
+
Exceptions
+ + +
std::exceptionPropagates exceptions if any of the element comparisons, the element swaps (or moves), the right shift, subtraction of right-shifted elements, functors, or any operations on iterators throw.
+
+
+
Warning
Throwing an exception may cause data loss. This will also throw if a small vector resize throws, in which case there will be no data loss.
+
+Invalid arguments cause undefined behaviour.
+
Note
spreadsort function provides a wrapper that calls the fastest sorting algorithm available for a data type, enabling faster generic-programming.
+
Remarks
The lesser of O(N*log(N)) comparisons and O(N*log(K/S + S)) operations worst-case, where:
+
+* N is last - first,
+
+* K is the log of the range in bits (32 for 32-bit integers using their full range),
+
+* S is a constant called max_splits, defaulting to 11 (except for strings where it is the log of the character size).
+ +
+
+ +
+
+
+template<class RandomAccessIter , class Compare , class Unsigned_char_type >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void boost::sort::reverse_string_sort (RandomAccessIter first,
RandomAccessIter last,
Compare comp,
Unsigned_char_type unused 
)
+
+inline
+
+ +

String sort algorithm using random access iterators, allowing character-type overloads.

+

(All variants fall back to std::sort if the data size is too small, < detail::min_sort_size).

+

integer_sort is a fast templated in-place hybrid radix/comparison algorithm, which in testing tends to be roughly 50% to 2X faster than std::sort for large tests (>=100kB).
+Worst-case performance is O(N * (lg(range)/s + s)) , so integer_sort is asymptotically faster than pure comparison-based algorithms. s is max_splits, which defaults to 11, so its worst-case with default settings for 32-bit integers is O(N * ((32/11) slow radix-based iterations fast comparison-based iterations).
+
+Some performance plots of runtime vs. n and log(range) are provided:
+ windows_integer_sort
+ osx_integer_sort

+
Template Parameters
+ + + + +
RandomAccessIterRandom access iterator
CompTo provide operator< for user-defined comparison.
Unsigned_char_typeUnsigned character type used for string.
+
+
+
Parameters
+ + + + + +
[in]firstIterator pointer to first element.
[in]lastIterator pointing to one beyond the end of data.
[in]compcomparison functor.
[in]unusedUnused ???
+
+
+
Precondition
[first, last) is a valid range.
+
+RandomAccessIter value_type is mutable.
+
+RandomAccessIter value_type is LessThanComparable
+
+RandomAccessIter value_type supports the operator>>, which returns an integer-type right-shifted a specified number of bits.
+
Postcondition
The elements in the range [first, last) are sorted in ascending order.
+
Returns
void.
+
Exceptions
+ + +
std::exceptionPropagates exceptions if any of the element comparisons, the element swaps (or moves), the right shift, subtraction of right-shifted elements, functors, or any operations on iterators throw.
+
+
+
Warning
Throwing an exception may cause data loss. This will also throw if a small vector resize throws, in which case there will be no data loss.
+
+Invalid arguments cause undefined behaviour.
+
Note
spreadsort function provides a wrapper that calls the fastest sorting algorithm available for a data type, enabling faster generic-programming.
+
Remarks
The lesser of O(N*log(N)) comparisons and O(N*log(K/S + S)) operations worst-case, where:
+
+* N is last - first,
+
+* K is the log of the range in bits (32 for 32-bit integers using their full range),
+
+* S is a constant called max_splits, defaulting to 11 (except for strings where it is the log of the character size).
+ +
+
+ +
+
+
+template<class RandomAccessIter , class Compare >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
void boost::sort::reverse_string_sort (RandomAccessIter first,
RandomAccessIter last,
Compare comp 
)
+
+inline
+
+ +

String sort algorithm using random access iterators, wraps using default of unsigned char.

+

(All variants fall back to std::sort if the data size is too small, < detail::min_sort_size).

+

integer_sort is a fast templated in-place hybrid radix/comparison algorithm, which in testing tends to be roughly 50% to 2X faster than std::sort for large tests (>=100kB).
+Worst-case performance is O(N * (lg(range)/s + s)) , so integer_sort is asymptotically faster than pure comparison-based algorithms. s is max_splits, which defaults to 11, so its worst-case with default settings for 32-bit integers is O(N * ((32/11) slow radix-based iterations fast comparison-based iterations).
+
+Some performance plots of runtime vs. n and log(range) are provided:
+ windows_integer_sort
+ osx_integer_sort

+
Template Parameters
+ + + +
RandomAccessIterRandom access iterator
CompTo provide operator< for user-defined comparison.
+
+
+
Parameters
+ + + + +
[in]firstIterator pointer to first element.
[in]lastIterator pointing to one beyond the end of data.
[in]compComparison functor.
+
+
+
Precondition
[first, last) is a valid range.
+
+RandomAccessIter value_type is mutable.
+
+RandomAccessIter value_type is LessThanComparable
+
+RandomAccessIter value_type supports the operator>>, which returns an integer-type right-shifted a specified number of bits.
+
Postcondition
The elements in the range [first, last) are sorted in ascending order.
+
Returns
void.
+
Exceptions
+ + +
std::exceptionPropagates exceptions if any of the element comparisons, the element swaps (or moves), the right shift, subtraction of right-shifted elements, functors, or any operations on iterators throw.
+
+
+
Warning
Throwing an exception may cause data loss. This will also throw if a small vector resize throws, in which case there will be no data loss.
+
+Invalid arguments cause undefined behaviour.
+
Note
spreadsort function provides a wrapper that calls the fastest sorting algorithm available for a data type, enabling faster generic-programming.
+
Remarks
The lesser of O(N*log(N)) comparisons and O(N*log(K/S + S)) operations worst-case, where:
+
+* N is last - first,
+
+* K is the log of the range in bits (32 for 32-bit integers using their full range),
+
+* S is a constant called max_splits, defaulting to 11 (except for strings where it is the log of the character size).
+ +
+
+ +
+
+
+template<class RandomAccessIter , class Get_char , class Get_length , class Compare >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void boost::sort::reverse_string_sort (RandomAccessIter first,
RandomAccessIter last,
Get_char getchar,
Get_length length,
Compare comp 
)
+
+inline
+
+ +

Reverse String sort algorithm using random access iterators.

+

(All variants fall back to std::sort if the data size is too small, < detail::min_sort_size).

+

integer_sort is a fast templated in-place hybrid radix/comparison algorithm, which in testing tends to be roughly 50% to 2X faster than std::sort for large tests (>=100kB).
+Worst-case performance is O(N * (lg(range)/s + s)) , so integer_sort is asymptotically faster than pure comparison-based algorithms. s is max_splits, which defaults to 11, so its worst-case with default settings for 32-bit integers is O(N * ((32/11) slow radix-based iterations fast comparison-based iterations).
+
+Some performance plots of runtime vs. n and log(range) are provided:
+ windows_integer_sort
+ osx_integer_sort

+
Template Parameters
+ + + + + +
RandomAccessIterRandom access iterator
Get_char???.
Get_length??? TODO
CompTo provide operator< for user-defined comparison.
+
+
+
Parameters
+ + + + + + +
[in]firstIterator pointer to first element.
[in]lastIterator pointing to one beyond the end of data.
[in]compcomparison functor.
[in]getchar???
[in]length???
+
+
+
Precondition
[first, last) is a valid range.
+
+RandomAccessIter value_type is mutable.
+
+RandomAccessIter value_type is LessThanComparable
+
Postcondition
The elements in the range [first, last) are sorted in ascending order.
+
Returns
void.
+
Exceptions
+ + +
std::exceptionPropagates exceptions if any of the element comparisons, the element swaps (or moves), the right shift, subtraction of right-shifted elements, functors, or any operations on iterators throw.
+
+
+
Warning
Throwing an exception may cause data loss. This will also throw if a small vector resize throws, in which case there will be no data loss.
+
+Invalid arguments cause undefined behaviour.
+
Note
spreadsort function provides a wrapper that calls the fastest sorting algorithm available for a data type, enabling faster generic-programming.
+
Remarks
The lesser of O(N*log(N)) comparisons and O(N*log(K/S + S)) operations worst-case, where:
+
+* N is last - first,
+
+* K is the log of the range in bits (32 for 32-bit integers using their full range),
+
+* S is a constant called max_splits, defaulting to 11 (except for strings where it is the log of the character size).
+ +
+
+ +
+
+
+template<class RandomAccessIter >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
boost::enable_if_c< std::numeric_limits< typename std::iterator_traits<RandomAccessIter>::value_type >::is_integer, void >::type boost::sort::spreadsort (RandomAccessIter first,
RandomAccessIter last 
)
+
+inline
+
+ +

Generic spreadsort variant detecting integer-type elements so call to integer_sort.

+

If the data type provided is an integer, integer_sort is used.

Note
Sorting other data types requires picking between integer_sort, float_sort and string_sort directly, as spreadsort won't accept types that don't have the appropriate type_traits.
+
Template Parameters
+ + +
RandomAccessIterRandom access iterator
+
+
+
Parameters
+ + + +
[in]firstIterator pointer to first element.
[in]lastIterator pointing to one beyond the end of data.
+
+
+
Precondition
[first, last) is a valid range.
+
+RandomAccessIter value_type is mutable.
+
+RandomAccessIter value_type is LessThanComparable
+
+RandomAccessIter value_type supports the operator>>, which returns an integer-type right-shifted a specified number of bits.
+
Postcondition
The elements in the range [first, last) are sorted in ascending order.
+ +
+
+ +
+
+
+template<class RandomAccessIter >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
boost::enable_if_c< !std::numeric_limits< typename std::iterator_traits<RandomAccessIter>::value_type >::is_integer && std::numeric_limits< typename std::iterator_traits<RandomAccessIter>::value_type >::is_iec559, void >::type boost::sort::spreadsort (RandomAccessIter first,
RandomAccessIter last 
)
+
+inline
+
+ +

Generic spreadsort variant detecting float element type so call to float_sort.

+

If the data type provided is a float or castable-float, float_sort is used.

Note
Sorting other data types requires picking between integer_sort, float_sort and string_sort directly, as spreadsort won't accept types that don't have the appropriate type_traits.
+
Template Parameters
+ + +
RandomAccessIterRandom access iterator
+
+
+
Parameters
+ + + +
[in]firstIterator pointer to first element.
[in]lastIterator pointing to one beyond the end of data.
+
+
+
Precondition
[first, last) is a valid range.
+
+RandomAccessIter value_type is mutable.
+
+RandomAccessIter value_type is LessThanComparable
+
+RandomAccessIter value_type supports the operator>>, which returns an integer-type right-shifted a specified number of bits.
+
Postcondition
The elements in the range [first, last) are sorted in ascending order.
+ +
+
+ +
+
+
+template<class RandomAccessIter >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
boost::enable_if_c< is_same<typename std::iterator_traits<RandomAccessIter>::value_type, typename std::string>::value || is_same<typename std::iterator_traits<RandomAccessIter>::value_type, typename std::wstring>::value, void >::type boost::sort::spreadsort (RandomAccessIter first,
RandomAccessIter last 
)
+
+inline
+
+ +

Generic spreadsort variant detecting string element type so call to string_sort for std::strings and std::wstrings.

+

If the data type provided is a string or wstring, string_sort is used.

Note
Sorting other data types requires picking between integer_sort, float_sort and string_sort directly, as spreadsort won't accept types that don't have the appropriate type_traits.
+
Template Parameters
+ + +
RandomAccessIterRandom access iterator
+
+
+
Parameters
+ + + +
[in]firstIterator pointer to first element.
[in]lastIterator pointing to one beyond the end of data.
+
+
+
Precondition
[first, last) is a valid range.
+
+RandomAccessIter value_type is mutable.
+
+RandomAccessIter value_type is LessThanComparable
+
+RandomAccessIter value_type supports the operator>>, which returns an integer-type right-shifted a specified number of bits.
+
Postcondition
The elements in the range [first, last) are sorted in ascending order.
+ +
+
+ +
+
+
+template<class RandomAccessIter , class Unsigned_char_type >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
void boost::sort::string_sort (RandomAccessIter first,
RandomAccessIter last,
Unsigned_char_type unused 
)
+
+inline
+
+ +

String sort algorithm using random access iterators, allowing character-type overloads.
+ (All variants fall back to std::sort if the data size is too small, < detail::min_sort_size).

+

string_sort is a fast templated in-place hybrid radix/comparison algorithm, which in testing tends to be roughly 50% to 2X faster than std::sort for large tests (>=100kB).
+

Worst-case performance is O(N * (lg(range)/s + s)) , so integer_sort is asymptotically faster than pure comparison-based algorithms. s is max_splits, which defaults to 11, so its worst-case with default settings for 32-bit integers is O(N * ((32/11) slow radix-based iterations fast comparison-based iterations).
+
+Some performance plots of runtime vs. n and log(range) are provided:
+windows_string_sort
+osx_string_sort
+
Template Parameters
+ + + +
RandomAccessIterRandom access iterator
Unsigned_char_typeUnsigned character type used for string.
+
+
+
Parameters
+ + + + +
[in]firstIterator pointer to first element.
[in]lastIterator pointing to one beyond the end of data.
[in]unusedUnused ???
+
+
+
Precondition
[first, last) is a valid range.
+
+RandomAccessIter value_type is mutable.
+
+RandomAccessIter value_type is LessThanComparable
+
+RandomAccessIter value_type supports the operator>>, which returns an integer-type right-shifted a specified number of bits.
+
Postcondition
The elements in the range [first, last) are sorted in ascending order.
+
Exceptions
+ + +
std::exceptionPropagates exceptions if any of the element comparisons, the element swaps (or moves), the right shift, subtraction of right-shifted elements, functors, or any operations on iterators throw.
+
+
+
Warning
Throwing an exception may cause data loss. This will also throw if a small vector resize throws, in which case there will be no data loss.
+
+Invalid arguments cause undefined behaviour.
+
Note
spreadsort function provides a wrapper that calls the fastest sorting algorithm available for a data type, enabling faster generic-programming.
+
Remarks
The lesser of O(N*log(N)) comparisons and O(N*log(K/S + S)) operations worst-case, where:
+
+* N is last - first,
+
+* K is the log of the range in bits (32 for 32-bit integers using their full range),
+
+* S is a constant called max_splits, defaulting to 11 (except for strings where it is the log of the character size).
+ +
+
+ +
+
+
+template<class RandomAccessIter >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void boost::sort::string_sort (RandomAccessIter first,
RandomAccessIter last 
)
+
+inline
+
+ +

String sort algorithm using random access iterators, wraps using default of unsigned char. (All variants fall back to std::sort if the data size is too small, < detail::min_sort_size).

+

string_sort is a fast templated in-place hybrid radix/comparison algorithm, which in testing tends to be roughly 50% to 2X faster than std::sort for large tests (>=100kB).
+Worst-case performance is O(N * (lg(range)/s + s)) , so integer_sort is asymptotically faster than pure comparison-based algorithms. s is max_splits, which defaults to 11, so its worst-case with default settings for 32-bit integers is O(N * ((32/11) slow radix-based iterations fast comparison-based iterations).
+
+Some performance plots of runtime vs. n and log(range) are provided:
+ windows_string_sort
+ osx_string_sort

+
Template Parameters
+ + +
RandomAccessIterRandom access iterator
+
+
+
Parameters
+ + + +
[in]firstIterator pointer to first element.
[in]lastIterator pointing to one beyond the end of data.
+
+
+
Precondition
[first, last) is a valid range.
+
+RandomAccessIter value_type is mutable.
+
+RandomAccessIter value_type is LessThanComparable
+
+RandomAccessIter value_type supports the operator>>, which returns an integer-type right-shifted a specified number of bits.
+
Postcondition
The elements in the range [first, last) are sorted in ascending order.
+
Exceptions
+ + +
std::exceptionPropagates exceptions if any of the element comparisons, the element swaps (or moves), the right shift, subtraction of right-shifted elements, functors, or any operations on iterators throw.
+
+
+
Warning
Throwing an exception may cause data loss. This will also throw if a small vector resize throws, in which case there will be no data loss.
+
+Invalid arguments cause undefined behaviour.
+
Note
spreadsort function provides a wrapper that calls the fastest sorting algorithm available for a data type, enabling faster generic-programming.
+
Remarks
The lesser of O(N*log(N)) comparisons and O(N*log(K/S + S)) operations worst-case, where:
+
+* N is last - first,
+
+* K is the log of the range in bits (32 for 32-bit integers using their full range),
+
+* S is a constant called max_splits, defaulting to 11 (except for strings where it is the log of the character size).
+ +
+
+ +
+
+
+template<class RandomAccessIter , class Get_char , class Get_length >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void boost::sort::string_sort (RandomAccessIter first,
RandomAccessIter last,
Get_char getchar,
Get_length length 
)
+
+inline
+
+ +

String sort algorithm using random access iterators, wraps using default of unsigned char.

+

(All variants fall back to std::sort if the data size is too small, < detail::min_sort_size).

+

integer_sort is a fast templated in-place hybrid radix/comparison algorithm, which in testing tends to be roughly 50% to 2X faster than std::sort for large tests (>=100kB).
+Worst-case performance is O(N * (lg(range)/s + s)) , so integer_sort is asymptotically faster than pure comparison-based algorithms. s is max_splits, which defaults to 11, so its worst-case with default settings for 32-bit integers is O(N * ((32/11) slow radix-based iterations fast comparison-based iterations).
+
+Some performance plots of runtime vs. n and log(range) are provided:
+ windows_integer_sort
+ osx_integer_sort

+
Template Parameters
+ + + + +
RandomAccessIterRandom access iterator
Get_charBracket functor equivalent to operator[], taking a number corresponding to the character offset..
Get_lengthFunctor to get the length of the string in characters. TODO Check this and below and other places!!!
+
+
+
Parameters
+ + + + + +
[in]firstIterator pointer to first element.
[in]lastIterator pointing to one beyond the end of data.
[in]getcharNumber corresponding to the character offset from bracket functor equivalent to operator[].
[in]lengthFunctor to get the length of the string in characters.
+
+
+
Precondition
[first, last) is a valid range.
+
+RandomAccessIter value_type is mutable.
+
+RandomAccessIter value_type is LessThanComparable
+
+RandomAccessIter value_type supports the operator>>, which returns an integer-type right-shifted a specified number of bits.
+
Postcondition
The elements in the range [first, last) are sorted in ascending order.
+
Returns
void.
+
Exceptions
+ + +
std::exceptionPropagates exceptions if any of the element comparisons, the element swaps (or moves), the right shift, subtraction of right-shifted elements, functors, or any operations on iterators throw.
+
+
+
Warning
Throwing an exception may cause data loss. This will also throw if a small vector resize throws, in which case there will be no data loss.
+
+Invalid arguments cause undefined behaviour.
+
Note
spreadsort function provides a wrapper that calls the fastest sorting algorithm available for a data type, enabling faster generic-programming.
+
Remarks
The lesser of O(N*log(N)) comparisons and O(N*log(K/S + S)) operations worst-case, where:
+
+* N is last - first,
+
+* K is the log of the range in bits (32 for 32-bit integers using their full range),
+
+* S is a constant called max_splits, defaulting to 11 (except for strings where it is the log of the character size).
+ +
+
+ +
+
+
+template<class RandomAccessIter , class Get_char , class Get_length , class Compare >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void boost::sort::string_sort (RandomAccessIter first,
RandomAccessIter last,
Get_char getchar,
Get_length length,
Compare comp 
)
+
+inline
+
+ +

String sort algorithm using random access iterators, wraps using default of unsigned char.

+

(All variants fall back to std::sort if the data size is too small, < detail::min_sort_size).

+

integer_sort is a fast templated in-place hybrid radix/comparison algorithm, which in testing tends to be roughly 50% to 2X faster than std::sort for large tests (>=100kB).
+Worst-case performance is O(N * (lg(range)/s + s)) , so integer_sort is asymptotically faster than pure comparison-based algorithms. s is max_splits, which defaults to 11, so its worst-case with default settings for 32-bit integers is O(N * ((32/11) slow radix-based iterations fast comparison-based iterations).
+
+Some performance plots of runtime vs. n and log(range) are provided:
+ windows_integer_sort
+ osx_integer_sort

+
Template Parameters
+ + + + + +
RandomAccessIterRandom access iterator
Get_char???.
Get_length??? TODO
CompTo provide operator< for user-defined comparison.
+
+
+
Parameters
+ + + + + + +
[in]firstIterator pointer to first element.
[in]lastIterator pointing to one beyond the end of data.
[in]compcomparison functor.
[in]getchar???
[in]length???
+
+
+
Precondition
[first, last) is a valid range.
+
+RandomAccessIter value_type is mutable.
+
+RandomAccessIter value_type is LessThanComparable
+
Postcondition
The elements in the range [first, last) are sorted in ascending order.
+
Returns
void.
+
Exceptions
+ + +
std::exceptionPropagates exceptions if any of the element comparisons, the element swaps (or moves), the right shift, subtraction of right-shifted elements, functors, or any operations on iterators throw.
+
+
+
Warning
Throwing an exception may cause data loss. This will also throw if a small vector resize throws, in which case there will be no data loss.
+
+Invalid arguments cause undefined behaviour.
+
Note
spreadsort function provides a wrapper that calls the fastest sorting algorithm available for a data type, enabling faster generic-programming.
+
Remarks
The lesser of O(N*log(N)) comparisons and O(N*log(K/S + S)) operations worst-case, where:
+
+* N is last - first,
+
+* K is the log of the range in bits (32 for 32-bit integers using their full range),
+
+* S is a constant called max_splits, defaulting to 11 (except for strings where it is the log of the character size).
+ +
+
+
+ + + + diff --git a/doc/doxygen/html/namespaceboost_1_1sort_1_1detail.html b/doc/doxygen/html/namespaceboost_1_1sort_1_1detail.html new file mode 100644 index 0000000..f97fd8b --- /dev/null +++ b/doc/doxygen/html/namespaceboost_1_1sort_1_1detail.html @@ -0,0 +1,1774 @@ + + + + + + +Boost.Sort: boost::sort::detail Namespace Reference + + + + + + + + + + +
+
+ + + + + + +
+
Boost.Sort +
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
boost::sort::detail Namespace Reference
+
+
+ + + + + + + + +

+Classes

struct  offset_char_less_than
 
struct  offset_greater_than
 
struct  offset_less_than
 
+ + + +

+Enumerations

enum  {
+  max_splits = 11, +max_finishing_splits = max_splits + 1, +int_log_mean_bin_size = 2, +int_log_min_split_count = 9, +
+  int_log_finishing_count = 31, +float_log_mean_bin_size = 2, +float_log_min_split_count = 8, +float_log_finishing_count = 4, +
+  min_sort_size = 1000 +
+ }
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

template<class Cast_type , class RandomAccessIter >
Cast_type cast_float_iter (const RandomAccessIter &floatiter)
 
template<class RandomAccessIter , class Div_type , class Right_shift >
bool is_sorted_or_find_extremes (RandomAccessIter current, RandomAccessIter last, Div_type &max, Div_type &min, Right_shift rshift)
 
template<class RandomAccessIter , class Div_type >
void inner_float_swap_loop (RandomAccessIter *bins, const RandomAccessIter &nextbinstart, unsigned ii, const unsigned log_divisor, const Div_type div_min)
 
template<class RandomAccessIter , class Div_type >
void float_swap_loop (RandomAccessIter *bins, RandomAccessIter &nextbinstart, unsigned ii, const size_t *bin_sizes, const unsigned log_divisor, const Div_type div_min)
 
template<class RandomAccessIter , class Cast_type >
bool is_sorted_or_find_extremes (RandomAccessIter current, RandomAccessIter last, Cast_type &max, Cast_type &min)
 
template<class RandomAccessIter , class Div_type , class Size_type >
void positive_float_sort_rec (RandomAccessIter first, RandomAccessIter last, std::vector< RandomAccessIter > &bin_cache, unsigned cache_offset, size_t *bin_sizes)
 
template<class RandomAccessIter , class Div_type , class Size_type >
void negative_float_sort_rec (RandomAccessIter first, RandomAccessIter last, std::vector< RandomAccessIter > &bin_cache, unsigned cache_offset, size_t *bin_sizes)
 
template<class RandomAccessIter , class Div_type , class Right_shift , class Size_type >
void negative_float_sort_rec (RandomAccessIter first, RandomAccessIter last, std::vector< RandomAccessIter > &bin_cache, unsigned cache_offset, size_t *bin_sizes, Right_shift rshift)
 
template<class RandomAccessIter , class Div_type , class Right_shift , class Compare , class Size_type >
void negative_float_sort_rec (RandomAccessIter first, RandomAccessIter last, std::vector< RandomAccessIter > &bin_cache, unsigned cache_offset, size_t *bin_sizes, Right_shift rshift, Compare comp)
 
template<class RandomAccessIter , class Div_type , class Size_type >
void float_sort_rec (RandomAccessIter first, RandomAccessIter last, std::vector< RandomAccessIter > &bin_cache, unsigned cache_offset, size_t *bin_sizes)
 
template<class RandomAccessIter , class Div_type , class Right_shift , class Size_type >
void float_sort_rec (RandomAccessIter first, RandomAccessIter last, std::vector< RandomAccessIter > &bin_cache, unsigned cache_offset, size_t *bin_sizes, Right_shift rshift)
 
template<class RandomAccessIter , class Div_type , class Right_shift , class Compare , class Size_type >
void float_sort_rec (RandomAccessIter first, RandomAccessIter last, std::vector< RandomAccessIter > &bin_cache, unsigned cache_offset, size_t *bin_sizes, Right_shift rshift, Compare comp)
 
template<class RandomAccessIter >
boost::enable_if_c< sizeof(boost::uint32_t)==sizeof(typename std::iterator_traits< RandomAccessIter >::value_type)&&std::numeric_limits< typename std::iterator_traits< RandomAccessIter >::value_type >::is_iec559, void >::type float_sort (RandomAccessIter first, RandomAccessIter last)
 
template<class RandomAccessIter >
boost::enable_if_c< sizeof(boost::uint64_t)==sizeof(typename std::iterator_traits< RandomAccessIter >::value_type)&&std::numeric_limits< typename std::iterator_traits< RandomAccessIter >::value_type >::is_iec559, void >::type float_sort (RandomAccessIter first, RandomAccessIter last)
 
template<class RandomAccessIter >
boost::disable_if_c< (sizeof(boost::uint64_t)==sizeof(typename std::iterator_traits< RandomAccessIter >::value_type)||sizeof(boost::uint32_t)==sizeof(typename std::iterator_traits< RandomAccessIter >::value_type))&&std::numeric_limits< typename std::iterator_traits< RandomAccessIter >::value_type >::is_iec559, void >::type float_sort (RandomAccessIter first, RandomAccessIter last)
 
template<class RandomAccessIter , class Div_type , class Right_shift >
void::type float_sort (RandomAccessIter first, RandomAccessIter last, Div_type, Right_shift rshift)
 
template<class RandomAccessIter , class Div_type , class Right_shift >
boost::enable_if_c< sizeof(size_t)< sizeof(Div_type)&&sizeof(boost::uintmax_t) >=sizeof(Div_type), void >::type float_sort (RandomAccessIter first, RandomAccessIter last, Div_type, Right_shift rshift)
 
template<class RandomAccessIter , class Div_type , class Right_shift , class Compare >
void::type float_sort (RandomAccessIter first, RandomAccessIter last, Div_type, Right_shift rshift, Compare comp)
 
template<class RandomAccessIter , class Div_type , class Right_shift , class Compare >
boost::enable_if_c< sizeof(size_t)< sizeof(Div_type)&&sizeof(boost::uintmax_t) >=sizeof(Div_type), void >::type float_sort (RandomAccessIter first, RandomAccessIter last, Div_type, Right_shift rshift, Compare comp)
 
template<typename T >
unsigned rough_log_2_size (const T &input)
 
template<unsigned log_mean_bin_size, unsigned log_min_split_count, unsigned log_finishing_count>
size_t get_min_count (unsigned log_range)
 
template<class RandomAccessIter >
RandomAccessIter * size_bins (size_t *bin_sizes, std::vector< RandomAccessIter > &bin_cache, unsigned cache_offset, unsigned &cache_end, unsigned bin_count)
 
template<class RandomAccessIter , class Unsigned_char_type >
void update_offset (RandomAccessIter first, RandomAccessIter finish, size_t &char_offset)
 
template<class RandomAccessIter , class Get_char , class Get_length >
void update_offset (RandomAccessIter first, RandomAccessIter finish, size_t &char_offset, Get_char getchar, Get_length length)
 
template<class RandomAccessIter , class Unsigned_char_type >
void string_sort_rec (RandomAccessIter first, RandomAccessIter last, size_t char_offset, std::vector< RandomAccessIter > &bin_cache, unsigned cache_offset, size_t *bin_sizes)
 
template<class RandomAccessIter , class Unsigned_char_type >
void reverse_string_sort_rec (RandomAccessIter first, RandomAccessIter last, size_t char_offset, std::vector< RandomAccessIter > &bin_cache, unsigned cache_offset, size_t *bin_sizes)
 
template<class RandomAccessIter , class Unsigned_char_type , class Get_char , class Get_length >
void string_sort_rec (RandomAccessIter first, RandomAccessIter last, size_t char_offset, std::vector< RandomAccessIter > &bin_cache, unsigned cache_offset, size_t *bin_sizes, Get_char getchar, Get_length length)
 
template<class RandomAccessIter , class Unsigned_char_type , class Get_char , class Get_length , class Compare >
void string_sort_rec (RandomAccessIter first, RandomAccessIter last, size_t char_offset, std::vector< RandomAccessIter > &bin_cache, unsigned cache_offset, size_t *bin_sizes, Get_char getchar, Get_length length, Compare comp)
 
template<class RandomAccessIter , class Unsigned_char_type , class Get_char , class Get_length , class Compare >
void reverse_string_sort_rec (RandomAccessIter first, RandomAccessIter last, size_t char_offset, std::vector< RandomAccessIter > &bin_cache, unsigned cache_offset, size_t *bin_sizes, Get_char getchar, Get_length length, Compare comp)
 
+

Enumeration Type Documentation

+ +
+
+ + + + +
anonymous enum
+
+ + + + + + + + + + +
Enumerator
max_splits  +
max_finishing_splits  +
int_log_mean_bin_size  +
int_log_min_split_count  +
int_log_finishing_count  +
float_log_mean_bin_size  +
float_log_min_split_count  +
float_log_finishing_count  +
min_sort_size  +
+ +
+
+

Function Documentation

+ +
+
+
+template<class Cast_type , class RandomAccessIter >
+ + + + + +
+ + + + + + + + +
Cast_type boost::sort::detail::cast_float_iter (const RandomAccessIter & floatiter)
+
+inline
+
+ +
+
+ +
+
+
+template<class RandomAccessIter >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
boost::enable_if_c< sizeof(boost::uint32_t) == sizeof(typename std::iterator_traits<RandomAccessIter>::value_type) && std::numeric_limits<typename std::iterator_traits<RandomAccessIter>::value_type>::is_iec559, void >::type boost::sort::detail::float_sort (RandomAccessIter first,
RandomAccessIter last 
)
+
+inline
+
+ +
+
+ +
+
+
+template<class RandomAccessIter >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
boost::enable_if_c< sizeof(boost::uint64_t) == sizeof(typename std::iterator_traits<RandomAccessIter>::value_type) && std::numeric_limits<typename std::iterator_traits<RandomAccessIter>::value_type>::is_iec559, void >::type boost::sort::detail::float_sort (RandomAccessIter first,
RandomAccessIter last 
)
+
+inline
+
+ +
+
+ +
+
+
+template<class RandomAccessIter >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
boost::disable_if_c< (sizeof(boost::uint64_t) == sizeof(typename std::iterator_traits<RandomAccessIter>::value_type) || sizeof(boost::uint32_t) == sizeof(typename std::iterator_traits<RandomAccessIter>::value_type)) && std::numeric_limits<typename std::iterator_traits<RandomAccessIter>::value_type>::is_iec559, void >::type boost::sort::detail::float_sort (RandomAccessIter first,
RandomAccessIter last 
)
+
+inline
+
+ +
+
+ +
+
+
+template<class RandomAccessIter , class Div_type , class Right_shift >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void::type boost::sort::detail::float_sort (RandomAccessIter first,
RandomAccessIter last,
Div_type ,
Right_shift rshift 
)
+
+inline
+
+ +
+
+ +
+
+
+template<class RandomAccessIter , class Div_type , class Right_shift >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
boost::enable_if_c< sizeof(size_t) < sizeof(Div_type) && sizeof(boost::uintmax_t) >= sizeof(Div_type), void >::type boost::sort::detail::float_sort (RandomAccessIter first,
RandomAccessIter last,
Div_type ,
Right_shift rshift 
)
+
+inline
+
+ +
+
+ +
+
+
+template<class RandomAccessIter , class Div_type , class Right_shift , class Compare >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void::type boost::sort::detail::float_sort (RandomAccessIter first,
RandomAccessIter last,
Div_type ,
Right_shift rshift,
Compare comp 
)
+
+inline
+
+ +
+
+ +
+
+
+template<class RandomAccessIter , class Div_type , class Right_shift , class Compare >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
boost::enable_if_c< sizeof(size_t) < sizeof(Div_type) && sizeof(boost::uintmax_t) >= sizeof(Div_type), void >::type boost::sort::detail::float_sort (RandomAccessIter first,
RandomAccessIter last,
Div_type ,
Right_shift rshift,
Compare comp 
)
+
+inline
+
+ +
+
+ +
+
+
+template<class RandomAccessIter , class Div_type , class Size_type >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void boost::sort::detail::float_sort_rec (RandomAccessIter first,
RandomAccessIter last,
std::vector< RandomAccessIter > & bin_cache,
unsigned cache_offset,
size_t * bin_sizes 
)
+
+inline
+
+ +
+
+ +
+
+
+template<class RandomAccessIter , class Div_type , class Right_shift , class Size_type >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void boost::sort::detail::float_sort_rec (RandomAccessIter first,
RandomAccessIter last,
std::vector< RandomAccessIter > & bin_cache,
unsigned cache_offset,
size_t * bin_sizes,
Right_shift rshift 
)
+
+inline
+
+ +
+
+ +
+
+
+template<class RandomAccessIter , class Div_type , class Right_shift , class Compare , class Size_type >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void boost::sort::detail::float_sort_rec (RandomAccessIter first,
RandomAccessIter last,
std::vector< RandomAccessIter > & bin_cache,
unsigned cache_offset,
size_t * bin_sizes,
Right_shift rshift,
Compare comp 
)
+
+inline
+
+ +
+
+ +
+
+
+template<class RandomAccessIter , class Div_type >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void boost::sort::detail::float_swap_loop (RandomAccessIter * bins,
RandomAccessIter & nextbinstart,
unsigned ii,
const size_t * bin_sizes,
const unsigned log_divisor,
const Div_type div_min 
)
+
+inline
+
+ +
+
+ +
+
+
+template<unsigned log_mean_bin_size, unsigned log_min_split_count, unsigned log_finishing_count>
+ + + + + +
+ + + + + + + + +
size_t boost::sort::detail::get_min_count (unsigned log_range)
+
+inline
+
+ +
+
+ +
+
+
+template<class RandomAccessIter , class Div_type >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void boost::sort::detail::inner_float_swap_loop (RandomAccessIter * bins,
const RandomAccessIter & nextbinstart,
unsigned ii,
const unsigned log_divisor,
const Div_type div_min 
)
+
+inline
+
+ +
+
+ +
+
+
+template<class RandomAccessIter , class Div_type , class Right_shift >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
bool boost::sort::detail::is_sorted_or_find_extremes (RandomAccessIter current,
RandomAccessIter last,
Div_type & max,
Div_type & min,
Right_shift rshift 
)
+
+inline
+
+ +
+
+ +
+
+
+template<class RandomAccessIter , class Cast_type >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
bool boost::sort::detail::is_sorted_or_find_extremes (RandomAccessIter current,
RandomAccessIter last,
Cast_type & max,
Cast_type & min 
)
+
+inline
+
+ +
+
+ +
+
+
+template<class RandomAccessIter , class Div_type , class Size_type >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void boost::sort::detail::negative_float_sort_rec (RandomAccessIter first,
RandomAccessIter last,
std::vector< RandomAccessIter > & bin_cache,
unsigned cache_offset,
size_t * bin_sizes 
)
+
+inline
+
+ +
+
+ +
+
+
+template<class RandomAccessIter , class Div_type , class Right_shift , class Size_type >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void boost::sort::detail::negative_float_sort_rec (RandomAccessIter first,
RandomAccessIter last,
std::vector< RandomAccessIter > & bin_cache,
unsigned cache_offset,
size_t * bin_sizes,
Right_shift rshift 
)
+
+inline
+
+ +
+
+ +
+
+
+template<class RandomAccessIter , class Div_type , class Right_shift , class Compare , class Size_type >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void boost::sort::detail::negative_float_sort_rec (RandomAccessIter first,
RandomAccessIter last,
std::vector< RandomAccessIter > & bin_cache,
unsigned cache_offset,
size_t * bin_sizes,
Right_shift rshift,
Compare comp 
)
+
+inline
+
+ +
+
+ +
+
+
+template<class RandomAccessIter , class Div_type , class Size_type >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void boost::sort::detail::positive_float_sort_rec (RandomAccessIter first,
RandomAccessIter last,
std::vector< RandomAccessIter > & bin_cache,
unsigned cache_offset,
size_t * bin_sizes 
)
+
+inline
+
+ +
+
+ +
+
+
+template<class RandomAccessIter , class Unsigned_char_type >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void boost::sort::detail::reverse_string_sort_rec (RandomAccessIter first,
RandomAccessIter last,
size_t char_offset,
std::vector< RandomAccessIter > & bin_cache,
unsigned cache_offset,
size_t * bin_sizes 
)
+
+inline
+
+ +
+
+ +
+
+
+template<class RandomAccessIter , class Unsigned_char_type , class Get_char , class Get_length , class Compare >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void boost::sort::detail::reverse_string_sort_rec (RandomAccessIter first,
RandomAccessIter last,
size_t char_offset,
std::vector< RandomAccessIter > & bin_cache,
unsigned cache_offset,
size_t * bin_sizes,
Get_char getchar,
Get_length length,
Compare comp 
)
+
+inline
+
+ +
+
+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + +
unsigned boost::sort::detail::rough_log_2_size (const T & input)
+
+inline
+
+ +
+
+ +
+
+
+template<class RandomAccessIter >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
RandomAccessIter* boost::sort::detail::size_bins (size_t * bin_sizes,
std::vector< RandomAccessIter > & bin_cache,
unsigned cache_offset,
unsigned & cache_end,
unsigned bin_count 
)
+
+inline
+
+ +
+
+ +
+
+
+template<class RandomAccessIter , class Unsigned_char_type >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void boost::sort::detail::string_sort_rec (RandomAccessIter first,
RandomAccessIter last,
size_t char_offset,
std::vector< RandomAccessIter > & bin_cache,
unsigned cache_offset,
size_t * bin_sizes 
)
+
+inline
+
+ +
+
+ +
+
+
+template<class RandomAccessIter , class Unsigned_char_type , class Get_char , class Get_length >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void boost::sort::detail::string_sort_rec (RandomAccessIter first,
RandomAccessIter last,
size_t char_offset,
std::vector< RandomAccessIter > & bin_cache,
unsigned cache_offset,
size_t * bin_sizes,
Get_char getchar,
Get_length length 
)
+
+inline
+
+ +
+
+ +
+
+
+template<class RandomAccessIter , class Unsigned_char_type , class Get_char , class Get_length , class Compare >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void boost::sort::detail::string_sort_rec (RandomAccessIter first,
RandomAccessIter last,
size_t char_offset,
std::vector< RandomAccessIter > & bin_cache,
unsigned cache_offset,
size_t * bin_sizes,
Get_char getchar,
Get_length length,
Compare comp 
)
+
+inline
+
+ +
+
+ +
+
+
+template<class RandomAccessIter , class Unsigned_char_type >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
void boost::sort::detail::update_offset (RandomAccessIter first,
RandomAccessIter finish,
size_t & char_offset 
)
+
+inline
+
+ +
+
+ +
+
+
+template<class RandomAccessIter , class Get_char , class Get_length >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void boost::sort::detail::update_offset (RandomAccessIter first,
RandomAccessIter finish,
size_t & char_offset,
Get_char getchar,
Get_length length 
)
+
+inline
+
+ +
+
+
+ + + + diff --git a/doc/doxygen/html/namespacemembers.html b/doc/doxygen/html/namespacemembers.html new file mode 100644 index 0000000..dbca72a --- /dev/null +++ b/doc/doxygen/html/namespacemembers.html @@ -0,0 +1,118 @@ + + + + + + +Boost.Sort: Namespace Members + + + + + + + + + + +
+
+ + + + + + +
+
Boost.Sort +
+
+
+ + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all namespace members with links to the namespace documentation for each member:
+
+ + + + diff --git a/doc/doxygen/html/namespacemembers_eval.html b/doc/doxygen/html/namespacemembers_eval.html new file mode 100644 index 0000000..f357f22 --- /dev/null +++ b/doc/doxygen/html/namespacemembers_eval.html @@ -0,0 +1,128 @@ + + + + + + +Boost.Sort: Namespace Members + + + + + + + + + + +
+
+ + + + + + +
+
Boost.Sort +
+
+
+ + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ + + + diff --git a/doc/doxygen/html/namespacemembers_func.html b/doc/doxygen/html/namespacemembers_func.html new file mode 100644 index 0000000..e33332b --- /dev/null +++ b/doc/doxygen/html/namespacemembers_func.html @@ -0,0 +1,118 @@ + + + + + + +Boost.Sort: Namespace Members + + + + + + + + + + +
+
+ + + + + + +
+
Boost.Sort +
+
+
+ + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ + + + diff --git a/doc/doxygen/html/namespaces.html b/doc/doxygen/html/namespaces.html new file mode 100644 index 0000000..ff92b56 --- /dev/null +++ b/doc/doxygen/html/namespaces.html @@ -0,0 +1,102 @@ + + + + + + +Boost.Sort: Namespace List + + + + + + + + + + +
+
+ + + + + + +
+
Boost.Sort +
+
+
+ + + + + +
+ +
+
+ + +
+ +
+ +
+
+
Namespace List
+
+
+
Here is a list of all namespaces with brief descriptions:
+
[detail level 12]
+ + +
 Nboost
 Nsort
+
+
+ + + + diff --git a/doc/doxygen/html/nav_f.png b/doc/doxygen/html/nav_f.png new file mode 100644 index 0000000000000000000000000000000000000000..72a58a529ed3a9ed6aa0c51a79cf207e026deee2 GIT binary patch literal 153 zcmeAS@N?(olHy`uVBq!ia0y~yU|?imV6fm|Vqjp{%*48zfq@~x)5S5Qg7NKLZ@vZv z9@mT0wnwwK{b+Q$n4A6R$RQ6IiRlGJm-py3^?h!7)we`C$Sg`B%#(Gakn4md)2z)c zIU=8D&Cc|kvF6^Z=UxUq7X>fs_x+wdQ&zC_$H&k2_L~(mdq^nUWn}nT$-uzC;OXk; Jvd$@?2>{ARIP(Ai literal 0 HcmV?d00001 diff --git a/doc/doxygen/html/nav_g.png b/doc/doxygen/html/nav_g.png new file mode 100644 index 0000000000000000000000000000000000000000..2093a237a94f6c83e19ec6e5fd42f7ddabdafa81 GIT binary patch literal 95 zcmeAS@N?(olHy`uVBq!ia0y~yU|?imU|{25V_;xl68K`sz`&s9>Eakt!T9#BAuj_1 z2lGLH5An2?hw;3+c6B?R`YL3e_I+`nnVp?Km|^dqCL2};1_lOCS3j3^P6Eakt!T9#BBNu}M zhg0BMX7T`TmD+;uQ+m}s#*WMoza2lbLp9(I{Its b_As80;W@%@d2 + + + + + +Boost.Sort: I:/modular-boost/libs/sort/example/parallelint.cpp File Reference + + + + + + + + + + +
+
+ + + + + + +
+
Boost.Sort +
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
parallelint.cpp File Reference
+
+
+
#include <boost/sort/spreadsort/spreadsort.hpp>
+#include <boost/thread.hpp>
+#include <time.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <algorithm>
+#include <vector>
+#include <string>
+#include <fstream>
+#include <sstream>
+#include <iostream>
+
+ + + +

+Macros

#define DATA_TYPE   int
 
+ + + + + + + +

+Functions

bool is_sorted (const std::vector< DATA_TYPE > &array)
 
void sort_loop (const std::vector< DATA_TYPE > &base_array, bool stdSort, unsigned loopCount)
 
int main (int argc, const char **argv)
 
+

Macro Definition Documentation

+ +
+
+ + + + +
#define DATA_TYPE   int
+
+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + +
bool is_sorted (const std::vector< DATA_TYPE > & array)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int main (int argc,
const char ** argv 
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void sort_loop (const std::vector< DATA_TYPE > & base_array,
bool stdSort,
unsigned loopCount 
)
+
+ +
+
+
+ + + + diff --git a/doc/doxygen/html/parallelstring_8cpp.html b/doc/doxygen/html/parallelstring_8cpp.html new file mode 100644 index 0000000..cfd5a19 --- /dev/null +++ b/doc/doxygen/html/parallelstring_8cpp.html @@ -0,0 +1,166 @@ + + + + + + +Boost.Sort: I:/modular-boost/libs/sort/example/parallelstring.cpp File Reference + + + + + + + + + + +
+
+ + + + + + +
+
Boost.Sort +
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
parallelstring.cpp File Reference
+
+
+
#include <boost/random/mersenne_twister.hpp>
+#include <boost/random/uniform_int_distribution.hpp>
+#include <boost/sort/spreadsort/spreadsort.hpp>
+#include <boost/thread.hpp>
+#include <time.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <algorithm>
+#include <vector>
+#include <iostream>
+#include <fstream>
+#include <string>
+
+ + + +

+Macros

#define DATA_TYPE   string
 
+ + + +

+Functions

int main (int argc, const char **argv)
 
+

Macro Definition Documentation

+ +
+
+ + + + +
#define DATA_TYPE   string
+
+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
int main (int argc,
const char ** argv 
)
+
+ +
+
+
+ + + + diff --git a/doc/doxygen/html/randomgen_8cpp.html b/doc/doxygen/html/randomgen_8cpp.html new file mode 100644 index 0000000..524b933 --- /dev/null +++ b/doc/doxygen/html/randomgen_8cpp.html @@ -0,0 +1,141 @@ + + + + + + +Boost.Sort: I:/modular-boost/libs/sort/example/randomgen.cpp File Reference + + + + + + + + + + +
+
+ + + + + + +
+
Boost.Sort +
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
randomgen.cpp File Reference
+
+
+
#include <boost/random/mersenne_twister.hpp>
+#include <boost/random/uniform_int_distribution.hpp>
+#include <stdio.h>
+#include "stdlib.h"
+#include <fstream>
+#include <iostream>
+
+ + + +

+Functions

int main (int argc, const char **argv)
 
+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
int main (int argc,
const char ** argv 
)
+
+ +
+
+
+ + + + diff --git a/doc/doxygen/html/reverseintsample_8cpp.html b/doc/doxygen/html/reverseintsample_8cpp.html new file mode 100644 index 0000000..a8093be --- /dev/null +++ b/doc/doxygen/html/reverseintsample_8cpp.html @@ -0,0 +1,175 @@ + + + + + + +Boost.Sort: I:/modular-boost/libs/sort/example/reverseintsample.cpp File Reference + + + + + + + + + + +
+
+ + + + + + +
+
Boost.Sort +
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
reverseintsample.cpp File Reference
+
+
+ +

integer sort with a rightshift functor reverse sorting example. +More...

+
#include <boost/sort/spreadsort/spreadsort.hpp>
+#include <time.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <algorithm>
+#include <vector>
+#include <string>
+#include <fstream>
+#include <iostream>
+#include <functional>
+
+ + + +

+Classes

struct  negrightshift
 
+ + + +

+Macros

#define DATA_TYPE   int
 
+ + + +

+Functions

int main (int argc, const char **argv)
 
+

Detailed Description

+

integer sort with a rightshift functor reverse sorting example.

+

Macro Definition Documentation

+ +
+
+ + + + +
#define DATA_TYPE   int
+
+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
int main (int argc,
const char ** argv 
)
+
+ +
+
+
+ + + + diff --git a/doc/doxygen/html/reversestringfunctorsample_8cpp.html b/doc/doxygen/html/reversestringfunctorsample_8cpp.html new file mode 100644 index 0000000..7e0217f --- /dev/null +++ b/doc/doxygen/html/reversestringfunctorsample_8cpp.html @@ -0,0 +1,156 @@ + + + + + + +Boost.Sort: I:/modular-boost/libs/sort/example/reversestringfunctorsample.cpp File Reference + + + + + + + + + + +
+
+ + + + + + +
+
Boost.Sort +
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
reversestringfunctorsample.cpp File Reference
+
+
+
#include <boost/sort/spreadsort/string_sort.hpp>
+#include <time.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <algorithm>
+#include <vector>
+#include <iostream>
+#include <fstream>
+#include <string>
+
+ + + + + + + + + +

+Classes

struct  DATA_TYPE
 
struct  greaterthan
 
struct  bracket
 
struct  getsize
 
+ + + +

+Functions

int main (int argc, const char **argv)
 
+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
int main (int argc,
const char ** argv 
)
+
+ +
+
+
+ + + + diff --git a/doc/doxygen/html/reversestringsample_8cpp.html b/doc/doxygen/html/reversestringsample_8cpp.html new file mode 100644 index 0000000..7542a87 --- /dev/null +++ b/doc/doxygen/html/reversestringsample_8cpp.html @@ -0,0 +1,163 @@ + + + + + + +Boost.Sort: I:/modular-boost/libs/sort/example/reversestringsample.cpp File Reference + + + + + + + + + + +
+
+ + + + + + +
+
Boost.Sort +
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
reversestringsample.cpp File Reference
+
+
+
#include <boost/sort/spreadsort/string_sort.hpp>
+#include <time.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <algorithm>
+#include <vector>
+#include <iostream>
+#include <fstream>
+#include <string>
+
+ + + +

+Macros

#define DATA_TYPE   string
 
+ + + +

+Functions

int main (int argc, const char **argv)
 
+

Macro Definition Documentation

+ +
+
+ + + + +
#define DATA_TYPE   string
+
+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
int main (int argc,
const char ** argv 
)
+
+ +
+
+
+ + + + diff --git a/doc/doxygen/html/rightshiftsample_8cpp.html b/doc/doxygen/html/rightshiftsample_8cpp.html new file mode 100644 index 0000000..15723ae --- /dev/null +++ b/doc/doxygen/html/rightshiftsample_8cpp.html @@ -0,0 +1,174 @@ + + + + + + +Boost.Sort: I:/modular-boost/libs/sort/example/rightshiftsample.cpp File Reference + + + + + + + + + + +
+
+ + + + + + +
+
Boost.Sort +
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
rightshiftsample.cpp File Reference
+
+
+ +

Integer sort with a rightshift functor sorting example. +More...

+
#include <boost/sort/spreadsort/spreadsort.hpp>
+#include <time.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <algorithm>
+#include <vector>
+#include <string>
+#include <fstream>
+#include <iostream>
+
+ + + +

+Classes

struct  rightshift
 
+ + + +

+Macros

#define DATA_TYPE   int
 
+ + + +

+Functions

int main (int argc, const char **argv)
 
+

Detailed Description

+

Integer sort with a rightshift functor sorting example.

+

Macro Definition Documentation

+ +
+
+ + + + +
#define DATA_TYPE   int
+
+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
int main (int argc,
const char ** argv 
)
+
+ +
+
+
+ + + + diff --git a/doc/doxygen/html/sample_8cpp.html b/doc/doxygen/html/sample_8cpp.html new file mode 100644 index 0000000..87ae129 --- /dev/null +++ b/doc/doxygen/html/sample_8cpp.html @@ -0,0 +1,164 @@ + + + + + + +Boost.Sort: I:/modular-boost/libs/sort/example/sample.cpp File Reference + + + + + + + + + + +
+
+ + + + + + +
+
Boost.Sort +
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
sample.cpp File Reference
+
+
+
#include <boost/sort/spreadsort/spreadsort.hpp>
+#include <time.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <algorithm>
+#include <vector>
+#include <string>
+#include <fstream>
+#include <sstream>
+#include <iostream>
+
+ + + +

+Macros

#define DATA_TYPE   int
 
+ + + +

+Functions

int main (int argc, const char **argv)
 
+

Macro Definition Documentation

+ +
+
+ + + + +
#define DATA_TYPE   int
+
+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
int main (int argc,
const char ** argv 
)
+
+ +
+
+
+ + + + diff --git a/doc/doxygen/html/search/all_0.html b/doc/doxygen/html/search/all_0.html new file mode 100644 index 0000000..c491fd8 --- /dev/null +++ b/doc/doxygen/html/search/all_0.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/doxygen/html/search/all_0.js b/doc/doxygen/html/search/all_0.js new file mode 100644 index 0000000..a28a9fb --- /dev/null +++ b/doc/doxygen/html/search/all_0.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['a',['a',['../struct_d_a_t_a___t_y_p_e.html#a0f17d79c6492cb604f3da783a5017b54',1,'DATA_TYPE']]], + ['alr_5fthreshold',['ALR_THRESHOLD',['../alrbreaker_8cpp.html#a3bc09656dab629cfa24aa2ab3f44a3e6',1,'ALR_THRESHOLD(): alrbreaker.cpp'],['../binaryalrbreaker_8cpp.html#a3bc09656dab629cfa24aa2ab3f44a3e6',1,'ALR_THRESHOLD(): binaryalrbreaker.cpp']]], + ['alrbreaker_2ecpp',['alrbreaker.cpp',['../alrbreaker_8cpp.html',1,'']]], + ['alreadysorted_2ecpp',['alreadysorted.cpp',['../alreadysorted_8cpp.html',1,'']]] +]; diff --git a/doc/doxygen/html/search/all_1.html b/doc/doxygen/html/search/all_1.html new file mode 100644 index 0000000..89fd5f8 --- /dev/null +++ b/doc/doxygen/html/search/all_1.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/doxygen/html/search/all_1.js b/doc/doxygen/html/search/all_1.js new file mode 100644 index 0000000..eee11c9 --- /dev/null +++ b/doc/doxygen/html/search/all_1.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['binaryalrbreaker_2ecpp',['binaryalrbreaker.cpp',['../binaryalrbreaker_8cpp.html',1,'']]], + ['birth',['birth',['../struct_d_a_t_a___t_y_p_e.html#a437ac9cab171cc3fff62212c65b3810c',1,'DATA_TYPE']]], + ['bit_5fshift',['bit_shift',['../alrbreaker_8cpp.html#a50fb2847ba87c9bd84e0c5c8a951f9de',1,'bit_shift(): alrbreaker.cpp'],['../binaryalrbreaker_8cpp.html#a50fb2847ba87c9bd84e0c5c8a951f9de',1,'bit_shift(): binaryalrbreaker.cpp']]], + ['boost',['boost',['../namespaceboost.html',1,'']]], + ['boostrandomgen_2ecpp',['boostrandomgen.cpp',['../boostrandomgen_8cpp.html',1,'']]], + ['bracket',['bracket',['../structbracket.html',1,'']]], + ['sort',['sort',['../namespaceboost_1_1sort.html',1,'boost']]] +]; diff --git a/doc/doxygen/html/search/all_10.html b/doc/doxygen/html/search/all_10.html new file mode 100644 index 0000000..2abed7b --- /dev/null +++ b/doc/doxygen/html/search/all_10.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/doxygen/html/search/all_10.js b/doc/doxygen/html/search/all_10.js new file mode 100644 index 0000000..dec109c --- /dev/null +++ b/doc/doxygen/html/search/all_10.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['wstringsample_2ecpp',['wstringsample.cpp',['../wstringsample_8cpp.html',1,'']]] +]; diff --git a/doc/doxygen/html/search/all_2.html b/doc/doxygen/html/search/all_2.html new file mode 100644 index 0000000..2c23ed4 --- /dev/null +++ b/doc/doxygen/html/search/all_2.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/doxygen/html/search/all_2.js b/doc/doxygen/html/search/all_2.js new file mode 100644 index 0000000..d88fb96 --- /dev/null +++ b/doc/doxygen/html/search/all_2.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['caseinsensitive_2ecpp',['caseinsensitive.cpp',['../caseinsensitive_8cpp.html',1,'']]], + ['cast_5ftype',['CAST_TYPE',['../double_8cpp.html#a38779bfd63dd113c9f7602664546a58c',1,'CAST_TYPE(): double.cpp'],['../floatfunctorsample_8cpp.html#a38779bfd63dd113c9f7602664546a58c',1,'CAST_TYPE(): floatfunctorsample.cpp'],['../floatsample_8cpp.html#a38779bfd63dd113c9f7602664546a58c',1,'CAST_TYPE(): floatsample.cpp'],['../shiftfloatsample_8cpp.html#a38779bfd63dd113c9f7602664546a58c',1,'CAST_TYPE(): shiftfloatsample.cpp']]], + ['charstringsample_2ecpp',['charstringsample.cpp',['../charstringsample_8cpp.html',1,'']]] +]; diff --git a/doc/doxygen/html/search/all_3.html b/doc/doxygen/html/search/all_3.html new file mode 100644 index 0000000..7ddb0cf --- /dev/null +++ b/doc/doxygen/html/search/all_3.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/doxygen/html/search/all_3.js b/doc/doxygen/html/search/all_3.js new file mode 100644 index 0000000..aa169d4 --- /dev/null +++ b/doc/doxygen/html/search/all_3.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['data',['data',['../struct_d_a_t_a___t_y_p_e.html#ae644cc131b810b459261b3426e2c459c',1,'DATA_TYPE']]], + ['data_5ftype',['DATA_TYPE',['../struct_d_a_t_a___t_y_p_e.html',1,'DATA_TYPE'],['../alrbreaker_8cpp.html#afb8c72ce35c4a1f4a2588d6573e54aa1',1,'DATA_TYPE(): alrbreaker.cpp'],['../alreadysorted_8cpp.html#afb8c72ce35c4a1f4a2588d6573e54aa1',1,'DATA_TYPE(): alreadysorted.cpp'],['../binaryalrbreaker_8cpp.html#afb8c72ce35c4a1f4a2588d6573e54aa1',1,'DATA_TYPE(): binaryalrbreaker.cpp'],['../double_8cpp.html#afb8c72ce35c4a1f4a2588d6573e54aa1',1,'DATA_TYPE(): double.cpp'],['../floatsample_8cpp.html#afb8c72ce35c4a1f4a2588d6573e54aa1',1,'DATA_TYPE(): floatsample.cpp'],['../int64_8cpp.html#afb8c72ce35c4a1f4a2588d6573e54aa1',1,'DATA_TYPE(): int64.cpp'],['../mostlysorted_8cpp.html#afb8c72ce35c4a1f4a2588d6573e54aa1',1,'DATA_TYPE(): mostlysorted.cpp'],['../parallelint_8cpp.html#afb8c72ce35c4a1f4a2588d6573e54aa1',1,'DATA_TYPE(): parallelint.cpp'],['../parallelstring_8cpp.html#afb8c72ce35c4a1f4a2588d6573e54aa1',1,'DATA_TYPE(): parallelstring.cpp'],['../reverseintsample_8cpp.html#afb8c72ce35c4a1f4a2588d6573e54aa1',1,'DATA_TYPE(): reverseintsample.cpp'],['../reversestringsample_8cpp.html#afb8c72ce35c4a1f4a2588d6573e54aa1',1,'DATA_TYPE(): reversestringsample.cpp'],['../rightshiftsample_8cpp.html#afb8c72ce35c4a1f4a2588d6573e54aa1',1,'DATA_TYPE(): rightshiftsample.cpp'],['../sample_8cpp.html#afb8c72ce35c4a1f4a2588d6573e54aa1',1,'DATA_TYPE(): sample.cpp'],['../shiftfloatsample_8cpp.html#afb8c72ce35c4a1f4a2588d6573e54aa1',1,'DATA_TYPE(): shiftfloatsample.cpp'],['../stringsample_8cpp.html#afb8c72ce35c4a1f4a2588d6573e54aa1',1,'DATA_TYPE(): stringsample.cpp'],['../wstringsample_8cpp.html#afb8c72ce35c4a1f4a2588d6573e54aa1',1,'DATA_TYPE(): wstringsample.cpp']]], + ['double_2ecpp',['double.cpp',['../double_8cpp.html',1,'']]] +]; diff --git a/doc/doxygen/html/search/all_4.html b/doc/doxygen/html/search/all_4.html new file mode 100644 index 0000000..eab9eb1 --- /dev/null +++ b/doc/doxygen/html/search/all_4.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/doxygen/html/search/all_4.js b/doc/doxygen/html/search/all_4.js new file mode 100644 index 0000000..4518b0a --- /dev/null +++ b/doc/doxygen/html/search/all_4.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['fill_5fvector',['fill_vector',['../alrbreaker_8cpp.html#a53572e34857429ae9b6d9c5f4d02b453',1,'fill_vector(vector< DATA_TYPE > &input, const DATA_TYPE base_value, unsigned remaining_bits): alrbreaker.cpp'],['../binaryalrbreaker_8cpp.html#ac9ac611850049644567c33a1b01e108a',1,'fill_vector(vector< DATA_TYPE > &input, const DATA_TYPE base_value, unsigned remaining_bits, const vector< unsigned > &indices, int index): binaryalrbreaker.cpp']]], + ['first_5fname',['first_name',['../struct_d_a_t_a___t_y_p_e.html#ad2c00885d0c6afec26d51a53ae05e403',1,'DATA_TYPE']]], + ['float_5fmem_5fcast',['float_mem_cast',['../namespaceboost_1_1sort.html#ac3a946e197df6cfc4968c6371ace319b',1,'boost::sort']]], + ['float_5fsort',['float_sort',['../namespaceboost_1_1sort.html#acbcfc139de18c5c35c0ff1744c56e211',1,'boost::sort::float_sort(RandomAccessIter first, RandomAccessIter last)'],['../namespaceboost_1_1sort.html#ad65f9ec25686acfbd2a59683cc99be12',1,'boost::sort::float_sort(RandomAccessIter first, RandomAccessIter last, Right_shift rshift)'],['../namespaceboost_1_1sort.html#a941746cb1461c5f4971c2cf1efb9301e',1,'boost::sort::float_sort(RandomAccessIter first, RandomAccessIter last, Right_shift rshift, Compare comp)']]], + ['float_5fsort_2ehpp',['float_sort.hpp',['../float__sort_8hpp.html',1,'']]], + ['floatfunctorsample_2ecpp',['floatfunctorsample.cpp',['../floatfunctorsample_8cpp.html',1,'']]], + ['floatsample_2ecpp',['floatsample.cpp',['../floatsample_8cpp.html',1,'']]] +]; diff --git a/doc/doxygen/html/search/all_5.html b/doc/doxygen/html/search/all_5.html new file mode 100644 index 0000000..4dfd1d5 --- /dev/null +++ b/doc/doxygen/html/search/all_5.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/doxygen/html/search/all_5.js b/doc/doxygen/html/search/all_5.js new file mode 100644 index 0000000..05cf7d8 --- /dev/null +++ b/doc/doxygen/html/search/all_5.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['generalizedstruct_2ecpp',['generalizedstruct.cpp',['../generalizedstruct_8cpp.html',1,'']]], + ['get_5findex',['get_index',['../binaryalrbreaker_8cpp.html#a0154ebfc03900bb5789ff9a306a480a9',1,'get_index(unsigned count): binaryalrbreaker.cpp'],['../mostlysorted_8cpp.html#a0154ebfc03900bb5789ff9a306a480a9',1,'get_index(unsigned count): mostlysorted.cpp']]], + ['getsize',['getsize',['../structgetsize.html',1,'']]], + ['greaterthan',['greaterthan',['../structgreaterthan.html',1,'']]] +]; diff --git a/doc/doxygen/html/search/all_6.html b/doc/doxygen/html/search/all_6.html new file mode 100644 index 0000000..b98d731 --- /dev/null +++ b/doc/doxygen/html/search/all_6.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/doxygen/html/search/all_6.js b/doc/doxygen/html/search/all_6.js new file mode 100644 index 0000000..24aa2dc --- /dev/null +++ b/doc/doxygen/html/search/all_6.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['int64_2ecpp',['int64.cpp',['../int64_8cpp.html',1,'']]], + ['integer_5fsort',['integer_sort',['../namespaceboost_1_1sort.html#ae6ffbcf932699589fd2b93879f209013',1,'boost::sort::integer_sort(RandomAccessIter first, RandomAccessIter last)'],['../namespaceboost_1_1sort.html#aa4ebb2541be58f9f0fecd8d7c108b817',1,'boost::sort::integer_sort(RandomAccessIter first, RandomAccessIter last, Right_shift shift, Compare comp)'],['../namespaceboost_1_1sort.html#ae50349854aad811f67a540d9b3aa4d4a',1,'boost::sort::integer_sort(RandomAccessIter first, RandomAccessIter last, Right_shift shift)']]], + ['integer_5fsort_2ehpp',['integer_sort.hpp',['../integer__sort_8hpp.html',1,'']]], + ['is_5fsorted',['is_sorted',['../parallelint_8cpp.html#af6d351e5a33a6614628ba40ab9776aa6',1,'parallelint.cpp']]] +]; diff --git a/doc/doxygen/html/search/all_7.html b/doc/doxygen/html/search/all_7.html new file mode 100644 index 0000000..ef20222 --- /dev/null +++ b/doc/doxygen/html/search/all_7.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/doxygen/html/search/all_7.js b/doc/doxygen/html/search/all_7.js new file mode 100644 index 0000000..3e5e8c8 --- /dev/null +++ b/doc/doxygen/html/search/all_7.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['key',['key',['../struct_d_a_t_a___t_y_p_e.html#aa28561fc8e223d84187ccfaf99953bae',1,'DATA_TYPE::key()'],['../struct_d_a_t_a___t_y_p_e.html#af18aa9620a8309d88c829d6af27824e3',1,'DATA_TYPE::key()']]], + ['key_5ftype',['KEY_TYPE',['../floatfunctorsample_8cpp.html#ae35c40bc2f912c11f0e36ac66cba4489',1,'floatfunctorsample.cpp']]], + ['keyplusdatasample_2ecpp',['keyplusdatasample.cpp',['../keyplusdatasample_8cpp.html',1,'']]] +]; diff --git a/doc/doxygen/html/search/all_8.html b/doc/doxygen/html/search/all_8.html new file mode 100644 index 0000000..12e5aff --- /dev/null +++ b/doc/doxygen/html/search/all_8.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/doxygen/html/search/all_8.js b/doc/doxygen/html/search/all_8.js new file mode 100644 index 0000000..fa0fe45 --- /dev/null +++ b/doc/doxygen/html/search/all_8.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['last_5fname',['last_name',['../struct_d_a_t_a___t_y_p_e.html#a12df0589010b4a79d824dbea9326ba43',1,'DATA_TYPE']]], + ['lessthan',['lessthan',['../structlessthan.html',1,'']]] +]; diff --git a/doc/doxygen/html/search/all_9.html b/doc/doxygen/html/search/all_9.html new file mode 100644 index 0000000..7e10007 --- /dev/null +++ b/doc/doxygen/html/search/all_9.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/doxygen/html/search/all_9.js b/doc/doxygen/html/search/all_9.js new file mode 100644 index 0000000..bbe7edd --- /dev/null +++ b/doc/doxygen/html/search/all_9.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['main',['main',['../alrbreaker_8cpp.html#a0fc34f49b0e6eaed5e5c3accb409b1d1',1,'main(int, const char **): alrbreaker.cpp'],['../alreadysorted_8cpp.html#a217dbf8b442f20279ea00b898af96f52',1,'main(int argc, const char **argv): alreadysorted.cpp'],['../binaryalrbreaker_8cpp.html#a0fc34f49b0e6eaed5e5c3accb409b1d1',1,'main(int, const char **): binaryalrbreaker.cpp'],['../boostrandomgen_8cpp.html#a217dbf8b442f20279ea00b898af96f52',1,'main(int argc, const char **argv): boostrandomgen.cpp'],['../caseinsensitive_8cpp.html#a217dbf8b442f20279ea00b898af96f52',1,'main(int argc, const char **argv): caseinsensitive.cpp'],['../charstringsample_8cpp.html#a217dbf8b442f20279ea00b898af96f52',1,'main(int argc, const char **argv): charstringsample.cpp'],['../double_8cpp.html#a217dbf8b442f20279ea00b898af96f52',1,'main(int argc, const char **argv): double.cpp'],['../floatfunctorsample_8cpp.html#a217dbf8b442f20279ea00b898af96f52',1,'main(int argc, const char **argv): floatfunctorsample.cpp'],['../floatsample_8cpp.html#a217dbf8b442f20279ea00b898af96f52',1,'main(int argc, const char **argv): floatsample.cpp'],['../generalizedstruct_8cpp.html#a217dbf8b442f20279ea00b898af96f52',1,'main(int argc, const char **argv): generalizedstruct.cpp'],['../int64_8cpp.html#a217dbf8b442f20279ea00b898af96f52',1,'main(int argc, const char **argv): int64.cpp'],['../keyplusdatasample_8cpp.html#a217dbf8b442f20279ea00b898af96f52',1,'main(int argc, const char **argv): keyplusdatasample.cpp'],['../mostlysorted_8cpp.html#a217dbf8b442f20279ea00b898af96f52',1,'main(int argc, const char **argv): mostlysorted.cpp'],['../parallelint_8cpp.html#a217dbf8b442f20279ea00b898af96f52',1,'main(int argc, const char **argv): parallelint.cpp'],['../parallelstring_8cpp.html#a217dbf8b442f20279ea00b898af96f52',1,'main(int argc, const char **argv): parallelstring.cpp'],['../randomgen_8cpp.html#a217dbf8b442f20279ea00b898af96f52',1,'main(int argc, const char **argv): randomgen.cpp'],['../reverseintsample_8cpp.html#a217dbf8b442f20279ea00b898af96f52',1,'main(int argc, const char **argv): reverseintsample.cpp'],['../reversestringfunctorsample_8cpp.html#a217dbf8b442f20279ea00b898af96f52',1,'main(int argc, const char **argv): reversestringfunctorsample.cpp'],['../reversestringsample_8cpp.html#a217dbf8b442f20279ea00b898af96f52',1,'main(int argc, const char **argv): reversestringsample.cpp'],['../rightshiftsample_8cpp.html#a217dbf8b442f20279ea00b898af96f52',1,'main(int argc, const char **argv): rightshiftsample.cpp'],['../sample_8cpp.html#a217dbf8b442f20279ea00b898af96f52',1,'main(int argc, const char **argv): sample.cpp'],['../shiftfloatsample_8cpp.html#a217dbf8b442f20279ea00b898af96f52',1,'main(int argc, const char **argv): shiftfloatsample.cpp'],['../stringfunctorsample_8cpp.html#a217dbf8b442f20279ea00b898af96f52',1,'main(int argc, const char **argv): stringfunctorsample.cpp'],['../stringsample_8cpp.html#a217dbf8b442f20279ea00b898af96f52',1,'main(int argc, const char **argv): stringsample.cpp'],['../wstringsample_8cpp.html#a217dbf8b442f20279ea00b898af96f52',1,'main(int argc, const char **argv): wstringsample.cpp']]], + ['max_5fcount',['max_count',['../alrbreaker_8cpp.html#a4587b2f61869f9798cb12a8ebb37387d',1,'max_count(): alrbreaker.cpp'],['../binaryalrbreaker_8cpp.html#a4587b2f61869f9798cb12a8ebb37387d',1,'max_count(): binaryalrbreaker.cpp']]], + ['mostlysorted_2ecpp',['mostlysorted.cpp',['../mostlysorted_8cpp.html',1,'']]] +]; diff --git a/doc/doxygen/html/search/all_a.html b/doc/doxygen/html/search/all_a.html new file mode 100644 index 0000000..95b4c8f --- /dev/null +++ b/doc/doxygen/html/search/all_a.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/doxygen/html/search/all_a.js b/doc/doxygen/html/search/all_a.js new file mode 100644 index 0000000..1e4a02a --- /dev/null +++ b/doc/doxygen/html/search/all_a.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['negrightshift',['negrightshift',['../structnegrightshift.html',1,'']]], + ['net_5fworth',['net_worth',['../struct_d_a_t_a___t_y_p_e.html#a2a7008d5cecd603c1aaf8ff9ed849621',1,'DATA_TYPE']]] +]; diff --git a/doc/doxygen/html/search/all_b.html b/doc/doxygen/html/search/all_b.html new file mode 100644 index 0000000..1f1beb5 --- /dev/null +++ b/doc/doxygen/html/search/all_b.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/doxygen/html/search/all_b.js b/doc/doxygen/html/search/all_b.js new file mode 100644 index 0000000..6bebdda --- /dev/null +++ b/doc/doxygen/html/search/all_b.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['operator_28_29',['operator()',['../structlessthan.html#ac8c76b8c1e456abd4cdd4b6ac3546582',1,'lessthan::operator()()'],['../structbracket.html#aa87f46d8c06444604c98138eb9a7627a',1,'bracket::operator()()'],['../structgetsize.html#a0571ba8961ed6f7f2d7003509a9ca9b7',1,'getsize::operator()()'],['../structbracket.html#aa87f46d8c06444604c98138eb9a7627a',1,'bracket::operator()()'],['../structgetsize.html#a0571ba8961ed6f7f2d7003509a9ca9b7',1,'getsize::operator()()'],['../structrightshift.html#a87a59db62b9d8c90a02df98442199598',1,'rightshift::operator()()'],['../structlessthan.html#ac8c76b8c1e456abd4cdd4b6ac3546582',1,'lessthan::operator()(const DATA_TYPE &x, const DATA_TYPE &y) const '],['../structlessthan.html#ac8c76b8c1e456abd4cdd4b6ac3546582',1,'lessthan::operator()(const DATA_TYPE &x, const DATA_TYPE &y) const '],['../structbracket.html#aa87f46d8c06444604c98138eb9a7627a',1,'bracket::operator()()'],['../structgetsize.html#a0571ba8961ed6f7f2d7003509a9ca9b7',1,'getsize::operator()()'],['../structlessthan.html#ac8c76b8c1e456abd4cdd4b6ac3546582',1,'lessthan::operator()()'],['../structrightshift.html#a3464d6de770ac9db414271587a712d12',1,'rightshift::operator()()'],['../structnegrightshift.html#ae39663d02ec765fd114b68ac0be844e2',1,'negrightshift::operator()()'],['../structgreaterthan.html#a37147ad0d885c20dc3380b366e75f7cd',1,'greaterthan::operator()()'],['../structbracket.html#aa87f46d8c06444604c98138eb9a7627a',1,'bracket::operator()()'],['../structgetsize.html#a0571ba8961ed6f7f2d7003509a9ca9b7',1,'getsize::operator()()'],['../structrightshift.html#a24f7c45689f1e4cd02ae7fb40b47afc4',1,'rightshift::operator()(DATA_TYPE x, unsigned offset)'],['../structrightshift.html#a87a59db62b9d8c90a02df98442199598',1,'rightshift::operator()(const DATA_TYPE &x, const unsigned offset) const '],['../structlessthan.html#ac8c76b8c1e456abd4cdd4b6ac3546582',1,'lessthan::operator()()'],['../structbracket.html#aa87f46d8c06444604c98138eb9a7627a',1,'bracket::operator()()'],['../structgetsize.html#a0571ba8961ed6f7f2d7003509a9ca9b7',1,'getsize::operator()()']]], + ['operator_3c',['operator<',['../struct_d_a_t_a___t_y_p_e.html#a6a24b4532734d210a7b3a9c71a3678f5',1,'DATA_TYPE']]] +]; diff --git a/doc/doxygen/html/search/all_c.html b/doc/doxygen/html/search/all_c.html new file mode 100644 index 0000000..ec9a0c8 --- /dev/null +++ b/doc/doxygen/html/search/all_c.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/doxygen/html/search/all_c.js b/doc/doxygen/html/search/all_c.js new file mode 100644 index 0000000..280a8e6 --- /dev/null +++ b/doc/doxygen/html/search/all_c.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['parallelint_2ecpp',['parallelint.cpp',['../parallelint_8cpp.html',1,'']]], + ['parallelstring_2ecpp',['parallelstring.cpp',['../parallelstring_8cpp.html',1,'']]] +]; diff --git a/doc/doxygen/html/search/all_d.html b/doc/doxygen/html/search/all_d.html new file mode 100644 index 0000000..654d198 --- /dev/null +++ b/doc/doxygen/html/search/all_d.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/doxygen/html/search/all_d.js b/doc/doxygen/html/search/all_d.js new file mode 100644 index 0000000..886fa4f --- /dev/null +++ b/doc/doxygen/html/search/all_d.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['radix_5fthreshold',['radix_threshold',['../alrbreaker_8cpp.html#afc30457e398e72300f20714123913b78',1,'radix_threshold(): alrbreaker.cpp'],['../binaryalrbreaker_8cpp.html#afc30457e398e72300f20714123913b78',1,'radix_threshold(): binaryalrbreaker.cpp']]], + ['randomgen_2ecpp',['randomgen.cpp',['../randomgen_8cpp.html',1,'']]], + ['reverse_5fstring_5fsort',['reverse_string_sort',['../namespaceboost_1_1sort.html#a4ad4785d90f47d51ff1d2fac8c21bb48',1,'boost::sort::reverse_string_sort(RandomAccessIter first, RandomAccessIter last, Compare comp, Unsigned_char_type unused)'],['../namespaceboost_1_1sort.html#afd4938835fd03aab9c42bd0653e5dbe5',1,'boost::sort::reverse_string_sort(RandomAccessIter first, RandomAccessIter last, Compare comp)'],['../namespaceboost_1_1sort.html#a7940f1b2a7746c083a12a4e26077096b',1,'boost::sort::reverse_string_sort(RandomAccessIter first, RandomAccessIter last, Get_char getchar, Get_length length, Compare comp)']]], + ['reverseintsample_2ecpp',['reverseintsample.cpp',['../reverseintsample_8cpp.html',1,'']]], + ['reversestringfunctorsample_2ecpp',['reversestringfunctorsample.cpp',['../reversestringfunctorsample_8cpp.html',1,'']]], + ['reversestringsample_2ecpp',['reversestringsample.cpp',['../reversestringsample_8cpp.html',1,'']]], + ['rightshift',['rightshift',['../structrightshift.html',1,'']]], + ['rightshiftsample_2ecpp',['rightshiftsample.cpp',['../rightshiftsample_8cpp.html',1,'']]] +]; diff --git a/doc/doxygen/html/search/all_e.html b/doc/doxygen/html/search/all_e.html new file mode 100644 index 0000000..812aced --- /dev/null +++ b/doc/doxygen/html/search/all_e.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/doxygen/html/search/all_e.js b/doc/doxygen/html/search/all_e.js new file mode 100644 index 0000000..ca59b6e --- /dev/null +++ b/doc/doxygen/html/search/all_e.js @@ -0,0 +1,13 @@ +var searchData= +[ + ['sample_2ecpp',['sample.cpp',['../sample_8cpp.html',1,'']]], + ['shiftfloatsample_2ecpp',['shiftfloatsample.cpp',['../shiftfloatsample_8cpp.html',1,'']]], + ['sort_2ehpp',['sort.hpp',['../sort_8hpp.html',1,'']]], + ['sort_5floop',['sort_loop',['../parallelint_8cpp.html#acbd0dadb301334e73befdafddd98b044',1,'parallelint.cpp']]], + ['spreadsort',['spreadsort',['../namespaceboost_1_1sort.html#a4bc25fdacd4c948f631f08a3f9aa38eb',1,'boost::sort::spreadsort(RandomAccessIter first, RandomAccessIter last)'],['../namespaceboost_1_1sort.html#a94a736da091bd5d3b525818399f1b272',1,'boost::sort::spreadsort(RandomAccessIter first, RandomAccessIter last)'],['../namespaceboost_1_1sort.html#aafdea66d9b4a7faef5604b3079b525fa',1,'boost::sort::spreadsort(RandomAccessIter first, RandomAccessIter last)']]], + ['spreadsort_2ehpp',['spreadsort.hpp',['../spreadsort_8hpp.html',1,'']]], + ['string_5fsort',['string_sort',['../namespaceboost_1_1sort.html#a950a2dbbe75f048a0b343dbf7c532dc0',1,'boost::sort::string_sort(RandomAccessIter first, RandomAccessIter last, Unsigned_char_type unused)'],['../namespaceboost_1_1sort.html#a6acd5fc94521b0a5cb47dc491b6d862f',1,'boost::sort::string_sort(RandomAccessIter first, RandomAccessIter last)'],['../namespaceboost_1_1sort.html#a5143ec4f58cfe13eca2a0d6b6f6a6680',1,'boost::sort::string_sort(RandomAccessIter first, RandomAccessIter last, Get_char getchar, Get_length length)'],['../namespaceboost_1_1sort.html#a82c4c0d7ba9873ecce7c674631dceae2',1,'boost::sort::string_sort(RandomAccessIter first, RandomAccessIter last, Get_char getchar, Get_length length, Compare comp)']]], + ['string_5fsort_2ehpp',['string_sort.hpp',['../string__sort_8hpp.html',1,'']]], + ['stringfunctorsample_2ecpp',['stringfunctorsample.cpp',['../stringfunctorsample_8cpp.html',1,'']]], + ['stringsample_2ecpp',['stringsample.cpp',['../stringsample_8cpp.html',1,'']]] +]; diff --git a/doc/doxygen/html/search/all_f.html b/doc/doxygen/html/search/all_f.html new file mode 100644 index 0000000..c395a47 --- /dev/null +++ b/doc/doxygen/html/search/all_f.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/doxygen/html/search/all_f.js b/doc/doxygen/html/search/all_f.js new file mode 100644 index 0000000..32233d9 --- /dev/null +++ b/doc/doxygen/html/search/all_f.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['top_5fsplits',['top_splits',['../alrbreaker_8cpp.html#a60c4ea1dd4d297e0d2e395375e0e716c',1,'alrbreaker.cpp']]], + ['typed_5fone',['typed_one',['../alrbreaker_8cpp.html#a8b984673f3b3e097d3f37508923452fa',1,'typed_one(): alrbreaker.cpp'],['../binaryalrbreaker_8cpp.html#a8b984673f3b3e097d3f37508923452fa',1,'typed_one(): binaryalrbreaker.cpp']]] +]; diff --git a/doc/doxygen/html/search/classes_0.html b/doc/doxygen/html/search/classes_0.html new file mode 100644 index 0000000..8888fa8 --- /dev/null +++ b/doc/doxygen/html/search/classes_0.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/doxygen/html/search/classes_0.js b/doc/doxygen/html/search/classes_0.js new file mode 100644 index 0000000..47594dc --- /dev/null +++ b/doc/doxygen/html/search/classes_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['bracket',['bracket',['../structbracket.html',1,'']]] +]; diff --git a/doc/doxygen/html/search/classes_1.html b/doc/doxygen/html/search/classes_1.html new file mode 100644 index 0000000..a402bbe --- /dev/null +++ b/doc/doxygen/html/search/classes_1.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/doxygen/html/search/classes_1.js b/doc/doxygen/html/search/classes_1.js new file mode 100644 index 0000000..381187a --- /dev/null +++ b/doc/doxygen/html/search/classes_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['data_5ftype',['DATA_TYPE',['../struct_d_a_t_a___t_y_p_e.html',1,'']]] +]; diff --git a/doc/doxygen/html/search/classes_2.html b/doc/doxygen/html/search/classes_2.html new file mode 100644 index 0000000..003214b --- /dev/null +++ b/doc/doxygen/html/search/classes_2.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/doxygen/html/search/classes_2.js b/doc/doxygen/html/search/classes_2.js new file mode 100644 index 0000000..94222af --- /dev/null +++ b/doc/doxygen/html/search/classes_2.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['getsize',['getsize',['../structgetsize.html',1,'']]], + ['greaterthan',['greaterthan',['../structgreaterthan.html',1,'']]] +]; diff --git a/doc/doxygen/html/search/classes_3.html b/doc/doxygen/html/search/classes_3.html new file mode 100644 index 0000000..fadcfc8 --- /dev/null +++ b/doc/doxygen/html/search/classes_3.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/doxygen/html/search/classes_3.js b/doc/doxygen/html/search/classes_3.js new file mode 100644 index 0000000..6bfb39f --- /dev/null +++ b/doc/doxygen/html/search/classes_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['lessthan',['lessthan',['../structlessthan.html',1,'']]] +]; diff --git a/doc/doxygen/html/search/classes_4.html b/doc/doxygen/html/search/classes_4.html new file mode 100644 index 0000000..6056b20 --- /dev/null +++ b/doc/doxygen/html/search/classes_4.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/doxygen/html/search/classes_4.js b/doc/doxygen/html/search/classes_4.js new file mode 100644 index 0000000..3d2be8f --- /dev/null +++ b/doc/doxygen/html/search/classes_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['negrightshift',['negrightshift',['../structnegrightshift.html',1,'']]] +]; diff --git a/doc/doxygen/html/search/classes_5.html b/doc/doxygen/html/search/classes_5.html new file mode 100644 index 0000000..ca7c947 --- /dev/null +++ b/doc/doxygen/html/search/classes_5.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/doxygen/html/search/classes_5.js b/doc/doxygen/html/search/classes_5.js new file mode 100644 index 0000000..ef452d6 --- /dev/null +++ b/doc/doxygen/html/search/classes_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['rightshift',['rightshift',['../structrightshift.html',1,'']]] +]; diff --git a/doc/doxygen/html/search/close.png b/doc/doxygen/html/search/close.png new file mode 100644 index 0000000000000000000000000000000000000000..9342d3dfeea7b7c4ee610987e717804b5a42ceb9 GIT binary patch literal 273 zcmeAS@N?(olHy`uVBq!ia0y~yVBiK}4mJh`hLvl|)fgBUZg{#lhDb=32JRJdbKton zA<88pBIW$rbWijSKh6tCh9xi%p+@`?Q+n!RFfgXE*8G*v9+3QmISnNMVo7 z`H9O`PI%UrIqQr?-;QWty6>_6MEwdy;?;}uqfAPBP=a-GbCOi*zGvsM5p1Q(t@|@$3uW)T!;1YH0m_+$m z$Gs|^Q+^9Y21Z{Jd;3e_PX6`M`PrAX90e9+N`*&ixX;u#IA8tS@w}AI>(}g>b5kXA dR_DdqvvXBW;1hH`#K6G7;OXk;vd$@?2>^;gZ`%L> literal 0 HcmV?d00001 diff --git a/doc/doxygen/html/search/defines_0.html b/doc/doxygen/html/search/defines_0.html new file mode 100644 index 0000000..27eaf8c --- /dev/null +++ b/doc/doxygen/html/search/defines_0.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/doxygen/html/search/defines_0.js b/doc/doxygen/html/search/defines_0.js new file mode 100644 index 0000000..8a9168f --- /dev/null +++ b/doc/doxygen/html/search/defines_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['alr_5fthreshold',['ALR_THRESHOLD',['../alrbreaker_8cpp.html#a3bc09656dab629cfa24aa2ab3f44a3e6',1,'ALR_THRESHOLD(): alrbreaker.cpp'],['../binaryalrbreaker_8cpp.html#a3bc09656dab629cfa24aa2ab3f44a3e6',1,'ALR_THRESHOLD(): binaryalrbreaker.cpp']]] +]; diff --git a/doc/doxygen/html/search/defines_1.html b/doc/doxygen/html/search/defines_1.html new file mode 100644 index 0000000..b0d10dd --- /dev/null +++ b/doc/doxygen/html/search/defines_1.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/doxygen/html/search/defines_1.js b/doc/doxygen/html/search/defines_1.js new file mode 100644 index 0000000..aa1431f --- /dev/null +++ b/doc/doxygen/html/search/defines_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['cast_5ftype',['CAST_TYPE',['../double_8cpp.html#a38779bfd63dd113c9f7602664546a58c',1,'CAST_TYPE(): double.cpp'],['../floatfunctorsample_8cpp.html#a38779bfd63dd113c9f7602664546a58c',1,'CAST_TYPE(): floatfunctorsample.cpp'],['../floatsample_8cpp.html#a38779bfd63dd113c9f7602664546a58c',1,'CAST_TYPE(): floatsample.cpp'],['../shiftfloatsample_8cpp.html#a38779bfd63dd113c9f7602664546a58c',1,'CAST_TYPE(): shiftfloatsample.cpp']]] +]; diff --git a/doc/doxygen/html/search/defines_2.html b/doc/doxygen/html/search/defines_2.html new file mode 100644 index 0000000..89e5956 --- /dev/null +++ b/doc/doxygen/html/search/defines_2.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/doxygen/html/search/defines_2.js b/doc/doxygen/html/search/defines_2.js new file mode 100644 index 0000000..3406fdc --- /dev/null +++ b/doc/doxygen/html/search/defines_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['data_5ftype',['DATA_TYPE',['../alrbreaker_8cpp.html#afb8c72ce35c4a1f4a2588d6573e54aa1',1,'DATA_TYPE(): alrbreaker.cpp'],['../alreadysorted_8cpp.html#afb8c72ce35c4a1f4a2588d6573e54aa1',1,'DATA_TYPE(): alreadysorted.cpp'],['../binaryalrbreaker_8cpp.html#afb8c72ce35c4a1f4a2588d6573e54aa1',1,'DATA_TYPE(): binaryalrbreaker.cpp'],['../double_8cpp.html#afb8c72ce35c4a1f4a2588d6573e54aa1',1,'DATA_TYPE(): double.cpp'],['../floatsample_8cpp.html#afb8c72ce35c4a1f4a2588d6573e54aa1',1,'DATA_TYPE(): floatsample.cpp'],['../int64_8cpp.html#afb8c72ce35c4a1f4a2588d6573e54aa1',1,'DATA_TYPE(): int64.cpp'],['../mostlysorted_8cpp.html#afb8c72ce35c4a1f4a2588d6573e54aa1',1,'DATA_TYPE(): mostlysorted.cpp'],['../parallelint_8cpp.html#afb8c72ce35c4a1f4a2588d6573e54aa1',1,'DATA_TYPE(): parallelint.cpp'],['../parallelstring_8cpp.html#afb8c72ce35c4a1f4a2588d6573e54aa1',1,'DATA_TYPE(): parallelstring.cpp'],['../reverseintsample_8cpp.html#afb8c72ce35c4a1f4a2588d6573e54aa1',1,'DATA_TYPE(): reverseintsample.cpp'],['../reversestringsample_8cpp.html#afb8c72ce35c4a1f4a2588d6573e54aa1',1,'DATA_TYPE(): reversestringsample.cpp'],['../rightshiftsample_8cpp.html#afb8c72ce35c4a1f4a2588d6573e54aa1',1,'DATA_TYPE(): rightshiftsample.cpp'],['../sample_8cpp.html#afb8c72ce35c4a1f4a2588d6573e54aa1',1,'DATA_TYPE(): sample.cpp'],['../shiftfloatsample_8cpp.html#afb8c72ce35c4a1f4a2588d6573e54aa1',1,'DATA_TYPE(): shiftfloatsample.cpp'],['../stringsample_8cpp.html#afb8c72ce35c4a1f4a2588d6573e54aa1',1,'DATA_TYPE(): stringsample.cpp'],['../wstringsample_8cpp.html#afb8c72ce35c4a1f4a2588d6573e54aa1',1,'DATA_TYPE(): wstringsample.cpp']]] +]; diff --git a/doc/doxygen/html/search/defines_3.html b/doc/doxygen/html/search/defines_3.html new file mode 100644 index 0000000..0d686ae --- /dev/null +++ b/doc/doxygen/html/search/defines_3.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/doxygen/html/search/defines_3.js b/doc/doxygen/html/search/defines_3.js new file mode 100644 index 0000000..6c2674c --- /dev/null +++ b/doc/doxygen/html/search/defines_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['key_5ftype',['KEY_TYPE',['../floatfunctorsample_8cpp.html#ae35c40bc2f912c11f0e36ac66cba4489',1,'floatfunctorsample.cpp']]] +]; diff --git a/doc/doxygen/html/search/enumvalues_0.html b/doc/doxygen/html/search/enumvalues_0.html new file mode 100644 index 0000000..a1556a6 --- /dev/null +++ b/doc/doxygen/html/search/enumvalues_0.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/doxygen/html/search/enumvalues_0.js b/doc/doxygen/html/search/enumvalues_0.js new file mode 100644 index 0000000..92c42f0 --- /dev/null +++ b/doc/doxygen/html/search/enumvalues_0.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['float_5flog_5ffinishing_5fcount',['float_log_finishing_count',['../namespaceboost_1_1sort_1_1detail.html#a7bbd2027f75936442318063f34953907a498b754f6198248703d3907562207d28',1,'boost::sort::detail']]], + ['float_5flog_5fmean_5fbin_5fsize',['float_log_mean_bin_size',['../namespaceboost_1_1sort_1_1detail.html#a7bbd2027f75936442318063f34953907a0631b5d90d6ff0f1ff5370c616047a33',1,'boost::sort::detail']]], + ['float_5flog_5fmin_5fsplit_5fcount',['float_log_min_split_count',['../namespaceboost_1_1sort_1_1detail.html#a7bbd2027f75936442318063f34953907aa0ee6e920e1d3d09e148ce00a985340c',1,'boost::sort::detail']]] +]; diff --git a/doc/doxygen/html/search/enumvalues_1.html b/doc/doxygen/html/search/enumvalues_1.html new file mode 100644 index 0000000..76abc45 --- /dev/null +++ b/doc/doxygen/html/search/enumvalues_1.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/doxygen/html/search/enumvalues_1.js b/doc/doxygen/html/search/enumvalues_1.js new file mode 100644 index 0000000..cf66d0c --- /dev/null +++ b/doc/doxygen/html/search/enumvalues_1.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['int_5flog_5ffinishing_5fcount',['int_log_finishing_count',['../namespaceboost_1_1sort_1_1detail.html#a7bbd2027f75936442318063f34953907ae0c3ec0c116b92c92015245fd5024a27',1,'boost::sort::detail']]], + ['int_5flog_5fmean_5fbin_5fsize',['int_log_mean_bin_size',['../namespaceboost_1_1sort_1_1detail.html#a7bbd2027f75936442318063f34953907a2e171c91f6c9e1d82643e4b35a4c65de',1,'boost::sort::detail']]], + ['int_5flog_5fmin_5fsplit_5fcount',['int_log_min_split_count',['../namespaceboost_1_1sort_1_1detail.html#a7bbd2027f75936442318063f34953907a53383c14d73d50ed8faaa695d820a5bf',1,'boost::sort::detail']]] +]; diff --git a/doc/doxygen/html/search/enumvalues_2.html b/doc/doxygen/html/search/enumvalues_2.html new file mode 100644 index 0000000..c0bcb1f --- /dev/null +++ b/doc/doxygen/html/search/enumvalues_2.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/doxygen/html/search/enumvalues_2.js b/doc/doxygen/html/search/enumvalues_2.js new file mode 100644 index 0000000..2a7f0e8 --- /dev/null +++ b/doc/doxygen/html/search/enumvalues_2.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['max_5ffinishing_5fsplits',['max_finishing_splits',['../namespaceboost_1_1sort_1_1detail.html#a7bbd2027f75936442318063f34953907acfdc43b3d7aa6df69b0f6982918056c7',1,'boost::sort::detail']]], + ['max_5fsplits',['max_splits',['../namespaceboost_1_1sort_1_1detail.html#a7bbd2027f75936442318063f34953907a17b216febe1b5e8212a80231592fc9d9',1,'boost::sort::detail']]], + ['min_5fsort_5fsize',['min_sort_size',['../namespaceboost_1_1sort_1_1detail.html#a7bbd2027f75936442318063f34953907aff33660c3058d4e081b7d4353aae659d',1,'boost::sort::detail']]] +]; diff --git a/doc/doxygen/html/search/files_0.html b/doc/doxygen/html/search/files_0.html new file mode 100644 index 0000000..0457853 --- /dev/null +++ b/doc/doxygen/html/search/files_0.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/doxygen/html/search/files_0.js b/doc/doxygen/html/search/files_0.js new file mode 100644 index 0000000..b3c5c3c --- /dev/null +++ b/doc/doxygen/html/search/files_0.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['alrbreaker_2ecpp',['alrbreaker.cpp',['../alrbreaker_8cpp.html',1,'']]], + ['alreadysorted_2ecpp',['alreadysorted.cpp',['../alreadysorted_8cpp.html',1,'']]] +]; diff --git a/doc/doxygen/html/search/files_1.html b/doc/doxygen/html/search/files_1.html new file mode 100644 index 0000000..ce0a3a7 --- /dev/null +++ b/doc/doxygen/html/search/files_1.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/doxygen/html/search/files_1.js b/doc/doxygen/html/search/files_1.js new file mode 100644 index 0000000..3f6bc7c --- /dev/null +++ b/doc/doxygen/html/search/files_1.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['binaryalrbreaker_2ecpp',['binaryalrbreaker.cpp',['../binaryalrbreaker_8cpp.html',1,'']]], + ['boostrandomgen_2ecpp',['boostrandomgen.cpp',['../boostrandomgen_8cpp.html',1,'']]] +]; diff --git a/doc/doxygen/html/search/files_2.html b/doc/doxygen/html/search/files_2.html new file mode 100644 index 0000000..d188d98 --- /dev/null +++ b/doc/doxygen/html/search/files_2.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/doxygen/html/search/files_2.js b/doc/doxygen/html/search/files_2.js new file mode 100644 index 0000000..6d5e1bd --- /dev/null +++ b/doc/doxygen/html/search/files_2.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['caseinsensitive_2ecpp',['caseinsensitive.cpp',['../caseinsensitive_8cpp.html',1,'']]], + ['charstringsample_2ecpp',['charstringsample.cpp',['../charstringsample_8cpp.html',1,'']]] +]; diff --git a/doc/doxygen/html/search/files_3.html b/doc/doxygen/html/search/files_3.html new file mode 100644 index 0000000..7fa556e --- /dev/null +++ b/doc/doxygen/html/search/files_3.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/doxygen/html/search/files_3.js b/doc/doxygen/html/search/files_3.js new file mode 100644 index 0000000..00f19c7 --- /dev/null +++ b/doc/doxygen/html/search/files_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['double_2ecpp',['double.cpp',['../double_8cpp.html',1,'']]] +]; diff --git a/doc/doxygen/html/search/files_4.html b/doc/doxygen/html/search/files_4.html new file mode 100644 index 0000000..192383b --- /dev/null +++ b/doc/doxygen/html/search/files_4.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/doxygen/html/search/files_4.js b/doc/doxygen/html/search/files_4.js new file mode 100644 index 0000000..89fd331 --- /dev/null +++ b/doc/doxygen/html/search/files_4.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['float_5fsort_2ehpp',['float_sort.hpp',['../float__sort_8hpp.html',1,'']]], + ['floatfunctorsample_2ecpp',['floatfunctorsample.cpp',['../floatfunctorsample_8cpp.html',1,'']]], + ['floatsample_2ecpp',['floatsample.cpp',['../floatsample_8cpp.html',1,'']]] +]; diff --git a/doc/doxygen/html/search/files_5.html b/doc/doxygen/html/search/files_5.html new file mode 100644 index 0000000..af3aaba --- /dev/null +++ b/doc/doxygen/html/search/files_5.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/doxygen/html/search/files_5.js b/doc/doxygen/html/search/files_5.js new file mode 100644 index 0000000..b4fa823 --- /dev/null +++ b/doc/doxygen/html/search/files_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['generalizedstruct_2ecpp',['generalizedstruct.cpp',['../generalizedstruct_8cpp.html',1,'']]] +]; diff --git a/doc/doxygen/html/search/files_6.html b/doc/doxygen/html/search/files_6.html new file mode 100644 index 0000000..4f7e395 --- /dev/null +++ b/doc/doxygen/html/search/files_6.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/doxygen/html/search/files_6.js b/doc/doxygen/html/search/files_6.js new file mode 100644 index 0000000..c8517af --- /dev/null +++ b/doc/doxygen/html/search/files_6.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['int64_2ecpp',['int64.cpp',['../int64_8cpp.html',1,'']]], + ['integer_5fsort_2ehpp',['integer_sort.hpp',['../integer__sort_8hpp.html',1,'']]] +]; diff --git a/doc/doxygen/html/search/files_7.html b/doc/doxygen/html/search/files_7.html new file mode 100644 index 0000000..65578c2 --- /dev/null +++ b/doc/doxygen/html/search/files_7.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/doxygen/html/search/files_7.js b/doc/doxygen/html/search/files_7.js new file mode 100644 index 0000000..673edec --- /dev/null +++ b/doc/doxygen/html/search/files_7.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['keyplusdatasample_2ecpp',['keyplusdatasample.cpp',['../keyplusdatasample_8cpp.html',1,'']]] +]; diff --git a/doc/doxygen/html/search/files_8.html b/doc/doxygen/html/search/files_8.html new file mode 100644 index 0000000..105d31d --- /dev/null +++ b/doc/doxygen/html/search/files_8.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/doxygen/html/search/files_8.js b/doc/doxygen/html/search/files_8.js new file mode 100644 index 0000000..59db002 --- /dev/null +++ b/doc/doxygen/html/search/files_8.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['mostlysorted_2ecpp',['mostlysorted.cpp',['../mostlysorted_8cpp.html',1,'']]] +]; diff --git a/doc/doxygen/html/search/files_9.html b/doc/doxygen/html/search/files_9.html new file mode 100644 index 0000000..4233bc4 --- /dev/null +++ b/doc/doxygen/html/search/files_9.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/doxygen/html/search/files_9.js b/doc/doxygen/html/search/files_9.js new file mode 100644 index 0000000..280a8e6 --- /dev/null +++ b/doc/doxygen/html/search/files_9.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['parallelint_2ecpp',['parallelint.cpp',['../parallelint_8cpp.html',1,'']]], + ['parallelstring_2ecpp',['parallelstring.cpp',['../parallelstring_8cpp.html',1,'']]] +]; diff --git a/doc/doxygen/html/search/files_a.html b/doc/doxygen/html/search/files_a.html new file mode 100644 index 0000000..7af4acc --- /dev/null +++ b/doc/doxygen/html/search/files_a.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/doxygen/html/search/files_a.js b/doc/doxygen/html/search/files_a.js new file mode 100644 index 0000000..2272642 --- /dev/null +++ b/doc/doxygen/html/search/files_a.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['randomgen_2ecpp',['randomgen.cpp',['../randomgen_8cpp.html',1,'']]], + ['reverseintsample_2ecpp',['reverseintsample.cpp',['../reverseintsample_8cpp.html',1,'']]], + ['reversestringfunctorsample_2ecpp',['reversestringfunctorsample.cpp',['../reversestringfunctorsample_8cpp.html',1,'']]], + ['reversestringsample_2ecpp',['reversestringsample.cpp',['../reversestringsample_8cpp.html',1,'']]], + ['rightshiftsample_2ecpp',['rightshiftsample.cpp',['../rightshiftsample_8cpp.html',1,'']]] +]; diff --git a/doc/doxygen/html/search/files_b.html b/doc/doxygen/html/search/files_b.html new file mode 100644 index 0000000..135f820 --- /dev/null +++ b/doc/doxygen/html/search/files_b.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/doxygen/html/search/files_b.js b/doc/doxygen/html/search/files_b.js new file mode 100644 index 0000000..9358e0e --- /dev/null +++ b/doc/doxygen/html/search/files_b.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['sample_2ecpp',['sample.cpp',['../sample_8cpp.html',1,'']]], + ['shiftfloatsample_2ecpp',['shiftfloatsample.cpp',['../shiftfloatsample_8cpp.html',1,'']]], + ['sort_2ehpp',['sort.hpp',['../sort_8hpp.html',1,'']]], + ['spreadsort_2ehpp',['spreadsort.hpp',['../spreadsort_8hpp.html',1,'']]], + ['string_5fsort_2ehpp',['string_sort.hpp',['../string__sort_8hpp.html',1,'']]], + ['stringfunctorsample_2ecpp',['stringfunctorsample.cpp',['../stringfunctorsample_8cpp.html',1,'']]], + ['stringsample_2ecpp',['stringsample.cpp',['../stringsample_8cpp.html',1,'']]] +]; diff --git a/doc/doxygen/html/search/files_c.html b/doc/doxygen/html/search/files_c.html new file mode 100644 index 0000000..09a0228 --- /dev/null +++ b/doc/doxygen/html/search/files_c.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/doxygen/html/search/files_c.js b/doc/doxygen/html/search/files_c.js new file mode 100644 index 0000000..dec109c --- /dev/null +++ b/doc/doxygen/html/search/files_c.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['wstringsample_2ecpp',['wstringsample.cpp',['../wstringsample_8cpp.html',1,'']]] +]; diff --git a/doc/doxygen/html/search/functions_0.html b/doc/doxygen/html/search/functions_0.html new file mode 100644 index 0000000..88c8a26 --- /dev/null +++ b/doc/doxygen/html/search/functions_0.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/doxygen/html/search/functions_0.js b/doc/doxygen/html/search/functions_0.js new file mode 100644 index 0000000..fe61c83 --- /dev/null +++ b/doc/doxygen/html/search/functions_0.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['fill_5fvector',['fill_vector',['../alrbreaker_8cpp.html#a53572e34857429ae9b6d9c5f4d02b453',1,'fill_vector(vector< DATA_TYPE > &input, const DATA_TYPE base_value, unsigned remaining_bits): alrbreaker.cpp'],['../binaryalrbreaker_8cpp.html#ac9ac611850049644567c33a1b01e108a',1,'fill_vector(vector< DATA_TYPE > &input, const DATA_TYPE base_value, unsigned remaining_bits, const vector< unsigned > &indices, int index): binaryalrbreaker.cpp']]], + ['float_5fmem_5fcast',['float_mem_cast',['../namespaceboost_1_1sort.html#ac3a946e197df6cfc4968c6371ace319b',1,'boost::sort']]], + ['float_5fsort',['float_sort',['../namespaceboost_1_1sort.html#acbcfc139de18c5c35c0ff1744c56e211',1,'boost::sort::float_sort(RandomAccessIter first, RandomAccessIter last)'],['../namespaceboost_1_1sort.html#ad65f9ec25686acfbd2a59683cc99be12',1,'boost::sort::float_sort(RandomAccessIter first, RandomAccessIter last, Right_shift rshift)'],['../namespaceboost_1_1sort.html#a941746cb1461c5f4971c2cf1efb9301e',1,'boost::sort::float_sort(RandomAccessIter first, RandomAccessIter last, Right_shift rshift, Compare comp)']]] +]; diff --git a/doc/doxygen/html/search/functions_1.html b/doc/doxygen/html/search/functions_1.html new file mode 100644 index 0000000..215c1bf --- /dev/null +++ b/doc/doxygen/html/search/functions_1.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/doxygen/html/search/functions_1.js b/doc/doxygen/html/search/functions_1.js new file mode 100644 index 0000000..309fbdf --- /dev/null +++ b/doc/doxygen/html/search/functions_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['get_5findex',['get_index',['../binaryalrbreaker_8cpp.html#a0154ebfc03900bb5789ff9a306a480a9',1,'get_index(unsigned count): binaryalrbreaker.cpp'],['../mostlysorted_8cpp.html#a0154ebfc03900bb5789ff9a306a480a9',1,'get_index(unsigned count): mostlysorted.cpp']]] +]; diff --git a/doc/doxygen/html/search/functions_2.html b/doc/doxygen/html/search/functions_2.html new file mode 100644 index 0000000..f17abff --- /dev/null +++ b/doc/doxygen/html/search/functions_2.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/doxygen/html/search/functions_2.js b/doc/doxygen/html/search/functions_2.js new file mode 100644 index 0000000..6448e7b --- /dev/null +++ b/doc/doxygen/html/search/functions_2.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['integer_5fsort',['integer_sort',['../namespaceboost_1_1sort.html#ae6ffbcf932699589fd2b93879f209013',1,'boost::sort::integer_sort(RandomAccessIter first, RandomAccessIter last)'],['../namespaceboost_1_1sort.html#aa4ebb2541be58f9f0fecd8d7c108b817',1,'boost::sort::integer_sort(RandomAccessIter first, RandomAccessIter last, Right_shift shift, Compare comp)'],['../namespaceboost_1_1sort.html#ae50349854aad811f67a540d9b3aa4d4a',1,'boost::sort::integer_sort(RandomAccessIter first, RandomAccessIter last, Right_shift shift)']]], + ['is_5fsorted',['is_sorted',['../parallelint_8cpp.html#af6d351e5a33a6614628ba40ab9776aa6',1,'parallelint.cpp']]] +]; diff --git a/doc/doxygen/html/search/functions_3.html b/doc/doxygen/html/search/functions_3.html new file mode 100644 index 0000000..8a4bbe1 --- /dev/null +++ b/doc/doxygen/html/search/functions_3.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/doxygen/html/search/functions_3.js b/doc/doxygen/html/search/functions_3.js new file mode 100644 index 0000000..d137070 --- /dev/null +++ b/doc/doxygen/html/search/functions_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['main',['main',['../alrbreaker_8cpp.html#a0fc34f49b0e6eaed5e5c3accb409b1d1',1,'main(int, const char **): alrbreaker.cpp'],['../alreadysorted_8cpp.html#a217dbf8b442f20279ea00b898af96f52',1,'main(int argc, const char **argv): alreadysorted.cpp'],['../binaryalrbreaker_8cpp.html#a0fc34f49b0e6eaed5e5c3accb409b1d1',1,'main(int, const char **): binaryalrbreaker.cpp'],['../boostrandomgen_8cpp.html#a217dbf8b442f20279ea00b898af96f52',1,'main(int argc, const char **argv): boostrandomgen.cpp'],['../caseinsensitive_8cpp.html#a217dbf8b442f20279ea00b898af96f52',1,'main(int argc, const char **argv): caseinsensitive.cpp'],['../charstringsample_8cpp.html#a217dbf8b442f20279ea00b898af96f52',1,'main(int argc, const char **argv): charstringsample.cpp'],['../double_8cpp.html#a217dbf8b442f20279ea00b898af96f52',1,'main(int argc, const char **argv): double.cpp'],['../floatfunctorsample_8cpp.html#a217dbf8b442f20279ea00b898af96f52',1,'main(int argc, const char **argv): floatfunctorsample.cpp'],['../floatsample_8cpp.html#a217dbf8b442f20279ea00b898af96f52',1,'main(int argc, const char **argv): floatsample.cpp'],['../generalizedstruct_8cpp.html#a217dbf8b442f20279ea00b898af96f52',1,'main(int argc, const char **argv): generalizedstruct.cpp'],['../int64_8cpp.html#a217dbf8b442f20279ea00b898af96f52',1,'main(int argc, const char **argv): int64.cpp'],['../keyplusdatasample_8cpp.html#a217dbf8b442f20279ea00b898af96f52',1,'main(int argc, const char **argv): keyplusdatasample.cpp'],['../mostlysorted_8cpp.html#a217dbf8b442f20279ea00b898af96f52',1,'main(int argc, const char **argv): mostlysorted.cpp'],['../parallelint_8cpp.html#a217dbf8b442f20279ea00b898af96f52',1,'main(int argc, const char **argv): parallelint.cpp'],['../parallelstring_8cpp.html#a217dbf8b442f20279ea00b898af96f52',1,'main(int argc, const char **argv): parallelstring.cpp'],['../randomgen_8cpp.html#a217dbf8b442f20279ea00b898af96f52',1,'main(int argc, const char **argv): randomgen.cpp'],['../reverseintsample_8cpp.html#a217dbf8b442f20279ea00b898af96f52',1,'main(int argc, const char **argv): reverseintsample.cpp'],['../reversestringfunctorsample_8cpp.html#a217dbf8b442f20279ea00b898af96f52',1,'main(int argc, const char **argv): reversestringfunctorsample.cpp'],['../reversestringsample_8cpp.html#a217dbf8b442f20279ea00b898af96f52',1,'main(int argc, const char **argv): reversestringsample.cpp'],['../rightshiftsample_8cpp.html#a217dbf8b442f20279ea00b898af96f52',1,'main(int argc, const char **argv): rightshiftsample.cpp'],['../sample_8cpp.html#a217dbf8b442f20279ea00b898af96f52',1,'main(int argc, const char **argv): sample.cpp'],['../shiftfloatsample_8cpp.html#a217dbf8b442f20279ea00b898af96f52',1,'main(int argc, const char **argv): shiftfloatsample.cpp'],['../stringfunctorsample_8cpp.html#a217dbf8b442f20279ea00b898af96f52',1,'main(int argc, const char **argv): stringfunctorsample.cpp'],['../stringsample_8cpp.html#a217dbf8b442f20279ea00b898af96f52',1,'main(int argc, const char **argv): stringsample.cpp'],['../wstringsample_8cpp.html#a217dbf8b442f20279ea00b898af96f52',1,'main(int argc, const char **argv): wstringsample.cpp']]] +]; diff --git a/doc/doxygen/html/search/functions_4.html b/doc/doxygen/html/search/functions_4.html new file mode 100644 index 0000000..cce7ce9 --- /dev/null +++ b/doc/doxygen/html/search/functions_4.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/doxygen/html/search/functions_4.js b/doc/doxygen/html/search/functions_4.js new file mode 100644 index 0000000..6bebdda --- /dev/null +++ b/doc/doxygen/html/search/functions_4.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['operator_28_29',['operator()',['../structlessthan.html#ac8c76b8c1e456abd4cdd4b6ac3546582',1,'lessthan::operator()()'],['../structbracket.html#aa87f46d8c06444604c98138eb9a7627a',1,'bracket::operator()()'],['../structgetsize.html#a0571ba8961ed6f7f2d7003509a9ca9b7',1,'getsize::operator()()'],['../structbracket.html#aa87f46d8c06444604c98138eb9a7627a',1,'bracket::operator()()'],['../structgetsize.html#a0571ba8961ed6f7f2d7003509a9ca9b7',1,'getsize::operator()()'],['../structrightshift.html#a87a59db62b9d8c90a02df98442199598',1,'rightshift::operator()()'],['../structlessthan.html#ac8c76b8c1e456abd4cdd4b6ac3546582',1,'lessthan::operator()(const DATA_TYPE &x, const DATA_TYPE &y) const '],['../structlessthan.html#ac8c76b8c1e456abd4cdd4b6ac3546582',1,'lessthan::operator()(const DATA_TYPE &x, const DATA_TYPE &y) const '],['../structbracket.html#aa87f46d8c06444604c98138eb9a7627a',1,'bracket::operator()()'],['../structgetsize.html#a0571ba8961ed6f7f2d7003509a9ca9b7',1,'getsize::operator()()'],['../structlessthan.html#ac8c76b8c1e456abd4cdd4b6ac3546582',1,'lessthan::operator()()'],['../structrightshift.html#a3464d6de770ac9db414271587a712d12',1,'rightshift::operator()()'],['../structnegrightshift.html#ae39663d02ec765fd114b68ac0be844e2',1,'negrightshift::operator()()'],['../structgreaterthan.html#a37147ad0d885c20dc3380b366e75f7cd',1,'greaterthan::operator()()'],['../structbracket.html#aa87f46d8c06444604c98138eb9a7627a',1,'bracket::operator()()'],['../structgetsize.html#a0571ba8961ed6f7f2d7003509a9ca9b7',1,'getsize::operator()()'],['../structrightshift.html#a24f7c45689f1e4cd02ae7fb40b47afc4',1,'rightshift::operator()(DATA_TYPE x, unsigned offset)'],['../structrightshift.html#a87a59db62b9d8c90a02df98442199598',1,'rightshift::operator()(const DATA_TYPE &x, const unsigned offset) const '],['../structlessthan.html#ac8c76b8c1e456abd4cdd4b6ac3546582',1,'lessthan::operator()()'],['../structbracket.html#aa87f46d8c06444604c98138eb9a7627a',1,'bracket::operator()()'],['../structgetsize.html#a0571ba8961ed6f7f2d7003509a9ca9b7',1,'getsize::operator()()']]], + ['operator_3c',['operator<',['../struct_d_a_t_a___t_y_p_e.html#a6a24b4532734d210a7b3a9c71a3678f5',1,'DATA_TYPE']]] +]; diff --git a/doc/doxygen/html/search/functions_5.html b/doc/doxygen/html/search/functions_5.html new file mode 100644 index 0000000..e2f6e31 --- /dev/null +++ b/doc/doxygen/html/search/functions_5.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/doxygen/html/search/functions_5.js b/doc/doxygen/html/search/functions_5.js new file mode 100644 index 0000000..4be6e72 --- /dev/null +++ b/doc/doxygen/html/search/functions_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['reverse_5fstring_5fsort',['reverse_string_sort',['../namespaceboost_1_1sort.html#a4ad4785d90f47d51ff1d2fac8c21bb48',1,'boost::sort::reverse_string_sort(RandomAccessIter first, RandomAccessIter last, Compare comp, Unsigned_char_type unused)'],['../namespaceboost_1_1sort.html#afd4938835fd03aab9c42bd0653e5dbe5',1,'boost::sort::reverse_string_sort(RandomAccessIter first, RandomAccessIter last, Compare comp)'],['../namespaceboost_1_1sort.html#a7940f1b2a7746c083a12a4e26077096b',1,'boost::sort::reverse_string_sort(RandomAccessIter first, RandomAccessIter last, Get_char getchar, Get_length length, Compare comp)']]] +]; diff --git a/doc/doxygen/html/search/functions_6.html b/doc/doxygen/html/search/functions_6.html new file mode 100644 index 0000000..342a076 --- /dev/null +++ b/doc/doxygen/html/search/functions_6.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/doxygen/html/search/functions_6.js b/doc/doxygen/html/search/functions_6.js new file mode 100644 index 0000000..4b5c920 --- /dev/null +++ b/doc/doxygen/html/search/functions_6.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['sort_5floop',['sort_loop',['../parallelint_8cpp.html#acbd0dadb301334e73befdafddd98b044',1,'parallelint.cpp']]], + ['spreadsort',['spreadsort',['../namespaceboost_1_1sort.html#a4bc25fdacd4c948f631f08a3f9aa38eb',1,'boost::sort::spreadsort(RandomAccessIter first, RandomAccessIter last)'],['../namespaceboost_1_1sort.html#a94a736da091bd5d3b525818399f1b272',1,'boost::sort::spreadsort(RandomAccessIter first, RandomAccessIter last)'],['../namespaceboost_1_1sort.html#aafdea66d9b4a7faef5604b3079b525fa',1,'boost::sort::spreadsort(RandomAccessIter first, RandomAccessIter last)']]], + ['string_5fsort',['string_sort',['../namespaceboost_1_1sort.html#a950a2dbbe75f048a0b343dbf7c532dc0',1,'boost::sort::string_sort(RandomAccessIter first, RandomAccessIter last, Unsigned_char_type unused)'],['../namespaceboost_1_1sort.html#a6acd5fc94521b0a5cb47dc491b6d862f',1,'boost::sort::string_sort(RandomAccessIter first, RandomAccessIter last)'],['../namespaceboost_1_1sort.html#a5143ec4f58cfe13eca2a0d6b6f6a6680',1,'boost::sort::string_sort(RandomAccessIter first, RandomAccessIter last, Get_char getchar, Get_length length)'],['../namespaceboost_1_1sort.html#a82c4c0d7ba9873ecce7c674631dceae2',1,'boost::sort::string_sort(RandomAccessIter first, RandomAccessIter last, Get_char getchar, Get_length length, Compare comp)']]] +]; diff --git a/doc/doxygen/html/search/functions_7.html b/doc/doxygen/html/search/functions_7.html new file mode 100644 index 0000000..04db8a6 --- /dev/null +++ b/doc/doxygen/html/search/functions_7.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/doxygen/html/search/functions_7.js b/doc/doxygen/html/search/functions_7.js new file mode 100644 index 0000000..ed0c596 --- /dev/null +++ b/doc/doxygen/html/search/functions_7.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['reverse_5fstring_5fsort',['reverse_string_sort',['../namespaceboost_1_1sort.html#a4ad4785d90f47d51ff1d2fac8c21bb48',1,'boost::sort::reverse_string_sort(RandomAccessIter first, RandomAccessIter last, Compare comp, Unsigned_char_type unused)'],['../namespaceboost_1_1sort.html#afd4938835fd03aab9c42bd0653e5dbe5',1,'boost::sort::reverse_string_sort(RandomAccessIter first, RandomAccessIter last, Compare comp)'],['../namespaceboost_1_1sort.html#a7940f1b2a7746c083a12a4e26077096b',1,'boost::sort::reverse_string_sort(RandomAccessIter first, RandomAccessIter last, Get_char getchar, Get_length length, Compare comp)']]], + ['reverse_5fstring_5fsort_5frec',['reverse_string_sort_rec',['../namespaceboost_1_1sort_1_1detail.html#a66be693262defeff06a4a3507155d4a3',1,'boost::sort::detail::reverse_string_sort_rec(RandomAccessIter first, RandomAccessIter last, size_t char_offset, std::vector< RandomAccessIter > &bin_cache, unsigned cache_offset, size_t *bin_sizes)'],['../namespaceboost_1_1sort_1_1detail.html#ab71cd7c25eada649fa1aff16fb3549f6',1,'boost::sort::detail::reverse_string_sort_rec(RandomAccessIter first, RandomAccessIter last, size_t char_offset, std::vector< RandomAccessIter > &bin_cache, unsigned cache_offset, size_t *bin_sizes, Get_char getchar, Get_length length, Compare comp)']]], + ['rough_5flog_5f2_5fsize',['rough_log_2_size',['../namespaceboost_1_1sort_1_1detail.html#a852a51cde62aa67347cb9b4a7350bbac',1,'boost::sort::detail']]] +]; diff --git a/doc/doxygen/html/search/functions_8.html b/doc/doxygen/html/search/functions_8.html new file mode 100644 index 0000000..6bab2c8 --- /dev/null +++ b/doc/doxygen/html/search/functions_8.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/doxygen/html/search/functions_8.js b/doc/doxygen/html/search/functions_8.js new file mode 100644 index 0000000..2f17399 --- /dev/null +++ b/doc/doxygen/html/search/functions_8.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['size_5fbins',['size_bins',['../namespaceboost_1_1sort_1_1detail.html#ad5b7d31fba809eae5d17f5c2fb0a385b',1,'boost::sort::detail']]], + ['spreadsort',['spreadsort',['../namespaceboost_1_1sort.html#a4bc25fdacd4c948f631f08a3f9aa38eb',1,'boost::sort::spreadsort(RandomAccessIter first, RandomAccessIter last)'],['../namespaceboost_1_1sort.html#a94a736da091bd5d3b525818399f1b272',1,'boost::sort::spreadsort(RandomAccessIter first, RandomAccessIter last)'],['../namespaceboost_1_1sort.html#aafdea66d9b4a7faef5604b3079b525fa',1,'boost::sort::spreadsort(RandomAccessIter first, RandomAccessIter last)']]], + ['string_5fsort',['string_sort',['../namespaceboost_1_1sort.html#a950a2dbbe75f048a0b343dbf7c532dc0',1,'boost::sort::string_sort(RandomAccessIter first, RandomAccessIter last, Unsigned_char_type unused)'],['../namespaceboost_1_1sort.html#a6acd5fc94521b0a5cb47dc491b6d862f',1,'boost::sort::string_sort(RandomAccessIter first, RandomAccessIter last)'],['../namespaceboost_1_1sort.html#a5143ec4f58cfe13eca2a0d6b6f6a6680',1,'boost::sort::string_sort(RandomAccessIter first, RandomAccessIter last, Get_char getchar, Get_length length)'],['../namespaceboost_1_1sort.html#a82c4c0d7ba9873ecce7c674631dceae2',1,'boost::sort::string_sort(RandomAccessIter first, RandomAccessIter last, Get_char getchar, Get_length length, Compare comp)']]], + ['string_5fsort_5frec',['string_sort_rec',['../namespaceboost_1_1sort_1_1detail.html#ad1655ab39e410e18b6e8b6694405e5ba',1,'boost::sort::detail::string_sort_rec(RandomAccessIter first, RandomAccessIter last, size_t char_offset, std::vector< RandomAccessIter > &bin_cache, unsigned cache_offset, size_t *bin_sizes)'],['../namespaceboost_1_1sort_1_1detail.html#af825e4484173e0b886d0b24f66ae4a64',1,'boost::sort::detail::string_sort_rec(RandomAccessIter first, RandomAccessIter last, size_t char_offset, std::vector< RandomAccessIter > &bin_cache, unsigned cache_offset, size_t *bin_sizes, Get_char getchar, Get_length length)'],['../namespaceboost_1_1sort_1_1detail.html#a49ccfc022cfef8a14bbbbeccd36d78ec',1,'boost::sort::detail::string_sort_rec(RandomAccessIter first, RandomAccessIter last, size_t char_offset, std::vector< RandomAccessIter > &bin_cache, unsigned cache_offset, size_t *bin_sizes, Get_char getchar, Get_length length, Compare comp)']]] +]; diff --git a/doc/doxygen/html/search/functions_9.html b/doc/doxygen/html/search/functions_9.html new file mode 100644 index 0000000..e32df63 --- /dev/null +++ b/doc/doxygen/html/search/functions_9.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/doxygen/html/search/functions_9.js b/doc/doxygen/html/search/functions_9.js new file mode 100644 index 0000000..7afe9d8 --- /dev/null +++ b/doc/doxygen/html/search/functions_9.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['update_5foffset',['update_offset',['../namespaceboost_1_1sort_1_1detail.html#a585497946eeb8cc1d2072642d7f1da01',1,'boost::sort::detail::update_offset(RandomAccessIter first, RandomAccessIter finish, size_t &char_offset)'],['../namespaceboost_1_1sort_1_1detail.html#a415ebdb0c9a5e9209bbfc7d2e576374c',1,'boost::sort::detail::update_offset(RandomAccessIter first, RandomAccessIter finish, size_t &char_offset, Get_char getchar, Get_length length)']]] +]; diff --git a/doc/doxygen/html/search/mag_sel.png b/doc/doxygen/html/search/mag_sel.png new file mode 100644 index 0000000000000000000000000000000000000000..81f6040a2092402b4d98f9ffa8855d12a0d4ca17 GIT binary patch literal 563 zcmeAS@N?(olHy`uVBq!ia0y~yU=U$oU=ZeDV_;yI(4)JRfq{Xuz$3Dlfq`2Xgc%uT z&5>YWU{FZ*2=ZlM$eqE!P~6AB@W6tBq3J3ELlrv%!>KI{48|@D3^HXcW?Fk07#MeY zx;TbZ+1W+|^)#0~pZkN$kUYB?uZb;*>P<#iv<{`%gy@B7i8HPa@a zYN-@l_t>`F zS6{6bU-bC)`|t6@!v-s^W<3fH-gaA;;b@Ye?`4*TWtoctG(Kd@2(%^IBsBckbh^`p ziQ#x5!#(xbe|PL3$uD@+pFH{WQwE9t<1?0ZzTS1o#P`@^Lxz_nQVmgSzctvs{ZzGg z+Tn*2e%Ab3swu;F`DMw4(pZKbx5fS9fB3%G_`fT&7VBp1d%WTP`_AK!mt4-wx&5rf zO0d^0bNg-n7ngY$ZO%_#_xe$#-1ghN^Ut?0(umO$ui7hj{PDyH9k + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/doxygen/html/search/namespaces_0.js b/doc/doxygen/html/search/namespaces_0.js new file mode 100644 index 0000000..5522984 --- /dev/null +++ b/doc/doxygen/html/search/namespaces_0.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['boost',['boost',['../namespaceboost.html',1,'']]], + ['sort',['sort',['../namespaceboost_1_1sort.html',1,'boost']]] +]; diff --git a/doc/doxygen/html/search/nomatches.html b/doc/doxygen/html/search/nomatches.html new file mode 100644 index 0000000..b1ded27 --- /dev/null +++ b/doc/doxygen/html/search/nomatches.html @@ -0,0 +1,12 @@ + + + + + + + +
+
No Matches
+
+ + diff --git a/doc/doxygen/html/search/search.css b/doc/doxygen/html/search/search.css new file mode 100644 index 0000000..4d7612f --- /dev/null +++ b/doc/doxygen/html/search/search.css @@ -0,0 +1,271 @@ +/*---------------- Search Box */ + +#FSearchBox { + float: left; +} + +#MSearchBox { + white-space : nowrap; + position: absolute; + float: none; + display: inline; + margin-top: 8px; + right: 0px; + width: 170px; + z-index: 102; + background-color: white; +} + +#MSearchBox .left +{ + display:block; + position:absolute; + left:10px; + width:20px; + height:19px; + background:url('search_l.png') no-repeat; + background-position:right; +} + +#MSearchSelect { + display:block; + position:absolute; + width:20px; + height:19px; +} + +.left #MSearchSelect { + left:4px; +} + +.right #MSearchSelect { + right:5px; +} + +#MSearchField { + display:block; + position:absolute; + height:19px; + background:url('search_m.png') repeat-x; + border:none; + width:111px; + margin-left:20px; + padding-left:4px; + color: #909090; + outline: none; + font: 9pt Arial, Verdana, sans-serif; +} + +#FSearchBox #MSearchField { + margin-left:15px; +} + +#MSearchBox .right { + display:block; + position:absolute; + right:10px; + top:0px; + width:20px; + height:19px; + background:url('search_r.png') no-repeat; + background-position:left; +} + +#MSearchClose { + display: none; + position: absolute; + top: 4px; + background : none; + border: none; + margin: 0px 4px 0px 0px; + padding: 0px 0px; + outline: none; +} + +.left #MSearchClose { + left: 6px; +} + +.right #MSearchClose { + right: 2px; +} + +.MSearchBoxActive #MSearchField { + color: #000000; +} + +/*---------------- Search filter selection */ + +#MSearchSelectWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid #90A5CE; + background-color: #F9FAFC; + z-index: 1; + 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; +} + +/* ----------------------------------- */ + + +#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; +} + +.SRPage .SRStatus { + padding: 2px 5px; + font-size: 8pt; + font-style: italic; +} + +.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/doc/doxygen/html/search/search.js b/doc/doxygen/html/search/search.js new file mode 100644 index 0000000..dedce3b --- /dev/null +++ b/doc/doxygen/html/search/search.js @@ -0,0 +1,791 @@ +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 + '.html'; + resultsPageWithSearch = resultsPage+'?'+escape(searchValue); + hasResultsPage = true; + } + else // nothing available for this search term + { + resultsPage = this.resultsPath + '/nomatches.html'; + 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'; + 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 == 'DIV' && element.className == 'SRChildren') + { + return element; + } + + if (element.nodeName == '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; eYWU{FZ*2=ZlM$eqE!P~6AB@W6tBq3J3ELlrv%!>KI{48|@D3^HXcW?Fk07#JUU zx;TbZ+*%W2yZTmuMBTZQmWIB691Pq<-UPUa>(AXKdh6msy}Q;TUJL7&mF#u?-}0BW z>DJO_**jew3tXCyX{?p^yrC2G)@;7t^7THKYXa9_PmB~RiEW=EG~Gc*jC*p&y=z&fcQ@%sv@t5O z=&^pcSs$r4eZK1{i|0GoY&e?S76w$5tlgx%aLT7lwaE_y)4qSd^!+cp{=C`6p`n{6 zh8~kRWUxp2ljPOs&tkkR*$QI1cf2mVW+Yhp?f2h{udXf?xVZgmm268QhtjTj0fAH2 z_dWh|=WW>!`3IdYkB%4Z{PWI&ujame)c*TrIfvX9f7Iq^y8W==g^n0Eiz9>5t{pP} z(pmRa%==zxAkmY)S<+Q?Zm_3|g$$pC?&ov)%n6z;KVDSMyZ!$A{pnsyk6#Q92^9@G zwO@o=QLd+bu3XgGX$%4Ci_BN8GUGk0p*GobVdktumizopr04E;^4gdfE literal 0 HcmV?d00001 diff --git a/doc/doxygen/html/search/search_m.png b/doc/doxygen/html/search/search_m.png new file mode 100644 index 0000000000000000000000000000000000000000..b429a16ba641960da1e52e5da85dc80fd82635c8 GIT binary patch literal 158 zcmeAS@N?(olHy`uVBq!ia0y~yU|?ckU=Zd2k*0Cpz6=ZuEa{HEjtmUfZd~z?Fk)a} zkSuYHC<)F_D=AMbN@Z|N$xljE@XSq2PYp^OWFBt>K?i-XJBAp@O1Ta JS?83{1OS@7FGc_W literal 0 HcmV?d00001 diff --git a/doc/doxygen/html/search/search_r.png b/doc/doxygen/html/search/search_r.png new file mode 100644 index 0000000000000000000000000000000000000000..97ee8b439687084201b79c6f776a41f495c6392a GIT binary patch literal 612 zcmeAS@N?(olHy`uVBq!ia0y~yU=U(pU=ZeDV_;yIJ1O=P0|NtRfk$L90|U1(2s1Lw znj^u$z@U)q5#-CjkUN8cp}3EM;eiDML(^3ThAMUjhErP@7>r#Q7-Y&?%(V70FfhLI zba4!+xV7ZU{#8zs=vomAy2qdLnKjHCBRvI!?(cCvqrJpudOF7vL7ku& zCzXUQ6HTW8N5uuxuZC{k{ch8_cV|2&Y8>Kywrcs@!~MlGezuib$sXzya#HzOQx~Np zWlq6(@LXPU%h8C`)oY> ziSK_WPnhzlp*6ANX_4pSj}gZT{~X-*_Icmq7KQ^$rl>0_HBAu;@>-JFrO~w^LdQUc zul4n=_t{%-`L4d&WpeC>CVP*eMi-M()4JCNJj^>|_}UUz1f5#``RAYX{rBsaK4?5D z!JN!9YuUm8jRip~7sRd4W{6vJ{k1!PTc2ZSXyPn2t*Kl&x3@JZRFs)*IsR>O=;~0l zmWnkp@t=1teQl+4x@q0(-ONieZ`};m>|(lXGBZ))ba$Bbv44JL<)SVw59V+y{aO{% z?4c>x_OPvEU%ctXyzR};D{VtVYcH^>E>$^a>8m!`b^GmFCzk-dNKcN&uT^t>mR~M+ z>d0qU@RonGj`fq5@jsP+P0l@M8Mb<=1Yi67CWVT-dD|~nzf@mT%^|4h8(eTs@c71( z*z5DprrDnR>3zKL9pC!`6RC&w{{ttf+{oLWDB?Qb@_D{w^7g*RF2`&4vopk(yY(38 T+?dP2z`)??>gTe~DWM4f%J>KN literal 0 HcmV?d00001 diff --git a/doc/doxygen/html/search/searchdata.js b/doc/doxygen/html/search/searchdata.js new file mode 100644 index 0000000..01504e3 --- /dev/null +++ b/doc/doxygen/html/search/searchdata.js @@ -0,0 +1,33 @@ +var indexSectionsWithContent = +{ + 0: "abcdfgiklmnoprstw", + 1: "bdglnr", + 2: "b", + 3: "abcdfgikmprsw", + 4: "fgimors", + 5: "abdfklmnrt", + 6: "acdk" +}; + +var indexSectionNames = +{ + 0: "all", + 1: "classes", + 2: "namespaces", + 3: "files", + 4: "functions", + 5: "variables", + 6: "defines" +}; + +var indexSectionLabels = +{ + 0: "All", + 1: "Classes", + 2: "Namespaces", + 3: "Files", + 4: "Functions", + 5: "Variables", + 6: "Macros" +}; + diff --git a/doc/doxygen/html/search/variables_0.html b/doc/doxygen/html/search/variables_0.html new file mode 100644 index 0000000..2837a57 --- /dev/null +++ b/doc/doxygen/html/search/variables_0.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/doxygen/html/search/variables_0.js b/doc/doxygen/html/search/variables_0.js new file mode 100644 index 0000000..581f148 --- /dev/null +++ b/doc/doxygen/html/search/variables_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['a',['a',['../struct_d_a_t_a___t_y_p_e.html#a0f17d79c6492cb604f3da783a5017b54',1,'DATA_TYPE']]] +]; diff --git a/doc/doxygen/html/search/variables_1.html b/doc/doxygen/html/search/variables_1.html new file mode 100644 index 0000000..6a866b1 --- /dev/null +++ b/doc/doxygen/html/search/variables_1.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/doxygen/html/search/variables_1.js b/doc/doxygen/html/search/variables_1.js new file mode 100644 index 0000000..6ab8ee8 --- /dev/null +++ b/doc/doxygen/html/search/variables_1.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['birth',['birth',['../struct_d_a_t_a___t_y_p_e.html#a437ac9cab171cc3fff62212c65b3810c',1,'DATA_TYPE']]], + ['bit_5fshift',['bit_shift',['../alrbreaker_8cpp.html#a50fb2847ba87c9bd84e0c5c8a951f9de',1,'bit_shift(): alrbreaker.cpp'],['../binaryalrbreaker_8cpp.html#a50fb2847ba87c9bd84e0c5c8a951f9de',1,'bit_shift(): binaryalrbreaker.cpp']]] +]; diff --git a/doc/doxygen/html/search/variables_2.html b/doc/doxygen/html/search/variables_2.html new file mode 100644 index 0000000..3115f99 --- /dev/null +++ b/doc/doxygen/html/search/variables_2.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/doxygen/html/search/variables_2.js b/doc/doxygen/html/search/variables_2.js new file mode 100644 index 0000000..18ceea4 --- /dev/null +++ b/doc/doxygen/html/search/variables_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['data',['data',['../struct_d_a_t_a___t_y_p_e.html#ae644cc131b810b459261b3426e2c459c',1,'DATA_TYPE']]] +]; diff --git a/doc/doxygen/html/search/variables_3.html b/doc/doxygen/html/search/variables_3.html new file mode 100644 index 0000000..b2941ee --- /dev/null +++ b/doc/doxygen/html/search/variables_3.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/doxygen/html/search/variables_3.js b/doc/doxygen/html/search/variables_3.js new file mode 100644 index 0000000..9ce08a2 --- /dev/null +++ b/doc/doxygen/html/search/variables_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['first_5fname',['first_name',['../struct_d_a_t_a___t_y_p_e.html#ad2c00885d0c6afec26d51a53ae05e403',1,'DATA_TYPE']]] +]; diff --git a/doc/doxygen/html/search/variables_4.html b/doc/doxygen/html/search/variables_4.html new file mode 100644 index 0000000..e14a4ff --- /dev/null +++ b/doc/doxygen/html/search/variables_4.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/doxygen/html/search/variables_4.js b/doc/doxygen/html/search/variables_4.js new file mode 100644 index 0000000..594df81 --- /dev/null +++ b/doc/doxygen/html/search/variables_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['key',['key',['../struct_d_a_t_a___t_y_p_e.html#aa28561fc8e223d84187ccfaf99953bae',1,'DATA_TYPE::key()'],['../struct_d_a_t_a___t_y_p_e.html#af18aa9620a8309d88c829d6af27824e3',1,'DATA_TYPE::key()']]] +]; diff --git a/doc/doxygen/html/search/variables_5.html b/doc/doxygen/html/search/variables_5.html new file mode 100644 index 0000000..ee6461c --- /dev/null +++ b/doc/doxygen/html/search/variables_5.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/doxygen/html/search/variables_5.js b/doc/doxygen/html/search/variables_5.js new file mode 100644 index 0000000..e3bdcc6 --- /dev/null +++ b/doc/doxygen/html/search/variables_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['last_5fname',['last_name',['../struct_d_a_t_a___t_y_p_e.html#a12df0589010b4a79d824dbea9326ba43',1,'DATA_TYPE']]] +]; diff --git a/doc/doxygen/html/search/variables_6.html b/doc/doxygen/html/search/variables_6.html new file mode 100644 index 0000000..9b457a2 --- /dev/null +++ b/doc/doxygen/html/search/variables_6.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/doxygen/html/search/variables_6.js b/doc/doxygen/html/search/variables_6.js new file mode 100644 index 0000000..27ec7df --- /dev/null +++ b/doc/doxygen/html/search/variables_6.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['max_5fcount',['max_count',['../alrbreaker_8cpp.html#a4587b2f61869f9798cb12a8ebb37387d',1,'max_count(): alrbreaker.cpp'],['../binaryalrbreaker_8cpp.html#a4587b2f61869f9798cb12a8ebb37387d',1,'max_count(): binaryalrbreaker.cpp']]] +]; diff --git a/doc/doxygen/html/search/variables_7.html b/doc/doxygen/html/search/variables_7.html new file mode 100644 index 0000000..aae170d --- /dev/null +++ b/doc/doxygen/html/search/variables_7.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/doxygen/html/search/variables_7.js b/doc/doxygen/html/search/variables_7.js new file mode 100644 index 0000000..ec62da1 --- /dev/null +++ b/doc/doxygen/html/search/variables_7.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['net_5fworth',['net_worth',['../struct_d_a_t_a___t_y_p_e.html#a2a7008d5cecd603c1aaf8ff9ed849621',1,'DATA_TYPE']]] +]; diff --git a/doc/doxygen/html/search/variables_8.html b/doc/doxygen/html/search/variables_8.html new file mode 100644 index 0000000..7d96ca3 --- /dev/null +++ b/doc/doxygen/html/search/variables_8.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/doxygen/html/search/variables_8.js b/doc/doxygen/html/search/variables_8.js new file mode 100644 index 0000000..807a1f4 --- /dev/null +++ b/doc/doxygen/html/search/variables_8.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['radix_5fthreshold',['radix_threshold',['../alrbreaker_8cpp.html#afc30457e398e72300f20714123913b78',1,'radix_threshold(): alrbreaker.cpp'],['../binaryalrbreaker_8cpp.html#afc30457e398e72300f20714123913b78',1,'radix_threshold(): binaryalrbreaker.cpp']]] +]; diff --git a/doc/doxygen/html/search/variables_9.html b/doc/doxygen/html/search/variables_9.html new file mode 100644 index 0000000..29d1092 --- /dev/null +++ b/doc/doxygen/html/search/variables_9.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/doxygen/html/search/variables_9.js b/doc/doxygen/html/search/variables_9.js new file mode 100644 index 0000000..32233d9 --- /dev/null +++ b/doc/doxygen/html/search/variables_9.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['top_5fsplits',['top_splits',['../alrbreaker_8cpp.html#a60c4ea1dd4d297e0d2e395375e0e716c',1,'alrbreaker.cpp']]], + ['typed_5fone',['typed_one',['../alrbreaker_8cpp.html#a8b984673f3b3e097d3f37508923452fa',1,'typed_one(): alrbreaker.cpp'],['../binaryalrbreaker_8cpp.html#a8b984673f3b3e097d3f37508923452fa',1,'typed_one(): binaryalrbreaker.cpp']]] +]; diff --git a/doc/doxygen/html/shiftfloatsample_8cpp.html b/doc/doxygen/html/shiftfloatsample_8cpp.html new file mode 100644 index 0000000..0fa863e --- /dev/null +++ b/doc/doxygen/html/shiftfloatsample_8cpp.html @@ -0,0 +1,183 @@ + + + + + + +Boost.Sort: I:/modular-boost/libs/sort/example/shiftfloatsample.cpp File Reference + + + + + + + + + + +
+
+ + + + + + +
+
Boost.Sort +
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
shiftfloatsample.cpp File Reference
+
+
+
#include <boost/sort/spreadsort/spreadsort.hpp>
+#include <time.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <algorithm>
+#include <vector>
+#include <string>
+#include <fstream>
+#include <iostream>
+
+ + + +

+Classes

struct  rightshift
 
+ + + + + +

+Macros

#define DATA_TYPE   float
 
#define CAST_TYPE   int
 
+ + + +

+Functions

int main (int argc, const char **argv)
 
+

Macro Definition Documentation

+ +
+
+ + + + +
#define CAST_TYPE   int
+
+ +
+
+ +
+
+ + + + +
#define DATA_TYPE   float
+
+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
int main (int argc,
const char ** argv 
)
+
+ +
+
+
+ + + + diff --git a/doc/doxygen/html/sort_8hpp.html b/doc/doxygen/html/sort_8hpp.html new file mode 100644 index 0000000..56382c1 --- /dev/null +++ b/doc/doxygen/html/sort_8hpp.html @@ -0,0 +1,103 @@ + + + + + + +Boost.Sort: I:/modular-boost/libs/sort/include/boost/sort/sort.hpp File Reference + + + + + + + + + + +
+
+ + + + + + +
+
Boost.Sort +
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+
+
sort.hpp File Reference
+
+ + + + + diff --git a/doc/doxygen/html/sort_8hpp_source.html b/doc/doxygen/html/sort_8hpp_source.html new file mode 100644 index 0000000..bd81ce7 --- /dev/null +++ b/doc/doxygen/html/sort_8hpp_source.html @@ -0,0 +1,120 @@ + + + + + + +Boost.Sort: I:/modular-boost/libs/sort/include/boost/sort/sort.hpp Source File + + + + + + + + + + +
+
+ + + + + + +
+
Boost.Sort +
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+
+
sort.hpp
+
+
+Go to the documentation of this file.
1 // The Boost Sort library cumulative header.
+
2 
+
3 // Copyright Steven J. Ross 2014
+
4 // Distributed under the Boost Software License, Version 1.0.
+
5 // (See accompanying file LICENSE_1_0.txt or copy at
+
6 // http://www.boost.org/LICENSE_1_0.txt)
+
7 
+
8 // See http://www.boost.org/libs/sort/ for library home page.
+
9 
+
10 #ifndef BOOST_SORT_HPP
+
11 #define BOOST_SORT_HPP
+
12 
+
13 /*
+
14 Cumulative include for the Boost Sort library
+
15 */
+
16 
+ +
18 
+
19 #endif
+ +
+ + + + diff --git a/doc/doxygen/html/splitbar.png b/doc/doxygen/html/splitbar.png new file mode 100644 index 0000000000000000000000000000000000000000..fe895f2c58179b471a22d8320b39a4bd7312ec8e GIT binary patch literal 314 zcmeAS@N?(olHy`uVBq!ia0y~yU|?flU}4~3VqjqK-LYSgfq{|H)5S5Qg7NL$g3+rcW~p3*2k<8ET5+kt+??7VY)%8z5|0uNDQ@?BH>==GIK88=8LINZs-Am7NcFtb?^;v({ zq8ITc`sa7geZ2VM+sMGMuOD7LdHeYLmg_$w*WCKQb@{T)vd`K3;@>{~dwa2`g9;hw cuXA+R8{0q8EosLX7#J8lUHx3vIVCg!02F6;9RL6T literal 0 HcmV?d00001 diff --git a/doc/doxygen/html/spreadsort_8hpp.html b/doc/doxygen/html/spreadsort_8hpp.html new file mode 100644 index 0000000..1af5197 --- /dev/null +++ b/doc/doxygen/html/spreadsort_8hpp.html @@ -0,0 +1,137 @@ + + + + + + +Boost.Sort: I:/modular-boost/libs/sort/include/boost/sort/spreadsort/spreadsort.hpp File Reference + + + + + + + + + + +
+
+ + + + + + +
+
Boost.Sort +
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
spreadsort.hpp File Reference
+
+
+
#include <algorithm>
+#include <vector>
+#include <cstring>
+#include <string>
+#include <limits>
+#include <boost/type_traits.hpp>
+#include <boost/sort/spreadsort/integer_sort.hpp>
+#include <boost/sort/spreadsort/float_sort.hpp>
+#include <boost/sort/spreadsort/string_sort.hpp>
+
+

Go to the source code of this file.

+ + + + + + +

+Namespaces

 boost
 
 boost::sort
 
+ + + + + + + + + + + + + +

+Functions

template<class RandomAccessIter >
boost::enable_if_c< std::numeric_limits< typename std::iterator_traits< RandomAccessIter >::value_type >::is_integer, void >::type boost::sort::spreadsort (RandomAccessIter first, RandomAccessIter last)
 Generic spreadsort variant detecting integer-type elements so call to integer_sort. More...
 
template<class RandomAccessIter >
boost::enable_if_c< !std::numeric_limits< typename std::iterator_traits< RandomAccessIter >::value_type >::is_integer &&std::numeric_limits< typename std::iterator_traits< RandomAccessIter >::value_type >::is_iec559, void >::type boost::sort::spreadsort (RandomAccessIter first, RandomAccessIter last)
 Generic spreadsort variant detecting float element type so call to float_sort. More...
 
template<class RandomAccessIter >
boost::enable_if_c< is_same< typename std::iterator_traits< RandomAccessIter >::value_type, typename std::string >::value||is_same< typename std::iterator_traits< RandomAccessIter >::value_type, typename std::wstring >::value, void >::type boost::sort::spreadsort (RandomAccessIter first, RandomAccessIter last)
 Generic spreadsort variant detecting string element type so call to string_sort for std::strings and std::wstrings. More...
 
+
+ + + + diff --git a/doc/doxygen/html/spreadsort_8hpp_source.html b/doc/doxygen/html/spreadsort_8hpp_source.html new file mode 100644 index 0000000..0c4d862 --- /dev/null +++ b/doc/doxygen/html/spreadsort_8hpp_source.html @@ -0,0 +1,230 @@ + + + + + + +Boost.Sort: I:/modular-boost/libs/sort/include/boost/sort/spreadsort/spreadsort.hpp Source File + + + + + + + + + + +
+
+ + + + + + +
+
Boost.Sort +
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+
+
spreadsort.hpp
+
+
+Go to the documentation of this file.
1 // Templated generic hybrid sorting
+
2 
+
3 // Copyright Steven J. Ross 2001 - 2009.
+
4 // Distributed under the Boost Software License, Version 1.0.
+
5 // (See accompanying file LICENSE_1_0.txt or copy at
+
6 // http://www.boost.org/LICENSE_1_0.txt)
+
7 
+
8 // See http://www.boost.org/libs/sort/ for library home page.
+
9 
+
10 /*
+
11 Some improvements suggested by:
+
12 Phil Endecott and Frank Gennari
+
13 float_mem_cast fix provided by:
+
14 Scott McMurray
+
15 */
+
16 
+
17 #ifndef BOOST_SORT_SPREADSORT_HPP
+
18 #define BOOST_SORT_SPREADSORT_HPP
+
19 #include <algorithm>
+
20 #include <vector>
+
21 #include <cstring>
+
22 #include <string>
+
23 #include <limits>
+
24 #include <boost/type_traits.hpp>
+ + + +
28 
+
29 namespace boost {
+
30 
+
31 /*! Namespace for spreadsort sort variants for different data types.
+
32 \note Use hyperlinks (coloured) to get detailed information about functions.
+
33 */
+
34 namespace sort {
+
35 
+
36  /*!
+
37  \brief Generic @c spreadsort variant detecting integer-type elements so call to @c integer_sort.
+
38  \details If the data type provided is an integer, @c integer_sort is used.
+
39  \note Sorting other data types requires picking between @c integer_sort, @c float_sort and @c string_sort directly,
+
40  as @c spreadsort won't accept types that don't have the appropriate @c type_traits.
+
41  \tparam RandomAccessIter <a href="http://www.cplusplus.com/reference/iterator/RandomAccessIterator/">Random access iterator</a>
+
42  \param[in] first Iterator pointer to first element.
+
43  \param[in] last Iterator pointing to one beyond the end of data.
+
44 
+
45  \pre [@c first, @c last) is a valid range.
+
46  \pre @c RandomAccessIter @c value_type is mutable.
+
47  \pre @c RandomAccessIter @c value_type is <a href="http://en.cppreference.com/w/cpp/concept/LessThanComparable">LessThanComparable</a>
+
48  \pre @c RandomAccessIter @c value_type supports the @c operator>>,
+
49  which returns an integer-type right-shifted a specified number of bits.
+
50  \post The elements in the range [@c first, @c last) are sorted in ascending order.
+
51  */
+
52 
+
53  template <class RandomAccessIter>
+
54  inline typename boost::enable_if_c< std::numeric_limits<
+
55  typename std::iterator_traits<RandomAccessIter>::value_type >::is_integer,
+
56  void >::type
+
57  spreadsort(RandomAccessIter first, RandomAccessIter last)
+
58  {
+
59  integer_sort(first, last);
+
60  }
+
61 
+
62  /*!
+
63  \brief Generic @c spreadsort variant detecting float element type so call to @c float_sort.
+
64  \details If the data type provided is a float or castable-float, @c float_sort is used.
+
65  \note Sorting other data types requires picking between @c integer_sort, @c float_sort and @c string_sort directly,
+
66  as @c spreadsort won't accept types that don't have the appropriate @c type_traits.
+
67 
+
68  \tparam RandomAccessIter <a href="http://www.cplusplus.com/reference/iterator/RandomAccessIterator/">Random access iterator</a>
+
69  \param[in] first Iterator pointer to first element.
+
70  \param[in] last Iterator pointing to one beyond the end of data.
+
71 
+
72  \pre [@c first, @c last) is a valid range.
+
73  \pre @c RandomAccessIter @c value_type is mutable.
+
74  \pre @c RandomAccessIter @c value_type is <a href="http://en.cppreference.com/w/cpp/concept/LessThanComparable">LessThanComparable</a>
+
75  \pre @c RandomAccessIter @c value_type supports the @c operator>>,
+
76  which returns an integer-type right-shifted a specified number of bits.
+
77  \post The elements in the range [@c first, @c last) are sorted in ascending order.
+
78  */
+
79 
+
80  template <class RandomAccessIter>
+
81  inline typename boost::enable_if_c< !std::numeric_limits<
+
82  typename std::iterator_traits<RandomAccessIter>::value_type >::is_integer
+
83  && std::numeric_limits<
+
84  typename std::iterator_traits<RandomAccessIter>::value_type >::is_iec559,
+
85  void >::type
+
86  spreadsort(RandomAccessIter first, RandomAccessIter last)
+
87  {
+
88  float_sort(first, last);
+
89  }
+
90 
+
91  /*!
+
92  \brief Generic @c spreadsort variant detecting string element type so call to @c string_sort for @c std::strings and @c std::wstrings.
+
93  \details If the data type provided is a string or wstring, @c string_sort is used.
+
94  \note Sorting other data types requires picking between @c integer_sort, @c float_sort and @c string_sort directly,
+
95  as @c spreadsort won't accept types that don't have the appropriate @c type_traits.
+
96 
+
97  \tparam RandomAccessIter <a href="http://www.cplusplus.com/reference/iterator/RandomAccessIterator/">Random access iterator</a>
+
98  \param[in] first Iterator pointer to first element.
+
99  \param[in] last Iterator pointing to one beyond the end of data.
+
100 
+
101  \pre [@c first, @c last) is a valid range.
+
102  \pre @c RandomAccessIter @c value_type is mutable.
+
103  \pre @c RandomAccessIter @c value_type is <a href="http://en.cppreference.com/w/cpp/concept/LessThanComparable">LessThanComparable</a>
+
104  \pre @c RandomAccessIter @c value_type supports the @c operator>>,
+
105  which returns an integer-type right-shifted a specified number of bits.
+
106  \post The elements in the range [@c first, @c last) are sorted in ascending order.
+
107  */
+
108 
+
109  template <class RandomAccessIter>
+
110  inline typename boost::enable_if_c<
+
111  is_same<typename std::iterator_traits<RandomAccessIter>::value_type,
+
112  typename std::string>::value ||
+
113  is_same<typename std::iterator_traits<RandomAccessIter>::value_type,
+
114  typename std::wstring>::value, void >::type
+
115  spreadsort(RandomAccessIter first, RandomAccessIter last)
+
116  {
+
117  string_sort(first, last);
+
118  }
+
119 } // namespace sort
+
120 } // namespace boost
+
121 
+
122 #endif
+
void integer_sort(RandomAccessIter first, RandomAccessIter last)
Integer sort algorithm using random access iterators. (All variants fall back to std::sort if the dat...
Definition: integer_sort.hpp:75
+ +
Definition: float_sort.hpp:27
+
boost::enable_if_c< std::numeric_limits< typename std::iterator_traits< RandomAccessIter >::value_type >::is_integer, void >::type spreadsort(RandomAccessIter first, RandomAccessIter last)
Generic spreadsort variant detecting integer-type elements so call to integer_sort.
Definition: spreadsort.hpp:57
+ +
void string_sort(RandomAccessIter first, RandomAccessIter last, Unsigned_char_type unused)
String sort algorithm using random access iterators, allowing character-type overloads. (All variants fall back to std::sort if the data size is too small, < detail::min_sort_size).
Definition: string_sort.hpp:73
+
void float_sort(RandomAccessIter first, RandomAccessIter last)
float_sort with casting to the appropriate size.
Definition: float_sort.hpp:86
+ +
+ + + + diff --git a/doc/doxygen/html/spreadsort__common_8hpp.html b/doc/doxygen/html/spreadsort__common_8hpp.html new file mode 100644 index 0000000..ca28953 --- /dev/null +++ b/doc/doxygen/html/spreadsort__common_8hpp.html @@ -0,0 +1,135 @@ + + + + + + +Boost.Sort: I:/modular-boost/libs/sort/include/boost/sort/spreadsort/detail/spreadsort_common.hpp File Reference + + + + + + + + + + +
+
+ + + + + + +
+
Boost.Sort +
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
spreadsort_common.hpp File Reference
+
+
+
#include <algorithm>
+#include <vector>
+#include <cstring>
+#include <limits>
+#include <functional>
+#include <boost/static_assert.hpp>
+#include <boost/serialization/static_warning.hpp>
+#include <boost/sort/spreadsort/detail/constants.hpp>
+#include <boost/cstdint.hpp>
+
+

Go to the source code of this file.

+ + + + + + + + +

+Namespaces

 boost
 
 boost::sort
 
 boost::sort::detail
 
+ + + + + + + + + + +

+Functions

template<typename T >
unsigned boost::sort::detail::rough_log_2_size (const T &input)
 
template<unsigned log_mean_bin_size, unsigned log_min_split_count, unsigned log_finishing_count>
size_t boost::sort::detail::get_min_count (unsigned log_range)
 
template<class RandomAccessIter >
RandomAccessIter * boost::sort::detail::size_bins (size_t *bin_sizes, std::vector< RandomAccessIter > &bin_cache, unsigned cache_offset, unsigned &cache_end, unsigned bin_count)
 
+
+ + + + diff --git a/doc/doxygen/html/spreadsort__common_8hpp_source.html b/doc/doxygen/html/spreadsort__common_8hpp_source.html new file mode 100644 index 0000000..0b4068a --- /dev/null +++ b/doc/doxygen/html/spreadsort__common_8hpp_source.html @@ -0,0 +1,228 @@ + + + + + + +Boost.Sort: I:/modular-boost/libs/sort/include/boost/sort/spreadsort/detail/spreadsort_common.hpp Source File + + + + + + + + + + +
+
+ + + + + + +
+
Boost.Sort +
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+
+
spreadsort_common.hpp
+
+
+Go to the documentation of this file.
1 // Contains get_min_count, the core optimization of the spreadsort algorithm.
+
2 // Also has other helper functions commonly useful across variants.
+
3 
+
4 // Copyright Steven J. Ross 2001 - 2014.
+
5 // Distributed under the Boost Software License, Version 1.0.
+
6 // (See accompanying file LICENSE_1_0.txt or copy at
+
7 // http://www.boost.org/LICENSE_1_0.txt)
+
8 
+
9 // See http://www.boost.org/libs/sort for library home page.
+
10 
+
11 /*
+
12 Some improvements suggested by:
+
13 Phil Endecott and Frank Gennari
+
14 */
+
15 
+
16 #ifndef BOOST_SORT_SPREADSORT_DETAIL_SPREAD_SORT_COMMON_HPP
+
17 #define BOOST_SORT_SPREADSORT_DETAIL_SPREAD_SORT_COMMON_HPP
+
18 #include <algorithm>
+
19 #include <vector>
+
20 #include <cstring>
+
21 #include <limits>
+
22 #include <functional>
+
23 #include <boost/static_assert.hpp>
+
24 #include <boost/serialization/static_warning.hpp>
+ +
26 #include <boost/cstdint.hpp>
+
27 
+
28 namespace boost {
+
29 namespace sort {
+
30  namespace detail {
+
31  //This only works on unsigned data types
+
32  template <typename T>
+
33  inline unsigned
+
34  rough_log_2_size(const T& input)
+
35  {
+
36  unsigned result = 0;
+
37  //The && is necessary on some compilers to avoid infinite loops
+
38  //it doesn't significantly impair performance
+
39  while ((input >> result) && (result < (8*sizeof(T)))) ++result;
+
40  return result;
+
41  }
+
42 
+
43  //Gets the minimum size to call spreadsort on to control worst-case runtime.
+
44  //This is called for a set of bins, instead of bin-by-bin, to minimize
+
45  //runtime overhead.
+
46  //This could be replaced by a lookup table of sizeof(Div_type)*8 but this
+
47  //function is more general.
+
48  template<unsigned log_mean_bin_size,
+
49  unsigned log_min_split_count, unsigned log_finishing_count>
+
50  inline size_t
+
51  get_min_count(unsigned log_range)
+
52  {
+
53  const size_t typed_one = 1;
+
54  const unsigned min_size = log_mean_bin_size + log_min_split_count;
+
55  //Assuring that constants have valid settings
+
56  BOOST_STATIC_ASSERT(log_min_split_count <= max_splits &&
+
57  log_min_split_count > 0);
+
58  BOOST_STATIC_ASSERT(max_splits > 1 &&
+
59  max_splits < (8 * sizeof(unsigned)));
+
60  BOOST_STATIC_ASSERT(max_finishing_splits >= max_splits &&
+
61  max_finishing_splits < (8 * sizeof(unsigned)));
+
62  BOOST_STATIC_ASSERT(log_mean_bin_size >= 0);
+
63  BOOST_STATIC_ASSERT(log_finishing_count >= 0);
+
64  //if we can complete in one iteration, do so
+
65  //This first check allows the compiler to optimize never-executed code out
+
66  if (log_finishing_count < min_size) {
+
67  if (log_range <= min_size && log_range <= max_splits) {
+
68  //Return no smaller than a certain minimum limit
+
69  if (log_range <= log_finishing_count)
+
70  return typed_one << log_finishing_count;
+
71  return typed_one << log_range;
+
72  }
+
73  }
+
74  const unsigned base_iterations = max_splits - log_min_split_count;
+
75  //sum of n to n + x = ((x + 1) * (n + (n + x)))/2 + log_mean_bin_size
+
76  const unsigned base_range =
+
77  ((base_iterations + 1) * (max_splits + log_min_split_count))/2
+
78  + log_mean_bin_size;
+
79  //Calculating the required number of iterations, and returning
+
80  //1 << (iteration_count + min_size)
+
81  if (log_range < base_range) {
+
82  unsigned result = log_min_split_count;
+
83  for (unsigned offset = min_size; offset < log_range;
+
84  offset += ++result);
+
85  //Preventing overflow; this situation shouldn't occur
+
86  if ((result + log_mean_bin_size) >= (8 * sizeof(size_t)))
+
87  return typed_one << ((8 * sizeof(size_t)) - 1);
+
88  return typed_one << (result + log_mean_bin_size);
+
89  }
+
90  //A quick division can calculate the worst-case runtime for larger ranges
+
91  unsigned remainder = log_range - base_range;
+
92  //the max_splits - 1 is used to calculate the ceiling of the division
+
93  unsigned bit_length = ((((max_splits - 1) + remainder)/max_splits)
+
94  + base_iterations + min_size);
+
95  //Preventing overflow; this situation shouldn't occur
+
96  if (bit_length >= (8 * sizeof(size_t)))
+
97  return typed_one << ((8 * sizeof(size_t)) - 1);
+
98  //n(log_range)/max_splits + C, optimizing worst-case performance
+
99  return typed_one << bit_length;
+
100  }
+
101 
+
102  // Resizes the bin cache and bin sizes, and initializes each bin size to 0.
+
103  // This generates the memory overhead to use in radix sorting.
+
104  template <class RandomAccessIter>
+
105  inline RandomAccessIter *
+
106  size_bins(size_t *bin_sizes, std::vector<RandomAccessIter>
+
107  &bin_cache, unsigned cache_offset, unsigned &cache_end, unsigned bin_count)
+
108  {
+
109  // Clear the bin sizes
+
110  for (size_t u = 0; u < bin_count; u++)
+
111  bin_sizes[u] = 0;
+
112  //Make sure there is space for the bins
+
113  cache_end = cache_offset + bin_count;
+
114  if (cache_end > bin_cache.size())
+
115  bin_cache.resize(cache_end);
+
116  return &(bin_cache[cache_offset]);
+
117  }
+
118  }
+
119 }
+
120 }
+
121 
+
122 #endif
+
Definition: constants.hpp:11
+
Definition: constants.hpp:22
+
size_t get_min_count(unsigned log_range)
Definition: spreadsort_common.hpp:51
+
Definition: constants.hpp:19
+
unsigned rough_log_2_size(const T &input)
Definition: spreadsort_common.hpp:34
+ +
RandomAccessIter * size_bins(size_t *bin_sizes, std::vector< RandomAccessIter > &bin_cache, unsigned cache_offset, unsigned &cache_end, unsigned bin_count)
Definition: spreadsort_common.hpp:106
+
+ + + + diff --git a/doc/doxygen/html/string__sort_8hpp.html b/doc/doxygen/html/string__sort_8hpp.html new file mode 100644 index 0000000..b14c49b --- /dev/null +++ b/doc/doxygen/html/string__sort_8hpp.html @@ -0,0 +1,152 @@ + + + + + + +Boost.Sort: I:/modular-boost/libs/sort/include/boost/sort/spreadsort/string_sort.hpp File Reference + + + + + + + + + + +
+
+ + + + + + +
+
Boost.Sort +
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
string_sort.hpp File Reference
+
+
+
#include <algorithm>
+#include <vector>
+#include <cstring>
+#include <limits>
+#include <boost/static_assert.hpp>
+#include <boost/sort/spreadsort/detail/constants.hpp>
+#include <boost/sort/spreadsort/detail/string_sort.hpp>
+
+

Go to the source code of this file.

+ + + + + + +

+Namespaces

 boost
 
 boost::sort
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

template<class RandomAccessIter , class Unsigned_char_type >
void boost::sort::string_sort (RandomAccessIter first, RandomAccessIter last, Unsigned_char_type unused)
 String sort algorithm using random access iterators, allowing character-type overloads.
+ (All variants fall back to std::sort if the data size is too small, < detail::min_sort_size). More...
 
template<class RandomAccessIter >
void boost::sort::string_sort (RandomAccessIter first, RandomAccessIter last)
 String sort algorithm using random access iterators, wraps using default of unsigned char. (All variants fall back to std::sort if the data size is too small, < detail::min_sort_size). More...
 
template<class RandomAccessIter , class Compare , class Unsigned_char_type >
void boost::sort::reverse_string_sort (RandomAccessIter first, RandomAccessIter last, Compare comp, Unsigned_char_type unused)
 String sort algorithm using random access iterators, allowing character-type overloads. More...
 
template<class RandomAccessIter , class Compare >
void boost::sort::reverse_string_sort (RandomAccessIter first, RandomAccessIter last, Compare comp)
 String sort algorithm using random access iterators, wraps using default of unsigned char. More...
 
template<class RandomAccessIter , class Get_char , class Get_length >
void boost::sort::string_sort (RandomAccessIter first, RandomAccessIter last, Get_char getchar, Get_length length)
 String sort algorithm using random access iterators, wraps using default of unsigned char. More...
 
template<class RandomAccessIter , class Get_char , class Get_length , class Compare >
void boost::sort::string_sort (RandomAccessIter first, RandomAccessIter last, Get_char getchar, Get_length length, Compare comp)
 String sort algorithm using random access iterators, wraps using default of unsigned char. More...
 
template<class RandomAccessIter , class Get_char , class Get_length , class Compare >
void boost::sort::reverse_string_sort (RandomAccessIter first, RandomAccessIter last, Get_char getchar, Get_length length, Compare comp)
 Reverse String sort algorithm using random access iterators. More...
 
+
+ + + + diff --git a/doc/doxygen/html/string__sort_8hpp_source.html b/doc/doxygen/html/string__sort_8hpp_source.html new file mode 100644 index 0000000..449093f --- /dev/null +++ b/doc/doxygen/html/string__sort_8hpp_source.html @@ -0,0 +1,574 @@ + + + + + + +Boost.Sort: I:/modular-boost/libs/sort/include/boost/sort/spreadsort/string_sort.hpp Source File + + + + + + + + + + +
+
+ + + + + + +
+
Boost.Sort +
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+
+
string_sort.hpp
+
+
+Go to the documentation of this file.
1 //Templated hybrid string_sort
+
2 
+
3 // Copyright Steven J. Ross 2001 - 2009.
+
4 // Distributed under the Boost Software License, Version 1.0.
+
5 // (See accompanying file LICENSE_1_0.txt or copy at
+
6 // http://www.boost.org/LICENSE_1_0.txt)
+
7 
+
8 // See http://www.boost.org/libs/sort/ for library home page.
+
9 
+
10 /*
+
11 Some improvements suggested by:
+
12 Phil Endecott and Frank Gennari
+
13 */
+
14 
+
15 #ifndef BOOST_STRING_SORT_HPP
+
16 #define BOOST_STRING_SORT_HPP
+
17 #include <algorithm>
+
18 #include <vector>
+
19 #include <cstring>
+
20 #include <limits>
+
21 #include <boost/static_assert.hpp>
+
22 #include <boost/sort/spreadsort/detail/constants.hpp>
+
23 #include <boost/sort/spreadsort/detail/string_sort.hpp>
+
24 
+
25 namespace boost {
+
26 namespace sort {
+
27 
+
28 /*! \brief String sort algorithm using random access iterators, allowing character-type overloads.\n
+
29  (All variants fall back to @c std::sort if the data size is too small, < @c detail::min_sort_size).
+
30 
+
31  \details @c string_sort is a fast templated in-place hybrid radix/comparison algorithm,
+
32 which in testing tends to be roughly 50% to 2X faster than @c std::sort for large tests (>=100kB).\n
+
33 \par
+
34 Worst-case performance is <em> O(N * (lg(range)/s + s)) </em>,
+
35 so @c integer_sort is asymptotically faster
+
36 than pure comparison-based algorithms. @c s is @c max_splits, which defaults to 11,
+
37 so its worst-case with default settings for 32-bit integers is
+
38 <em> O(N * ((32/11) </em> slow radix-based iterations fast comparison-based iterations).\n\n
+
39 Some performance plots of runtime vs. n and log(range) are provided:\n
+
40 <a href="../../doc/graph/windows_string_sort.htm"> windows_string_sort</a>\n
+
41 <a href="../../doc/graph/osx_string_sort.htm"> osx_string_sort</a>
+
42 
+
43  \tparam RandomAccessIter <a href="http://www.cplusplus.com/reference/iterator/RandomAccessIterator/">Random access iterator</a>
+
44  \tparam Unsigned_char_type Unsigned character type used for string.
+
45  \param[in] first Iterator pointer to first element.
+
46  \param[in] last Iterator pointing to one beyond the end of data.
+
47  \param[in] unused Unused ???
+
48 
+
49  \pre [@c first, @c last) is a valid range.
+
50  \pre @c RandomAccessIter @c value_type is mutable.
+
51  \pre @c RandomAccessIter @c value_type is <a href="http://en.cppreference.com/w/cpp/concept/LessThanComparable">LessThanComparable</a>
+
52  \pre @c RandomAccessIter @c value_type supports the @c operator>>,
+
53  which returns an integer-type right-shifted a specified number of bits.
+
54  \post The elements in the range [@c first, @c last) are sorted in ascending order.
+
55 
+
56  \throws std::exception Propagates exceptions if any of the element comparisons, the element swaps (or moves),
+
57  the right shift, subtraction of right-shifted elements, functors,
+
58  or any operations on iterators throw.
+
59 
+
60  \warning Throwing an exception may cause data loss. This will also throw if a small vector resize throws, in which case there will be no data loss.
+
61  \warning Invalid arguments cause undefined behaviour.
+
62  \note @c spreadsort function provides a wrapper that calls the fastest sorting algorithm available for a data type,
+
63  enabling faster generic-programming.
+
64 
+
65  \remark The lesser of <em> O(N*log(N)) </em> comparisons and <em> O(N*log(K/S + S)) </em>operations worst-case, where:
+
66  \remark * N is @c last - @c first,
+
67  \remark * K is the log of the range in bits (32 for 32-bit integers using their full range),
+
68  \remark * S is a constant called max_splits, defaulting to 11 (except for strings where it is the log of the character size).
+
69 
+
70 */
+
71 
+
72  template <class RandomAccessIter, class Unsigned_char_type>
+
73  inline void string_sort(RandomAccessIter first, RandomAccessIter last,
+
74  Unsigned_char_type unused)
+
75  {
+
76  //Don't sort if it's too small to optimize
+
77  if (last - first < detail::min_sort_size)
+
78  std::sort(first, last);
+
79  else
+
80  detail::string_sort(first, last, unused);
+
81  }
+
82 
+
83 
+
84 /*! \brief String sort algorithm using random access iterators, wraps using default of unsigned char.
+
85  (All variants fall back to @c std::sort if the data size is too small, < @c detail::min_sort_size).
+
86 
+
87  \details @c string_sort is a fast templated in-place hybrid radix/comparison algorithm,
+
88 which in testing tends to be roughly 50% to 2X faster than @c std::sort for large tests (>=100kB).\n
+
89 Worst-case performance is <em> O(N * (lg(range)/s + s)) </em>,
+
90 so @c integer_sort is asymptotically faster
+
91 than pure comparison-based algorithms. @c s is @c max_splits, which defaults to 11,
+
92 so its worst-case with default settings for 32-bit integers is
+
93 <em> O(N * ((32/11) </em> slow radix-based iterations fast comparison-based iterations).\n\n
+
94 Some performance plots of runtime vs. n and log(range) are provided:\n
+
95  <a href="../../doc/graph/windows_string_sort.htm"> windows_string_sort</a>
+
96  \n
+
97  <a href="../../doc/graph/osx_string_sort.htm"> osx_string_sort</a>
+
98 
+
99  \tparam RandomAccessIter <a href="http://www.cplusplus.com/reference/iterator/RandomAccessIterator/">Random access iterator</a>
+
100  \param[in] first Iterator pointer to first element.
+
101  \param[in] last Iterator pointing to one beyond the end of data.
+
102 
+
103  \pre [@c first, @c last) is a valid range.
+
104  \pre @c RandomAccessIter @c value_type is mutable.
+
105  \pre @c RandomAccessIter @c value_type is <a href="http://en.cppreference.com/w/cpp/concept/LessThanComparable">LessThanComparable</a>
+
106  \pre @c RandomAccessIter @c value_type supports the @c operator>>,
+
107  which returns an integer-type right-shifted a specified number of bits.
+
108  \post The elements in the range [@c first, @c last) are sorted in ascending order.
+
109 
+
110  \throws std::exception Propagates exceptions if any of the element comparisons, the element swaps (or moves),
+
111  the right shift, subtraction of right-shifted elements, functors,
+
112  or any operations on iterators throw.
+
113 
+
114  \warning Throwing an exception may cause data loss. This will also throw if a small vector resize throws, in which case there will be no data loss.
+
115  \warning Invalid arguments cause undefined behaviour.
+
116  \note @c spreadsort function provides a wrapper that calls the fastest sorting algorithm available for a data type,
+
117  enabling faster generic-programming.
+
118 
+
119  \remark The lesser of <em> O(N*log(N)) </em> comparisons and <em> O(N*log(K/S + S)) </em>operations worst-case, where:
+
120  \remark * N is @c last - @c first,
+
121  \remark * K is the log of the range in bits (32 for 32-bit integers using their full range),
+
122  \remark * S is a constant called max_splits, defaulting to 11 (except for strings where it is the log of the character size).
+
123 
+
124 */
+
125  template <class RandomAccessIter>
+
126  inline void string_sort(RandomAccessIter first, RandomAccessIter last)
+
127  {
+
128  unsigned char unused = '\0';
+
129  string_sort(first, last, unused);
+
130  }
+
131 
+
132 
+
133 /*! \brief String sort algorithm using random access iterators, allowing character-type overloads.
+
134 
+
135  (All variants fall back to @c std::sort if the data size is too small, < detail::min_sort_size).
+
136 
+
137  \details @c integer_sort is a fast templated in-place hybrid radix/comparison algorithm,
+
138 which in testing tends to be roughly 50% to 2X faster than @c std::sort for large tests (>=100kB).\n
+
139 Worst-case performance is <em> O(N * (lg(range)/s + s)) </em>,
+
140 so @c integer_sort is asymptotically faster
+
141 than pure comparison-based algorithms. @c s is @c max_splits, which defaults to 11,
+
142 so its worst-case with default settings for 32-bit integers is
+
143 <em> O(N * ((32/11) </em> slow radix-based iterations fast comparison-based iterations).\n\n
+
144 Some performance plots of runtime vs. n and log(range) are provided:\n
+
145  <a href="../../doc/graph/windows_integer_sort.htm"> windows_integer_sort</a>
+
146  \n
+
147  <a href="../../doc/graph/osx_integer_sort.htm"> osx_integer_sort</a>
+
148 
+
149 
+
150  \tparam RandomAccessIter <a href="http://www.cplusplus.com/reference/iterator/RandomAccessIterator/">Random access iterator</a>
+
151  \tparam Comp To provide @c operator< for user-defined comparison.
+
152  \tparam Unsigned_char_type Unsigned character type used for string.
+
153 
+
154  \param[in] first Iterator pointer to first element.
+
155  \param[in] last Iterator pointing to one beyond the end of data.
+
156  \param[in] comp comparison functor.
+
157  \param[in] unused Unused ???
+
158 
+
159  \pre [@c first, @c last) is a valid range.
+
160  \pre @c RandomAccessIter @c value_type is mutable.
+
161  \pre @c RandomAccessIter @c value_type is <a href="http://en.cppreference.com/w/cpp/concept/LessThanComparable">LessThanComparable</a>
+
162  \pre @c RandomAccessIter @c value_type supports the @c operator>>,
+
163  which returns an integer-type right-shifted a specified number of bits.
+
164  \post The elements in the range [@c first, @c last) are sorted in ascending order.
+
165 
+
166  \return @c void.
+
167 
+
168  \throws std::exception Propagates exceptions if any of the element comparisons, the element swaps (or moves),
+
169  the right shift, subtraction of right-shifted elements, functors,
+
170  or any operations on iterators throw.
+
171 
+
172  \warning Throwing an exception may cause data loss. This will also throw if a small vector resize throws, in which case there will be no data loss.
+
173  \warning Invalid arguments cause undefined behaviour.
+
174  \note @c spreadsort function provides a wrapper that calls the fastest sorting algorithm available for a data type,
+
175  enabling faster generic-programming.
+
176 
+
177  \remark The lesser of <em> O(N*log(N)) </em> comparisons and <em> O(N*log(K/S + S)) </em>operations worst-case, where:
+
178  \remark * N is @c last - @c first,
+
179  \remark * K is the log of the range in bits (32 for 32-bit integers using their full range),
+
180  \remark * S is a constant called max_splits, defaulting to 11 (except for strings where it is the log of the character size).
+
181 */
+
182  template <class RandomAccessIter, class Compare, class Unsigned_char_type>
+
183  inline void reverse_string_sort(RandomAccessIter first,
+
184  RandomAccessIter last, Compare comp, Unsigned_char_type unused)
+
185  {
+
186  //Don't sort if it's too small to optimize.
+
187  if (last - first < detail::min_sort_size)
+
188  std::sort(first, last, comp);
+
189  else
+
190  detail::reverse_string_sort(first, last, unused);
+
191  }
+
192 
+
193 
+
194 /*! \brief String sort algorithm using random access iterators, wraps using default of @c unsigned char.
+
195 
+
196  (All variants fall back to @c std::sort if the data size is too small, < @c detail::min_sort_size).
+
197 
+
198  \details @c integer_sort is a fast templated in-place hybrid radix/comparison algorithm,
+
199 which in testing tends to be roughly 50% to 2X faster than @c std::sort for large tests (>=100kB).\n
+
200 Worst-case performance is <em> O(N * (lg(range)/s + s)) </em>,
+
201 so @c integer_sort is asymptotically faster
+
202 than pure comparison-based algorithms. @c s is @c max_splits, which defaults to 11,
+
203 so its worst-case with default settings for 32-bit integers is
+
204 <em> O(N * ((32/11) </em> slow radix-based iterations fast comparison-based iterations).\n\n
+
205 Some performance plots of runtime vs. n and log(range) are provided:\n
+
206  <a href="../../doc/graph/windows_integer_sort.htm"> windows_integer_sort</a>
+
207  \n
+
208  <a href="../../doc/graph/osx_integer_sort.htm"> osx_integer_sort</a>
+
209 
+
210 
+
211  \tparam RandomAccessIter <a href="http://www.cplusplus.com/reference/iterator/RandomAccessIterator/">Random access iterator</a>
+
212  \tparam Comp To provide @c operator< for user-defined comparison.
+
213 
+
214  \param[in] first Iterator pointer to first element.
+
215  \param[in] last Iterator pointing to one beyond the end of data.
+
216  \param[in] comp Comparison functor.
+
217 
+
218  \pre [@c first, @c last) is a valid range.
+
219  \pre @c RandomAccessIter @c value_type is mutable.
+
220  \pre @c RandomAccessIter @c value_type is <a href="http://en.cppreference.com/w/cpp/concept/LessThanComparable">LessThanComparable</a>
+
221  \pre @c RandomAccessIter @c value_type supports the @c operator>>,
+
222  which returns an integer-type right-shifted a specified number of bits.
+
223  \post The elements in the range [@c first, @c last) are sorted in ascending order.
+
224 
+
225  \return @c void.
+
226 
+
227  \throws std::exception Propagates exceptions if any of the element comparisons, the element swaps (or moves),
+
228  the right shift, subtraction of right-shifted elements, functors,
+
229  or any operations on iterators throw.
+
230 
+
231  \warning Throwing an exception may cause data loss. This will also throw if a small vector resize throws, in which case there will be no data loss.
+
232  \warning Invalid arguments cause undefined behaviour.
+
233  \note @c spreadsort function provides a wrapper that calls the fastest sorting algorithm available for a data type,
+
234  enabling faster generic-programming.
+
235 
+
236  \remark The lesser of <em> O(N*log(N)) </em> comparisons and <em> O(N*log(K/S + S)) </em>operations worst-case, where:
+
237  \remark * N is @c last - @c first,
+
238  \remark * K is the log of the range in bits (32 for 32-bit integers using their full range),
+
239  \remark * S is a constant called max_splits, defaulting to 11 (except for strings where it is the log of the character size).
+
240 */
+
241  template <class RandomAccessIter, class Compare>
+
242  inline void reverse_string_sort(RandomAccessIter first,
+
243  RandomAccessIter last, Compare comp)
+
244  {
+
245  unsigned char unused = '\0';
+
246  reverse_string_sort(first, last, comp, unused);
+
247  }
+
248 
+
249 
+
250 /*! \brief String sort algorithm using random access iterators, wraps using default of @c unsigned char.
+
251 
+
252  (All variants fall back to @c std::sort if the data size is too small, < @c detail::min_sort_size).
+
253 
+
254  \details @c integer_sort is a fast templated in-place hybrid radix/comparison algorithm,
+
255 which in testing tends to be roughly 50% to 2X faster than @c std::sort for large tests (>=100kB).\n
+
256 Worst-case performance is <em> O(N * (lg(range)/s + s)) </em>,
+
257 so @c integer_sort is asymptotically faster
+
258 than pure comparison-based algorithms. @c s is @c max_splits, which defaults to 11,
+
259 so its worst-case with default settings for 32-bit integers is
+
260 <em> O(N * ((32/11) </em> slow radix-based iterations fast comparison-based iterations).\n\n
+
261 Some performance plots of runtime vs. n and log(range) are provided:\n
+
262  <a href="../../doc/graph/windows_integer_sort.htm"> windows_integer_sort</a>
+
263  \n
+
264  <a href="../../doc/graph/osx_integer_sort.htm"> osx_integer_sort</a>
+
265 
+
266 
+
267  \tparam RandomAccessIter <a href="http://www.cplusplus.com/reference/iterator/RandomAccessIterator/">Random access iterator</a>
+
268  \tparam Get_char Bracket functor equivalent to @c operator[], taking a number corresponding to the character offset..
+
269  \tparam Get_length Functor to get the length of the string in characters. TODO Check this and below and other places!!!
+
270 
+
271  \param[in] first Iterator pointer to first element.
+
272  \param[in] last Iterator pointing to one beyond the end of data.
+
273  \param[in] getchar Number corresponding to the character offset from bracket functor equivalent to @c operator[].
+
274  \param[in] length Functor to get the length of the string in characters.
+
275 
+
276  \pre [@c first, @c last) is a valid range.
+
277  \pre @c RandomAccessIter @c value_type is mutable.
+
278  \pre @c RandomAccessIter @c value_type is <a href="http://en.cppreference.com/w/cpp/concept/LessThanComparable">LessThanComparable</a>
+
279  \pre @c RandomAccessIter @c value_type supports the @c operator>>,
+
280  which returns an integer-type right-shifted a specified number of bits.
+
281  \post The elements in the range [@c first, @c last) are sorted in ascending order.
+
282 
+
283  \return @c void.
+
284 
+
285  \throws std::exception Propagates exceptions if any of the element comparisons, the element swaps (or moves),
+
286  the right shift, subtraction of right-shifted elements, functors,
+
287  or any operations on iterators throw.
+
288 
+
289  \warning Throwing an exception may cause data loss. This will also throw if a small vector resize throws, in which case there will be no data loss.
+
290  \warning Invalid arguments cause undefined behaviour.
+
291  \note @c spreadsort function provides a wrapper that calls the fastest sorting algorithm available for a data type,
+
292  enabling faster generic-programming.
+
293 
+
294  \remark The lesser of <em> O(N*log(N)) </em> comparisons and <em> O(N*log(K/S + S)) </em>operations worst-case, where:
+
295  \remark * N is @c last - @c first,
+
296  \remark * K is the log of the range in bits (32 for 32-bit integers using their full range),
+
297  \remark * S is a constant called max_splits, defaulting to 11 (except for strings where it is the log of the character size).
+
298 
+
299 */
+
300  template <class RandomAccessIter, class Get_char, class Get_length>
+
301  inline void string_sort(RandomAccessIter first, RandomAccessIter last,
+
302  Get_char getchar, Get_length length)
+
303  {
+
304  //Don't sort if it's too small to optimize
+
305  if (last - first < detail::min_sort_size)
+
306  std::sort(first, last);
+
307  else {
+
308  //skipping past empties, which allows us to get the character type
+
309  //.empty() is not used so as not to require a user declaration of it
+
310  while (!length(*first)) {
+
311  if (++first == last)
+
312  return;
+
313  }
+
314  detail::string_sort(first, last, getchar, length, getchar((*first), 0));
+
315  }
+
316  }
+
317 
+
318 
+
319 
+
320 /*! \brief String sort algorithm using random access iterators, wraps using default of @c unsigned char.
+
321 
+
322  (All variants fall back to @c std::sort if the data size is too small, < @c detail::min_sort_size).
+
323 
+
324  \details @c integer_sort is a fast templated in-place hybrid radix/comparison algorithm,
+
325 which in testing tends to be roughly 50% to 2X faster than @c std::sort for large tests (>=100kB).\n
+
326 Worst-case performance is <em> O(N * (lg(range)/s + s)) </em>,
+
327 so @c integer_sort is asymptotically faster
+
328 than pure comparison-based algorithms. @c s is @c max_splits, which defaults to 11,
+
329 so its worst-case with default settings for 32-bit integers is
+
330 <em> O(N * ((32/11) </em> slow radix-based iterations fast comparison-based iterations).\n\n
+
331 Some performance plots of runtime vs. n and log(range) are provided:\n
+
332  <a href="../../doc/graph/windows_integer_sort.htm"> windows_integer_sort</a>
+
333  \n
+
334  <a href="../../doc/graph/osx_integer_sort.htm"> osx_integer_sort</a>
+
335 
+
336 
+
337  \tparam RandomAccessIter <a href="http://www.cplusplus.com/reference/iterator/RandomAccessIterator/">Random access iterator</a>
+
338  \tparam Get_char ???.
+
339  \tparam Get_length ??? TODO
+
340  \tparam Comp To provide @c operator< for user-defined comparison.
+
341 
+
342 
+
343  \param[in] first Iterator pointer to first element.
+
344  \param[in] last Iterator pointing to one beyond the end of data.
+
345  \param[in] comp comparison functor.
+
346  \param[in] getchar ???
+
347  \param[in] length ???
+
348 
+
349 
+
350  \pre [@c first, @c last) is a valid range.
+
351  \pre @c RandomAccessIter @c value_type is mutable.
+
352  \pre @c RandomAccessIter @c value_type is <a href="http://en.cppreference.com/w/cpp/concept/LessThanComparable">LessThanComparable</a>
+
353  \post The elements in the range [@c first, @c last) are sorted in ascending order.
+
354 
+
355  \return @c void.
+
356 
+
357  \throws std::exception Propagates exceptions if any of the element comparisons, the element swaps (or moves),
+
358  the right shift, subtraction of right-shifted elements, functors,
+
359  or any operations on iterators throw.
+
360 
+
361  \warning Throwing an exception may cause data loss. This will also throw if a small vector resize throws, in which case there will be no data loss.
+
362  \warning Invalid arguments cause undefined behaviour.
+
363  \note @c spreadsort function provides a wrapper that calls the fastest sorting algorithm available for a data type,
+
364  enabling faster generic-programming.
+
365 
+
366  \remark The lesser of <em> O(N*log(N)) </em> comparisons and <em> O(N*log(K/S + S)) </em>operations worst-case, where:
+
367  \remark * N is @c last - @c first,
+
368  \remark * K is the log of the range in bits (32 for 32-bit integers using their full range),
+
369  \remark * S is a constant called max_splits, defaulting to 11 (except for strings where it is the log of the character size).
+
370 
+
371 */
+
372  template <class RandomAccessIter, class Get_char, class Get_length,
+
373  class Compare>
+
374  inline void string_sort(RandomAccessIter first, RandomAccessIter last,
+
375  Get_char getchar, Get_length length, Compare comp)
+
376  {
+
377  //Don't sort if it's too small to optimize
+
378  if (last - first < detail::min_sort_size)
+
379  std::sort(first, last, comp);
+
380  else {
+
381  //skipping past empties, which allows us to get the character type
+
382  //.empty() is not used so as not to require a user declaration of it
+
383  while (!length(*first)) {
+
384  if (++first == last)
+
385  return;
+
386  }
+
387  detail::string_sort(first, last, getchar, length, comp,
+
388  getchar((*first), 0));
+
389  }
+
390  }
+
391 
+
392 
+
393 /*! \brief Reverse String sort algorithm using random access iterators.
+
394 
+
395  (All variants fall back to @c std::sort if the data size is too small, < @c detail::min_sort_size).
+
396 
+
397  \details @c integer_sort is a fast templated in-place hybrid radix/comparison algorithm,
+
398 which in testing tends to be roughly 50% to 2X faster than @c std::sort for large tests (>=100kB).\n
+
399 Worst-case performance is <em> O(N * (lg(range)/s + s)) </em>,
+
400 so @c integer_sort is asymptotically faster
+
401 than pure comparison-based algorithms. @c s is @c max_splits, which defaults to 11,
+
402 so its worst-case with default settings for 32-bit integers is
+
403 <em> O(N * ((32/11) </em> slow radix-based iterations fast comparison-based iterations).\n\n
+
404 Some performance plots of runtime vs. n and log(range) are provided:\n
+
405  <a href="../../doc/graph/windows_integer_sort.htm"> windows_integer_sort</a>
+
406  \n
+
407  <a href="../../doc/graph/osx_integer_sort.htm"> osx_integer_sort</a>
+
408 
+
409 
+
410  \tparam RandomAccessIter <a href="http://www.cplusplus.com/reference/iterator/RandomAccessIterator/">Random access iterator</a>
+
411  \tparam Get_char ???.
+
412  \tparam Get_length ??? TODO
+
413  \tparam Comp To provide @c operator< for user-defined comparison.
+
414 
+
415 
+
416  \param[in] first Iterator pointer to first element.
+
417  \param[in] last Iterator pointing to one beyond the end of data.
+
418  \param[in] comp comparison functor.
+
419  \param[in] getchar ???
+
420  \param[in] length ???
+
421 
+
422 
+
423  \pre [@c first, @c last) is a valid range.
+
424  \pre @c RandomAccessIter @c value_type is mutable.
+
425  \pre @c RandomAccessIter @c value_type is <a href="http://en.cppreference.com/w/cpp/concept/LessThanComparable">LessThanComparable</a>
+
426  \post The elements in the range [@c first, @c last) are sorted in ascending order.
+
427 
+
428  \return @c void.
+
429 
+
430  \throws std::exception Propagates exceptions if any of the element comparisons, the element swaps (or moves),
+
431  the right shift, subtraction of right-shifted elements, functors,
+
432  or any operations on iterators throw.
+
433 
+
434  \warning Throwing an exception may cause data loss. This will also throw if a small vector resize throws, in which case there will be no data loss.
+
435  \warning Invalid arguments cause undefined behaviour.
+
436  \note @c spreadsort function provides a wrapper that calls the fastest sorting algorithm available for a data type,
+
437  enabling faster generic-programming.
+
438 
+
439  \remark The lesser of <em> O(N*log(N)) </em> comparisons and <em> O(N*log(K/S + S)) </em>operations worst-case, where:
+
440  \remark * N is @c last - @c first,
+
441  \remark * K is the log of the range in bits (32 for 32-bit integers using their full range),
+
442  \remark * S is a constant called max_splits, defaulting to 11 (except for strings where it is the log of the character size).
+
443 
+
444 */
+
445  template <class RandomAccessIter, class Get_char, class Get_length,
+
446  class Compare>
+
447  inline void reverse_string_sort(RandomAccessIter first,
+
448  RandomAccessIter last, Get_char getchar, Get_length length, Compare comp)
+
449  {
+
450  //Don't sort if it's too small to optimize
+
451  if (last - first < detail::min_sort_size)
+
452  std::sort(first, last, comp);
+
453  else {
+
454  //skipping past empties, which allows us to get the character type
+
455  //.empty() is not used so as not to require a user declaration of it
+
456  while (!length(*(--last))) {
+
457  //If there is just one non-empty at the beginning, this is sorted
+
458  if (first == last)
+
459  return;
+
460  }
+
461  //making last just after the end of the non-empty part of the array
+
462  detail::reverse_string_sort(first, last + 1, getchar, length, comp,
+
463  getchar((*last), 0));
+
464  }
+
465  }
+
466 }
+
467 }
+
468 
+
469 #endif
+
Definition: float_sort.hpp:27
+
void string_sort(RandomAccessIter first, RandomAccessIter last, Get_char getchar, Get_length length, Compare comp)
String sort algorithm using random access iterators, wraps using default of unsigned char...
Definition: string_sort.hpp:374
+
void string_sort(RandomAccessIter first, RandomAccessIter last, Unsigned_char_type unused)
String sort algorithm using random access iterators, allowing character-type overloads. (All variants fall back to std::sort if the data size is too small, < detail::min_sort_size).
Definition: string_sort.hpp:73
+
void reverse_string_sort(RandomAccessIter first, RandomAccessIter last, Compare comp, Unsigned_char_type unused)
String sort algorithm using random access iterators, allowing character-type overloads.
Definition: string_sort.hpp:183
+
void reverse_string_sort(RandomAccessIter first, RandomAccessIter last, Get_char getchar, Get_length length, Compare comp)
Reverse String sort algorithm using random access iterators.
Definition: string_sort.hpp:447
+
+ + + + diff --git a/doc/doxygen/html/stringfunctorsample_8cpp.html b/doc/doxygen/html/stringfunctorsample_8cpp.html new file mode 100644 index 0000000..3fd32bd --- /dev/null +++ b/doc/doxygen/html/stringfunctorsample_8cpp.html @@ -0,0 +1,161 @@ + + + + + + +Boost.Sort: I:/modular-boost/libs/sort/example/stringfunctorsample.cpp File Reference + + + + + + + + + + +
+
+ + + + + + +
+
Boost.Sort +
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
stringfunctorsample.cpp File Reference
+
+
+ +

spreadsort string functor sorting example. +More...

+
#include <boost/sort/spreadsort/string_sort.hpp>
+#include <time.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <algorithm>
+#include <vector>
+#include <iostream>
+#include <fstream>
+#include <string>
+
+ + + + + + + + + +

+Classes

struct  DATA_TYPE
 
struct  lessthan
 
struct  bracket
 
struct  getsize
 
+ + + +

+Functions

int main (int argc, const char **argv)
 
+

Detailed Description

+

spreadsort string functor sorting example.

+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
int main (int argc,
const char ** argv 
)
+
+ +
+
+
+ + + + diff --git a/doc/doxygen/html/stringsample_8cpp.html b/doc/doxygen/html/stringsample_8cpp.html new file mode 100644 index 0000000..4dfe381 --- /dev/null +++ b/doc/doxygen/html/stringsample_8cpp.html @@ -0,0 +1,163 @@ + + + + + + +Boost.Sort: I:/modular-boost/libs/sort/example/stringsample.cpp File Reference + + + + + + + + + + +
+
+ + + + + + +
+
Boost.Sort +
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
stringsample.cpp File Reference
+
+
+
#include <boost/sort/spreadsort/string_sort.hpp>
+#include <time.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <algorithm>
+#include <vector>
+#include <iostream>
+#include <fstream>
+#include <string>
+
+ + + +

+Macros

#define DATA_TYPE   string
 
+ + + +

+Functions

int main (int argc, const char **argv)
 
+

Macro Definition Documentation

+ +
+
+ + + + +
#define DATA_TYPE   string
+
+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
int main (int argc,
const char ** argv 
)
+
+ +
+
+
+ + + + diff --git a/doc/doxygen/html/struct_d_a_t_a___t_y_p_e-members.html b/doc/doxygen/html/struct_d_a_t_a___t_y_p_e-members.html new file mode 100644 index 0000000..24c0cec --- /dev/null +++ b/doc/doxygen/html/struct_d_a_t_a___t_y_p_e-members.html @@ -0,0 +1,109 @@ + + + + + + +Boost.Sort: Member List + + + + + + + + + + +
+
+ + + + + + +
+
Boost.Sort +
+
+
+ + + + + + +
+
+ + +
+ +
+ +
+
+
+
DATA_TYPE Member List
+
+
+ +

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

+ + + + + + + + + + +
aDATA_TYPE
birthDATA_TYPE
dataDATA_TYPE
first_nameDATA_TYPE
keyDATA_TYPE
keyDATA_TYPE
last_nameDATA_TYPE
net_worthDATA_TYPE
operator<(const DATA_TYPE &y) const DATA_TYPEinline
+ + + + diff --git a/doc/doxygen/html/struct_d_a_t_a___t_y_p_e.html b/doc/doxygen/html/struct_d_a_t_a___t_y_p_e.html new file mode 100644 index 0000000..7d7edcd --- /dev/null +++ b/doc/doxygen/html/struct_d_a_t_a___t_y_p_e.html @@ -0,0 +1,257 @@ + + + + + + +Boost.Sort: DATA_TYPE Struct Reference + + + + + + + + + + +
+
+ + + + + + +
+
Boost.Sort +
+
+
+ + + + + + +
+
+ + +
+ +
+ +
+
+ +
+
DATA_TYPE Struct Reference
+
+
+ + + + +

+Public Member Functions

bool operator< (const DATA_TYPE &y) const
 
+ + + + + + + + + + + + + + + + + +

+Public Attributes

string a
 
KEY_TYPE key
 
std::string data
 
time_t birth
 
float net_worth
 
string first_name
 
string last_name
 
int key
 
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
bool DATA_TYPE::operator< (const DATA_TYPEy) const
+
+inline
+
+ +
+
+

Member Data Documentation

+ +
+
+ + + + +
string DATA_TYPE::a
+
+ +
+
+ +
+
+ + + + +
time_t DATA_TYPE::birth
+
+ +
+
+ +
+
+ + + + +
std::string DATA_TYPE::data
+
+ +
+
+ +
+
+ + + + +
string DATA_TYPE::first_name
+
+ +
+
+ +
+
+ + + + +
int DATA_TYPE::key
+
+ +
+
+ +
+
+ + + + +
KEY_TYPE DATA_TYPE::key
+
+ +
+
+ +
+
+ + + + +
string DATA_TYPE::last_name
+
+ +
+
+ +
+
+ + + + +
float DATA_TYPE::net_worth
+
+ +
+
+
The documentation for this struct was generated from the following files: +
+ + + + diff --git a/doc/doxygen/html/structboost_1_1sort_1_1detail_1_1offset__char__less__than-members.html b/doc/doxygen/html/structboost_1_1sort_1_1detail_1_1offset__char__less__than-members.html new file mode 100644 index 0000000..721ef36 --- /dev/null +++ b/doc/doxygen/html/structboost_1_1sort_1_1detail_1_1offset__char__less__than-members.html @@ -0,0 +1,109 @@ + + + + + + +Boost.Sort: Member List + + + + + + + + + + +
+
+ + + + + + +
+
Boost.Sort +
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+
+
boost::sort::detail::offset_char_less_than< Data_type, Get_char, Get_length > Member List
+
+ + + + + diff --git a/doc/doxygen/html/structboost_1_1sort_1_1detail_1_1offset__char__less__than.html b/doc/doxygen/html/structboost_1_1sort_1_1detail_1_1offset__char__less__than.html new file mode 100644 index 0000000..5e4f1e2 --- /dev/null +++ b/doc/doxygen/html/structboost_1_1sort_1_1detail_1_1offset__char__less__than.html @@ -0,0 +1,234 @@ + + + + + + +Boost.Sort: boost::sort::detail::offset_char_less_than< Data_type, Get_char, Get_length > Struct Template Reference + + + + + + + + + + +
+
+ + + + + + +
+
Boost.Sort +
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
boost::sort::detail::offset_char_less_than< Data_type, Get_char, Get_length > Struct Template Reference
+
+
+ +

#include <string_sort.hpp>

+ + + + + + +

+Public Member Functions

 offset_char_less_than (size_t char_offset)
 
bool operator() (const Data_type &x, const Data_type &y) const
 
+ + + + + + + +

+Public Attributes

size_t fchar_offset
 
Get_char getchar
 
Get_length length
 
+

Constructor & Destructor Documentation

+ +
+
+
+template<class Data_type , class Get_char , class Get_length >
+ + + + + +
+ + + + + + + + +
boost::sort::detail::offset_char_less_than< Data_type, Get_char, Get_length >::offset_char_less_than (size_t char_offset)
+
+inline
+
+ +
+
+

Member Function Documentation

+ +
+
+
+template<class Data_type , class Get_char , class Get_length >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool boost::sort::detail::offset_char_less_than< Data_type, Get_char, Get_length >::operator() (const Data_type & x,
const Data_type & y 
) const
+
+inline
+
+ +
+
+

Member Data Documentation

+ +
+
+
+template<class Data_type , class Get_char , class Get_length >
+ + + + +
size_t boost::sort::detail::offset_char_less_than< Data_type, Get_char, Get_length >::fchar_offset
+
+ +
+
+ +
+
+
+template<class Data_type , class Get_char , class Get_length >
+ + + + +
Get_char boost::sort::detail::offset_char_less_than< Data_type, Get_char, Get_length >::getchar
+
+ +
+
+ +
+
+
+template<class Data_type , class Get_char , class Get_length >
+ + + + +
Get_length boost::sort::detail::offset_char_less_than< Data_type, Get_char, Get_length >::length
+
+ +
+
+
The documentation for this struct was generated from the following file:
    +
  • I:/modular-boost/libs/sort/include/boost/sort/spreadsort/detail/string_sort.hpp
  • +
+
+ + + + diff --git a/doc/doxygen/html/structboost_1_1sort_1_1detail_1_1offset__greater__than-members.html b/doc/doxygen/html/structboost_1_1sort_1_1detail_1_1offset__greater__than-members.html new file mode 100644 index 0000000..6bc8cbb --- /dev/null +++ b/doc/doxygen/html/structboost_1_1sort_1_1detail_1_1offset__greater__than-members.html @@ -0,0 +1,107 @@ + + + + + + +Boost.Sort: Member List + + + + + + + + + + +
+
+ + + + + + +
+
Boost.Sort +
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+
+
boost::sort::detail::offset_greater_than< Data_type, Unsigned_char_type > Member List
+
+ + + + + diff --git a/doc/doxygen/html/structboost_1_1sort_1_1detail_1_1offset__greater__than.html b/doc/doxygen/html/structboost_1_1sort_1_1detail_1_1offset__greater__than.html new file mode 100644 index 0000000..55bccad --- /dev/null +++ b/doc/doxygen/html/structboost_1_1sort_1_1detail_1_1offset__greater__than.html @@ -0,0 +1,202 @@ + + + + + + +Boost.Sort: boost::sort::detail::offset_greater_than< Data_type, Unsigned_char_type > Struct Template Reference + + + + + + + + + + +
+
+ + + + + + +
+
Boost.Sort +
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
boost::sort::detail::offset_greater_than< Data_type, Unsigned_char_type > Struct Template Reference
+
+
+ +

#include <string_sort.hpp>

+ + + + + + +

+Public Member Functions

 offset_greater_than (size_t char_offset)
 
bool operator() (const Data_type &x, const Data_type &y) const
 
+ + + +

+Public Attributes

size_t fchar_offset
 
+

Constructor & Destructor Documentation

+ +
+
+
+template<class Data_type , class Unsigned_char_type >
+ + + + + +
+ + + + + + + + +
boost::sort::detail::offset_greater_than< Data_type, Unsigned_char_type >::offset_greater_than (size_t char_offset)
+
+inline
+
+ +
+
+

Member Function Documentation

+ +
+
+
+template<class Data_type , class Unsigned_char_type >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool boost::sort::detail::offset_greater_than< Data_type, Unsigned_char_type >::operator() (const Data_type & x,
const Data_type & y 
) const
+
+inline
+
+ +
+
+

Member Data Documentation

+ +
+
+
+template<class Data_type , class Unsigned_char_type >
+ + + + +
size_t boost::sort::detail::offset_greater_than< Data_type, Unsigned_char_type >::fchar_offset
+
+ +
+
+
The documentation for this struct was generated from the following file:
    +
  • I:/modular-boost/libs/sort/include/boost/sort/spreadsort/detail/string_sort.hpp
  • +
+
+ + + + diff --git a/doc/doxygen/html/structboost_1_1sort_1_1detail_1_1offset__less__than-members.html b/doc/doxygen/html/structboost_1_1sort_1_1detail_1_1offset__less__than-members.html new file mode 100644 index 0000000..24552fb --- /dev/null +++ b/doc/doxygen/html/structboost_1_1sort_1_1detail_1_1offset__less__than-members.html @@ -0,0 +1,107 @@ + + + + + + +Boost.Sort: Member List + + + + + + + + + + +
+
+ + + + + + +
+
Boost.Sort +
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+
+
boost::sort::detail::offset_less_than< Data_type, Unsigned_char_type > Member List
+
+ + + + + diff --git a/doc/doxygen/html/structboost_1_1sort_1_1detail_1_1offset__less__than.html b/doc/doxygen/html/structboost_1_1sort_1_1detail_1_1offset__less__than.html new file mode 100644 index 0000000..635064b --- /dev/null +++ b/doc/doxygen/html/structboost_1_1sort_1_1detail_1_1offset__less__than.html @@ -0,0 +1,202 @@ + + + + + + +Boost.Sort: boost::sort::detail::offset_less_than< Data_type, Unsigned_char_type > Struct Template Reference + + + + + + + + + + +
+
+ + + + + + +
+
Boost.Sort +
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
boost::sort::detail::offset_less_than< Data_type, Unsigned_char_type > Struct Template Reference
+
+
+ +

#include <string_sort.hpp>

+ + + + + + +

+Public Member Functions

 offset_less_than (size_t char_offset)
 
bool operator() (const Data_type &x, const Data_type &y) const
 
+ + + +

+Public Attributes

size_t fchar_offset
 
+

Constructor & Destructor Documentation

+ +
+
+
+template<class Data_type , class Unsigned_char_type >
+ + + + + +
+ + + + + + + + +
boost::sort::detail::offset_less_than< Data_type, Unsigned_char_type >::offset_less_than (size_t char_offset)
+
+inline
+
+ +
+
+

Member Function Documentation

+ +
+
+
+template<class Data_type , class Unsigned_char_type >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool boost::sort::detail::offset_less_than< Data_type, Unsigned_char_type >::operator() (const Data_type & x,
const Data_type & y 
) const
+
+inline
+
+ +
+
+

Member Data Documentation

+ +
+
+
+template<class Data_type , class Unsigned_char_type >
+ + + + +
size_t boost::sort::detail::offset_less_than< Data_type, Unsigned_char_type >::fchar_offset
+
+ +
+
+
The documentation for this struct was generated from the following file:
    +
  • I:/modular-boost/libs/sort/include/boost/sort/spreadsort/detail/string_sort.hpp
  • +
+
+ + + + diff --git a/doc/doxygen/html/structbracket-members.html b/doc/doxygen/html/structbracket-members.html new file mode 100644 index 0000000..cddd3d6 --- /dev/null +++ b/doc/doxygen/html/structbracket-members.html @@ -0,0 +1,105 @@ + + + + + + +Boost.Sort: Member List + + + + + + + + + + +
+
+ + + + + + +
+
Boost.Sort +
+
+
+ + + + + + +
+
+ + +
+ +
+ +
+
+
+
bracket Member List
+
+
+ +

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

+ + + + + + +
operator()(const DATA_TYPE &x, size_t offset) const bracketinline
operator()(const DATA_TYPE &x, size_t offset) const bracketinline
operator()(const DATA_TYPE &x, size_t offset) const bracketinline
operator()(const DATA_TYPE &x, size_t offset) const bracketinline
operator()(const DATA_TYPE &x, size_t offset) const bracketinline
+ + + + diff --git a/doc/doxygen/html/structbracket.html b/doc/doxygen/html/structbracket.html new file mode 100644 index 0000000..00a0002 --- /dev/null +++ b/doc/doxygen/html/structbracket.html @@ -0,0 +1,292 @@ + + + + + + +Boost.Sort: bracket Struct Reference + + + + + + + + + + +
+
+ + + + + + +
+
Boost.Sort +
+
+
+ + + + + + +
+
+ + +
+ +
+ +
+
+ +
+
bracket Struct Reference
+
+
+ + + + + + + + + + + + +

+Public Member Functions

unsigned char operator() (const DATA_TYPE &x, size_t offset) const
 
unsigned char operator() (const DATA_TYPE &x, size_t offset) const
 
unsigned char operator() (const DATA_TYPE &x, size_t offset) const
 
unsigned char operator() (const DATA_TYPE &x, size_t offset) const
 
unsigned char operator() (const DATA_TYPE &x, size_t offset) const
 
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
unsigned char bracket::operator() (const DATA_TYPEx,
size_t offset 
) const
+
+inline
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
unsigned char bracket::operator() (const DATA_TYPEx,
size_t offset 
) const
+
+inline
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
unsigned char bracket::operator() (const DATA_TYPEx,
size_t offset 
) const
+
+inline
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
unsigned char bracket::operator() (const DATA_TYPEx,
size_t offset 
) const
+
+inline
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
unsigned char bracket::operator() (const DATA_TYPEx,
size_t offset 
) const
+
+inline
+
+ +
+
+
The documentation for this struct was generated from the following files: +
+ + + + diff --git a/doc/doxygen/html/structgetsize-members.html b/doc/doxygen/html/structgetsize-members.html new file mode 100644 index 0000000..719d926 --- /dev/null +++ b/doc/doxygen/html/structgetsize-members.html @@ -0,0 +1,105 @@ + + + + + + +Boost.Sort: Member List + + + + + + + + + + +
+
+ + + + + + +
+
Boost.Sort +
+
+
+ + + + + + +
+
+ + +
+ +
+ +
+
+
+
getsize Member List
+
+
+ +

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

+ + + + + + +
operator()(const DATA_TYPE &x) const getsizeinline
operator()(const DATA_TYPE &x) const getsizeinline
operator()(const DATA_TYPE &x) const getsizeinline
operator()(const DATA_TYPE &x) const getsizeinline
operator()(const DATA_TYPE &x) const getsizeinline
+ + + + diff --git a/doc/doxygen/html/structgetsize.html b/doc/doxygen/html/structgetsize.html new file mode 100644 index 0000000..6bc23c3 --- /dev/null +++ b/doc/doxygen/html/structgetsize.html @@ -0,0 +1,242 @@ + + + + + + +Boost.Sort: getsize Struct Reference + + + + + + + + + + +
+
+ + + + + + +
+
Boost.Sort +
+
+
+ + + + + + +
+
+ + +
+ +
+ +
+
+ +
+
getsize Struct Reference
+
+
+ + + + + + + + + + + + +

+Public Member Functions

size_t operator() (const DATA_TYPE &x) const
 
size_t operator() (const DATA_TYPE &x) const
 
size_t operator() (const DATA_TYPE &x) const
 
size_t operator() (const DATA_TYPE &x) const
 
size_t operator() (const DATA_TYPE &x) const
 
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
size_t getsize::operator() (const DATA_TYPEx) const
+
+inline
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
size_t getsize::operator() (const DATA_TYPEx) const
+
+inline
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
size_t getsize::operator() (const DATA_TYPEx) const
+
+inline
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
size_t getsize::operator() (const DATA_TYPEx) const
+
+inline
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
size_t getsize::operator() (const DATA_TYPEx) const
+
+inline
+
+ +
+
+
The documentation for this struct was generated from the following files: +
+ + + + diff --git a/doc/doxygen/html/structgreaterthan-members.html b/doc/doxygen/html/structgreaterthan-members.html new file mode 100644 index 0000000..1cc5955 --- /dev/null +++ b/doc/doxygen/html/structgreaterthan-members.html @@ -0,0 +1,101 @@ + + + + + + +Boost.Sort: Member List + + + + + + + + + + +
+
+ + + + + + +
+
Boost.Sort +
+
+
+ + + + + + +
+
+ + +
+ +
+ +
+
+
+
greaterthan Member List
+
+
+ +

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

+ + +
operator()(const DATA_TYPE &x, const DATA_TYPE &y) const greaterthaninline
+ + + + diff --git a/doc/doxygen/html/structgreaterthan.html b/doc/doxygen/html/structgreaterthan.html new file mode 100644 index 0000000..d44caa0 --- /dev/null +++ b/doc/doxygen/html/structgreaterthan.html @@ -0,0 +1,144 @@ + + + + + + +Boost.Sort: greaterthan Struct Reference + + + + + + + + + + +
+
+ + + + + + +
+
Boost.Sort +
+
+
+ + + + + + +
+
+ + +
+ +
+ +
+
+ +
+
greaterthan Struct Reference
+
+
+ + + + +

+Public Member Functions

bool operator() (const DATA_TYPE &x, const DATA_TYPE &y) const
 
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool greaterthan::operator() (const DATA_TYPEx,
const DATA_TYPEy 
) const
+
+inline
+
+ +
+
+
The documentation for this struct was generated from the following file: +
+ + + + diff --git a/doc/doxygen/html/structlessthan-members.html b/doc/doxygen/html/structlessthan-members.html new file mode 100644 index 0000000..76306ed --- /dev/null +++ b/doc/doxygen/html/structlessthan-members.html @@ -0,0 +1,105 @@ + + + + + + +Boost.Sort: Member List + + + + + + + + + + +
+
+ + + + + + +
+
Boost.Sort +
+
+
+ + + + + + +
+
+ + +
+ +
+ +
+
+
+
lessthan Member List
+
+
+ +

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

+ + + + + + +
operator()(const DATA_TYPE &x, const DATA_TYPE &y) const lessthaninline
operator()(const DATA_TYPE &x, const DATA_TYPE &y) const lessthaninline
operator()(const DATA_TYPE &x, const DATA_TYPE &y) const lessthaninline
operator()(const DATA_TYPE &x, const DATA_TYPE &y) const lessthaninline
operator()(const DATA_TYPE &x, const DATA_TYPE &y) const lessthaninline
+ + + + diff --git a/doc/doxygen/html/structlessthan.html b/doc/doxygen/html/structlessthan.html new file mode 100644 index 0000000..ca194bb --- /dev/null +++ b/doc/doxygen/html/structlessthan.html @@ -0,0 +1,292 @@ + + + + + + +Boost.Sort: lessthan Struct Reference + + + + + + + + + + +
+
+ + + + + + +
+
Boost.Sort +
+
+
+ + + + + + +
+
+ + +
+ +
+ +
+
+ +
+
lessthan Struct Reference
+
+
+ + + + + + + + + + + + +

+Public Member Functions

bool operator() (const DATA_TYPE &x, const DATA_TYPE &y) const
 
bool operator() (const DATA_TYPE &x, const DATA_TYPE &y) const
 
bool operator() (const DATA_TYPE &x, const DATA_TYPE &y) const
 
bool operator() (const DATA_TYPE &x, const DATA_TYPE &y) const
 
bool operator() (const DATA_TYPE &x, const DATA_TYPE &y) const
 
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool lessthan::operator() (const DATA_TYPEx,
const DATA_TYPEy 
) const
+
+inline
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool lessthan::operator() (const DATA_TYPEx,
const DATA_TYPEy 
) const
+
+inline
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool lessthan::operator() (const DATA_TYPEx,
const DATA_TYPEy 
) const
+
+inline
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool lessthan::operator() (const DATA_TYPEx,
const DATA_TYPEy 
) const
+
+inline
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool lessthan::operator() (const DATA_TYPEx,
const DATA_TYPEy 
) const
+
+inline
+
+ +
+
+
The documentation for this struct was generated from the following files: +
+ + + + diff --git a/doc/doxygen/html/structnegrightshift-members.html b/doc/doxygen/html/structnegrightshift-members.html new file mode 100644 index 0000000..ed439a5 --- /dev/null +++ b/doc/doxygen/html/structnegrightshift-members.html @@ -0,0 +1,101 @@ + + + + + + +Boost.Sort: Member List + + + + + + + + + + +
+
+ + + + + + +
+
Boost.Sort +
+
+
+ + + + + + +
+
+ + +
+ +
+ +
+
+
+
negrightshift Member List
+
+
+ +

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

+ + +
operator()(const int &x, const unsigned offset)negrightshiftinline
+ + + + diff --git a/doc/doxygen/html/structnegrightshift.html b/doc/doxygen/html/structnegrightshift.html new file mode 100644 index 0000000..d5e907b --- /dev/null +++ b/doc/doxygen/html/structnegrightshift.html @@ -0,0 +1,144 @@ + + + + + + +Boost.Sort: negrightshift Struct Reference + + + + + + + + + + +
+
+ + + + + + +
+
Boost.Sort +
+
+
+ + + + + + +
+
+ + +
+ +
+ +
+
+ +
+
negrightshift Struct Reference
+
+
+ + + + +

+Public Member Functions

int operator() (const int &x, const unsigned offset)
 
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
int negrightshift::operator() (const int & x,
const unsigned offset 
)
+
+inline
+
+ +
+
+
The documentation for this struct was generated from the following file: +
+ + + + diff --git a/doc/doxygen/html/structrightshift-members.html b/doc/doxygen/html/structrightshift-members.html new file mode 100644 index 0000000..fa9e05e --- /dev/null +++ b/doc/doxygen/html/structrightshift-members.html @@ -0,0 +1,104 @@ + + + + + + +Boost.Sort: Member List + + + + + + + + + + +
+
+ + + + + + +
+
Boost.Sort +
+
+
+ + + + + + +
+
+ + +
+ +
+ +
+
+
+
rightshift Member List
+
+
+ +

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

+ + + + + +
operator()(const DATA_TYPE &x, const unsigned offset) const rightshiftinline
operator()(const DATA_TYPE &x, const unsigned offset)rightshiftinline
operator()(DATA_TYPE x, unsigned offset)rightshiftinline
operator()(const DATA_TYPE &x, const unsigned offset) const rightshiftinline
+ + + + diff --git a/doc/doxygen/html/structrightshift.html b/doc/doxygen/html/structrightshift.html new file mode 100644 index 0000000..92d6ae5 --- /dev/null +++ b/doc/doxygen/html/structrightshift.html @@ -0,0 +1,255 @@ + + + + + + +Boost.Sort: rightshift Struct Reference + + + + + + + + + + +
+
+ + + + + + +
+
Boost.Sort +
+
+
+ + + + + + +
+
+ + +
+ +
+ +
+
+ +
+
rightshift Struct Reference
+
+
+ + + + + + + + + + +

+Public Member Functions

int operator() (const DATA_TYPE &x, const unsigned offset) const
 
int operator() (const DATA_TYPE &x, const unsigned offset)
 
int operator() (DATA_TYPE x, unsigned offset)
 
int operator() (const DATA_TYPE &x, const unsigned offset) const
 
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
int rightshift::operator() (const DATA_TYPEx,
const unsigned offset 
) const
+
+inline
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
int rightshift::operator() (DATA_TYPE x,
unsigned offset 
)
+
+inline
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
int rightshift::operator() (const DATA_TYPEx,
const unsigned offset 
)
+
+inline
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
int rightshift::operator() (const DATA_TYPEx,
const unsigned offset 
) const
+
+inline
+
+ +
+
+
The documentation for this struct was generated from the following files: +
+ + + + diff --git a/doc/doxygen/html/sync_off.png b/doc/doxygen/html/sync_off.png new file mode 100644 index 0000000000000000000000000000000000000000..3b443fc62892114406e3d399421b2a881b897acc GIT binary patch literal 853 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuL8WjtLRLn;{G-u2E1370tV z@&6M;Pc`G27QV|oXU%N$WH-Jg(YrE9g*Ew%0-L8{nBhi2U5ya&ZyPsW(9>e&EKzLo zj$V4CcWDQI%Ze>&ixYA*e&noFikz~<>{$AlkYBaii__oT*~z&vrP{*&*_pXJzgs`Q z^M20e(zmzj0RXXq|5&31_=@IBe@Lfl?;5Rj@n(Eo5L&_x_{|+FwKV4cFufe~HTF>83tf@uOrHL++y!JeS!F zq-&FA|5V++a_jY;b++@_4cNDAw(l}5W|`k@&@gwsh5Uhu*73qz3f}4dhFYZgF3OoY%PG%VP*ZOz>C z*Gdh!az0D)PQSFx#^<%QVwRS7(DiVA?u!z}dA?Kc$cWEfopp2T#(#}JH<>o<@#FZx z&6sxO``ysTm#u^ttmhxM&AhAi@6tjUE4wqhrb$`dI~#K(`SJOR9~nWLPQ7RkEK%8i zUw-)th5l6w(o%N)u`zM_e=~Y&n%s^Qb6dS$-Clyd*`p~i}-J}MtMgHZ^7GV8jI`glW+fG-J`g7cB0|Zd(-Ao zXP-G=$`x;`rk|H2gd{uPXr3}|x+6RD!I=lK4LTb=8n$X@|M>Q#RL-V`FJZe6bB43| z&MR!GXSwEIpDQtcM#&w9Zm!QBDse`t3^{tQ5>weOJo)Q7h3QPA_(|59qj%oC>%7ZQ z{Dix9$6uG-av@%ZjiE&0cnR;r`efzopr0A%8e#{d8T literal 0 HcmV?d00001 diff --git a/doc/doxygen/html/sync_on.png b/doc/doxygen/html/sync_on.png new file mode 100644 index 0000000000000000000000000000000000000000..e08320fb64e6fa33b573005ed6d8fe294e19db76 GIT binary patch literal 845 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuL8MLb;`Ln;{G-i`MNiIh3; z@x8_4C7+jPE;rFlH#^2Ad-|$ccA(~pD~eqPmqLTQZ?(3(T3D~YJAmI+;Go?b?|xlv z?}M8JFY1XzPT41t;u?_X*!g3F#L{iEqk=ELzcbg`xO`XFwDr^Pv#(E2d-r}$asBf- z;oiqT>NTAF;j(sxSmH$WHIL*AR4BkviVS8RLw@%(?`^rM^~ zc??=2o2&|>SQwTa)T|Tu`l#WB&tC&(kKVA4*LmdTRp|=s?{uE5x<7a=`ewyn!v(L%-&(rF&XIxtFvRqlq(KX9Ew9@YP ztkWmIs#R}YWHCM0)H`zxca~IEvy0Y#zrJgk>E(ybT~9T^GG{F{118#GgU+H?Yuix;~lp zgXt<_kZPA&hUI*hLap36&8DnmzJ$x z^`_=}aNZqB7M{ZRT<*IsIp5jICB3*R@iy8kLT9f@bjYvjpvABEeCgQtFR`KIZWc>c zRn<}Tqi;@Z%k-Sb-}kBfe6fP$!iMR+SG|9HedHY1*TXy`a;?w`>8&SK%~ouA)v+tK z?DmI@M|(5F%ck{ad|`gi($M+()rL#LE134FKVv-8wEZJ%P4xXYzmCQ=L>9T&+Wd9- z9sA_?_u_{0U%M@4?&4!`ej{Yh&3}Mr#q<)BuMbzU_bv2#+}zopr0HCv!aR2}S literal 0 HcmV?d00001 diff --git a/doc/doxygen/html/tab_a.png b/doc/doxygen/html/tab_a.png new file mode 100644 index 0000000000000000000000000000000000000000..3b725c41c5a527a3a3e40097077d0e206a681247 GIT binary patch literal 142 zcmeAS@N?(olHy`uVBq!ia0y~yU|?imU{K*;Vqjo6E_OVcfq@~^)5S5Qg7NKKZ>|Od z0cZ96B^q5F(MR__P`y*}U-{R;TlXp&@OUd4k; bujDU#OZjc86Uky=U|{fc^>bP0l+XkKX6!_Y literal 0 HcmV?d00001 diff --git a/doc/doxygen/html/tab_h.png b/doc/doxygen/html/tab_h.png new file mode 100644 index 0000000000000000000000000000000000000000..fd5cb705488e60fcf30f56fcc951dee74f3b095b GIT binary patch literal 177 zcmeAS@N?(olHy`uVBq!ia0y~yU|?imU{K*;Vqjo6E_OVcfq|jI)5S5Qg7NKLU!j8z z0&NfH)d?=WbL`wC*RqcNQc8+bH%&~@x?aTMUMOwbRlVna@ZIGTp1)pu`J~5jPLWdo zxUWB=55zOKFM1roR#tiX-=&SV+rymG(w;pNsowCdw~OQRmZ0ZzRO7!s|KGRh+x88; jeC&e9i%QeCY1pS{h{a^u)f6)@Ffe$!`njxgN@xNAc-%-_v}tD1(px+ZKM8EMxhM7L>%R%H^HPcw&el&VwwLPg zx4roBW4ZbnxAs1Tw;#Ug))gJ@jh^$OYwa7UHMz}_*VZ&k-CciSZ`V~f&B$G<+{+X4 q#Lwth3OX&AIccTh#h#eItTsoL|GaxQRi1%?fx*+&&t;ucLK6Uo#7a&8 literal 0 HcmV?d00001 diff --git a/doc/doxygen/html/tabs.css b/doc/doxygen/html/tabs.css new file mode 100644 index 0000000..9cf578f --- /dev/null +++ b/doc/doxygen/html/tabs.css @@ -0,0 +1,60 @@ +.tabs, .tabs2, .tabs3 { + background-image: url('tab_b.png'); + width: 100%; + z-index: 101; + font-size: 13px; + font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; +} + +.tabs2 { + font-size: 10px; +} +.tabs3 { + font-size: 9px; +} + +.tablist { + margin: 0; + padding: 0; + display: table; +} + +.tablist li { + float: left; + display: table-cell; + background-image: url('tab_b.png'); + line-height: 36px; + list-style: none; +} + +.tablist a { + display: block; + padding: 0 20px; + font-weight: bold; + background-image:url('tab_s.png'); + background-repeat:no-repeat; + background-position:right; + color: #283A5D; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + text-decoration: none; + outline: none; +} + +.tabs3 .tablist a { + padding: 0 10px; +} + +.tablist a:hover { + background-image: url('tab_h.png'); + background-repeat:repeat-x; + color: #fff; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); + text-decoration: none; +} + +.tablist li.current a { + background-image: url('tab_a.png'); + background-repeat:repeat-x; + color: #fff; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +} diff --git a/doc/doxygen/html/wstringsample_8cpp.html b/doc/doxygen/html/wstringsample_8cpp.html new file mode 100644 index 0000000..9190f2c --- /dev/null +++ b/doc/doxygen/html/wstringsample_8cpp.html @@ -0,0 +1,163 @@ + + + + + + +Boost.Sort: I:/modular-boost/libs/sort/example/wstringsample.cpp File Reference + + + + + + + + + + +
+
+ + + + + + +
+
Boost.Sort +
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
wstringsample.cpp File Reference
+
+
+
#include <boost/sort/spreadsort/string_sort.hpp>
+#include <time.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <algorithm>
+#include <vector>
+#include <iostream>
+#include <fstream>
+#include <string>
+
+ + + +

+Macros

#define DATA_TYPE   wstring
 
+ + + +

+Functions

int main (int argc, const char **argv)
 
+

Macro Definition Documentation

+ +
+
+ + + + +
#define DATA_TYPE   wstring
+
+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
int main (int argc,
const char ** argv 
)
+
+ +
+
+
+ + + + diff --git a/doc/doxygen/index.html b/doc/doxygen/index.html new file mode 100644 index 0000000..c156533 --- /dev/null +++ b/doc/doxygen/index.html @@ -0,0 +1,15 @@ + + + + + + + Automatic redirection failed! + + diff --git a/doc/doxygen/sort_doxyfile.txt b/doc/doxygen/sort_doxyfile.txt new file mode 100644 index 0000000..40ef50b --- /dev/null +++ b/doc/doxygen/sort_doxyfile.txt @@ -0,0 +1,2434 @@ +# Doxyfile 1.8.9.1 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project. +# +# All text after a double hash (##) is considered a comment and is placed in +# front of the TAG it is preceding. +# +# All text after a single hash (#) is considered a comment and will be ignored. +# The format is: +# TAG = value [value, ...] +# For lists, items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (\" \"). + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# This tag specifies the encoding used for all characters in the config file +# that follow. The default is UTF-8 which is also the encoding used for all text +# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv +# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv +# for the list of possible encodings. +# The default value is: UTF-8. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by +# double-quotes, unless you are using Doxywizard) that should identify the +# project for which the documentation is generated. This name is used in the +# title of most generated pages and in a few other places. +# The default value is: My Project. + +PROJECT_NAME = Boost.Sort + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. This +# could be handy for archiving the generated documentation or if some version +# control system is used. + +PROJECT_NUMBER = + +# Using the PROJECT_BRIEF tag one can provide an optional one line description +# for a project that appears at the top of each page and should give viewer a +# quick idea about the purpose of the project. Keep the description short. + +PROJECT_BRIEF = + +# With the PROJECT_LOGO tag one can specify a logo or an icon that is included +# in the documentation. The maximum height of the logo should not exceed 55 +# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy +# the logo to the output directory. + +PROJECT_LOGO = + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path +# into which the generated documentation will be written. If a relative path is +# entered, it will be relative to the location where doxygen was started. If +# left blank the current directory will be used. + +OUTPUT_DIRECTORY = I:/modular-boost/libs/sort/doc/doxygen + +# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub- +# directories (in 2 levels) under the output directory of each output format and +# will distribute the generated files over these directories. Enabling this +# option can be useful when feeding doxygen a huge amount of source files, where +# putting all generated files in the same directory would otherwise causes +# performance problems for the file system. +# The default value is: NO. + +CREATE_SUBDIRS = NO + +# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII +# characters to appear in the names of generated files. If set to NO, non-ASCII +# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode +# U+3044. +# The default value is: NO. + +ALLOW_UNICODE_NAMES = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, +# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), +# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, +# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), +# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, +# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, +# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, +# Ukrainian and Vietnamese. +# The default value is: English. + +OUTPUT_LANGUAGE = English + +# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member +# descriptions after the members that are listed in the file and class +# documentation (similar to Javadoc). Set to NO to disable this. +# The default value is: YES. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief +# description of a member or function before the detailed description +# +# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. +# The default value is: YES. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator that is +# used to form the text in various listings. Each string in this list, if found +# as the leading text of the brief description, will be stripped from the text +# and the result, after processing the whole list, is used as the annotated +# text. Otherwise, the brief description is used as-is. If left blank, the +# following values are used ($name is automatically replaced with the name of +# the entity):The $name class, The $name widget, The $name file, is, provides, +# specifies, contains, represents, a, an and the. + +ABBREVIATE_BRIEF = "The $name class" \ + "The $name widget" \ + "The $name file" \ + is \ + provides \ + specifies \ + contains \ + represents \ + a \ + an \ + the + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# doxygen will generate a detailed section even if there is only a brief +# description. +# The default value is: NO. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. +# The default value is: NO. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path +# before files name in the file list and in the header files. If set to NO the +# shortest path that makes the file name unique will be used +# The default value is: YES. + +FULL_PATH_NAMES = YES + +# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path. +# Stripping is only done if one of the specified strings matches the left-hand +# part of the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the path to +# strip. +# +# Note that you can specify absolute paths here, but also relative paths, which +# will be relative from the directory where doxygen is started. +# This tag requires that the tag FULL_PATH_NAMES is set to YES. + +STRIP_FROM_PATH = + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the +# path mentioned in the documentation of a class, which tells the reader which +# header file to include in order to use a class. If left blank only the name of +# the header file containing the class definition is used. Otherwise one should +# specify the list of include paths that are normally passed to the compiler +# using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but +# less readable) file names. This can be useful is your file systems doesn't +# support long names like on DOS, Mac, or CD-ROM. +# The default value is: NO. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the +# first line (until the first dot) of a Javadoc-style comment as the brief +# description. If set to NO, the Javadoc-style will behave just like regular Qt- +# style comments (thus requiring an explicit @brief command for a brief +# description.) +# The default value is: NO. + +JAVADOC_AUTOBRIEF = NO + +# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first +# line (until the first dot) of a Qt-style comment as the brief description. If +# set to NO, the Qt-style will behave just like regular Qt-style comments (thus +# requiring an explicit \brief command for a brief description.) +# The default value is: NO. + +QT_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a +# multi-line C++ special comment block (i.e. a block of //! or /// comments) as +# a brief description. This used to be the default behavior. The new default is +# to treat a multi-line C++ comment block as a detailed description. Set this +# tag to YES if you prefer the old behavior instead. +# +# Note that setting this tag to YES also means that rational rose comments are +# not recognized any more. +# The default value is: NO. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the +# documentation from any documented member that it re-implements. +# The default value is: YES. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new +# page for each member. If set to NO, the documentation of a member will be part +# of the file/class/namespace that contains it. +# The default value is: NO. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen +# uses this value to replace tabs by spaces in code fragments. +# Minimum value: 1, maximum value: 16, default value: 4. + +TAB_SIZE = 4 + +# This tag can be used to specify a number of aliases that act as commands in +# the documentation. An alias has the form: +# name=value +# For example adding +# "sideeffect=@par Side Effects:\n" +# will allow you to put the command \sideeffect (or @sideeffect) in the +# documentation, which will result in a user-defined paragraph with heading +# "Side Effects:". You can put \n's in the value part of an alias to insert +# newlines. + +ALIASES = + +# This tag can be used to specify a number of word-keyword mappings (TCL only). +# A mapping has the form "name=value". For example adding "class=itcl::class" +# will allow you to use the command class in the itcl::class meaning. + +TCL_SUBST = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources +# only. Doxygen will then generate output that is more tailored for C. For +# instance, some of the names that are used will be different. The list of all +# members will be omitted, etc. +# The default value is: NO. + +OPTIMIZE_OUTPUT_FOR_C = NO + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or +# Python sources only. Doxygen will then generate output that is more tailored +# for that language. For instance, namespaces will be presented as packages, +# qualified scopes will look different, etc. +# The default value is: NO. + +OPTIMIZE_OUTPUT_JAVA = NO + +# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran +# sources. Doxygen will then generate output that is tailored for Fortran. +# The default value is: NO. + +OPTIMIZE_FOR_FORTRAN = NO + +# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL +# sources. Doxygen will then generate output that is tailored for VHDL. +# The default value is: NO. + +OPTIMIZE_OUTPUT_VHDL = NO + +# Doxygen selects the parser to use depending on the extension of the files it +# parses. With this tag you can assign which parser to use for a given +# extension. Doxygen has a built-in mapping, but you can override or extend it +# using this tag. The format is ext=language, where ext is a file extension, and +# language is one of the parsers supported by doxygen: IDL, Java, Javascript, +# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: +# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: +# Fortran. In the later case the parser tries to guess whether the code is fixed +# or free formatted code, this is the default for Fortran type files), VHDL. For +# instance to make doxygen treat .inc files as Fortran files (default is PHP), +# and .f files as C (default is Fortran), use: inc=Fortran f=C. +# +# Note: For files without extension you can use no_extension as a placeholder. +# +# Note that for custom extensions you also need to set FILE_PATTERNS otherwise +# the files are not read by doxygen. + +EXTENSION_MAPPING = + +# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments +# according to the Markdown format, which allows for more readable +# documentation. See http://daringfireball.net/projects/markdown/ for details. +# The output of markdown processing is further processed by doxygen, so you can +# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in +# case of backward compatibilities issues. +# The default value is: YES. + +MARKDOWN_SUPPORT = NO + +# When enabled doxygen tries to link words that correspond to documented +# classes, or namespaces to their corresponding documentation. Such a link can +# be prevented in individual cases by putting a % sign in front of the word or +# globally by setting AUTOLINK_SUPPORT to NO. +# The default value is: YES. + +AUTOLINK_SUPPORT = NO + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want +# to include (a tag file for) the STL sources as input, then you should set this +# tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); +# versus func(std::string) {}). This also make the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. +# The default value is: NO. + +BUILTIN_STL_SUPPORT = NO + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. +# The default value is: NO. + +CPP_CLI_SUPPORT = NO + +# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: +# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen +# will parse them like normal C++ but will assume all classes use public instead +# of private inheritance when no explicit protection keyword is present. +# The default value is: NO. + +SIP_SUPPORT = NO + +# For Microsoft's IDL there are propget and propput attributes to indicate +# getter and setter methods for a property. Setting this option to YES will make +# doxygen to replace the get and set methods by a property in the documentation. +# This will only work if the methods are indeed getting or setting a simple +# type. If this is not the case, or you want to show the methods anyway, you +# should set this option to NO. +# The default value is: YES. + +IDL_PROPERTY_SUPPORT = YES + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. +# The default value is: NO. + +DISTRIBUTE_GROUP_DOC = NO + +# Set the SUBGROUPING tag to YES to allow class member groups of the same type +# (for instance a group of public functions) to be put as a subgroup of that +# type (e.g. under the Public Functions section). Set it to NO to prevent +# subgrouping. Alternatively, this can be done per class using the +# \nosubgrouping command. +# The default value is: YES. + +SUBGROUPING = YES + +# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions +# are shown inside the group in which they are included (e.g. using \ingroup) +# instead of on a separate page (for HTML and Man pages) or section (for LaTeX +# and RTF). +# +# Note that this feature does not work in combination with +# SEPARATE_MEMBER_PAGES. +# The default value is: NO. + +INLINE_GROUPED_CLASSES = NO + +# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions +# with only public data fields or simple typedef fields will be shown inline in +# the documentation of the scope in which they are defined (i.e. file, +# namespace, or group documentation), provided this scope is documented. If set +# to NO, structs, classes, and unions are shown on a separate page (for HTML and +# Man pages) or section (for LaTeX and RTF). +# The default value is: NO. + +INLINE_SIMPLE_STRUCTS = NO + +# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or +# enum is documented as struct, union, or enum with the name of the typedef. So +# typedef struct TypeS {} TypeT, will appear in the documentation as a struct +# with name TypeT. When disabled the typedef will appear as a member of a file, +# namespace, or class. And the struct will be named TypeS. This can typically be +# useful for C code in case the coding convention dictates that all compound +# types are typedef'ed and only the typedef is referenced, never the tag name. +# The default value is: NO. + +TYPEDEF_HIDES_STRUCT = NO + +# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This +# cache is used to resolve symbols given their name and scope. Since this can be +# an expensive process and often the same symbol appears multiple times in the +# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small +# doxygen will become slower. If the cache is too large, memory is wasted. The +# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range +# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 +# symbols. At the end of a run doxygen will report the cache usage and suggest +# the optimal cache size from a speed point of view. +# Minimum value: 0, maximum value: 9, default value: 0. + +LOOKUP_CACHE_SIZE = 0 + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in +# documentation are documented, even if no documentation was available. Private +# class members and static file members will be hidden unless the +# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES. +# Note: This will also disable the warnings about undocumented members that are +# normally produced when WARNINGS is set to YES. +# The default value is: NO. + +EXTRACT_ALL = YES + +# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will +# be included in the documentation. +# The default value is: NO. + +EXTRACT_PRIVATE = NO + +# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal +# scope will be included in the documentation. +# The default value is: NO. + +EXTRACT_PACKAGE = NO + +# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be +# included in the documentation. +# The default value is: NO. + +EXTRACT_STATIC = NO + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined +# locally in source files will be included in the documentation. If set to NO, +# only classes defined in header files are included. Does not have any effect +# for Java sources. +# The default value is: YES. + +EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. If set to YES, local methods, +# which are defined in the implementation section but not in the interface are +# included in the documentation. If set to NO, only methods in the interface are +# included. +# The default value is: NO. + +EXTRACT_LOCAL_METHODS = YES + +# If this flag is set to YES, the members of anonymous namespaces will be +# extracted and appear in the documentation as a namespace called +# 'anonymous_namespace{file}', where file will be replaced with the base name of +# the file that contains the anonymous namespace. By default anonymous namespace +# are hidden. +# The default value is: NO. + +EXTRACT_ANON_NSPACES = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all +# undocumented members inside documented classes or files. If set to NO these +# members will be included in the various overviews, but no documentation +# section is generated. This option has no effect if EXTRACT_ALL is enabled. +# The default value is: NO. + +HIDE_UNDOC_MEMBERS = YES + +# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. If set +# to NO, these classes will be included in the various overviews. This option +# has no effect if EXTRACT_ALL is enabled. +# The default value is: NO. + +HIDE_UNDOC_CLASSES = NO + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend +# (class|struct|union) declarations. If set to NO, these declarations will be +# included in the documentation. +# The default value is: NO. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any +# documentation blocks found inside the body of a function. If set to NO, these +# blocks will be appended to the function's detailed documentation block. +# The default value is: NO. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation that is typed after a +# \internal command is included. If the tag is set to NO then the documentation +# will be excluded. Set it to YES to include the internal documentation. +# The default value is: NO. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file +# names in lower-case letters. If set to YES, upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. +# The default value is: system dependent. + +CASE_SENSE_NAMES = NO + +# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with +# their full class and namespace scopes in the documentation. If set to YES, the +# scope will be hidden. +# The default value is: NO. + +HIDE_SCOPE_NAMES = NO + +# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will +# append additional text to a page's title, such as Class Reference. If set to +# YES the compound reference will be hidden. +# The default value is: NO. + +HIDE_COMPOUND_REFERENCE= NO + +# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of +# the files that are included by a file in the documentation of that file. +# The default value is: YES. + +SHOW_INCLUDE_FILES = YES + +# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each +# grouped member an include statement to the documentation, telling the reader +# which file to include in order to use the member. +# The default value is: NO. + +SHOW_GROUPED_MEMB_INC = NO + +# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include +# files with double quotes in the documentation rather than with sharp brackets. +# The default value is: NO. + +FORCE_LOCAL_INCLUDES = NO + +# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the +# documentation for inline members. +# The default value is: YES. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the +# (detailed) documentation of file and class members alphabetically by member +# name. If set to NO, the members will appear in declaration order. +# The default value is: YES. + +SORT_MEMBER_DOCS = YES + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief +# descriptions of file, namespace and class members alphabetically by member +# name. If set to NO, the members will appear in declaration order. Note that +# this will also influence the order of the classes in the class list. +# The default value is: NO. + +SORT_BRIEF_DOCS = NO + +# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the +# (brief and detailed) documentation of class members so that constructors and +# destructors are listed first. If set to NO the constructors will appear in the +# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. +# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief +# member documentation. +# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting +# detailed member documentation. +# The default value is: NO. + +SORT_MEMBERS_CTORS_1ST = NO + +# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy +# of group names into alphabetical order. If set to NO the group names will +# appear in their defined order. +# The default value is: NO. + +SORT_GROUP_NAMES = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by +# fully-qualified names, including namespaces. If set to NO, the class list will +# be sorted only by class name, not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the alphabetical +# list. +# The default value is: NO. + +SORT_BY_SCOPE_NAME = NO + +# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper +# type resolution of all parameters of a function it will reject a match between +# the prototype and the implementation of a member function even if there is +# only one candidate or it is obvious which candidate to choose by doing a +# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still +# accept a match between prototype and implementation in such cases. +# The default value is: NO. + +STRICT_PROTO_MATCHING = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo +# list. This list is created by putting \todo commands in the documentation. +# The default value is: YES. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test +# list. This list is created by putting \test commands in the documentation. +# The default value is: YES. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug +# list. This list is created by putting \bug commands in the documentation. +# The default value is: YES. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO) +# the deprecated list. This list is created by putting \deprecated commands in +# the documentation. +# The default value is: YES. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional documentation +# sections, marked by \if ... \endif and \cond +# ... \endcond blocks. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the +# initial value of a variable or macro / define can have for it to appear in the +# documentation. If the initializer consists of more lines than specified here +# it will be hidden. Use a value of 0 to hide initializers completely. The +# appearance of the value of individual variables and macros / defines can be +# controlled using \showinitializer or \hideinitializer command in the +# documentation regardless of this setting. +# Minimum value: 0, maximum value: 10000, default value: 30. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at +# the bottom of the documentation of classes and structs. If set to YES, the +# list will mention the files that were used to generate the documentation. +# The default value is: YES. + +SHOW_USED_FILES = YES + +# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This +# will remove the Files entry from the Quick Index and from the Folder Tree View +# (if specified). +# The default value is: YES. + +SHOW_FILES = YES + +# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces +# page. This will remove the Namespaces entry from the Quick Index and from the +# Folder Tree View (if specified). +# The default value is: YES. + +SHOW_NAMESPACES = YES + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from +# the version control system). Doxygen will invoke the program by executing (via +# popen()) the command command input-file, where command is the value of the +# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided +# by doxygen. Whatever the program writes to standard output is used as the file +# version. For an example see the documentation. + +FILE_VERSION_FILTER = + +# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed +# by doxygen. The layout file controls the global structure of the generated +# output files in an output format independent way. To create the layout file +# that represents doxygen's defaults, run doxygen with the -l option. You can +# optionally specify a file name after the option, if omitted DoxygenLayout.xml +# will be used as the name of the layout file. +# +# Note that if you run doxygen from a directory containing a file called +# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE +# tag is left empty. + +LAYOUT_FILE = + +# The CITE_BIB_FILES tag can be used to specify one or more bib files containing +# the reference definitions. This must be a list of .bib files. The .bib +# extension is automatically appended if omitted. This requires the bibtex tool +# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. +# For LaTeX the style of the bibliography can be controlled using +# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the +# search path. See also \cite for info how to create references. + +CITE_BIB_FILES = + +#--------------------------------------------------------------------------- +# Configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated to +# standard output by doxygen. If QUIET is set to YES this implies that the +# messages are off. +# The default value is: NO. + +QUIET = NO + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES +# this implies that the warnings are on. +# +# Tip: Turn warnings on while writing the documentation. +# The default value is: YES. + +WARNINGS = YES + +# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate +# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag +# will automatically be disabled. +# The default value is: YES. + +WARN_IF_UNDOCUMENTED = YES + +# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some parameters +# in a documented function, or documenting parameters that don't exist or using +# markup commands wrongly. +# The default value is: YES. + +WARN_IF_DOC_ERROR = YES + +# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that +# are documented, but have no documentation for their parameters or return +# value. If set to NO, doxygen will only warn about wrong or incomplete +# parameter documentation, but not about the absence of documentation. +# The default value is: NO. + +WARN_NO_PARAMDOC = YES + +# The WARN_FORMAT tag determines the format of the warning messages that doxygen +# can produce. The string should contain the $file, $line, and $text tags, which +# will be replaced by the file and line number from which the warning originated +# and the warning text. Optionally the format may contain $version, which will +# be replaced by the version of the file (if it could be obtained via +# FILE_VERSION_FILTER) +# The default value is: $file:$line: $text. + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning and error +# messages should be written. If left blank the output is written to standard +# error (stderr). + +WARN_LOGFILE = doxywarnings.log + +#--------------------------------------------------------------------------- +# Configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag is used to specify the files and/or directories that contain +# documented source files. You may enter file names like myfile.cpp or +# directories like /usr/src/myproject. Separate the files or directories with +# spaces. +# Note: If this tag is empty the current directory is searched. + +INPUT = ../../include/boost/sort \ + ../../include/boost/sort/spreadsort \ + ../../example + +# This tag can be used to specify the character encoding of the source files +# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses +# libiconv (or the iconv built into libc) for the transcoding. See the libiconv +# documentation (see: http://www.gnu.org/software/libiconv) for the list of +# possible encodings. +# The default value is: UTF-8. + +INPUT_ENCODING = UTF-8 + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and +# *.h) to filter out the source-files in the directories. If left blank the +# following patterns are tested:*.c, *.cc, *.cxx, *.cpp, *.c++, *.java, *.ii, +# *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, +# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, +# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, +# *.qsf, *.as and *.js. + +FILE_PATTERNS = *.c \ + *.cc \ + *.cxx \ + *.cpp \ + *.c++ \ + *.java \ + *.ii \ + *.ixx \ + *.ipp \ + *.i++ \ + *.inl \ + *.idl \ + *.ddl \ + *.odl \ + *.h \ + *.hh \ + *.hxx \ + *.hpp \ + *.h++ \ + *.cs \ + *.d \ + *.php \ + *.php4 \ + *.php5 \ + *.phtml \ + *.inc \ + *.m \ + *.markdown \ + *.md \ + *.mm \ + *.dox \ + *.py \ + *.f90 \ + *.f \ + *.for \ + *.tcl \ + *.vhd \ + *.vhdl \ + *.ucf \ + *.qsf \ + *.as \ + *.js + +# The RECURSIVE tag can be used to specify whether or not subdirectories should +# be searched for input files as well. +# The default value is: NO. + +RECURSIVE = NO + +# The EXCLUDE tag can be used to specify files and/or directories that should be +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. +# +# Note that relative paths are relative to the directory from which doxygen is +# run. + +EXCLUDE = + +# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or +# directories that are symbolic links (a Unix file system feature) are excluded +# from the input. +# The default value is: NO. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. +# +# Note that the wildcards are matched against the file with absolute path, so to +# exclude all test directories for example use the pattern */test/* + +EXCLUDE_PATTERNS = + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the +# output. The symbol name can be a fully qualified name, a word, or if the +# wildcard * is used, a substring. Examples: ANamespace, AClass, +# AClass::ANamespace, ANamespace::*Test +# +# Note that the wildcards are matched against the file with absolute path, so to +# exclude all test directories use the pattern */test/* + +EXCLUDE_SYMBOLS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or directories +# that contain example code fragments that are included (see the \include +# command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and +# *.h) to filter out the source-files in the directories. If left blank all +# files are included. + +EXAMPLE_PATTERNS = * + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude commands +# irrespective of the value of the RECURSIVE tag. +# The default value is: NO. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or directories +# that contain images that are to be included in the documentation (see the +# \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command: +# +# +# +# where is the value of the INPUT_FILTER tag, and is the +# name of an input file. Doxygen will then use the output that the filter +# program writes to standard output. If FILTER_PATTERNS is specified, this tag +# will be ignored. +# +# Note that the filter must not add or remove lines; it is applied before the +# code is scanned, but not when the output code is generated. If lines are added +# or removed, the anchors will not be placed correctly. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. The filters are a list of the form: pattern=filter +# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how +# filters are used. If the FILTER_PATTERNS tag is empty or if none of the +# patterns match the file name, INPUT_FILTER is applied. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will also be used to filter the input files that are used for +# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). +# The default value is: NO. + +FILTER_SOURCE_FILES = NO + +# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file +# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and +# it is also possible to disable source filtering for a specific pattern using +# *.ext= (so without naming a filter). +# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. + +FILTER_SOURCE_PATTERNS = + +# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that +# is part of the input, its contents will be placed on the main page +# (index.html). This can be useful if you have a project on for instance GitHub +# and want to reuse the introduction page also for the doxygen output. + +USE_MDFILE_AS_MAINPAGE = + +#--------------------------------------------------------------------------- +# Configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will be +# generated. Documented entities will be cross-referenced with these sources. +# +# Note: To get rid of all source code in the generated output, make sure that +# also VERBATIM_HEADERS is set to NO. +# The default value is: NO. + +SOURCE_BROWSER = NO + +# Setting the INLINE_SOURCES tag to YES will include the body of functions, +# classes and enums directly into the documentation. +# The default value is: NO. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any +# special comment blocks from generated source code fragments. Normal C, C++ and +# Fortran comments will always remain visible. +# The default value is: YES. + +STRIP_CODE_COMMENTS = NO + +# If the REFERENCED_BY_RELATION tag is set to YES then for each documented +# function all documented functions referencing it will be listed. +# The default value is: NO. + +REFERENCED_BY_RELATION = NO + +# If the REFERENCES_RELATION tag is set to YES then for each documented function +# all documented entities called/used by that function will be listed. +# The default value is: NO. + +REFERENCES_RELATION = NO + +# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set +# to YES then the hyperlinks from functions in REFERENCES_RELATION and +# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will +# link to the documentation. +# The default value is: YES. + +REFERENCES_LINK_SOURCE = YES + +# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the +# source code will show a tooltip with additional information such as prototype, +# brief description and links to the definition and documentation. Since this +# will make the HTML file larger and loading of large files a bit slower, you +# can opt to disable this feature. +# The default value is: YES. +# This tag requires that the tag SOURCE_BROWSER is set to YES. + +SOURCE_TOOLTIPS = YES + +# If the USE_HTAGS tag is set to YES then the references to source code will +# point to the HTML generated by the htags(1) tool instead of doxygen built-in +# source browser. The htags tool is part of GNU's global source tagging system +# (see http://www.gnu.org/software/global/global.html). You will need version +# 4.8.6 or higher. +# +# To use it do the following: +# - Install the latest version of global +# - Enable SOURCE_BROWSER and USE_HTAGS in the config file +# - Make sure the INPUT points to the root of the source tree +# - Run doxygen as normal +# +# Doxygen will invoke htags (and that will in turn invoke gtags), so these +# tools must be available from the command line (i.e. in the search path). +# +# The result: instead of the source browser generated by doxygen, the links to +# source code will now point to the output of htags. +# The default value is: NO. +# This tag requires that the tag SOURCE_BROWSER is set to YES. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a +# verbatim copy of the header file for each class for which an include is +# specified. Set to NO to disable this. +# See also: Section \class. +# The default value is: YES. + +VERBATIM_HEADERS = YES + +# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the +# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the +# cost of reduced performance. This can be particularly helpful with template +# rich C++ code for which doxygen's built-in parser lacks the necessary type +# information. +# Note: The availability of this option depends on whether or not doxygen was +# compiled with the --with-libclang option. +# The default value is: NO. + +CLANG_ASSISTED_PARSING = NO + +# If clang assisted parsing is enabled you can provide the compiler with command +# line options that you would normally use when invoking the compiler. Note that +# the include paths will already be set by doxygen for the files and directories +# specified with INPUT and INCLUDE_PATH. +# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. + +CLANG_OPTIONS = + +#--------------------------------------------------------------------------- +# Configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all +# compounds will be generated. Enable this if the project contains a lot of +# classes, structs, unions or interfaces. +# The default value is: YES. + +ALPHABETICAL_INDEX = YES + +# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in +# which the alphabetical index list will be split. +# Minimum value: 1, maximum value: 20, default value: 5. +# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all classes will +# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag +# can be used to specify a prefix (or a list of prefixes) that should be ignored +# while generating the index headers. +# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output +# The default value is: YES. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a +# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of +# it. +# The default directory is: html. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_OUTPUT = html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each +# generated HTML page (for example: .htm, .php, .asp). +# The default value is: .html. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a user-defined HTML header file for +# each generated HTML page. If the tag is left blank doxygen will generate a +# standard header. +# +# To get valid HTML the header file that includes any scripts and style sheets +# that doxygen needs, which is dependent on the configuration options used (e.g. +# the setting GENERATE_TREEVIEW). It is highly recommended to start with a +# default header using +# doxygen -w html new_header.html new_footer.html new_stylesheet.css +# YourConfigFile +# and then modify the file new_header.html. See also section "Doxygen usage" +# for information on how to generate the default header that doxygen normally +# uses. +# Note: The header is subject to change so you typically have to regenerate the +# default header when upgrading to a newer version of doxygen. For a description +# of the possible markers and block names see the documentation. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each +# generated HTML page. If the tag is left blank doxygen will generate a standard +# footer. See HTML_HEADER for more information on how to generate a default +# footer and what special commands can be used inside the footer. See also +# section "Doxygen usage" for information on how to generate the default footer +# that doxygen normally uses. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style +# sheet that is used by each HTML page. It can be used to fine-tune the look of +# the HTML output. If left blank doxygen will generate a default style sheet. +# See also section "Doxygen usage" for information on how to generate the style +# sheet that doxygen normally uses. +# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as +# it is more robust and this tag (HTML_STYLESHEET) will in the future become +# obsolete. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_STYLESHEET = + +# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined +# cascading style sheets that are included after the standard style sheets +# created by doxygen. Using this option one can overrule certain style aspects. +# This is preferred over using HTML_STYLESHEET since it does not replace the +# standard style sheet and is therefore more robust against future updates. +# Doxygen will copy the style sheet files to the output directory. +# Note: The order of the extra style sheet files is of importance (e.g. the last +# style sheet in the list overrules the setting of the previous ones in the +# list). For an example see the documentation. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_EXTRA_STYLESHEET = + +# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or +# other source files which should be copied to the HTML output directory. Note +# that these files will be copied to the base HTML output directory. Use the +# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these +# files. In the HTML_STYLESHEET file, use the file name only. Also note that the +# files will be copied as-is; there are no commands or markers available. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_EXTRA_FILES = + +# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen +# will adjust the colors in the style sheet and background images according to +# this color. Hue is specified as an angle on a colorwheel, see +# http://en.wikipedia.org/wiki/Hue for more information. For instance the value +# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 +# purple, and 360 is red again. +# Minimum value: 0, maximum value: 359, default value: 220. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_HUE = 220 + +# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors +# in the HTML output. For a value of 0 the output will use grayscales only. A +# value of 255 will produce the most vivid colors. +# Minimum value: 0, maximum value: 255, default value: 100. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_SAT = 100 + +# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the +# luminance component of the colors in the HTML output. Values below 100 +# gradually make the output lighter, whereas values above 100 make the output +# darker. The value divided by 100 is the actual gamma applied, so 80 represents +# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not +# change the gamma. +# Minimum value: 40, maximum value: 240, default value: 80. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_GAMMA = 80 + +# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML +# page will contain the date and time when the page was generated. Setting this +# to NO can help when comparing the output of multiple runs. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_TIMESTAMP = YES + +# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML +# documentation will contain sections that can be hidden and shown after the +# page has loaded. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_DYNAMIC_SECTIONS = NO + +# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries +# shown in the various tree structured indices initially; the user can expand +# and collapse entries dynamically later on. Doxygen will expand the tree to +# such a level that at most the specified number of entries are visible (unless +# a fully collapsed tree already exceeds this amount). So setting the number of +# entries 1 will produce a full collapsed tree by default. 0 is a special value +# representing an infinite number of entries and will result in a full expanded +# tree by default. +# Minimum value: 0, maximum value: 9999, default value: 100. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_INDEX_NUM_ENTRIES = 100 + +# If the GENERATE_DOCSET tag is set to YES, additional index files will be +# generated that can be used as input for Apple's Xcode 3 integrated development +# environment (see: http://developer.apple.com/tools/xcode/), introduced with +# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a +# Makefile in the HTML output directory. Running make will produce the docset in +# that directory and running make install will install the docset in +# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at +# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html +# for more information. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_DOCSET = NO + +# This tag determines the name of the docset feed. A documentation feed provides +# an umbrella under which multiple documentation sets from a single provider +# (such as a company or product suite) can be grouped. +# The default value is: Doxygen generated docs. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_FEEDNAME = "Doxygen generated docs" + +# This tag specifies a string that should uniquely identify the documentation +# set bundle. This should be a reverse domain-name style string, e.g. +# com.mycompany.MyDocSet. Doxygen will append .docset to the name. +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_BUNDLE_ID = org.doxygen.Project + +# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify +# the documentation publisher. This should be a reverse domain-name style +# string, e.g. com.mycompany.MyDocSet.documentation. +# The default value is: org.doxygen.Publisher. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_PUBLISHER_ID = org.doxygen.Publisher + +# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. +# The default value is: Publisher. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_PUBLISHER_NAME = Publisher + +# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three +# additional HTML index files: index.hhp, index.hhc, and index.hhk. The +# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop +# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on +# Windows. +# +# The HTML Help Workshop contains a compiler that can convert all HTML output +# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML +# files are now used as the Windows 98 help format, and will replace the old +# Windows help format (.hlp) on all Windows platforms in the future. Compressed +# HTML files also contain an index, a table of contents, and you can search for +# words in the documentation. The HTML workshop also contains a viewer for +# compressed HTML files. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_HTMLHELP = NO + +# The CHM_FILE tag can be used to specify the file name of the resulting .chm +# file. You can add a path in front of the file if the result should not be +# written to the html output directory. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +CHM_FILE = + +# The HHC_LOCATION tag can be used to specify the location (absolute path +# including file name) of the HTML help compiler (hhc.exe). If non-empty, +# doxygen will try to run the HTML help compiler on the generated index.hhp. +# The file has to be specified with full path. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +HHC_LOCATION = + +# The GENERATE_CHI flag controls if a separate .chi index file is generated +# (YES) or that it should be included in the master .chm file (NO). +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +GENERATE_CHI = NO + +# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) +# and project file content. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +CHM_INDEX_ENCODING = + +# The BINARY_TOC flag controls whether a binary table of contents is generated +# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it +# enables the Previous and Next buttons. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members to +# the table of contents of the HTML help documentation and to the tree view. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +TOC_EXPAND = NO + +# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and +# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that +# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help +# (.qch) of the generated HTML documentation. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_QHP = NO + +# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify +# the file name of the resulting .qch file. The path specified is relative to +# the HTML output folder. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QCH_FILE = + +# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help +# Project output. For more information please see Qt Help Project / Namespace +# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_NAMESPACE = org.doxygen.Project + +# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt +# Help Project output. For more information please see Qt Help Project / Virtual +# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- +# folders). +# The default value is: doc. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_VIRTUAL_FOLDER = doc + +# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom +# filter to add. For more information please see Qt Help Project / Custom +# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- +# filters). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_CUST_FILTER_NAME = + +# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the +# custom filter to add. For more information please see Qt Help Project / Custom +# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- +# filters). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_CUST_FILTER_ATTRS = + +# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this +# project's filter section matches. Qt Help Project / Filter Attributes (see: +# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_SECT_FILTER_ATTRS = + +# The QHG_LOCATION tag can be used to specify the location of Qt's +# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the +# generated .qhp file. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHG_LOCATION = + +# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be +# generated, together with the HTML files, they form an Eclipse help plugin. To +# install this plugin and make it available under the help contents menu in +# Eclipse, the contents of the directory containing the HTML and XML files needs +# to be copied into the plugins directory of eclipse. The name of the directory +# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. +# After copying Eclipse needs to be restarted before the help appears. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_ECLIPSEHELP = NO + +# A unique identifier for the Eclipse help plugin. When installing the plugin +# the directory name containing the HTML and XML files should also have this +# name. Each documentation set should have its own identifier. +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. + +ECLIPSE_DOC_ID = org.doxygen.Project + +# If you want full control over the layout of the generated HTML pages it might +# be necessary to disable the index and replace it with your own. The +# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top +# of each HTML page. A value of NO enables the index and the value YES disables +# it. Since the tabs in the index contain the same information as the navigation +# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +DISABLE_INDEX = NO + +# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index +# structure should be generated to display hierarchical information. If the tag +# value is set to YES, a side panel will be generated containing a tree-like +# index structure (just like the one that is generated for HTML Help). For this +# to work a browser that supports JavaScript, DHTML, CSS and frames is required +# (i.e. any modern browser). Windows users are probably better off using the +# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can +# further fine-tune the look of the index. As an example, the default style +# sheet generated by doxygen has an example that shows how to put an image at +# the root of the tree instead of the PROJECT_NAME. Since the tree basically has +# the same information as the tab index, you could consider setting +# DISABLE_INDEX to YES when enabling this option. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_TREEVIEW = NO + +# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that +# doxygen will group on one line in the generated HTML documentation. +# +# Note that a value of 0 will completely suppress the enum values from appearing +# in the overview section. +# Minimum value: 0, maximum value: 20, default value: 4. +# This tag requires that the tag GENERATE_HTML is set to YES. + +ENUM_VALUES_PER_LINE = 4 + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used +# to set the initial width (in pixels) of the frame in which the tree is shown. +# Minimum value: 0, maximum value: 1500, default value: 250. +# This tag requires that the tag GENERATE_HTML is set to YES. + +TREEVIEW_WIDTH = 250 + +# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to +# external symbols imported via tag files in a separate window. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +EXT_LINKS_IN_WINDOW = NO + +# Use this tag to change the font size of LaTeX formulas included as images in +# the HTML documentation. When you change the font size after a successful +# doxygen run you need to manually remove any form_*.png images from the HTML +# output directory to force them to be regenerated. +# Minimum value: 8, maximum value: 50, default value: 10. +# This tag requires that the tag GENERATE_HTML is set to YES. + +FORMULA_FONTSIZE = 10 + +# Use the FORMULA_TRANPARENT tag to determine whether or not the images +# generated for formulas are transparent PNGs. Transparent PNGs are not +# supported properly for IE 6.0, but are supported on all modern browsers. +# +# Note that when changing this option you need to delete any form_*.png files in +# the HTML output directory before the changes have effect. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +FORMULA_TRANSPARENT = YES + +# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see +# http://www.mathjax.org) which uses client side Javascript for the rendering +# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX +# installed or if you want to formulas look prettier in the HTML output. When +# enabled you may also need to install MathJax separately and configure the path +# to it using the MATHJAX_RELPATH option. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +USE_MATHJAX = NO + +# When MathJax is enabled you can set the default output format to be used for +# the MathJax output. See the MathJax site (see: +# http://docs.mathjax.org/en/latest/output.html) for more details. +# Possible values are: HTML-CSS (which is slower, but has the best +# compatibility), NativeMML (i.e. MathML) and SVG. +# The default value is: HTML-CSS. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_FORMAT = HTML-CSS + +# When MathJax is enabled you need to specify the location relative to the HTML +# output directory using the MATHJAX_RELPATH option. The destination directory +# should contain the MathJax.js script. For instance, if the mathjax directory +# is located at the same level as the HTML output directory, then +# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax +# Content Delivery Network so you can quickly see the result without installing +# MathJax. However, it is strongly recommended to install a local copy of +# MathJax from http://www.mathjax.org before deployment. +# The default value is: http://cdn.mathjax.org/mathjax/latest. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest + +# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax +# extension names that should be enabled during MathJax rendering. For example +# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_EXTENSIONS = + +# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces +# of code that will be used on startup of the MathJax code. See the MathJax site +# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an +# example see the documentation. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_CODEFILE = + +# When the SEARCHENGINE tag is enabled doxygen will generate a search box for +# the HTML output. The underlying search engine uses javascript and DHTML and +# should work on any modern browser. Note that when using HTML help +# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) +# there is already a search function so this one should typically be disabled. +# For large projects the javascript based search engine can be slow, then +# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to +# search using the keyboard; to jump to the search box use + S +# (what the is depends on the OS and browser, but it is typically +# , /